pysiogame-1.30.811/languages/kbrd/gr.py0000644000175000017500000001023012201770057016617 0ustar tigertiger# -*- coding: utf-8 -*- accent_map = {'ά':'´α', 'έ':'´ε', 'ή':'´η', 'ί':'´ι','ϊ':'¨ι', 'ό':'´ο', 'ύ':'´υ', 'ϋ':'¨υ', 'Ϋ':'¨Υ', 'ώ':'´ω', 'Ά':'´Α', 'Έ':'´Ε', 'Ή':'´Η', 'Ί':'´Ι', 'Ϊ':'´Ι', 'Ό':'´Ο', 'Ύ':'´Υ', 'Ώ':'´Ω'} accent_map2 = {'ϊ':'¨ι', 'Ϊ':'´Ι', 'ϋ':'¨υ', 'Ϋ':'¨Υ'} kbrd_keys = [[0,0,25,22,"~","`","","","","",0],#0 [30,0,25,22,"!","1","","","","",0], [60,0,25,22,'@',"2","","","","",1], [90,0,25,22,"#","3","","","","",2], [120,0,25,22,"$","4","","","","",3], [150,0,25,22,"%","5","","","","",3], [180,0,25,22,"^","6","","","","",4], [210,0,25,22,"&","7","","","","",4], [240,0,25,22,"*","8","","","","",5], [270,0,25,22,"(","9","","","","",6], [300,0,25,22,")","0","","","","",7], [330,0,25,22,"_","-","","","","",7], [360,0,25,22,"+","=","","","","",7], [390,0,0,0,"","","","","","",7], [390,0,55,22,"","","← Backspace","","","",7],#14 [0,27,43,22,"","","Tab","","","",0],#15 [48,27,25,22,":",";","","","","",0], [78,27,25,22,"","ς","","Σ","","",1], [108,27,25,22,"","ε","","Ε","","",2], [138,27,25,22,"","ρ","","Ρ","","",3], [168,27,25,22,"","τ","","Τ","","",3], [198,27,25,22,"","υ","","Υ","","",4], [228,27,25,22,"","θ","","Θ","","",4], [258,27,25,22,"","ι","","Ι","","",5], [288,27,25,22,"","ο","","Ο","","",6], [318,27,25,22,"","π","","Π","","",7], [348,27,25,22,"{","[","","","","",7], [378,27,25,22,"}","]","","","","",7], [408,27,37,22,"","","Enter","","","",7],#28 [0,54,50,22,"","","Caps Lock","","","",0],#29 [55,54,25,22,"","α","","Α","","",0], [85,54,25,22,"","σ","","Σ","","",1], [115,54,25,22,"","δ","","Δ","","",2], [145,54,25,22,"","φ","","Φ","","",3], [175,54,25,22,"","γ","","Γ","","",3], [205,54,25,22,"","η","","Η","","",4], [235,54,25,22,"","ξ","","Ξ","","",4], [265,54,25,22,"","κ","","Κ","","",5], [295,54,25,22,"","λ","","Λ","","",6], [325,54,25,22,"¨","´","","","","",7], [355,54,25,22,'"',"'","","","","",7], [385,54,25,22,"|","\\","","","","",7], [415,48,30,28,"","","","","","",7],#42 #alphabet_uc = ['Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω'] #alphabet_lc = ['α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'] [0,81,30,22,"","","Shift","","","",0],#43 [35,81,25,22,"»","«","","","","",0], [65,81,25,22,"","ζ","","Ζ","","",0], [95,81,25,22,"","χ","","Χ","","",1], [125,81,25,22,"","ψ","","Ψ","","",2], [155,81,25,22,"","ω","","Ω","","",3], [185,81,25,22,"","β","","Β","","",3], [215,81,25,22,"","ν","","Ν","","",4], [245,81,25,22,"","μ","","Μ","","",4], [275,81,25,22,"<",",","","","","",5], [305,81,25,22,">",".","","","","",6], [335,81,25,22,"?","/","","","","",7], #[365,81,25,22,"|","/","","","","",7], #[395,81,50,22,"","","Shift","","","",7],#55 [365,81,80,22,"","","Shift","","","",7],#55 [0,108,33,22,"","","Ctrl","","","",9],#56 [38,108,25,22,"","","","","","",9], [68,108,25,22,"","","Alt","","","",9], [98,108,214,22,"","","Space","","","",8], [317,108,25,22,"","","Alt Gr","","","",9], [347,108,25,22,"","","","","","",9], [377,108,25,22,"","","","","","",9], [407,108,38,22,"","","Ctrl","","","",9],#63 #Hand [100,178,16,17,"","","","","","",0],#64 x+17 [122,151,17,19,"","","","","","",1],#x+4 w-8 x+2 y+2 [143,135,18,19,"","","","","","",2],#x y+2 [169,140,16,18,"","","","","","",3],#x-1 y+3 [261,140,16,18,"","","","","","",4], [285,135,18,19,"","","","","","",5], [307,151,17,19,"","","","","","",6], [330,178,16,17,"","","","","","",7],#71 [203,186,18,20,"","","","","","",8],#Lt Thumb - Space - 72 [225,186,18,20,"","","","","","",8]]#Rt Thumb - Alt Gr - 73 """ [0,81,60,22,"","","Shift","","","",0],#43 [65,81,25,22,"","","","Z","","",0], [95,81,25,22,"","","","X","","",1], [125,81,25,22,"","","","C","","",2], [155,81,25,22,"","","","V","","",3], [185,81,25,22,"","","","B","","",3], [215,81,25,22,"","","","N","","",4], [245,81,25,22,"","","","M","","",4], [275,81,25,22,"<",",","","","","",5], [305,81,25,22,">",".","","","","",6], [335,81,25,22,"?","/","","","","",7], [365,81,25,22,"|","\\","","","","",7], [395,81,50,22,"","","Shift","","","",7],#55 """ pysiogame-1.30.811/languages/kbrd/en_course.py0000644000175000017500000000366712201770057020211 0ustar tigertiger# -*- coding: utf-8 -*- from languages.word_lists.en_gb_di import di from classes.extras import get_word_list, word_typing_course from languages.kbrd.en_cinderella import cinderella base_qwerty = [ #lvl1 - learning home keys asdf jkl [[3,3,3,3,3,3], ["asdf fdsa ", "jkl lkj ", "asdf jkl lkj fdsa ", "ajskdlf fldksja ", "alskdjf fjdksla ", "adjlskf ljdakfs "] ], #lvl2 - adding g and h [[3,3,3,3,3,3], ["asdfg gfdsa ", "hjkl lkjh ", "asdfg hjkl lkjh gfdsa ", "ajskdlfhg ghfldksja ", "alskdjfhg ghfjdksla ", "adghkl sfhgjl "] ], #lvl3 - training left hand - learning letters - qwert [[4, 4, 5,3,3,3,3,3,3,3,3], ["frf ftf ", "aqa sws ded frf ftf ", "qawsedrftg gtfrdeswaq ", "qaedtgwsrf frswgtdeaq ", "aswesd erdfrtfg ", "gftrfdre dsewsa ", "awdrg tfesq ", "qseft grdwa ", "arqf fqra ", "aefw wfea ", "earswdef fedwsrae "] ], #lvl4 - adding right hand - learning letters - nm [[4,4,4,3,3,3,3], ["hnajms kndlmf ", "nanq msmw ", "qnwmenrm ", "qjwkelr rlekwjq ", "tjfrkfekd wlsqla ", "qajwskedl rfktfj ", "namsjd kflgf "] ], #lvl5 - learning letters - yuiop [[4,4,4, 3,3,3,3], ["jyj juj ", "jyj juj kik lol pop ", "jnyj jmuj ", "kiujk loikj ", "polkiuj jnhuj kmjik ", "plokijuhy hyjukilop ", "yhikujolp pokuh "] ], #lvl6 - learning letters - zxcvb [[4,4,4, 3,3], ["fbf fvf ", "fbf fvf dcd sxs aza ", "awdx sefc drgv ", "azs sxd dcf fvg ", "azsxdcfvb bvfcdxsza "] ], #lvl7 - learning uppercase letters [[3,3,3], ["As Sd Df Fg Gh Hj Jk Kl L; ", "Qa Ws Ed Rf Tf Yj Uj Ik Ol P; ", "Za Xs Cd Vf Bf Nj Mj "] ], #lvl8 - learning position of ", . ; : ?" ! [[2,2], ["k,k l.l ;p; ", "ok? ok! ok, ok. "] ], #lvl9 - quick home keys revision [[2,2], ["aqaza swsxs dedcd frftfvfbfgf ", "jyjujnjmjhj kik,k lol.l ;p; "] ]] course = [] #add English qwerty course course.extend(base_qwerty) #add Language specific word list - words taken from en_gb_di.py file. word_list = get_word_list(di) word_course = word_typing_course(word_list) course.extend(word_course) course.extend(cinderella) pysiogame-1.30.811/languages/kbrd/pl.py0000644000175000017500000000560012201770057016627 0ustar tigertiger# -*- coding: utf-8 -*- kbrd_keys = [[0,0,25,22,"~","`","","","","",0],#0 [30,0,25,22,"!","1","","","","",0], [60,0,25,22,"@","2","","","","",1], [90,0,25,22,"#","3","","","","",2], [120,0,25,22,"$","4","","","","",3], [150,0,25,22,"%","5","","","","",3], [180,0,25,22,"^","6","","","","",4], [210,0,25,22,"&","7","","","","",4], [240,0,25,22,"*","8","","","","",5], [270,0,25,22,"(","9","","","","",6], [300,0,25,22,")","0","","","","",7], [330,0,25,22,"_","-","","","","",7], [360,0,25,22,"+","=","","","","",7], [390,0,25,22,"|","\\","","","","",7], [420,0,25,22,"","","<--","","","",7],#14 [0,27,43,22,"","","Tab","","","",0],#15 [48,27,25,22,"","","","Q","","",0], [78,27,25,22,"","","","W","","",1], [108,27,25,22,"","","","E","","ę",2], [138,27,25,22,"","","","R","","",3], [168,27,25,22,"","","","T","","",3], [198,27,25,22,"","","","Y","","",4], [228,27,25,22,"","","","U","","",4], [258,27,25,22,"","","","I","","",5], [288,27,25,22,"","","","O","","ó",6], [318,27,25,22,"","","","P","","",7], [348,27,25,22,"{","[","","","","",7], [378,27,25,22,"}","]","","","","",7], [408,27,37,28,"","","Enter","","","",7],#28 [0,54,50,22,"","","Caps Lock","","","",0],#29 [55,54,25,22,"","","","A","","ą",0], [85,54,25,22,"","","","S","","ś",1], [115,54,25,22,"","","","D","","",2], [145,54,25,22,"","","","F","","",3], [175,54,25,22,"","","","G","","",3], [205,54,25,22,"","","","H","","",4], [235,54,25,22,"","","","J","","",4], [265,54,25,22,"","","","K","","",5], [295,54,25,22,"","","","L","","ł",6], [325,54,25,22,":",";","","","","",7], [355,54,25,22,'"',"'","","","","",7], [355,54,0,0,"","","","","","",7], [385,54,60,22,"","","","","","",7],#42 [0,81,60,22,"","","Shift","","","",0],#43 [65,81,25,22,"","","","Z","","ż",0], [95,81,25,22,"","","","X","","ź",1], [125,81,25,22,"","","","C","","ć",2], [155,81,25,22,"","","","V","","",3], [185,81,25,22,"","","","B","","",3], [215,81,25,22,"","","","N","","ń",4], [245,81,25,22,"","","","M","","",4], [275,81,25,22,"<",",","","","","",5], [305,81,25,22,">",".","","","","",6], [335,81,25,22,"?","/","","","","",7], [335,81,0,0,"","","","","","",7], [365,81,80,22,"","","Shift","","","",7],#55 [0,108,33,22,"","","Ctrl","","","",9],#56 [38,108,25,22,"","","","","","",9], [68,108,25,22,"","","Alt","","","",9], [98,108,214,22,"","","Space","","","",8], [317,108,25,22,"","","Alt","","","",8], [347,108,25,22,"","","","","","",9], [377,108,25,22,"","","","","","",9], [407,108,38,22,"","","Ctrl","","","",9],#63 #Hand [100,178,16,17,"","","","","","",0],#64 x+17 [122,151,17,19,"","","","","","",1],#x+4 w-8 x+2 y+2 [143,135,18,19,"","","","","","",2],#x y+2 [169,140,16,18,"","","","","","",3],#x-1 y+3 [261,140,16,18,"","","","","","",4], [285,135,18,19,"","","","","","",5], [307,151,17,19,"","","","","","",6], [330,178,16,17,"","","","","","",7],#71 [203,186,18,20,"","","","","","",8],#Lt Thumb - Space - 72 [225,186,18,20,"","","","","","",8]]#Rt Thumb - Alt Gr - 73 pysiogame-1.30.811/languages/kbrd/pl_course.py0000644000175000017500000000227712201770057020216 0ustar tigertiger# -*- coding: utf-8 -*- from languages.kbrd.en_course import base_qwerty from languages.word_lists.pl_di import di from classes.extras import get_word_list, word_typing_course from languages.kbrd.pl_cinderella import cinderella #each sub-list in the course list is a level - the more the sub-lists the more levels game will have #each level consists of two lists: groups of words and corresponding number of repetitions for each group course = [] #add English qwerty course course.extend(base_qwerty) #create additional, Polish specific course data pl_course = [ #lvl10 - Polish Letter Introduction [[4,4,4,4,4,4,4,4,4], ["aą kąt ", "cć ćma ", "eę sęk ", "lł łąka ", "nń koń ", "oó mrówka ", "sś ściana ", "xź źdźbło ", "zż żółw "] ], #lvl11 - Polish Letter Introduction - uppercase [[4,4,4,4,4,4,4,4,4], ["AĄ kąt ", "CĆ Ćma ", "EĘ sęk ", "LŁ Łąka ", "NŃ koń ", "OÓ mrówka ", "SŚ Ściana ", "XŹ Źdźbło ", "ZŻ Żółw "] ]] #add it to the course course.extend(pl_course) #add Language specific word list - words taken from pl_di.py file. word_list = get_word_list(di) word_course = word_typing_course(word_list) course.extend(word_course) course.extend(cinderella) pysiogame-1.30.811/languages/kbrd/gr_course.py0000644000175000017500000000532612201770057020211 0ustar tigertiger# -*- coding: utf-8 -*- from languages.word_lists.gr_di import di from classes.extras import get_word_list, word_typing_course from languages.kbrd.en_cinderella import cinderella base_qwerty = [ #λvλ1 - λearning home keys asdf jkλ [[3,3,3,3,3,3], ["ασδφ φδσα ", "ξκλ λκξ ", "ασδφ ξκλ λκξ φδσα ", "αξσκδλφ φλδκσξα ", "αλσκδξφ φξδκσλα ", "αδξλσκφ λξδακφσ "] ], #λωλ2 - αδδινγ γ ανδ η [[3,3,3,3,3,3], ["ασδφγ γφδσα ", "ηξκλ λκξη ", "ασδφγ ηξκλ λκξη γφδσα ", "αξσκδλφηγ γηφλδκσξα ", "αλσκδξφηγ γηφξδκσλα ", "αδγηκλ σφηγξλ "] ], #λωλ3 - τραινινγ λεφτ ηανδ - λεαρνινγ λεττερσ - ςερτ [[4, 4, 5,3,3,3,3,3,3,3,3], ["φρφ φτφ ", "αα σςσ δεδ φρφ φτφ ", "αςσεδρφτγ γτφρδεσςα ", "αεδτγςσρφ φρσςγτδεα ", "ασςεσδ ερδφρτφγ ", "γφτρφδρε δσεςσα ", "αςδργ τφεσ ", "σεφτ γρδςα ", "αρφ φρα ", "αεφς ςφεα ", "εαρσςδεφ φεδςσραε "] ], #λωλ4 - αδδινγ ριγητ ηανδ - λεαρνινγ λεττερσ - νμ [[4,4,4,3,3,3,3], ["ηναξμσ κνδλμφ ", "ναν μσμς ", "νςμενρμ ", "ξςκελρ ρλεκςξ ", "τξφρκφεκδ ςλσλα ", "αξςσκεδλ ρφκτφξ ", "ναμσξδ κφλγφ "] ], #λωλ5 - λεαρνινγ λεττερσ - υθιοπ [[4,4,4, 3,3,3,3], ["ξυξ ξθξ ", "ξυξ ξθξ κικ λολ ποπ ", "ξνυξ ξμθξ ", "κιθξκ λοικξ ", "πολκιθξ ξνηθξ κμξικ ", "πλοκιξθηυ ηυξθκιλοπ ", "υηικθξολπ ποκθη "] ], #λωλ6 - λεαρνινγ λεττερσ - ζχψωβ [[4,4,4, 3,3], ["φβφ φωφ ", "φβφ φωφ δψδ σχσ αζα ", "αςδχ σεφψ δργω ", "αζσ σχδ δψφ φωγ ", "αζσχδψφωβ βωφψδχσζα "] ], #λωλ7 - λεαρνινγ θππερψασε λεττερσ [[3,3,3], ["ασ σδ δφ φγ γη ηξ ξκ κλ ", "α ςσ εδ ρφ τφ υξ θξ ικ ολπ ", "ζα χσ ψδ ωφ βφ νξ μξ "] ], #λωλ9 - θιψκ ηομε κευσ ρεωισιον [[2,2], ["ααζα σςσχσ δεδψδ φρφτφωφβφγφ ", "ξυξθξνξμξηξ κικλολπ "] ]] """ #λωλ8 - λεαρνινγ ποσιτιον οφ ", . ; : ?" ! [[2,2], ["κ,κ λ.λ ;π; ", "οκ? οκ! οκ, οκ. "] ], """ course = [] #add English qwerty course course.extend(base_qwerty) #add Language specific word list - words taken from en_gb_di.py file. word_list = get_word_list(di) word_course = word_typing_course(word_list) course.extend(word_course) #course.extend(cinderella) pysiogame-1.30.811/languages/kbrd/en_cinderella.py0000644000175000017500000003444112201770057021005 0ustar tigertiger# -*- coding: utf-8 -*- #Cinderella by Brothers Grim #for Touch Typing Tutor cinderella = [#1 [[1,1,1,1,1], ['The wife of a rich man fell sick, and as she felt that her end was drawing near, she called her only daughter to her bedside and said, "Dear child, be good and pious, and then the good God will always protect thee, and I will look down on thee from heaven and be near thee." ', "Thereupon she closed her eyes and departed. Every day the maiden went out to her mother's grave, and wept, and she remained pious and good. When winter came the snow spread a white sheet over the grave, and when the spring sun had drawn it off again, the man had taken another wife. ", 'The woman had brought two daughters into the house with her, who were beautiful and fair of face, but vile and black of heart. Now began a bad time for the poor step-child. "Is the stupid goose to sit in the parlour with us?" said they. ', '"He who wants to eat bread must earn it; out with the kitchen-wench." They took her pretty clothes away from her, put an old grey bedgown on her, and gave her wooden shoes. "Just look at the proud princess, how decked out she is!" they cried, and laughed, and led her into the kitchen. ', "There she had to do hard work from morning till night, get up before daybreak, carry water, light fires, cook and wash. Besides this, the sisters did her every imaginable injury-they mocked her and emptied her peas and lentils into the ashes, so that she was forced to sit and pick them out again." ]],#2 [[1,1,1,1,1], ["In the evening when she had worked till she was weary she had no bed to go to, but had to sleep by the fireside in the ashes. And as on that account she always looked dusty and dirty, they called her Cinderella. ", "It happened that the father was once going to the fair, and he asked his two step-daughters what he should bring back for them. ", '"Beautiful dresses," said one, "Pearls and jewels," said the second. "And thou, Cinderella," said he, "what wilt thou have?" "Father, break off for me the first branch which knocks against your hat on your way home." ', "So he bought beautiful dresses, pearls and jewels for his two stepdaughters, and on his way home, as he was riding through a green thicket, a hazel twig brushed against him and knocked off his hat. ", "Then he broke off the branch and took it with him. When he reached home he gave his step-daughters the things which they had wished for, and to Cinderella he gave the branch from the hazel-bush." ]],#3 [[1,1,1,1,1], ["Cinderella thanked him, went to her mother's grave and planted the branch on it, and wept so much that the tears fell down on it and watered it. ", "And it grew, however, and became a handsome tree. Thrice a day Cinderella went and sat beneath it, and wept and prayed, and a little white bird always came on the tree, and if Cinderella expressed a wish, the bird threw down to her what she had wished for. ", "It happened, however, that the King appointed a festival which was to last three days, and to which all the beautiful young girls in the country were invited, in order that his son might choose himself a bride. ", 'When the two step-sisters heard that they too were to appear among the number, they were delighted, called Cinderella and said, "Comb our hair for us, brush our shoes and fasten our buckles, for we are going to the festival at the King\'s palace." ', #" 'Cinderella obeyed, but wept, because she too would have liked to go with them to the dance, and begged her step-mother to allow her to do so. "Thou go, Cinderella!" said she; "Thou art dusty and dirty and wouldst go to the festival? Thou hast no clothes and shoes, and yet wouldst dance!"' ]],#4 [[1,1,1,1,1], ['As, however, Cinderella went on asking, the stepmother at last said, "I have emptied a dish of lentils into the ashes for thee, if thou hast picked them out again in two hours, thou shalt go with us." ', 'The maiden went through the back-door into the garden, and called, "You tame pigeons, you turtle-doves, and all you birds beneath the sky, come and help me to pick "The good into the pot, The bad into the crop." ', 'Then two white pigeons came in by the kitchen-window, and afterwards the turtle-doves, and at last all the birds beneath the sky, came whirring and crowding in, and alighted amongst the ashes. ', 'And the pigeons nodded with their heads and began pick, pick, pick, pick, and the rest began also pick, pick, pick, pick, and gathered all the good grains into the dish. Hardly had one hour passed before they had finished, and all flew out again. ', 'Then the girl took the dish to her step-mother, and was glad, and believed that now she would be allowed to go with them to the festival. But the step-mother said, "No, Cinderella, thou hast no clothes and thou canst not dance; thou wouldst only be laughed at."' ]],#5 [[1,1,1,1,1], ['And as Cinderella wept at this, the step-mother said, "If thou canst pick two dishes of lentils out of the ashes for me in one hour, thou shalt go with us." And she thought to herself, "That she most certainly cannot do." ', 'When the step-mother had emptied the two dishes of lentils amongst the ashes, the maiden went through the back-door into the garden and cried, You tame pigeons, you turtle-doves, and all you birds under heaven, come and help me to pick "The good into the pot, The bad into the crop." ', 'Then two white pigeons came in by the kitchen-window, and afterwards the turtle-doves, and at length all the birds beneath the sky, came whirring and crowding in, and alighted amongst the ashes. ', 'And the doves nodded with their heads and began pick, pick, pick, pick, and the others began also pick, pick, pick, pick, and gathered all the good seeds into the dishes, and before half an hour was over they had already finished, and all flew out again. ', 'Then the maiden carried the dishes to the step-mother and was delighted, and believed that she might now go with them to the festival. But the step-mother said, "All this will not help thee; thou goest not with us, for thou hast no clothes and canst not dance; we should be ashamed of thee!"' ]],#6 [[1,1,1,1,1], ['On this she turned her back on Cinderella, and hurried away with her two proud daughters. ', 'As no one was now at home, Cinderella went to her mother\'s grave beneath the hazel-tree, and cried, "Shiver and quiver, little tree, Silver and gold throw down over me." ',#' 'Then the bird threw a gold and silver dress down to her, and slippers embroidered with silk and silver. She put on the dress with all speed, and went to the festival. ', 'Her step-sisters and the step-mother however did not know her, and thought she must be a foreign princess, for she looked so beautiful in the golden dress. They never once thought of Cinderella, and believed that she was sitting at home in the dirt, picking lentils out of the ashes. ', 'The prince went to meet her, took her by the hand and danced with her. He would dance with no other maiden, and never left loose of her hand, and if any one else came to invite her, he said, "This is my partner."' ]],#7 [[1,1,1,1,1], ['She danced till it was evening, and then she wanted to go home. But the King\'s son said, "I will go with thee and bear thee company," for he wished to see to whom the beautiful maiden belonged. ', #' "She escaped from him, however, and sprang into the pigeon-house. The King's son waited until her father came, and then he told him that the stranger maiden had leapt into the pigeon-house. ", 'The old man thought, "Can it be Cinderella?" and they had to bring him an axe and a pickaxe that he might hew the pigeon-house to pieces, but no one was inside it. ', 'And when they got home Cinderella lay in her dirty clothes among the ashes, and a dim little oil lamp was burning on the mantle-piece, ', 'for Cinderella had jumped quickly down from the back of the pigeon-house and had run to the little hazeltree, and there she had taken off her beautiful clothes and laid them on the grave, and the bird had taken them away again, and then she had placed herself in the kitchen amongst the ashes in her grey gown.' ]],#8 [[1,1,1,1,1], ['Next day when the festival began afresh, and her parents and the stepsisters had gone once more, Cinderella went to the hazel-tree and said- "Shiver and quiver, my little tree, Silver and gold throw down over me." ', "Then the bird threw down a much more beautiful dress than on the preceding day. And when Cinderella appeared at the festival in this dress, every one was astonished at her beauty. The King's son had waited until she came, and instantly took her by the hand and danced with no one but her. ", 'When others came and invited her, he said, "She is my partner." When evening came she wished to leave, and the King\'s son followed her and wanted to see into which house she went. But she sprang away from him, and into the garden behind the house. Therein stood a beautiful tall tree on which hung the most magnificent pears. ', 'She clambered so nimbly between the branches like a squirrel that the King\'s son did not know where she was gone. He waited until her father came, and said to him, "The stranger-maiden has escaped from me, and I believe she has climbed up the pear-tree." The father thought, "Can it be Cinderella?" and had an axe brought and cut the tree down, but no one was on it. ', #' 'And when they got into the kitchen, Cinderella lay there amongst the ashes, as usual, for she had jumped down on the other side of the tree, had taken the beautiful dress to the bird on the little hazel-tree, and put on her grey gown.' ]],#9 [[1,1,1,1,1], ['On the third day, when the parents and sisters had gone away, Cinderella went once more to her mother\'s grave and said to the little tree- "Shiver and quiver, my little tree, Silver and gold throw down over me." ' #' "And now the bird threw down to her a dress which was more splendid and magnificent than any she had yet had, and the slippers were golden. And when she went to the festival in the dress, no one knew how to speak for astonishment. The King's son danced with her only, and if any one invited her to dance, he said, \"She is my partner.\" ", "When evening came, Cinderella wished to leave, and the King's son was anxious to go with her, but she escaped from him so quickly that he could not follow her. The King's son had, however, used a strategem, and had caused the whole staircase to be smeared with pitch, and there, when she ran down, had the maiden's left slipper remained sticking. ", "The King's son picked it up, and it was small and dainty, and all golden. Next morning, he went with it to the father, and said to him, \"No one shall be my wife but she whose foot this golden slipper fits.\" Then were the two sisters glad, for they had pretty feet. The eldest went with the shoe into her room and wanted to try it on, and her mother stood by. ", "But she could not get her big toe into it, and the shoe was too small for her. Then her mother gave her a knife and said, \"Cut the toe off; when thou art Queen thou wilt have no more need to go on foot.\" The maiden cut the toe off, forced the foot into the shoe, swallowed the pain, and went out to the King's son. Then he took her on his his horse as his bride and rode away with her." ]],#10 [[1,1,1,1,1], ["They were, however, obliged to pass the grave, and there, on the hazel-tree, sat the two pigeons and cried, \"Turn and peep, turn and peep, There's blood within the shoe, The shoe it is too small for her, The true bride waits for you.\" ", #' 'Then he looked at her foot and saw how the blood was streaming from it. He turned his horse round and took the false bride home again, and said she was not the true one, and that the other sister was to put the shoe on. Then this one went into her chamber and got her toes safely into the shoe, but her heel was too large. So her mother gave her a knife and said, "Cut a bit off thy heel; when thou art Queen thou wilt have no more need to go on foot." ', "The maiden cut a bit off her heel, forced her foot into the shoe, swallowed the pain, and went out to the King's son. He took her on his horse as his bride, and rode away with her, but when they passed by the hazel-tree, two little pigeons sat on it and cried, \"Turn and peep, turn and peep, There's blood within the shoe, The shoe it is too small for her, The true bride waits for you.\" ", #' 'He looked down at her foot and saw how the blood was running out of her shoe, and how it had stained her white stocking. Then he turned his horse and took the false bride home again. "This also is not the right one," said he, "have you no other daughter?" "No," said the man, "There is still a little stunted kitchen-wench which my late wife left behind her, but she cannot possibly be the bride." ', "The King's son said he was to send her up to him; but the mother answered, \"Oh, no, she is much too dirty, she cannot show herself!\" He absolutely insisted on it, and Cinderella had to be called. She first washed her hands and face clean, and then went and bowed down before the King's son, who gave her the golden shoe. Then she seated herself on a stool, drew her foot out of the heavy wooden shoe, and put it into the slipper, which fitted like a glove." ]],#11 [[1,1,1,1,1], ["And when she rose up and the King's son looked at her face he recognized the beautiful maiden who had danced with him and cried, \"That is the true bride!\" The stepmother and the two sisters were terrified and became pale with rage; he, however, took Cinderella on his horse and rode away with her. As they passed by the hazel-tree, the two white doves cried- ", '"Turn and peep, turn and peep, No blood is in the shoe, The shoe is not too small for her, The true bride rides with you," and when they had cried that, the two came flying down and placed themselves on Cinderella\'s shoulders, one on the right, the other on the left, and remained sitting there. ', #' "When the wedding with the King's son had to be celebrated, the two false sisters came and wanted to get into favour with Cinderella and share her good fortune. When the betrothed couple went to church, the elder was at the right side and the younger at the left, and the pigeons pecked out one eye of each of them. Afterwards as they came back, the elder was at the left, and the younger at the right, and then the pigeons pecked out the other eye of each. ", "And thus, for their wickedness and falsehood, they were punished with blindness as long as they lived. ", "The End. Congratulations you have retyped the entire Cinderella by Brothers Grim." ]]]pysiogame-1.30.811/languages/kbrd/ru_course.py0000644000175000017500000000530112201770057020220 0ustar tigertiger# -*- coding: utf-8 -*- from languages.word_lists.ru_di import di from classes.extras import get_word_list, word_typing_course from languages.kbrd.ru_cinderella import cinderella #course = [[[1],["a"]]] course = [] ru_course = [ #lvl1 - learning home keys фыва олдж [[3,3,3,3,3,3], ["фыва авыф ", "олдж ждло ", "фыва олдж ждло авыф ", "фоылвдаж жадвлыоф ", "фжыдвлао аовлыдфж ", "фводыалж жлаыдовф "] ], #lvl2 - adding п, р, э - фывап ролджэ [[3,3,3,3,3,3], ["фывап павыф ", "ролджэ эждлор ", "фывап ролджэ эждлор павыф ", "фрыовладпжэ эжпдалвоырф ", "фжыдвлаопр рпоалвдыжф ", "фвпрлж ыаодэ "] ], #lvl3 - training left hand - learning letters - йцуке [[4, 4, 5,3,3,3,3,3,3,3,3], ["ака аеа ", "фйф ыцы вув ака аеа ", "йфцыувкаеп пеаквуыцфй ", "йфувепцыка акыцпевуфй ", "фыцуыв уквакеап ", "паекавку выуцыф ", "фцвкп еауый ", "йыуае пквцф ", "фкйа айкф ", "фуац цауф ", "уфкыцвуа аувцыкфу "] ], #lvl4 - learning letters - нгшщзхъ [[4,3,3,3,3,3], ["оно ого ", "оно ого лшл дщд жзж жхж жъж ", "лшгол дщшлд жзщдж эхзжэ ", "ъхэжзщжд щшдлшглогнор ", "ъэхжзд щлшогрн рноглш дщжзэхъ ", "нршлзж гощдхэъ ъэхжзд щлшогрн "] ], #lvl5 - learning letters - zxcvb - ячсми [[4,4,4, 3,3], ["аиа ама ", "аиа ама всв ычы фяф ", "фцвч ыуас вкпм ", "фяы ычв вса амп ", "фяычвсами имасвчыяф "] ], #lvl5 - learning letters - тьбюё [[4,4,4, 3,3,3], ["ото оьо ", "ото оьо лбл дюд ", "отьл лбюд дюж ", "трьо блюд ", "отьо льбл дбюд ", "фйф фёф "] ], #lvl6 - learning uppercase letters [[3,3,3], ["Фы Ыв Ва Ап Пр Ро Ол Лд Дж Жэ Ээ ", "Йф Цы Ув Ка Еа Но Го Шл Щд Зж Хж Ъж ", "Яф Чы Св Ма Иа То Ьо Бл Юд "] ], #lvl7 - learning position of , . ? ! [[2,2], ["ж.ж Ж,Ж ", "да? да! да, да. "] ], #lvl8 - quick home keys revision [[2,2], ["фёфйфяф ыцычы вувсв акаеамаиапа ", "оноготоьоро лшлбл дщдюд жзж.ж жхжъжэж "] ] ] course.extend(ru_course) #add Language specific word list - words taken from ru_di.py file. word_list = get_word_list(di) word_course = word_typing_course(word_list) course.extend(word_course) course.extend(cinderella) pysiogame-1.30.811/languages/kbrd/pl_cinderella.py0000644000175000017500000002556212201770057021022 0ustar tigertiger# -*- coding: utf-8 -*- #The Project Gutenberg EBook of Kopciuszek, by Jacob Grimm and Wilhelm Grimm #http://www.gutenberg.org/files/28044/28044-h/28044-h.htm #for Touch Typing Tutor cinderella = [ [[1,1,1,1,1],#1 ['Za górami, za lasami, a w każdym razie hen, na dalekim wschodzie, mieszkała na wsi zamożna wdowa, mająca dwie córki i pasierbicę Rózię. ' , 'Córki nie były ładne, ale chciały się wszystkim podobać, więc zaniedbując gospodarstwo i pracę domową, cały czas spędzały tylko na strojeniu się przed lustrem i na różnych zabawach. ', 'Że zaś pannom tym nieustannie potrzebna była służąca do grzania rurek, do prania i prasowania drobiazgów, do czyszczenia bucików i sukien, przeto cały ciężar tej roboty zwalił się na Rózię, przyrodnią siostrę panien. ', 'Matka ich pomimo całej zamożności, nie mogła podołać wydatkom na wszystkie potrzeby córek, a że wywoływało to zły humor, przeto pastwiła się nad swoją nieszczęsną pasierbicą Rózią, która dość często otrzymywała od niej potężnego szturchańca. ' , 'Rózia była bardzo ładną, smukłą i zgrabną dziewczyną, ale używana do ciężkiej pracy, często musiała przebywać w kuchni, pilnować garnków, grzebać się w węglach i wogóle spełniać roboty najpośledniejsze. Zdarzało się więc, że często była zamorusana i tak obdarta jak żebraczka.' ]], [[1,1,1,1,1],#2 ['Od kopcia, jaki czernił jej buzię przez ciągłe przebywanie w kuchni, siostry przezwały ją Kopciuszkiem i nazwa ta tak się z nią zrosła, że nikt inaczej nie wołał na nią, jak: Kopciuszku daj, Kopciuszku zrób, Kopciuszku leć, Kopciuszku przynieś! ' , 'Rózia sama zapomniała swego imienia, ale jednak nie godziła się ze swoim losem. Czuła ona, że jej się dzieje krzywda i nieraz myślała sobie o poprawieniu losu. Że jednak miała serce złote, z pokorą przeto znosiła doznawane przykrości, dogadzając nietylko macosze i siostrom, ale pamiętając zarazem o domowych zwierzątkach, a nawet o głodnych ptaszkach za oknami domu. ' , 'Żebraka nigdy nie pominęła ażeby się z nim kawałkiem suchego chleba nie podzielić, a chorym sąsiadom, zawsze umiała tak się przysłużyć, że wszyscy, wychwalali jej dobroć. ' , 'A że ludzie dobrzy, zawsze otrzymują nagrodę na tym świecie, przeto nie uznawana przez siostry i macochę, Rózia, zdobyła sobie potężną opiekunkę w postaci jednej z czarodziejek, która tylko czekała sposobności, ażeby wywrzeć potęgę swego gniewu na winnych a niegodziwych. ' , 'Sposobność ta zdarzyła się właśnie wtedy, gdy monarcha nowego państwa, w którem się to działo, postanowił ożenić swojego syna.' ]], [[1,1,1,1,1],#3 ['Syn ten, książę Krasnolicy, miał sobie wybrać dozgonną towarzyszkę życia z liczby dziewcząt całego kraju, które król Ćwieczek, jego ojciec, zaprosił do siebie wraz z rodzinami na wspaniały festyn, tak samo ze sfery niższej, jak i wyższej. ', 'Przy rozsyłaniu zaproszeń nie pominięto i macochy Rózi wraz z jej córkami. - Kopciuszkowi, serce się z żalu ścisnęło, gdy macocha oświadczyła, że zabierze z sobą tylko dwie córki do dworu, a Rózia w domu zostanie. ', 'Siostry wykpiły Kopciuszka i poprostu pojąć nie mogły takiej bezczelności z jej strony, ażeby taka służąca im dorównać chciała! Cóż było robić? Rózia zmartwiła się ale, jak zwykle, żale swoje stłumiła w sobie i pokorniutko zaczęła pomagać siostrom w przygotowaniach do balu. ', 'Kiedy już panny były prawie gotowe, kiedy z liczby kilkunastu sukienek zdecydowały się wybrać co najwspanialsze, Kopciuszek widząc, że i dla niej jeszcze znalazłaby się piękna suknia, rzecze do macochy: ', '- Mamusiu droga, weź i mnie na bal z siostrami!' ]], [[1,1,1,1,1],#4 ['- Ach, brudasie jeden, czego ci znowu się zachciewa! - ofuknęła macocha, uderzywszy dziewczynę w plecy: - Pójdziesz, ale najpierw z tego popiołu wybierz mak do czysta. ', 'Co mówiąc, wsypała do popiołu maku wymieszała razem i postawiła przed zapłakanym Kopciuszkiem. ', 'Po wyjściu macochy, Rózia zaczęła wybierać mak, ale robota była tak ciężka, że i za rok by jej nie skończyła. Usiadła więc pod oknem i płacze. Na to gołębie, karmione codziennie przez nią, zastukały w okno i mówią: ', '- Puść, nas, puść, Kopciuszku, to ci pomożemy. ', 'Rózia wpuściła do kuchni gołąbki, które natychmiast powybierały mak z popiołu i wesoło gruchając, sfrunęły znów na dziedziniec.' ]], [[1,1,1,1,1],#5 ['- Mamusiu droga, mak już wybrany!-zawołała Rózia: - Pójdę na bal, pójdę! ', '- Co? ty, na bal? A ktoby cię tam wpuścił? - zadrwiły z niej siostry. ', '- Za mało widocznie wsypałam ci popiołu i maku, - rzekła macocha: bo inaczej całą noc siedzieć byś musiała. My wyjeżdżamy, a, jeżeli za powrotem nie zastanę wybranego tego oto maku, to mi się nie pokazuj na oczy! ', 'I jeszcze raz oknem wleciały gołąbki i mak z popiołu wybrały, a widząc płacz dziewczyny, szepnęły jej na pożegnanie. ', '- Niech sobie jadą, a ty siedź cicho i bądź spokojna. Będziesz na balu, już my ci to zrobimy.' ]], [[1,1,1,1,1],#6 ['Spojrzała wdzięcznym wzrokiem za ptaszkami, wyprawiła siostry z domu i macochę, siadła pod piecem, zamyśliła się i znużona pracą usnęła: śniła o balu, na który pójść jej nie pozwolono; ', 'Wtem zrywa się na równe nogi, bo przed jej okiem zabłysło coś złotem i srebrem, jakaś nieziemska postać stanęła pośrodku kuchni. ', 'Była to Baba-Dziwo, czarnoksiężniczka. Młoda i piękna, że oczu od niej trudno było oderwać, miała wspaniałą, złocistą gwiazdę nad czołem; ', 'całą jej postać otulał niebieski płaszcz srebrem tkany, a brylantami zdobne trzewiczki stopy jej stroiły. W ręce trzymała laskę czarnoksięską, którą dotknęła Kopciuszka. ', '- Pójdź ze mną Kopciuszku, - rzekła słodkim głosem, - ubiorę cię i wyślę na dwór królewski.' ]], [[1,1,1,1,1],#7 ['Doszły do jakiegoś dębu, a Baba-Dziwo stuknęła w drzewo po trzykroć swoją pałeczką. ', 'Dąb się otworzył i oczom olśnionej Rózi, ukazały się piękne, wymarzone szaty, tak cudne, że chyba cudniejszych nie było na świecie. Pantofelki były jakby szklane, bo były z samych djamentów. ', 'W jednej chwili, bez najmniejszego trudu, dziewczyna została umytą, ubraną i wypiękniała tak, że nikt by jej poznać nie mógł. ', 'Sama wieszczka zawołała nawet: - Ach, jakaś ty piękna! ', '- O, nie piękniejsza od pani - rzekł skromnie Kopciuszek. I chciała w rączkę pocałować wieszczkę, ale ta znikła jej z oczu.' ]], [[1,1,1,1,1],#8 ['Natomiast zajechał śliczny powóz, zaprzężony w cztery cudnie przybrane ogiery, i już miała doń wsiąść Rózia, gdy głos Wieszczki dał się słyszeć tuż nad jej uchem: ', '- Pamiętaj, że z balu masz do domu wrócić przed północą najpóźniej, bo czary wówczas stracą moc i obdarta i brudna ukazałabyś się wszystkim na sali. ', '- Będę pamiętała! - odparł Kopciuszek. Żywo wsiadła do powozu, a rącze ogiery szybko popędziły w dal. ', 'Festyn króla Ćwieczka, ojca księcia Krasnolicego, należał do rzędu największych uroczystości, jakie król ten wydał kiedykolwiek w kraju. ', 'Ale dziwić się nie można, bo wszak okazja była wyjątkowa. - Jego królewska wysokość, książę następca tronu, królewicz Krasnolicy, wybierał sobie żonę z pośród najpowabniejszych panien królestwa.' ]], [[1,1,1,1,1],#9 ['A jednak książę Krasnolicy wzgardził wszystkiem, a natomiast wyróżnił... kogo? Naszego ukochanego Kopciuszka! Bo właśnie w chwili, gdy się tańce ogólne rozpocząć miały, piękna nieznajoma wkroczyła na salę balową i odrazu powszechną zwróciła na siebie uwagę. ', 'Krasnolicy, patrząc na nią, bladł i rumienił się na przemian, tak wielce był wzruszony; na razie nie miał odwagi przybliżyć się do niej. ', 'Gdy się przemógł jednak, gdy ją poprosił do tańca i gdy pokręcił się z nią dookoła sali, już był tak rozkochany, że nic go od niej nie było w stanie oderwać. ', 'Zaraz jął się pytać skąd jest, z jakiego kraju pochodzi, ale Kopciuszek uśmiechnął się tylko, nie zdradzając ani jednem słowem swego pochodzenia. ', 'Macocha i siostry wpatrywały się w nią z podziwem i zazdrością, ale ani przypuszczały, że to jest ta sponiewierana Rózia, pozostawiona w domu przed miską maku i popiołu.' ]], [[1,1,1,1,1],#10 ['Czas leciał niepostrzeżenie. Nagle, Rózia spojrzała na zegar. Do północy brakowało zaledwie pięciu minut. ', 'Przerażona wysunęła się z rąk Królewicza i wybiegła na dziedziniec do swego powozu. Ale śpiesząc się, na progu zgubiła jeden ze szklanych pantofelków i utykając zlekka wpadła do powozu i odjechała do domu. ', 'Zaledwie weszła do kuchni już pozbawiona swych ozdób, było już parę minut po północy, usiadła niby do zadanej roboty i wkrótce doczekała się powrotu z balu sióstr i macochy. ', 'Chcąc się pochwalić przed Kopciuszkiem, co też to one użyły, jęły opowiadać o cudnej zabawie, aż nareszcie wspomniały o prześlicznie wystrojonej dziewicy, która przed samą północą uciekła z balu i swoją ucieczką wszystkie humory zwarzyła. ', '- Ale to nic, - dodała macocha, - król Ćwieczek wyda drugi festyn, a wtedy jedna z was, córeczki drogie, musi dostać koronę!' ]], [[1,1,1,1,1],#11 ['Nazajutrz, od samego rana, specjalny goniec królewski obiegał wszystkie domy i dworki, szukając właścicielki zgubionego trzewiczka, gdyż królewicz z nią tylko postanowił się ożenić. ', 'Niestety, pantofelek nie pasował na żadną nóżkę okolicznych dziewic. ', 'Macocha Kopciuszka starała się, o ile możności, wciągnąć pantofelek na nogi swoich kochanych córeczek, ale było to niepodobieństwem. I już goniec miał dworek wdowy opuścić, gdy wtem spostrzega w kuchni przy piecu jej pasierbicę. ', '- A to co za panienka? - zapytuje. ', '- To moja pasierbica, używam ją tylko do pomocy w kuchni, bo i nieładna i rozumu nie posiada, odparła wdowa niechętnie.' ]], [[1,1,1,1],#12 ['- To nic nie szkodzi, rzekł goniec, rozkaz dany mi przez królewicza jest tego rodzaju, że żadnej panienki pomijać nie wolno. ', 'Zażądał więc stanowczo, ażeby i pasierbica wdowy przyszła do pokoju i spróbowała włożyć pantofelek. ', 'Weszło dziewczątko krokiem pewnym i choć usmolona, nie zawstydziła się królewskiego sługi, bo praca nikogo nie hańbi. ', 'Śmiało wsunęła nóżkę w pantofelek szklany - i, o dziwo! wszedł - i nadał się wyśmienicie.' ]], [[1,1,1],#13 ['Zdziwiona i ze złości prawie od zmysłów odchodząca macocha i siostry przyrodnie, musiały patrzeć bezsilnie, jak zabiedzony Kopciuszek, to nieszczęsne, wzgardzone przez nich dziewczę, wsiadła do karety i jak ją powieziono na ślub z królewiczem. ', 'Ślub ten odbył się niebawem, a młodzi małżonkowie byli najszczęśliwszymi na kuli ziemskiej. ', 'A to już koniec opowiadania Braci Grimm zatytułowanego Kopciuszek.' ]]]pysiogame-1.30.811/languages/kbrd/__init__.py0000644000175000017500000000003012201770057017743 0ustar tigertiger# -*- coding: utf-8 -*- pysiogame-1.30.811/languages/kbrd/en_us.py0000644000175000017500000000556112201770057017333 0ustar tigertiger# -*- coding: utf-8 -*- kbrd_keys = [[0,0,25,22,"~","`","","","","",0],#0 [30,0,25,22,"!","1","","","","",0], [60,0,25,22,"@","2","","","","",1], [90,0,25,22,"#","3","","","","",2], [120,0,25,22,"$","4","","","","",3], [150,0,25,22,"%","5","","","","",3], [180,0,25,22,"^","6","","","","",4], [210,0,25,22,"&","7","","","","",4], [240,0,25,22,"*","8","","","","",5], [270,0,25,22,"(","9","","","","",6], [300,0,25,22,")","0","","","","",7], [330,0,25,22,"_","-","","","","",7], [360,0,25,22,"+","=","","","","",7], [390,0,25,22,"|","\\","","","","",7], [420,0,25,22,"","","←","","","",7],#14 [0,27,43,22,"","","Tab","","","",0],#15 [48,27,25,22,"","","","Q","","",0], [78,27,25,22,"","","","W","","",1], [108,27,25,22,"","","","E","","",2], [138,27,25,22,"","","","R","","",3], [168,27,25,22,"","","","T","","",3], [198,27,25,22,"","","","Y","","",4], [228,27,25,22,"","","","U","","",4], [258,27,25,22,"","","","I","","",5], [288,27,25,22,"","","","O","","",6], [318,27,25,22,"","","","P","","",7], [348,27,25,22,"{","[","","","","",7], [378,27,25,22,"}","]","","","","",7], [408,27,37,28,"","","Enter","","","",7],#28 [0,54,50,22,"","","Caps Lock","","","",0],#29 [55,54,25,22,"","","","A","","",0], [85,54,25,22,"","","","S","","",1], [115,54,25,22,"","","","D","","",2], [145,54,25,22,"","","","F","","",3], [175,54,25,22,"","","","G","","",3], [205,54,25,22,"","","","H","","",4], [235,54,25,22,"","","","J","","",4], [265,54,25,22,"","","","K","","",5], [295,54,25,22,"","","","L","","",6], [325,54,25,22,":",";","","","","",7], [355,54,25,22,'"',"'","","","","",7], [355,54,0,0,"","","","","","",7], [385,54,60,22,"","","","","","",7],#42 [0,81,60,22,"","","Shift","","","",0],#43 [65,81,25,22,"","","","Z","","",0], [95,81,25,22,"","","","X","","",1], [125,81,25,22,"","","","C","","",2], [155,81,25,22,"","","","V","","",3], [185,81,25,22,"","","","B","","",3], [215,81,25,22,"","","","N","","",4], [245,81,25,22,"","","","M","","",4], [275,81,25,22,"<",",","","","","",5], [305,81,25,22,">",".","","","","",6], [335,81,25,22,"?","/","","","","",7], [335,81,0,0,"","","","","","",7], [365,81,80,22,"","","Shift","","","",7],#55 [0,108,33,22,"","","Ctrl","","","",9],#56 [38,108,25,22,"","","","","","",9], [68,108,25,22,"","","Alt","","","",9], [98,108,214,22,"","","Space","","","",8], [317,108,25,22,"","","Alt Gr","","","",9], [347,108,25,22,"","","","","","",9], [377,108,25,22,"","","","","","",9], [407,108,38,22,"","","Ctrl","","","",9],#63 #Hand [100,178,16,17,"","","","","","",0],#64 x+17 [122,151,17,19,"","","","","","",1],#x+4 w-8 x+2 y+2 [143,135,18,19,"","","","","","",2],#x y+2 [169,140,16,18,"","","","","","",3],#x-1 y+3 [261,140,16,18,"","","","","","",4], [285,135,18,19,"","","","","","",5], [307,151,17,19,"","","","","","",6], [330,178,16,17,"","","","","","",7],#71 [203,186,18,20,"","","","","","",8],#Lt Thumb - Space - 72 [225,186,18,20,"","","","","","",8]]#Rt Thumb - Alt Gr - 73 pysiogame-1.30.811/languages/kbrd/ru.py0000644000175000017500000000575312201770057016653 0ustar tigertiger# -*- coding: utf-8 -*- kbrd_keys = [[0,0,25,22,"","","","Ё","","",0],#0 [30,0,25,22,"!","1","","","","",0], [60,0,25,22,'"',"2","","","","",1], [90,0,25,22,"№","3","","","","",2], [120,0,25,22,";","4","","","","",3], [150,0,25,22,"%","5","","","","",3], [180,0,25,22,":","6","","","","",4], [210,0,25,22,"?","7","","","","",4], [240,0,25,22,"*","8","","","","",5], [270,0,25,22,"(","9","","","","",6], [300,0,25,22,")","0","","","","",7], [330,0,25,22,"_","-","","","","",7], [360,0,25,22,"+","=","","","","",7], [390,0,1,1,"","","","","","",7], [390,0,55,22,"","","← Backspace","","","",7],#14 [0,27,43,22,"","","Tab","","","",0],#15 [48,27,25,22,"","","","Й","","",0], [78,27,25,22,"","","","Ц","","",1], [108,27,25,22,"","","","У","","",2], [138,27,25,22,"","","","К","","",3], [168,27,25,22,"","","","Е","","",3], [198,27,25,22,"","","","Н","","",4], [228,27,25,22,"","","","Г","","",4], [258,27,25,22,"","","","Ш","","",5], [288,27,25,22,"","","","Щ","","",6], [318,27,25,22,"","","","З","","",7], [348,27,25,22,"","","","Х","","",7], [378,27,25,22,"","","","Ъ","","",7], [408,27,37,22,"","","Enter","","","",7],#28 [0,54,50,22,"","","Caps Lock","","","",0],#29 [55,54,25,22,"","","","Ф","","",0], [85,54,25,22,"","","","Ы","","",1], [115,54,25,22,"","","","В","","",2], [145,54,25,22,"","","","А","","",3], [175,54,25,22,"","","","П","","",3], [205,54,25,22,"","","","Р","","",4], [235,54,25,22,"","","","О","","",4], [265,54,25,22,"","","","Л","","",5], [295,54,25,22,"","","","Д","","",6], [325,54,25,22,"","","","Ж","","",7], [355,54,25,22,'',"","","Э","","",7], [385,54,25,22,"/","\\","","","","",7], [415,48,30,28,"","","","","","",7],#42 [0,81,30,22,"","","Shift","","","",0],#43 [35,81,25,22,"|","/","","","","",0], [65,81,25,22,"","","","Я","","",0], [95,81,25,22,"","","","Ч","","",1], [125,81,25,22,"","","","С","","",2], [155,81,25,22,"","","","М","","",3], [185,81,25,22,"","","","И","","",3], [215,81,25,22,"","","","Т","","",4], [245,81,25,22,"","","","Ь","","",4], [275,81,25,22,"","","","Б","","",5], [305,81,25,22,"","","","Ю","","",6], [335,81,25,22,",",".","","","","",7], #[365,81,25,22,"|","/","","","","",7], #[395,81,50,22,"","","Shift","","","",7],#55 [365,81,80,22,"","","Shift","","","",7],#55 [0,108,33,22,"","","Ctrl","","","",9],#56 [38,108,25,22,"","","","","","",9], [68,108,25,22,"","","Alt","","","",9], [98,108,214,22,"","","Space","","","",8], [317,108,25,22,"","","Alt","","","",9], [347,108,25,22,"","","","","","",9], [377,108,25,22,"","","","","","",9], [407,108,38,22,"","","Ctrl","","","",9],#63 #Hand [100,178,16,17,"","","","","","",0],#64 x+17 [122,151,17,19,"","","","","","",1],#x+4 w-8 x+2 y+2 [143,135,18,19,"","","","","","",2],#x y+2 [169,140,16,18,"","","","","","",3],#x-1 y+3 [261,140,16,18,"","","","","","",4], [285,135,18,19,"","","","","","",5], [307,151,17,19,"","","","","","",6], [330,178,16,17,"","","","","","",7],#71 [203,186,18,20,"","","","","","",8],#Lt Thumb - Space - 72 [225,186,18,20,"","","","","","",8]]#Rt Thumb - Alt Gr - 73 pysiogame-1.30.811/languages/kbrd/gr_cinderella.py0000644000175000017500000003444112201770057021013 0ustar tigertiger# -*- coding: utf-8 -*- #Cinderella by Brothers Grim #for Touch Typing Tutor cinderella = [#1 [[1,1,1,1,1], ['The wife of a rich man fell sick, and as she felt that her end was drawing near, she called her only daughter to her bedside and said, "Dear child, be good and pious, and then the good God will always protect thee, and I will look down on thee from heaven and be near thee." ', "Thereupon she closed her eyes and departed. Every day the maiden went out to her mother's grave, and wept, and she remained pious and good. When winter came the snow spread a white sheet over the grave, and when the spring sun had drawn it off again, the man had taken another wife. ", 'The woman had brought two daughters into the house with her, who were beautiful and fair of face, but vile and black of heart. Now began a bad time for the poor step-child. "Is the stupid goose to sit in the parlour with us?" said they. ', '"He who wants to eat bread must earn it; out with the kitchen-wench." They took her pretty clothes away from her, put an old grey bedgown on her, and gave her wooden shoes. "Just look at the proud princess, how decked out she is!" they cried, and laughed, and led her into the kitchen. ', "There she had to do hard work from morning till night, get up before daybreak, carry water, light fires, cook and wash. Besides this, the sisters did her every imaginable injury-they mocked her and emptied her peas and lentils into the ashes, so that she was forced to sit and pick them out again." ]],#2 [[1,1,1,1,1], ["In the evening when she had worked till she was weary she had no bed to go to, but had to sleep by the fireside in the ashes. And as on that account she always looked dusty and dirty, they called her Cinderella. ", "It happened that the father was once going to the fair, and he asked his two step-daughters what he should bring back for them. ", '"Beautiful dresses," said one, "Pearls and jewels," said the second. "And thou, Cinderella," said he, "what wilt thou have?" "Father, break off for me the first branch which knocks against your hat on your way home." ', "So he bought beautiful dresses, pearls and jewels for his two stepdaughters, and on his way home, as he was riding through a green thicket, a hazel twig brushed against him and knocked off his hat. ", "Then he broke off the branch and took it with him. When he reached home he gave his step-daughters the things which they had wished for, and to Cinderella he gave the branch from the hazel-bush." ]],#3 [[1,1,1,1,1], ["Cinderella thanked him, went to her mother's grave and planted the branch on it, and wept so much that the tears fell down on it and watered it. ", "And it grew, however, and became a handsome tree. Thrice a day Cinderella went and sat beneath it, and wept and prayed, and a little white bird always came on the tree, and if Cinderella expressed a wish, the bird threw down to her what she had wished for. ", "It happened, however, that the King appointed a festival which was to last three days, and to which all the beautiful young girls in the country were invited, in order that his son might choose himself a bride. ", 'When the two step-sisters heard that they too were to appear among the number, they were delighted, called Cinderella and said, "Comb our hair for us, brush our shoes and fasten our buckles, for we are going to the festival at the King\'s palace." ', #" 'Cinderella obeyed, but wept, because she too would have liked to go with them to the dance, and begged her step-mother to allow her to do so. "Thou go, Cinderella!" said she; "Thou art dusty and dirty and wouldst go to the festival? Thou hast no clothes and shoes, and yet wouldst dance!"' ]],#4 [[1,1,1,1,1], ['As, however, Cinderella went on asking, the stepmother at last said, "I have emptied a dish of lentils into the ashes for thee, if thou hast picked them out again in two hours, thou shalt go with us." ', 'The maiden went through the back-door into the garden, and called, "You tame pigeons, you turtle-doves, and all you birds beneath the sky, come and help me to pick "The good into the pot, The bad into the crop." ', 'Then two white pigeons came in by the kitchen-window, and afterwards the turtle-doves, and at last all the birds beneath the sky, came whirring and crowding in, and alighted amongst the ashes. ', 'And the pigeons nodded with their heads and began pick, pick, pick, pick, and the rest began also pick, pick, pick, pick, and gathered all the good grains into the dish. Hardly had one hour passed before they had finished, and all flew out again. ', 'Then the girl took the dish to her step-mother, and was glad, and believed that now she would be allowed to go with them to the festival. But the step-mother said, "No, Cinderella, thou hast no clothes and thou canst not dance; thou wouldst only be laughed at."' ]],#5 [[1,1,1,1,1], ['And as Cinderella wept at this, the step-mother said, "If thou canst pick two dishes of lentils out of the ashes for me in one hour, thou shalt go with us." And she thought to herself, "That she most certainly cannot do." ', 'When the step-mother had emptied the two dishes of lentils amongst the ashes, the maiden went through the back-door into the garden and cried, You tame pigeons, you turtle-doves, and all you birds under heaven, come and help me to pick "The good into the pot, The bad into the crop." ', 'Then two white pigeons came in by the kitchen-window, and afterwards the turtle-doves, and at length all the birds beneath the sky, came whirring and crowding in, and alighted amongst the ashes. ', 'And the doves nodded with their heads and began pick, pick, pick, pick, and the others began also pick, pick, pick, pick, and gathered all the good seeds into the dishes, and before half an hour was over they had already finished, and all flew out again. ', 'Then the maiden carried the dishes to the step-mother and was delighted, and believed that she might now go with them to the festival. But the step-mother said, "All this will not help thee; thou goest not with us, for thou hast no clothes and canst not dance; we should be ashamed of thee!"' ]],#6 [[1,1,1,1,1], ['On this she turned her back on Cinderella, and hurried away with her two proud daughters. ', 'As no one was now at home, Cinderella went to her mother\'s grave beneath the hazel-tree, and cried, "Shiver and quiver, little tree, Silver and gold throw down over me." ',#' 'Then the bird threw a gold and silver dress down to her, and slippers embroidered with silk and silver. She put on the dress with all speed, and went to the festival. ', 'Her step-sisters and the step-mother however did not know her, and thought she must be a foreign princess, for she looked so beautiful in the golden dress. They never once thought of Cinderella, and believed that she was sitting at home in the dirt, picking lentils out of the ashes. ', 'The prince went to meet her, took her by the hand and danced with her. He would dance with no other maiden, and never left loose of her hand, and if any one else came to invite her, he said, "This is my partner."' ]],#7 [[1,1,1,1,1], ['She danced till it was evening, and then she wanted to go home. But the King\'s son said, "I will go with thee and bear thee company," for he wished to see to whom the beautiful maiden belonged. ', #' "She escaped from him, however, and sprang into the pigeon-house. The King's son waited until her father came, and then he told him that the stranger maiden had leapt into the pigeon-house. ", 'The old man thought, "Can it be Cinderella?" and they had to bring him an axe and a pickaxe that he might hew the pigeon-house to pieces, but no one was inside it. ', 'And when they got home Cinderella lay in her dirty clothes among the ashes, and a dim little oil lamp was burning on the mantle-piece, ', 'for Cinderella had jumped quickly down from the back of the pigeon-house and had run to the little hazeltree, and there she had taken off her beautiful clothes and laid them on the grave, and the bird had taken them away again, and then she had placed herself in the kitchen amongst the ashes in her grey gown.' ]],#8 [[1,1,1,1,1], ['Next day when the festival began afresh, and her parents and the stepsisters had gone once more, Cinderella went to the hazel-tree and said- "Shiver and quiver, my little tree, Silver and gold throw down over me." ', "Then the bird threw down a much more beautiful dress than on the preceding day. And when Cinderella appeared at the festival in this dress, every one was astonished at her beauty. The King's son had waited until she came, and instantly took her by the hand and danced with no one but her. ", 'When others came and invited her, he said, "She is my partner." When evening came she wished to leave, and the King\'s son followed her and wanted to see into which house she went. But she sprang away from him, and into the garden behind the house. Therein stood a beautiful tall tree on which hung the most magnificent pears. ', 'She clambered so nimbly between the branches like a squirrel that the King\'s son did not know where she was gone. He waited until her father came, and said to him, "The stranger-maiden has escaped from me, and I believe she has climbed up the pear-tree." The father thought, "Can it be Cinderella?" and had an axe brought and cut the tree down, but no one was on it. ', #' 'And when they got into the kitchen, Cinderella lay there amongst the ashes, as usual, for she had jumped down on the other side of the tree, had taken the beautiful dress to the bird on the little hazel-tree, and put on her grey gown.' ]],#9 [[1,1,1,1,1], ['On the third day, when the parents and sisters had gone away, Cinderella went once more to her mother\'s grave and said to the little tree- "Shiver and quiver, my little tree, Silver and gold throw down over me." ' #' "And now the bird threw down to her a dress which was more splendid and magnificent than any she had yet had, and the slippers were golden. And when she went to the festival in the dress, no one knew how to speak for astonishment. The King's son danced with her only, and if any one invited her to dance, he said, \"She is my partner.\" ", "When evening came, Cinderella wished to leave, and the King's son was anxious to go with her, but she escaped from him so quickly that he could not follow her. The King's son had, however, used a strategem, and had caused the whole staircase to be smeared with pitch, and there, when she ran down, had the maiden's left slipper remained sticking. ", "The King's son picked it up, and it was small and dainty, and all golden. Next morning, he went with it to the father, and said to him, \"No one shall be my wife but she whose foot this golden slipper fits.\" Then were the two sisters glad, for they had pretty feet. The eldest went with the shoe into her room and wanted to try it on, and her mother stood by. ", "But she could not get her big toe into it, and the shoe was too small for her. Then her mother gave her a knife and said, \"Cut the toe off; when thou art Queen thou wilt have no more need to go on foot.\" The maiden cut the toe off, forced the foot into the shoe, swallowed the pain, and went out to the King's son. Then he took her on his his horse as his bride and rode away with her." ]],#10 [[1,1,1,1,1], ["They were, however, obliged to pass the grave, and there, on the hazel-tree, sat the two pigeons and cried, \"Turn and peep, turn and peep, There's blood within the shoe, The shoe it is too small for her, The true bride waits for you.\" ", #' 'Then he looked at her foot and saw how the blood was streaming from it. He turned his horse round and took the false bride home again, and said she was not the true one, and that the other sister was to put the shoe on. Then this one went into her chamber and got her toes safely into the shoe, but her heel was too large. So her mother gave her a knife and said, "Cut a bit off thy heel; when thou art Queen thou wilt have no more need to go on foot." ', "The maiden cut a bit off her heel, forced her foot into the shoe, swallowed the pain, and went out to the King's son. He took her on his horse as his bride, and rode away with her, but when they passed by the hazel-tree, two little pigeons sat on it and cried, \"Turn and peep, turn and peep, There's blood within the shoe, The shoe it is too small for her, The true bride waits for you.\" ", #' 'He looked down at her foot and saw how the blood was running out of her shoe, and how it had stained her white stocking. Then he turned his horse and took the false bride home again. "This also is not the right one," said he, "have you no other daughter?" "No," said the man, "There is still a little stunted kitchen-wench which my late wife left behind her, but she cannot possibly be the bride." ', "The King's son said he was to send her up to him; but the mother answered, \"Oh, no, she is much too dirty, she cannot show herself!\" He absolutely insisted on it, and Cinderella had to be called. She first washed her hands and face clean, and then went and bowed down before the King's son, who gave her the golden shoe. Then she seated herself on a stool, drew her foot out of the heavy wooden shoe, and put it into the slipper, which fitted like a glove." ]],#11 [[1,1,1,1,1], ["And when she rose up and the King's son looked at her face he recognized the beautiful maiden who had danced with him and cried, \"That is the true bride!\" The stepmother and the two sisters were terrified and became pale with rage; he, however, took Cinderella on his horse and rode away with her. As they passed by the hazel-tree, the two white doves cried- ", '"Turn and peep, turn and peep, No blood is in the shoe, The shoe is not too small for her, The true bride rides with you," and when they had cried that, the two came flying down and placed themselves on Cinderella\'s shoulders, one on the right, the other on the left, and remained sitting there. ', #' "When the wedding with the King's son had to be celebrated, the two false sisters came and wanted to get into favour with Cinderella and share her good fortune. When the betrothed couple went to church, the elder was at the right side and the younger at the left, and the pigeons pecked out one eye of each of them. Afterwards as they came back, the elder was at the left, and the younger at the right, and then the pigeons pecked out the other eye of each. ", "And thus, for their wickedness and falsehood, they were punished with blindness as long as they lived. ", "The End. Congratulations you have retyped the entire Cinderella by Brothers Grim." ]]]pysiogame-1.30.811/languages/kbrd/ru_cinderella.py0000644000175000017500000003570612201770057021036 0ustar tigertiger# -*- coding: utf-8 -*- #Золушка - http://sheba.spb.ru/libra/perro_zolushka.htm cinderella = [ [[1,1,1,1,1],#1 [ 'Жил-был вдовец, у которого была прелестная добрая дочка. Однажды он решил жениться вновь и взял в жёны злую, эгоистичную женщину. У неё были две дочери, которые по характеру были как две капли воды похожи на свою мать. ', 'После свадьбы мачеха сразу же показала свой злой нрав. Она прекрасно понимала, что рядом с красивой добросердечной падчерицей её родные дочки выглядят ещё грязнее и уродливее. ', 'Поэтому она возненавидела падчерицу и заставляла её делать всю самую грязную работу по дому. ', 'Бедная девочка готовила и стирала, убирала комнаты сестёр и мыла лестницы. Сама же она жила в маленькой тесной каморке на чердаке. Она переживала за своего тихого отца, которого страшно третировала новая жена. ', 'По вечерам она часто сидела на тёплой золе у самого очага, поэтому её прозвали Золушкой. Но, несмотря на своё имя, она была в своих лохмотьях в сто раз милее, чем её сёстры в дорогих платьях, расшитых золотом.' ]],#2 [[1,1,1,1,1], [ 'Однажды королевский сын давал бал в свою честь и разослал приглашения всем подданным своего королевства. Сёстры Золушки были в восторге от этого и целыми днями примеряли вороха новых платьев, специально накупленных по этому случаю. ', '- Я надену красное бархатное платье, - говорила старшая, - с отделкой из ручных кружев. ', '- А я надену вот это гладкое бальное платье, - говорила вторая сестра, - но поверх него я надену свои бриллианты и шляпу с золотыми цветами. ', 'Они советовались с самым лучшим парикмахером насчёт модных причёсок. У Золушки был отличный вкус, поэтому у неё тоже спрашивали совета. ', '- Я сделаю вам самые модные причёски во всём королевстве, - сказала Золушка.' ]],#3 [[1,1,1,1,1], [ 'Сёстры милостиво согласились. Пока она причёсывала их, они выпытывали у неё: ', '- Тебе бы хотелось пойти на бал, Золушка? ', '- Я боюсь, что меня не пустят на бал, - отвечала Золушка. ', '- Ты права. Только представишь тебя на балу и сразу можно умереть со смеху! ', 'Любая другая девочка отомстила бы за такие насмешки и сделала бы их причёски похожими на копны сена. Но она как можно лучше причесала сестёр. Они были довольны.' ]],#4 [[1,1,1,1,1], [ 'Они постоянно крутились и вертелись перед зеркалами и даже совсем забыли про еду. Чтобы сделать свои талии потоньше, они истратили кучу лент, замотавшись в них, как в коконы. ', 'Наконец они были готовы ехать на бал. Золушка проводила их до порога и немножко всплакнула от одиночества. ', 'Золушкина крёстная мать, волшебница, пришла посмотреть, почему она плачет. - Как я мечтаю попасть на бал! - всхлипывала Золушка. - Делай всё, как я скажу, а там посмотрим, - сказала волшебница. - Принеси мне из сада большую тыкву. ', 'Золушка побежала в сад и принесла самую большую тыкву, какую только могла принести. Волшебница выдолбила тыкву, а затем коснулась её волшебной палочкой. Она мгновенно превратилась в прелестную золотую карету. ', 'Потом она заметила в мышеловке шесть маленьких мышей. Она выпустила их и, прикоснувшись к ним волшебной палочкой, превратила их в шесть красивых быстроногих коней.' ]],#5 [[1,1,1,1,1], [ 'Теперь не хватало кучера. - Крыса подойдёт? - спросила Золушка. - Конечно, - ответила крёстная. ', 'Золушка принесла крысоловку. Волшебница выбрала крысу с самыми длинными усами и превратила её в толстого важного кучера. ', 'Затем она сказала: - У ворот сада сидят шесть ящериц. Принеси их мне. ', 'Золушка быстро исполнила приказание. Волшебница превратила их в ловких слуг, стоящих на запятках кареты. ', '- Ну а теперь, ты можешь ехать на бал, - сказала она. - Ты довольна? - Конечно, - ответила сияющая от счастья Золушка. - Но удобно ли мне будет появиться там в этих лохмотьях?' ]],#6 [[1,1,1,1,1], [ 'Волшебница взмахнула своей палочкой и золушкины лохмотья превратились в роскошный, затканный золотом и серебром наряд. ', 'Её стоптанные башмаки превратились в хрустальные туфельки, словно предназначенные именно для бальных танцев. Золушка была ослепительно красива в своём наряде. ', 'Золушка уселась в карету, и волшебница сказала ей: - Желаю тебе весело провести время. Но запомни одну вещь. Ты должна покинуть бал ровно в полночь. Если ты не сделаешь этого, твоя карета превратится в тыкву, лошади! опять станут мышами, слуги - ящерицами, а твоё роскошное бальное платье - грязными лохмотьями. ', 'Золушка пообещала крёстной покинуть бал ровно в полночь и умчалась. ', 'Слуги доложили принцу, что на бал приехала прекрасная богатая незнакомка. Он поспешил встретить её и проводить во дворец. Лёгкий шёпот изумления и восторга пробежал по залу.' ]],#7 [[1,1,1,1,1], [ 'Все взгляды были прикованы к красавице. Старый король шепнул королеве, что он уже много лет не видел такого чуда. ', 'Дамы внимательно рассматривали её наряд, стараясь не упустить ни одной мелочи, чтобы завтра же заказать себе такой же, если им только это удастся. ', 'Принц пригласил её на танец. Одно удовольствие было смотреть, как она танцует. Подали ужин, но принц совсем забыл про еду, его глаза не отрывались от глаз прекрасной незнакомки. ', 'Она села рядом со своими сводными сёстрами и угостила их экзотическими фруктами из корзинки, которую преподнёс ей принц. Они зарделись от удовольствия, удостоившись такой чести, но не узнали Золушку. ', 'В самый разгар бала часы пробили три четверти двенадцатого. Золушка попрощалась со всеми и поспешила уйти. Вернувшись домой, она сердечно поблагодарила волшебницу и попросила у неё разрешения назавтра опять отправиться на бал, поскольку принц очень просил её приехать. Волшебница обещала ей помочь опять.' ]],#8 [[1,1,1,1,1], [ 'Вскоре явились сёстры с мачехой. Золушка, притворившись, что она спала, зевая, открыла дверь. ', 'Сёстры были в страшном возбуждении от появления на балу красавицы-незнакомки. - Она была красивей всех на свете, - без умолку тараторила старшая сестра. - Она даже угостила нас фруктами. ', 'Золушка улыбнулась и спросила: - А как её звали? - Никто не знает. Принц отдал бы что угодно, лишь бы узнать, кто она такая? ', '- Как я хочу увидеть её. Не смогли бы вы одолжить мне какое-нибудь ненужное вам платье, чтобы я тоже смогла пойти на бал? - спросила Золушка. ', '- Что? Ты собираешься напялить на себя наши платья? Никогда! - зашикали на неё сёстры.' ]],#9 [[1,1,1,1,1], [ 'Золушка была уверена, что так и случится. Если бы они разрешили ей, что бы она делала? На следующий вечер сёстры опять отправились на бал. ', 'Золушка тоже поехала вскоре после них, одетая ещё более богато, чем в прошлый раз. Принц не покидал её ни на минуту. Он был так любезен и мил, что Золушка совсем забыла про наказ волшебницы. ', 'Вдруг она услышала, как часы пробили полночь. Выскочив из зала, она помчалась к выходу, как быстроногая лань. ', 'Принц попытался поймать её. Вдруг с её ноги соскользнула и упала хрустальная туфелька, и принц еле успел подхватить её. ', 'Едва достигнув ворот дворца, Золушка превратилась в грязную замарашку в лохмотьях, а карета, кучер и слуги в тыкву, крысу и ящериц. Ничего больше не напоминало о волшебстве, кроме хрустальной туфельки, оставшейся у неё.' ]],#10 [[1,1,1,1,1], [ 'Она прибежала домой чуть раньше сестёр. Они опять рассказали ей о том, что прекрасная незнакомка появлялась вновь. Она была ещё лучше, чем прежде. ', 'Но она исчезла так внезапно, что потеряла хрустальную туфельку. Принц нашёл её и спрятал у сердца. Все уверены, что он безумно влюблён в незнакомку. ', 'Они были правы. На следующий день принц объявил, что женится на той девушке, которой хрустальная туфелька окажется впору. Принцессы, герцогини и придворные дамы - все примеряли туфельку, но безуспешно. ', 'Придворные принесли туфельку и к золушкиным сёстрам. Они изо всех сил старались надеть туфельку, но безуспешно. Тогда Золушка спросила: - Можно мне попробовать тоже? ', 'Её сёстры рассмеялись. Но королевский слуга сказал: - Мне дан приказ примерять туфельку всем девушкам королевства без исключения.' ]],#11 [[1,1,1,1,1], [ 'Туфелька свободно наделась на золушкину ножку, как будто была сделана по ней. Тут же Золушка достала из кармана вторую туфельку, и все вокруг застыли в изумлении. ', 'Появившаяся тут же волшебница, коснулась Золушки волшебной палочкой, и она превратилась в богато одетую красавицу-незнакомку. ', 'Вот тут-то сёстры и узнали её. Они упали перед ней на колени и покаялись во всех своих дурных делах. Золушка простила их и предложила им стать друзьями. ', 'С почётным эскортом Золушку проводили во дворец, где с нетерпением ожидал её молодой красавец-принц. Через несколько дней они поженились и справили пышную свадьбу. ', 'Золушка была так же добра, как и красива. Она взяла сестёр жить во дворец и вскоре выдала их замуж за знатных вельмож.' ]]] pysiogame-1.30.811/languages/kbrd/en_gb.py0000644000175000017500000000560112201770060017261 0ustar tigertiger# -*- coding: utf-8 -*- kbrd_keys = [[0,0,25,22,"¬","`","","","","",0],#0 [30,0,25,22,"!","1","","","","",0], [60,0,25,22,'"',"2","","","","",1], [90,0,25,22,"£","3","","","","",2], [120,0,25,22,"$","4","","","","",3], [150,0,25,22,"%","5","","","","",3], [180,0,25,22,"^","6","","","","",4], [210,0,25,22,"&","7","","","","",4], [240,0,25,22,"*","8","","","","",5], [270,0,25,22,"(","9","","","","",6], [300,0,25,22,")","0","","","","",7], [330,0,25,22,"_","-","","","","",7], [360,0,25,22,"+","=","","","","",7], [390,0,0,0,"","","","","","",7], [390,0,55,22,"","","← Backspace","","","",7],#14 [0,27,43,22,"","","Tab","","","",0],#15 [48,27,25,22,"","","","Q","","",0], [78,27,25,22,"","","","W","","",1], [108,27,25,22,"","","","E","","",2], [138,27,25,22,"","","","R","","",3], [168,27,25,22,"","","","T","","",3], [198,27,25,22,"","","","Y","","",4], [228,27,25,22,"","","","U","","",4], [258,27,25,22,"","","","I","","",5], [288,27,25,22,"","","","O","","",6], [318,27,25,22,"","","","P","","",7], [348,27,25,22,"{","[","","","","",7], [378,27,25,22,"}","]","","","","",7], [408,27,37,22,"","","Enter","","","",7],#28 [0,54,50,22,"","","Caps Lock","","","",0],#29 [55,54,25,22,"","","","A","","",0], [85,54,25,22,"","","","S","","",1], [115,54,25,22,"","","","D","","",2], [145,54,25,22,"","","","F","","",3], [175,54,25,22,"","","","G","","",3], [205,54,25,22,"","","","H","","",4], [235,54,25,22,"","","","J","","",4], [265,54,25,22,"","","","K","","",5], [295,54,25,22,"","","","L","","",6], [325,54,25,22,":",";","","","","",7], [355,54,25,22,'@',"'","","","","",7], [385,54,25,22,"~","#","","","","",7], [415,48,30,28,"","","","","","",7],#42 [0,81,60,22,"","","Shift","","","",0],#43 [65,81,25,22,"","","","Z","","",0], [95,81,25,22,"","","","X","","",1], [125,81,25,22,"","","","C","","",2], [155,81,25,22,"","","","V","","",3], [185,81,25,22,"","","","B","","",3], [215,81,25,22,"","","","N","","",4], [245,81,25,22,"","","","M","","",4], [275,81,25,22,"<",",","","","","",5], [305,81,25,22,">",".","","","","",6], [335,81,25,22,"?","/","","","","",7], [365,81,25,22,"|","\\","","","","",7], [395,81,50,22,"","","Shift","","","",7],#55 [0,108,33,22,"","","Ctrl","","","",9],#56 [38,108,25,22,"","","","","","",9], [68,108,25,22,"","","Alt","","","",9], [98,108,214,22,"","","Space","","","",8], [317,108,25,22,"","","Alt Gr","","","",9], [347,108,25,22,"","","","","","",9], [377,108,25,22,"","","","","","",9], [407,108,38,22,"","","Ctrl","","","",9],#63 #Hand [100,178,16,17,"","","","","","",0],#64 x+17 [122,151,17,19,"","","","","","",1],#x+4 w-8 x+2 y+2 [143,135,18,19,"","","","","","",2],#x y+2 [169,140,16,18,"","","","","","",3],#x-1 y+3 [261,140,16,18,"","","","","","",4], [285,135,18,19,"","","","","","",5], [307,151,17,19,"","","","","","",6], [330,178,16,17,"","","","","","",7],#71 [203,186,18,20,"","","","","","",8],#Lt Thumb - Space - 72 [225,186,18,20,"","","","","","",8]]#Rt Thumb - Alt Gr - 73 pysiogame-1.30.811/languages/word_lists/fr_di.py0000644000175000017500000001134512201770060020543 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are a naive translation of a part of most commonly used words in English #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time the list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating the English version #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in French or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #If you have a better list please send it to me and I will format it and add it to the game. #this is a very naive translation from google translate - only resorted and counted di = [[17, 'ans', 'bec', 'bon', 'cot', 'dit', 'est', 'ici', 'lit', 'mou', 'oui', 'par', 'qui', 'son', 'sud', 'sur', 'une', 'été'], [57, 'avec', 'base', 'beau', 'bleu', 'bord', 'choc', 'clac', 'coup', 'côté', 'deux', 'dont', 'fixe', 'flux', 'fois', 'huit', 'idée', 'joie', 'jour', 'lent', 'leur', 'lire', 'long', 'main', 'mars', 'maïs', 'mois', 'mort', 'mots', 'même', 'nage', 'noir', 'nord', 'peau', 'peur', 'peur', 'peur', 'plan', 'plat', 'plus', 'pour', 'prêt', 'père', 'quoi', 'rare', 'rien', 'sans', 'sauf', 'sens', 'soin', 'sort', 'tige', 'tout', 'tout', 'trou', 'venu', 'vêtu', 'zéro'], [60, 'ainsi', 'alors', 'autre', 'autre', 'bande', 'blanc', 'cadre', 'champ', 'chant', 'chaud', 'chose', 'clair', 'comte', 'donné', 'drapé', 'entre', 'faire', 'faire', 'fleur', 'flûte', 'force', 'forme', 'grand', 'grand', 'grève', 'gâter', 'jabot', 'juste', 'lampe', 'laver', 'marié', 'noire', 'notre', 'passé', 'pente', 'petit', 'pièce', 'pièce', 'piège', 'poche', 'poids', 'poème', 'poêle', 'quand', 'raide', 'rouge', 'règle', 'sauté', 'signe', 'silex', 'situé', 'sucre', 'suite', 'tache', 'tendu', 'terne', 'terre', 'venir', 'voile', 'votre'], [66, 'anneau', 'bondit', 'bouche', 'bourru', 'braire', 'brosse', 'bétail', 'calmar', 'camion', 'chacun', 'chemin', 'commun', 'dessin', 'dérive', 'désert', 'emploi', 'encore', 'espion', 'esprit', 'faible', 'fierté', 'figure', 'flamme', 'fleurs', 'flotte', 'fluage', 'fluide', 'fraise', 'fruits', 'garçon', 'glisse', 'goutte', 'goutte', 'gramme', 'greffe', 'griffe', 'grille', 'heures', 'hommes', 'hélice', 'jamais', 'jambes', 'manger', 'marque', 'modèle', 'montré', 'navire', 'numéro', 'parler', 'penser', 'preuve', 'projet', 'raisin', 'rapide', 'regard', 'remuer', 'retour', 'savait', 'siècle', 'sombre', 'stable', 'séjour', 'taches', 'usines', 'valeur', 'vérité'], [55, 'aveugle', 'baisser', 'berceau', 'berceau', 'bifteck', 'boucher', 'briques', 'brûlure', 'cerveau', 'chiffon', 'complot', 'composé', 'conseil', 'courges', 'demandé', 'devenir', 'défiler', 'détails', 'falaise', 'frotter', 'grandir', 'grognon', 'manteau', 'mauvais', 'miettes', 'méthode', 'nouveau', 'oiseaux', 'parfois', 'placard', 'plaider', 'plantes', 'poisson', 'proposé', 'quelque', 'quitter', 'ronfler', 'réponse', 'saigner', 'silence', 'soldats', 'sommeil', 'soudain', 'soulevé', 'suivant', 'tableau', 'traiter', 'voiture', 'volonté', 'voyager', 'écouter', 'élaboré', 'élevage', 'énergie', 'étendue'], [47, 'accident', 'adjectif', 'affaires', 'arracher', 'arrosage', 'assiette', 'attendre', 'attraper', 'balancer', 'balayage', 'brancard', 'brillant', 'brillant', 'consonne', 'continue', 'contrôle', 'coquille', 'cultures', 'ensemble', 'entendre', 'entendre', 'esquisse', 'excitant', 'grimoire', 'généraux', 'insectes', 'meilleur', 'milliers', 'millions', 'plancher', 'problème', 'produits', 'produits', 'protéger', 'précieux', 'préparer', 'regarder', 'regarder', 'ressenti', 'rousseur', 'ruisseau', 'résultat', 'souligné', 'souvenir', 'statisme', 'syllabes', 'symboles'], [26, 'abondance', 'cependant', 'collation', 'conserver', 'courageux', 'difficile', 'différent', 'dissident', 'découvert', 'eux-mêmes', 'graphique', 'industrie', 'lentement', 'molécules', 'montagnes', 'mouvement', 'pantoufle', 'parcourir', 'plusieurs', 'programme', 'promenade', 'prononcer', 'président', 'tortiller', 'vêtements', 'éclaireur'], [20, 'auparavant', 'caracolent', 'changement', 'comprendre', 'différence', 'discussion', 'déterminer', 'développés', 'expérience', 'grenouille', 'grognement', 'hirondelle', 'maintenant', 'nourriture', 'nécessaire', 'paragraphe', 'principale', 'professeur', 'succursale', 'électrique']] pysiogame-1.30.811/languages/word_lists/en_gb_di.py0000644000175000017500000003560112201770060021207 0ustar tigertiger# -*- coruging: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are mainly most commonly used words in English + some other words #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating this #the code at the end would format/sort etc. a mixed list of words with different lenghts. - add , between the sub-list (or if using python3 use the print(row, end=', '). #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable. di = [[114, 'act', 'add', 'age', 'ago', 'air', 'all', 'and', 'any', 'are', 'art', 'bad', 'bed', 'big', 'bit', 'box', 'boy', 'but', 'buy', 'can', 'car', 'cat', 'cry', 'cut', 'day', 'did', 'dog', 'dry', 'eat', 'end', 'far', 'few', 'fig', 'fit', 'flu', 'fly', 'for', 'fun', 'gas', 'get', 'got', 'had', 'has', 'hat', 'her', 'him', 'his', 'hit', 'hot', 'how', 'ice', 'its', 'job', 'key', 'law', 'lay', 'led', 'let', 'lie', 'lot', 'low', 'man', 'map', 'may', 'men', 'new', 'nor', 'not', 'now', 'off', 'old', 'one', 'our', 'out', 'own', 'pay', 'per', 'pry', 'put', 'ran', 'red', 'row', 'run', 'sat', 'saw', 'say', 'sea', 'see', 'set', 'she', 'sir', 'sit', 'six', 'ski', 'sky', 'son', 'spy', 'sum', 'sun', 'ten', 'the', 'too', 'top', 'try', 'two', 'use', 'war', 'was', 'way', 'who', 'why', 'win', 'yes', 'yet', 'you'], [381, 'able', 'also', 'area', 'arms', 'army', 'away', 'baby', 'back', 'ball', 'bank', 'base', 'bear', 'beat', 'been', 'bell', 'best', 'bill', 'blab', 'blew', 'blip', 'blob', 'blot', 'blow', 'blue', 'boat', 'body', 'book', 'born', 'both', 'bran', 'brat', 'bray', 'brew', 'brim', 'busy', 'came', 'care', 'case', 'city', 'clad', 'clam', 'clan', 'clap', 'claw', 'clay', 'clip', 'clod', 'clog', 'club', 'clue', 'cold', 'come', 'cook', 'cool', 'copy', 'corn', 'cost', 'cows', 'crab', 'crib', 'crop', 'crow', 'dark', 'deal', 'deep', 'does', 'done', 'door', 'down', 'drab', 'drag', 'draw', 'drew', 'drip', 'drop', 'drum', 'each', 'ears', 'east', 'easy', 'edge', 'eggs', 'else', 'even', 'ever', 'eyes', 'face', 'fact', 'fair', 'fall', 'farm', 'fast', 'fear', 'feel', 'feet', 'fell', 'felt', 'find', 'fine', 'fire', 'fish', 'five', 'flag', 'flap', 'flat', 'flaw', 'flea', 'flew', 'flex', 'flip', 'flop', 'flow', 'food', 'foot', 'four', 'free', 'frog', 'from', 'full', 'game', 'gave', 'girl', 'give', 'glad', 'glee', 'glob', 'glow', 'glue', 'gold', 'gone', 'good', 'grab', 'gram', 'gray', 'grew', 'grid', 'grim', 'grin', 'grip', 'grit', 'grow', 'grub', 'hair', 'halt', 'hand', 'hard', 'have', 'head', 'hear', 'heat', 'held', 'help', 'here', 'high', 'hill', 'hold', 'hole', 'home', 'hope', 'huge', 'idea', 'into', 'iron', 'just', 'keep', 'kept', 'kind', 'king', 'knew', 'know', 'lady', 'lake', 'land', 'last', 'lead', 'left', 'legs', 'less', 'life', 'like', 'line', 'list', 'live', 'long', 'look', 'lost', 'loud', 'love', 'made', 'main', 'make', 'many', 'mark', 'meat', 'meet', 'milk', 'mind', 'mine', 'miss', 'moon', 'more', 'most', 'move', 'much', 'must', 'name', 'near', 'need', 'next', 'nose', 'note', 'noun', 'once', 'only', 'open', 'over', 'page', 'pair', 'park', 'part', 'past', 'plan', 'play', 'plod', 'plot', 'plow', 'plug', 'plum', 'poem', 'pole', 'poor', 'pray', 'prod', 'prop', 'race', 'rain', 'read', 'rest', 'rich', 'ride', 'ring', 'rise', 'road', 'rock', 'room', 'root', 'rope', 'rose', 'rule', 'safe', 'said', 'sail', 'same', 'sand', 'save', 'scab', 'scan', 'scar', 'scat', 'seat', 'seen', 'sell', 'send', 'sent', 'ship', 'shop', 'show', 'side', 'sign', 'sing', 'size', 'skid', 'skin', 'skip', 'skit', 'slab', 'slam', 'slap', 'sled', 'slid', 'slim', 'slip', 'slit', 'slot', 'slow', 'slug', 'smog', 'snag', 'snap', 'snip', 'snob', 'snow', 'snug', 'soft', 'soil', 'some', 'song', 'soon', 'span', 'spat', 'spin', 'spot', 'spur', 'star', 'stay', 'stem', 'step', 'stew', 'stir', 'stop', 'such', 'sure', 'swam', 'swan', 'swap', 'swat', 'sway', 'swim', 'tail', 'take', 'talk', 'tall', 'team', 'tell', 'test', 'than', 'that', 'them', 'then', 'they', 'thin', 'this', 'thus', 'tied', 'time', 'tiny', 'told', 'tone', 'took', 'town', 'trap', 'tray', 'tree', 'trek', 'trim', 'trip', 'trot', 'true', 'tube', 'turn', 'type', 'unit', 'upon', 'verb', 'very', 'view', 'wait', 'wall', 'want', 'warm', 'wash', 'wear', 'week', 'well', 'went', 'were', 'west', 'what', 'when', 'wide', 'wife', 'wild', 'will', 'wind', 'wire', 'wish', 'with', 'wood', 'work', 'yard', 'your'], [498, 'about', 'above', 'after', 'again', 'ahead', 'allow', 'alone', 'along', 'among', 'angle', 'apple', 'asked', 'began', 'being', 'below', 'birds', 'black', 'blade', 'blame', 'blank', 'blast', 'blaze', 'bleat', 'bleed', 'bleep', 'blend', 'bless', 'blind', 'blink', 'block', 'blood', 'bloom', 'bluff', 'blunt', 'blush', 'board', 'bones', 'brace', 'braid', 'brain', 'brake', 'brand', 'brass', 'brave', 'brawl', 'bread', 'break', 'brick', 'bride', 'bring', 'brisk', 'broad', 'broil', 'broke', 'brood', 'brook', 'broom', 'broth', 'brown', 'brush', 'build', 'built', 'carry', 'catch', 'cause', 'cells', 'cents', 'chart', 'check', 'chief', 'child', 'clack', 'claim', 'clamp', 'clang', 'clash', 'clasp', 'class', 'clean', 'clear', 'cleat', 'clerk', 'click', 'cliff', 'climb', 'cling', 'clink', 'cloak', 'clock', 'clomp', 'close', 'cloth', 'cloud', 'clove', 'clown', 'cluck', 'clump', 'coast', 'could', 'count', 'crack', 'craft', 'crane', 'crash', 'crawl', 'crazy', 'creek', 'creep', 'cried', 'croak', 'crook', 'crops', 'cross', 'crowd', 'crown', 'crumb', 'crust', 'dance', 'draft', 'drain', 'drake', 'drank', 'drape', 'dread', 'dream', 'dress', 'drift', 'drill', 'drink', 'drive', 'droop', 'drove', 'early', 'earth', 'eight', 'enjoy', 'equal', 'every', 'field', 'fight', 'first', 'flake', 'flame', 'flare', 'flash', 'fleck', 'fleet', 'flesh', 'flick', 'fling', 'flint', 'float', 'flock', 'flood', 'floor', 'floss', 'flour', 'fluff', 'fluid', 'fluke', 'flunk', 'flush', 'flute', 'force', 'found', 'frail', 'frame', 'frank', 'freak', 'fresh', 'frill', 'frizz', 'front', 'frost', 'fruit', 'glare', 'glass', 'gleam', 'glide', 'gloat', 'globe', 'gloom', 'gloss', 'glove', 'grace', 'grade', 'graft', 'grain', 'grand', 'grant', 'grape', 'graph', 'grasp', 'grass', 'grate', 'grave', 'gravy', 'graze', 'great', 'greed', 'green', 'greet', 'grill', 'grime', 'grind', 'groan', 'groom', 'group', 'growl', 'grown', 'gruff', 'grump', 'guess', 'happy', 'heard', 'heart', 'heavy', 'horse', 'hours', 'house', 'human', 'known', 'large', 'later', 'learn', 'least', 'leave', 'level', 'light', 'major', 'march', 'match', 'maybe', 'means', 'metal', 'might', 'miles', 'money', 'mouth', 'music', 'never', 'night', 'north', 'ocean', 'often', 'order', 'other', 'paint', 'paper', 'party', 'piece', 'place', 'plaid', 'plain', 'plane', 'plank', 'plant', 'plate', 'plead', 'pleat', 'plink', 'plump', 'point', 'power', 'press', 'price', 'pride', 'print', 'prize', 'probe', 'proof', 'proud', 'prove', 'prowl', 'prune', 'quiet', 'quite', 'radio', 'ready', 'right', 'river', 'round', 'scald', 'scale', 'scalp', 'scamp', 'scare', 'scarf', 'scold', 'scoop', 'scoot', 'scope', 'score', 'scour', 'scout', 'scram', 'scrap', 'screw', 'scrub', 'scuba', 'scuff', 'seeds', 'sense', 'serve', 'seven', 'shall', 'shape', 'sharp', 'shoes', 'short', 'shown', 'sight', 'since', 'skate', 'skill', 'skirt', 'skull', 'skunk', 'slack', 'slant', 'slate', 'sleek', 'sleep', 'sleet', 'slept', 'slice', 'slick', 'slide', 'slime', 'sling', 'slope', 'slump', 'slush', 'smack', 'small', 'smart', 'smash', 'smear', 'smell', 'smile', 'smock', 'smoke', 'snack', 'snail', 'snake', 'snare', 'snarl', 'sneak', 'sniff', 'snoop', 'snore', 'snout', 'solve', 'sound', 'south', 'space', 'spare', 'spark', 'speak', 'spear', 'speck', 'speed', 'spell', 'spend', 'spent', 'spike', 'spill', 'spine', 'spire', 'split', 'spoil', 'spoke', 'spoon', 'sport', 'spout', 'spray', 'sprig', 'squat', 'squid', 'stack', 'staff', 'stage', 'stain', 'stair', 'stake', 'stale', 'stalk', 'stall', 'stamp', 'stand', 'stare', 'stars', 'start', 'state', 'steak', 'steal', 'steam', 'steel', 'steep', 'steer', 'stick', 'stiff', 'still', 'stilt', 'sting', 'stink', 'stock', 'stone', 'stood', 'stool', 'stoop', 'store', 'storm', 'story', 'stove', 'strap', 'straw', 'stray', 'strip', 'strum', 'study', 'style', 'sugar', 'swamp', 'swarm', 'sweat', 'sweep', 'sweet', 'swell', 'swept', 'swift', 'swine', 'swing', 'swish', 'swoop', 'table', 'terms', 'their', 'there', 'these', 'thick', 'thing', 'think', 'third', 'those', 'three', 'today', 'tools', 'total', 'touch', 'trace', 'track', 'trade', 'trail', 'train', 'tramp', 'trash', 'tread', 'treat', 'trees', 'tribe', 'trick', 'troll', 'tromp', 'troop', 'trout', 'truck', 'truly', 'trunk', 'trust', 'truth', 'uncle', 'under', 'until', 'value', 'visit', 'voice', 'vowel', 'watch', 'water', 'waves', 'where', 'which', 'while', 'white', 'whole', 'whose', 'wings', 'woman', 'women', 'words', 'world', 'would', 'write', 'wrong', 'wrote', 'years', 'young'], [242, 'across', 'action', 'afraid', 'agreed', 'almost', 'always', 'amount', 'answer', 'appear', 'around', 'became', 'become', 'before', 'behind', 'belong', 'beside', 'better', 'bleach', 'blonde', 'blouse', 'bottom', 'bought', 'braise', 'branch', 'breath', 'breeze', 'bridge', 'bright', 'broken', 'bronco', 'bronze', 'browse', 'bruise', 'called', 'cannot', 'cattle', 'caught', 'centre', 'chance', 'change', 'choose', 'church', 'circle', 'closet', 'clutch', 'colour', 'column', 'common', 'corner', 'cotton', 'course', 'cradle', 'crayon', 'create', 'crunch', 'desert', 'design', 'direct', 'doctor', 'dragon', 'during', 'effect', 'either', 'energy', 'engine', 'enough', 'entire', 'except', 'expect', 'family', 'famous', 'father', 'figure', 'filled', 'flight', 'flower', 'forest', 'freeze', 'friend', 'fright', 'fringe', 'frozen', 'garden', 'glance', 'glitch', 'grapes', 'grease', 'grouch', 'ground', 'grudge', 'inches', 'inside', 'island', 'itself', 'joined', 'jumped', 'killed', 'length', 'lifted', 'listen', 'little', 'matter', 'melody', 'method', 'middle', 'modern', 'moment', 'months', 'mother', 'nation', 'notice', 'number', 'object', 'office', 'oxygen', 'passed', 'people', 'period', 'person', 'phrase', 'picked', 'plains', 'planet', 'plants', 'player', 'please', 'pledge', 'plenty', 'plural', 'pounds', 'praise', 'prance', 'prayer', 'pretty', 'priest', 'prince', 'prison', 'pulled', 'pushed', 'raised', 'rather', 'really', 'reason', 'record', 'region', 'remain', 'report', 'result', 'return', 'rhythm', 'rolled', 'scarce', 'school', 'scorch', 'scrape', 'scrawl', 'scream', 'screen', 'script', 'scroll', 'second', 'seemed', 'should', 'silent', 'simple', 'single', 'sister', 'sketch', 'sleepy', 'sleeve', 'slight', 'slowly', 'smiled', 'smooth', 'smudge', 'snatch', 'sneeze', 'speech', 'spirit', 'splash', 'splint', 'sponge', 'sprain', 'sprang', 'sprawl', 'spread', 'spring', 'sprint', 'sprout', 'spruce', 'square', 'squash', 'squeak', 'squeal', 'squint', 'squirm', 'squirt', 'squish', 'stable', 'staple', 'starch', 'starve', 'statue', 'steady', 'stereo', 'sticky', 'stingy', 'stitch', 'strain', 'strand', 'streak', 'stream', 'street', 'strict', 'stride', 'strike', 'string', 'stripe', 'stroke', 'stroll', 'strong', 'struck', 'suffix', 'summer', 'supply', 'swatch', 'swerve', 'switch', 'system', 'though', 'toward', 'travel', 'trough', 'valley', 'walked', 'weight', 'wheels', 'window', 'winter', 'within', 'wonder', 'yellow'], [142, 'against', 'already', 'animals', 'another', 'arrived', 'because', 'believe', 'between', 'blanket', 'blossom', 'brother', 'brought', 'burning', 'capital', 'captain', 'century', 'certain', 'climate', 'climbed', 'clothes', 'company', 'compare', 'contain', 'control', 'correct', 'country', 'covered', 'cricket', 'current', 'decided', 'decimal', 'details', 'distant', 'divided', 'dollars', 'drawing', 'entered', 'evening', 'exactly', 'example', 'explain', 'express', 'factors', 'farmers', 'feeling', 'finally', 'fingers', 'flowers', 'forward', 'freight', 'friends', 'general', 'gravity', 'himself', 'history', 'however', 'hundred', 'hunting', 'include', 'insects', 'instead', 'laughed', 'letters', 'located', 'machine', 'measure', 'members', 'million', 'minutes', 'morning', 'natural', 'nothing', 'numeral', 'observe', 'outside', 'pattern', 'perhaps', 'picture', 'planets', 'prepare', 'present', 'pretzel', 'printed', 'problem', 'process', 'produce', 'product', 'program', 'project', 'promise', 'pronoun', 'protect', 'provide', 'quickly', 'reached', 'scallop', 'science', 'scooter', 'scraper', 'scratch', 'screech', 'section', 'settled', 'several', 'shouted', 'similar', 'skillet', 'slipper', 'snuggle', 'someone', 'special', 'squeeze', 'stadium', 'stapler', 'started', 'station', 'stirrup', 'stomach', 'strange', 'stretch', 'subject', 'suppose', 'surface', 'swallow', 'sweater', 'sweeten', 'swollen', 'symbols', 'teacher', 'thought', 'through', 'trouble', 'trumpet', 'usually', 'various', 'village', 'weather', 'western', 'whether', 'without', 'workers', 'written'], [76, 'actually', 'addition', 'although', 'anything', 'blizzard', 'branches', 'building', 'business', 'children', 'clothing', 'complete', 'compound', 'consider', 'describe', 'division', 'electric', 'elements', 'equation', 'everyone', 'exciting', 'exercise', 'finished', 'fraction', 'freckles', 'happened', 'increase', 'indicate', 'industry', 'interest', 'language', 'material', 'movement', 'northern', 'opposite', 'pleasant', 'position', 'possible', 'practice', 'practise', 'precious', 'prepared', 'princess', 'prisoner', 'probably', 'products', 'property', 'received', 'remember', 'repeated', 'scallion', 'scramble', 'scribble', 'sentence', 'separate', 'shoulder', 'soldiers', 'solution', 'southern', 'splendid', 'splinter', 'sprinkle', 'squirrel', 'starfish', 'stocking', 'straight', 'strainer', 'stranger', 'strength', 'stronger', 'struggle', 'students', 'suddenly', 'surprise', 'together', 'triangle', 'yourself'], [36, 'adjective', 'beautiful', 'beginning', 'carefully', 'consonant', 'continued', 'determine', 'developed', 'different', 'difficult', 'direction', 'factories', 'following', 'groceries', 'important', 'molecules', 'mountains', 'necessary', 'paragraph', 'president', 'principal', 'professor', 'pronounce', 'propeller', 'questions', 'represent', 'something', 'sometimes', 'sprinkler', 'statement', 'stretched', 'stretcher', 'suggested', 'syllables', 'thousands', 'underline'], [18, 'blackboard', 'conditions', 'dictionary', 'difference', 'discovered', 'especially', 'everything', 'experience', 'experiment', 'flashlight', 'government', 'particular', 'scientists', 'stationary', 'strawberry', 'substances', 'themselves', 'understand']] """ a = 0 for each in mixed_list_of_words: if len(each)>a: a = len(each) word_sets = [[] for i in range(a)] for each in mixed_list_of_words: b = len(each) word_sets[b-1].append(each) for each in word_sets: each.sort() a = len(each) row = [] row.append(a) row.extend(each) print(row) """ pysiogame-1.30.811/languages/word_lists/it_di.py0000644000175000017500000001120212201770060020540 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are a naive translation of a part of most commonly used words in English #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time the list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating the English version #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in Italian or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #If you have a better list please send it to me and I will format it and add it to the game. #this is a very naive translation from google translate - only resorted and counted di = [[19, 'blu', 'che', 'con', 'cui', 'dei', 'dei', 'dei', 'due', 'lei', 'mai', 'ore', 'qui', 'sei', 'sud', 'tra', 'tuo', 'una', 'uva', 'via'], [25, 'alle', 'buco', 'così', 'cupo', 'dato', 'equo', 'fico', 'gala', 'guai', 'mano', 'mesi', 'nato', 'nave', 'nera', 'nord', 'oggi', 'ogni', 'ogni', 'orso', 'otto', 'pero', 'peso', 'ramo', 'rana', 'spia'], [71, 'aereo', 'altri', 'altro', 'altro', 'basso', 'bello', 'bocca', 'bocca', 'bordo', 'bordo', 'calza', 'campo', 'cieco', 'colpo', 'culla', 'culla', 'degli', 'degli', 'degli', 'detto', 'elica', 'fatto', 'fiore', 'fiori', 'fisso', 'forma', 'forza', 'gambe', 'gambo', 'gioco', 'grano', 'larga', 'lento', 'lento', 'letto', 'linea', 'lungo', 'marzo', 'mente', 'mille', 'molto', 'nulla', 'nuovo', 'padre', 'paura', 'paura', 'paura', 'pelle', 'pesce', 'pezzo', 'piano', 'prova', 'punto', 'punto', 'punto', 'segno', 'selce', 'senso', 'senza', 'sposo', 'stufa', 'terra', 'treno', 'trova', 'tutto', 'visto', 'visto', 'volta', 'volte', 'vuoto', 'zucca'], [63, 'adesso', 'allora', 'ancora', 'andato', 'anello', 'caduta', 'capire', 'chiese', 'comune', 'dentro', 'dentro', 'deriva', 'drappo', 'estivo', 'fiamma', 'fiocco', 'flauto', 'flotta', 'frutta', 'generi', 'giorni', 'goccia', 'grammo', 'grande', 'grande', 'grillo', 'lavare', 'lavoro', 'lucida', 'metodo', 'nacque', 'niente', 'nostro', 'numero', 'pagina', 'parole', 'piante', 'poesia', 'pronti', 'prugna', 'quando', 'regola', 'ripida', 'roccia', 'sapeva', 'scarsa', 'secolo', 'stanza', 'stessi', 'stesso', 'stesso', 'stoffa', 'tenere', 'torcia', 'tranne', 'triste', 'uomini', 'valore', 'vedere', 'veloce', 'venire', 'venuta', 'verità'], [63, 'accanto', 'armadio', 'aspetta', 'barella', 'bottino', 'braccia', 'burbero', 'canzone', 'cattura', 'coccodè', 'deserto', 'disegno', 'diversi', 'diverso', 'domande', 'energia', 'esempio', 'fragola', 'governo', 'grafico', 'griglia', 'griglia', 'innesto', 'insetti', 'lavagna', 'leggere', 'liquido', 'macchia', 'macchia', 'marchio', 'mattoni', 'merenda', 'milioni', 'nuotato', 'parlare', 'passato', 'passato', 'pensare', 'pettine', 'portato', 'profumo', 'ragazzo', 'ringhio', 'rondine', 'russare', 'saltato', 'schizzo', 'scontro', 'seguito', 'sentire', 'sentito', 'sentito', 'sguardo', 'sillabe', 'simboli', 'soldati', 'sottile', 'traccia', 'uccelli', 'vestita', 'vestiti', 'viaggio', 'volontà'], [44, 'allegria', 'artiglio', 'bestiame', 'bistecca', 'briciola', 'cervello', 'ciabatta', 'continua', 'costante', 'crescere', 'dettagli', 'generali', 'guardare', 'intasare', 'invocare', 'lasciare', 'mangiare', 'mantello', 'migliore', 'molecole', 'montagna', 'mostrato', 'orgoglio', 'pendenza', 'pennello', 'preziosa', 'principe', 'problema', 'prodotti', 'progetto', 'qualcosa', 'raccolti', 'risposta', 'sciopero', 'scoperto', 'scorrere', 'scottare', 'silenzio', 'sostanze', 'stazione', 'sviluppo', 'trappola', 'trattare', 'zucchero'], [29, 'aggettivo', 'allungato', 'ascoltare', 'brillante', 'camicetta', 'controllo', 'cresciuto', 'difficile', 'direzione', 'diventare', 'elettrico', 'fabbriche', 'industria', 'mescolare', 'movimento', 'oscillare', 'preparare', 'principio', 'programma', 'pronuncia', 'ricordare', 'risultato', 'sbagliato', 'scivolata', 'sfogliare', 'stabilire', 'strappare', 'suggerito', 'villaggio'], [24, 'abbassarsi', 'alimentare', 'alimentari', 'attenzione', 'brontolone', 'concordato', 'condizioni', 'consonante', 'coraggioso', 'differenza', 'dizionario', 'esperienza', 'importanti', 'istruzione', 'lentiggini', 'necessario', 'presidente', 'principali', 'professore', 'proteggere', 'saltellare', 'sanguinare', 'scienziati', 'strisciare']] pysiogame-1.30.811/languages/word_lists/ru_di.py0000644000175000017500000005165712201770060020574 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are mainly most commonly used words in English + some other words #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating this #the code at the end would format/sort etc. a mixed list of words with different lenghts. - add , between the sub-list (or if using python3 use the print(row, end=', '). #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in Russian or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #this is a very naive translation from google translate - resorted - duplicates removed etc. but not sure how many of these words are english - but just written using Russian letters. di = [[68, 'акт', 'без', 'бип', 'был', 'ваш', 'век', 'вес', 'вид', 'вне', 'все', 'газ', 'где', 'дал', 'два', 'дом', 'дух', 'его', 'еда', 'ель', 'еще', 'жир', 'или', 'имя', 'как', 'кот', 'кто', 'лед', 'лес', 'лом', 'лук', 'мир', 'мог', 'мое', 'нос', 'она', 'они', 'под', 'пол', 'пух', 'рад', 'раз', 'рис', 'рок', 'рот', 'ряд', 'сад', 'сам', 'сон', 'сто', 'сын', 'сэр', 'тех', 'ток', 'тон', 'три', 'уже', 'уши', 'хит', 'чей', 'чем', 'чик', 'что', 'шаг', 'шар', 'шел', 'шип', 'шоу', 'это'] ,[186, 'база', 'банк', 'беда', 'бить', 'блеф', 'блок', 'брат', 'бриз', 'буря', 'была', 'быть', 'весь', 'вещь', 'взял', 'визг', 'винт', 'вниз', 'вода', 'вони', 'врач', 'выше', 'глюк', 'годы', 'горы', 'граф', 'даже', 'дать', 'двор', 'деле', 'день', 'дети', 'диск', 'доля', 'драп', 'друг', 'дыма', 'дыра', 'дядя', 'есть', 'жабо', 'жало', 'жена', 'звон', 'звук', 'зима', 'змея', 'знак', 'знак', 'зона', 'зонд', 'игра', 'идея', 'клан', 'клей', 'клик', 'клип', 'клуб', 'ключ', 'кожа', 'кора', 'коса', 'краб', 'край', 'кран', 'крах', 'крик', 'крик', 'круг', 'леди', 'лето', 'лицо', 'ложь', 'луна', 'люди', 'мало', 'марш', 'матч', 'мать', 'медь', 'мера', 'миль', 'мисс', 'могу', 'мозг', 'море', 'мост', 'мрак', 'мука', 'мыть', 'мясо', 'наши', 'небо', 'ниже', 'нить', 'нога', 'ноги', 'ночь', 'нуля', 'один', 'ожог', 'окно', 'опыт', 'отец', 'офис', 'пара', 'парк', 'петь', 'печь', 'пиво', 'пила', 'писк', 'план', 'плащ', 'плуг', 'пока', 'поле', 'приз', 'пуля', 'путь', 'пять', 'рама', 'раса', 'река', 'речь', 'ритм', 'роза', 'рост', 'рука', 'рыба', 'рысь', 'сани', 'сват', 'свет', 'свои', 'свой', 'своп', 'себя', 'семь', 'сила', 'скит', 'скот', 'след', 'слот', 'смог', 'снег', 'снег', 'сноб', 'соус', 'спад', 'спал', 'стал', 'стек', 'стон', 'стул', 'тело', 'тест', 'типа', 'трюк', 'убил', 'угол', 'удар', 'упал', 'урод', 'утро', 'флаг', 'флип', 'флот', 'хлеб', 'холм', 'хотя', 'хочу', 'храп', 'царь', 'цвет', 'цена', 'часы', 'шанс', 'шина', 'шкаф', 'шлем', 'шрам', 'щель', 'этап', 'юбка', 'язык', 'яйца'] ,[261, 'акция', 'армия', 'белка', 'белый', 'берег', 'блеск', 'блики', 'блоха', 'бренд', 'будет', 'буквы', 'вдруг', 'ветви', 'ветвь', 'ветер', 'вечер', 'взрыв', 'взять', 'видел', 'вилка', 'война', 'войск', 'волны', 'вошел', 'время', 'вырос', 'вялый', 'глаза', 'глина', 'глыба', 'голос', 'город', 'город', 'грамм', 'грант', 'гриль', 'грипп', 'грязь', 'губки', 'дверь', 'дикий', 'длина', 'дождь', 'доска', 'драка', 'дрейф', 'думал', 'думаю', 'дюйма', 'жених', 'живой', 'жизнь', 'завод', 'зажим', 'закон', 'закон', 'залог', 'занос', 'запад', 'запах', 'здесь', 'земля', 'зерно', 'знали', 'знать', 'игрок', 'иметь', 'искра', 'капля', 'карта', 'кисть', 'класс', 'клерк', 'клоун', 'книга', 'князь', 'когда', 'комом', 'конек', 'конец', 'конце', 'копия', 'копье', 'кости', 'крест', 'кровь', 'кудри', 'купил', 'кусок', 'левый', 'лодка', 'ложка', 'лоток', 'любой', 'мазок', 'малый', 'между', 'место', 'метла', 'метод', 'мечта', 'много', 'может', 'морда', 'мороз', 'мусор', 'набор', 'назад', 'найти', 'наука', 'нация', 'нести', 'ничто', 'новый', 'носик', 'нужно', 'обиду', 'обувь', 'общее', 'огонь', 'ожоги', 'озеро', 'океан', 'около', 'ответ', 'отчет', 'охота', 'очень', 'палка', 'парус', 'парша', 'пасти', 'песня', 'песок', 'петля', 'пишет', 'пламя', 'племя', 'плечо', 'плита', 'плоть', 'побег', 'повар', 'поезд', 'поезд', 'позже', 'полет', 'полюс', 'после', 'поток', 'потом', 'почва', 'почти', 'пошел', 'поэма', 'право', 'птицы', 'пункт', 'пусть', 'пятно', 'радио', 'разум', 'расти', 'решил', 'рукав', 'ручей', 'рядом', 'самом', 'самый', 'сахар', 'свист', 'север', 'семья', 'серые', 'серый', 'сетка', 'сидел', 'синий', 'скажи', 'скала', 'склон', 'скоро', 'скраб', 'скунс', 'слайд', 'слива', 'слизь', 'слова', 'смесь', 'снова', 'совет', 'совок', 'спина', 'спорт', 'спрей', 'ссора', 'стадо', 'сталь', 'стать', 'ствол', 'стейк', 'стены', 'стиль', 'стоял', 'страх', 'сумма', 'сухой', 'сфера', 'также', 'таким', 'такой', 'танец', 'тепло', 'тихий', 'ткань', 'толпа', 'толпа', 'точка', 'точно', 'трава', 'треск', 'тромп', 'труба', 'тупой', 'тыква', 'улица', 'умный', 'ферма', 'фильм', 'форма', 'фраза', 'фронт', 'фунты', 'халат', 'хвала', 'хвост', 'цветы', 'целый', 'центр', 'центы', 'цифра', 'часто', 'часть', 'через', 'череп', 'число', 'члены', 'чужой', 'чулок', 'шесть', 'шифер', 'школа', 'шляпа', 'шпиль', 'шпион', 'шприц', 'экран', 'эскиз', 'южный', 'яркий', 'ясный'] ,[269, 'бежать', 'бизнес', 'блузка', 'болото', 'болтун', 'больше', 'борьба', 'боятся', 'бродят', 'бронза', 'бульон', 'бумаги', 'быстро', 'важный', 'весной', 'взгляд', 'видеть', 'власть', 'вместе', 'вместо', 'внутри', 'воздух', 'волосы', 'ворона', 'восемь', 'восток', 'вперед', 'всегда', 'второй', 'гибкий', 'глагол', 'голова', 'головы', 'гордый', 'громко', 'грубый', 'группа', 'делает', 'делать', 'деньги', 'дерево', 'держал', 'десять', 'детали', 'дефект', 'дизайн', 'должен', 'долина', 'дорога', 'дракон', 'дракон', 'другие', 'другой', 'друзья', 'дурное', 'ездить', 'желать', 'железо', 'желтый', 'жжение', 'забота', 'занято', 'запись', 'захват', 'защита', 'звезда', 'звезды', 'здание', 'значит', 'золото', 'зрения', 'играть', 'иногда', 'истина', 'каждый', 'камень', 'качели', 'кирпич', 'клапан', 'клетки', 'климат', 'коготь', 'колеса', 'кольцо', 'концов', 'корень', 'коровы', 'корона', 'корыто', 'краски', 'кризис', 'крикет', 'кричал', 'крошка', 'крутой', 'крылья', 'кто-то', 'купить', 'лебедь', 'легкий', 'лежать', 'лезвие', 'летать', 'липкий', 'ловкий', 'лошадь', 'лучший', 'лыжные', 'любовь', 'машина', 'меньше', 'месяцы', 'металл', 'метель', 'мигают', 'минуты', 'могила', 'молоко', 'молоть', 'момент', 'музыка', 'мягкие', 'наклон', 'начало', 'начало', 'неделя', 'нижний', 'низкий', 'ничего', 'носить', 'нюхать', 'облако', 'объект', 'обычно', 'одежда', 'одетый', 'одеяло', 'однако', 'оружие', 'особый', 'остров', 'острый', 'отруби', 'оценка', 'палить', 'пальцы', 'партия', 'первый', 'период', 'печать', 'печать', 'писать', 'плакал', 'планет', 'планка', 'платок', 'платье', 'плохой', 'плюнул', 'победа', 'погода', 'поймал', 'полный', 'полоса', 'помочь', 'поплыл', 'потому', 'почему', 'пресса', 'прибыл', 'пример', 'принес', 'пришли', 'провал', 'проект', 'прокат', 'просто', 'против', 'прошло', 'прямой', 'пугать', 'пустой', 'пухлый', 'работа', 'равным', 'раздел', 'размах', 'размер', 'ранний', 'раскол', 'реветь', 'регион', 'решить', 'рулить', 'свежий', 'сверло', 'сверху', 'свинья', 'свитер', 'свиток', 'сделал', 'сделка', 'семена', 'сердце', 'сестра', 'сжатие', 'сидеть', 'синяки', 'сказал', 'скобки', 'скупой', 'скутер', 'слепые', 'слогов', 'сломал', 'случай', 'слышал', 'собака', 'совать', 'солнце', 'солома', 'список', 'спринт', 'старый', 'статуя', 'стежка', 'стекло', 'стерео', 'стойло', 'стоять', 'страна', 'стремя', 'строка', 'темный', 'теперь', 'теплый', 'только', 'тонкий', 'тормоз', 'тролль', 'трудно', 'тушить', 'тысячи', 'тюрьма', 'увидел', 'ударил', 'улитка', 'улыбка', 'улыбка', 'урвать', 'утечка', 'ученые', 'уютной', 'фигура', 'фильтр', 'флейта', 'форель', 'фрукты', 'хлопок', 'ходули', 'хорошо', 'цветок', 'черный', 'четыре', 'чистый', 'читать', 'чихает', 'эффект', 'яблоко'] ,[216, 'барабан', 'блеяние', 'богатый', 'большой', 'бранить', 'бродяга', 'бросать', 'быстрый', 'ведущий', 'великий', 'веревка', 'веселье', 'веточка', 'возраст', 'вопросы', 'всплеск', 'вспышка', 'выбрать', 'выводок', 'выросли', 'высокий', 'вытащил', 'главный', 'гладкий', 'гласные', 'говорил', 'горячих', 'готовых', 'графика', 'девушка', 'деревня', 'деревья', 'держать', 'длинный', 'доверие', 'доллары', 'дорожка', 'дыхание', 'единица', 'желудок', 'женщина', 'женщины', 'жесткая', 'жесткий', 'заговор', 'закрыть', 'закуска', 'записки', 'зеленый', 'зеленых', 'инсульт', 'интерес', 'история', 'кальмар', 'капитал', 'капитан', 'квадрат', 'кликнув', 'колокол', 'колонка', 'команда', 'комната', 'конечно', 'корабль', 'который', 'красный', 'крахмал', 'кремень', 'кровать', 'круглый', 'крупный', 'кусочек', 'лечение', 'личинка', 'ловушка', 'лягушка', 'магазин', 'магазин', 'мальчик', 'масштаб', 'материя', 'медведь', 'мелодия', 'мертвые', 'миллион', 'минимум', 'молитва', 'молодой', 'морская', 'мрачный', 'мужчины', 'надежда', 'напиток', 'невеста', 'негодяй', 'немного', 'никогда', 'носилки', 'образец', 'образом', 'ожидать', 'описать', 'осколок', 'отделка', 'падение', 'падение', 'перерыв', 'питания', 'плавать', 'плавают', 'планета', 'платить', 'плоский', 'побежал', 'поворот', 'поднять', 'подожди', 'поехали', 'позиция', 'поймать', 'полетел', 'ползать', 'получил', 'помнить', 'понимаю', 'портить', 'порядок', 'послали', 'правило', 'привлек', 'причина', 'провели', 'провода', 'продать', 'продукт', 'просить', 'простой', 'процесс', 'прошлое', 'прыгать', 'пустыня', 'рабочие', 'равнины', 'радость', 'разлива', 'расцвет', 'ребенок', 'ребенок', 'ремесло', 'ремешок', 'решение', 'решетка', 'рисунок', 'родился', 'роиться', 'румянец', 'рыскать', 'рычание', 'самолет', 'сегодня', 'сильный', 'символы', 'системы', 'сказали', 'складка', 'скребок', 'сладкий', 'слишком', 'словарь', 'сломать', 'служить', 'слушать', 'слышать', 'смеялся', 'создана', 'создать', 'солдаты', 'сонного', 'средний', 'стадион', 'станция', 'стебель', 'степлер', 'стороны', 'строгий', 'субъект', 'суффикс', 'считать', 'сюрприз', 'таблица', 'тапочки', 'толкнул', 'толстый', 'тратить', 'трещина', 'тяжелый', 'тяжесть', 'украсть', 'уровень', 'условия', 'учитель', 'учиться', 'фабрики', 'факторы', 'фермеры', 'фонарик', 'хлопают', 'хороший', 'храбрый', 'хрупкое', 'церковь', 'человек', 'человек', 'чувство', 'широкий', 'энергия'] ,[116, 'бренчать', 'вариться', 'вероятно', 'веснушки', 'вещества', 'взорвали', 'виновата', 'виноград', 'включить', 'возможно', 'возникли', 'волнение', 'гвоздики', 'глубокий', 'говорить', 'голодать', 'гордость', 'гребешок', 'грузовик', 'грузовой', 'движение', 'действие', 'добавить', 'довольно', 'доказать', 'достигли', 'жадность', 'животные', 'жидкость', 'забивают', 'западный', 'запасные', 'застежка', 'изменить', 'истинный', 'казалось', 'каракули', 'карандаш', 'карканье', 'картинка', 'качаться', 'кислород', 'клубника', 'компания', 'короткий', 'красивый', 'кренделя', 'кроватка', 'кукуруза', 'культура', 'культуры', 'ласточка', 'лестница', 'мармелад', 'масштаба', 'материал', 'медленно', 'молекулы', 'мошенник', 'мустанга', 'называть', 'написано', 'наскоком', 'обещание', 'огромный', 'оснастка', 'основной', 'особенно', 'оставить', 'остаться', 'открытые', 'персонал', 'перчатка', 'печатные', 'поднялся', 'поднятый', 'подобный', 'показали', 'покрытые', 'полагать', 'положить', 'получить', 'поплавок', 'посетить', 'построил', 'посыпать', 'потеряли', 'практика', 'принести', 'приходят', 'приятный', 'проблема', 'прогулка', 'продукты', 'прыгнула', 'пятнышко', 'раздутый', 'различие', 'растения', 'рисовать', 'северный', 'скользил', 'скорость', 'смотреть', 'сравнить', 'страница', 'странный', 'студенты', 'сценарий', 'тащиться', 'торговля', 'третьего', 'холодный', 'царапины', 'экспресс', 'элементы'] ,[65, 'благодать', 'блондинки', 'выключено', 'двигатель', 'заподлицо', 'заполнены', 'заявление', 'известный', 'искусство', 'колыбелью', 'крошечный', 'множество', 'моллюсков', 'наблюдать', 'наказание', 'насекомые', 'настоящее', 'некоторые', 'несколько', 'объяснить', 'остальные', 'остановка', 'осторожно', 'отдельный', 'отправить', 'повернуть', 'подводное', 'позволяет', 'понимание', 'попросили', 'поселился', 'последний', 'построить', 'предложил', 'президент', 'претензия', 'прильнуть', 'принцесса', 'проверить', 'программа', 'произошло', 'протектор', 'профессор', 'прохладно', 'равенство', 'разведчик', 'разделить', 'различные', 'результат', 'свободный', 'связанных', 'священник', 'сенсорный', 'сковорода', 'сломанный', 'согласные', 'содержать', 'состоялся', 'сохранить', 'стоимость', 'сутулость', 'сцепление', 'указывают', 'цепляться', 'шотландка'] ,[51, 'автомобиль', 'безопасный', 'десятичная', 'дефицитные', 'деформация', 'дополнение', 'достаточно', 'заклинание', 'заклинание', 'извиваться', 'капельного', 'количество', 'количество', 'коричневый', 'косоглазие', 'мастерство', 'наводнение', 'настроение', 'необходимо', 'обеспечить', 'обнаружили', 'обсуждение', 'оживленная', 'определить', 'оставаться', 'отдаленный', 'поддержать', 'пожалуйста', 'ползучести', 'потертости', 'появляются', 'правильный', 'промежуток', 'пропустить', 'разделение', 'разработал', 'рассеянных', 'растяжение', 'скольжение', 'согласился', 'соединение', 'сокращения', 'стабильный', 'счастливая', 'увеличение', 'улыбнулась', 'управление', 'упражнение', 'устаревшие', 'устойчивый', 'чувствовал'] ] """ a = 0 for each in mixed_list_of_words: if len(each)>a: a = len(each) word_sets = [[] for i in range(a)] for each in mixed_list_of_words: b = len(each) word_sets[b-1].append(each) for each in word_sets: each.sort() a = len(each) row = [] row.append(a) row.extend(each) print(row) """ pysiogame-1.30.811/languages/word_lists/es_di.py0000644000175000017500000001155012201770060020541 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are a naive translation of a part of most commonly used words in English #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time the list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating the English version #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in Spanish or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #If you have a better list please send it to me and I will format it and add it to the game. #this is a very naive translation from google translate - only resorted and counted di = [[27, 'así', 'con', 'del', 'dio', 'dos', 'día', 'fui', 'hoy', 'los', 'los', 'los', 'los', 'más', 'oro', 'oso', 'oír', 'por', 'que', 'sin', 'sin', 'sur', 'una', 'uno', 'uva', 'ver', 'ver', 'vez'], [49, 'algo', 'aquí', 'azul', 'bajo', 'boca', 'cada', 'cama', 'cero', 'clac', 'cuna', 'cuna', 'cuya', 'dijo', 'ella', 'flor', 'flor', 'gris', 'hace', 'lado', 'leer', 'mano', 'maíz', 'nada', 'nada', 'niño', 'ocho', 'oler', 'otro', 'otro', 'oído', 'para', 'paño', 'peso', 'pico', 'pide', 'piel', 'piso', 'rana', 'roca', 'rojo', 'ropa', 'seis', 'tira', 'todo', 'todo', 'tren', 'tubo', 'vete', 'vino'], [84, 'ahora', 'armas', 'bache', 'barco', 'bello', 'borde', 'botín', 'campo', 'carne', 'carta', 'caída', 'caída', 'ciego', 'clara', 'coche', 'comer', 'común', 'deber', 'entre', 'espía', 'floja', 'flota', 'forma', 'frase', 'fresa', 'fruta', 'fuego', 'garra', 'golpe', 'goteo', 'hecho', 'horas', 'igual', 'junto', 'justo', 'lavar', 'lento', 'línea', 'marca', 'marzo', 'media', 'mejor', 'mente', 'meses', 'miedo', 'miedo', 'migas', 'miles', 'mirar', 'mismo', 'nacer', 'norte', 'novio', 'nuevo', 'nuevo', 'nunca', 'padre', 'paseo', 'pecas', 'peces', 'pieza', 'plana', 'plano', 'poder', 'poema', 'punto', 'punto', 'regla', 'sabía', 'saltó', 'saltó', 'siglo', 'signo', 'sobre', 'sueño', 'tallo', 'tapar', 'temor', 'tengo', 'valor', 'veces', 'venir', 'vista', 'visto'], [70, 'ajuste', 'amplio', 'anillo', 'arroyo', 'azúcar', 'blanco', 'boceto', 'brocha', 'básico', 'cambio', 'cambio', 'camino', 'camisa', 'camión', 'choque', 'crecer', 'criado', 'cuándo', 'cómodo', 'dentro', 'deriva', 'dibujo', 'dragón', 'escasa', 'espera', 'estufa', 'figura', 'flauta', 'flores', 'fluido', 'frotar', 'fuerte', 'fuerza', 'ganado', 'grande', 'grande', 'grillo', 'hablar', 'hablar', 'huelga', 'hélice', 'listos', 'mancha', 'mancha', 'montón', 'método', 'número', 'pasado', 'pasado', 'patrón', 'pensar', 'prueba', 'prueba', 'pueblo', 'página', 'quieto', 'rastro', 'rugido', 'rápida', 'sentir', 'tierra', 'trampa', 'tratar', 'triste', 'varios', 'verano', 'verdad', 'viajes', 'vieira', 'áspero'], [48, 'acuerdo', 'agujero', 'alegría', 'apretar', 'armario', 'barrido', 'calamar', 'camilla', 'canción', 'cerebro', 'ciruela', 'consejo', 'cuidado', 'derrame', 'después', 'difícil', 'ejemplo', 'embargo', 'energía', 'espacio', 'excepto', 'hechizo', 'hombres', 'injerto', 'mezclar', 'muestra', 'nadando', 'negocio', 'nuestro', 'ocultar', 'orgullo', 'pequeño', 'piernas', 'pizarra', 'plantas', 'pájaros', 'párrafo', 'rebuzno', 'rejilla', 'repente', 'sangrar', 'sentido', 'sugirió', 'sílabas', 'todavía', 'trabajo', 'vestido', 'volante'], [46, 'adjetivo', 'cacarear', 'calabaza', 'caliente', 'comienzo', 'conjunto', 'continuo', 'cultivos', 'defender', 'desierto', 'detalles', 'entender', 'entonces', 'escisión', 'escuchar', 'estación', 'estirada', 'fábricas', 'garabato', 'gobierno', 'insectos', 'interior', 'ladrillo', 'largarse', 'linterna', 'mantener', 'merienda', 'millones', 'montañas', 'palabras', 'preparar', 'problema', 'profesor', 'programa', 'proteger', 'proyecto', 'príncipe', 'recordar', 'registro', 'retorcer', 'ronquido', 'silencio', 'soldados', 'símbolos', 'valiente', 'voluntad'], [30, 'alimentos', 'alimentos', 'argumento', 'arrebatar', 'brillante', 'brillante', 'cabriolas', 'compuesto', 'constante', 'corriente', 'cualquier', 'derribado', 'diferente', 'dirección', 'eléctrica', 'encuentra', 'garabatos', 'generales', 'habilidad', 'industria', 'moléculas', 'pendiente', 'preguntas', 'problemas', 'productos', 'rebajarse', 'respuesta', 'resultado', 'sentencia', 'subrayado'], [15, 'campesinos', 'desarrollo', 'determinar', 'diferencia', 'golondrina', 'incorrecto', 'lentamente', 'movimiento', 'necesarias', 'presidente', 'pronunciar', 'quemaduras', 'rociadores', 'sustancias', 'zapatillas']] pysiogame-1.30.811/languages/word_lists/de_di.py0000644000175000017500000001060412201770060020521 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are a naive translation of a part of most commonly used words in English #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time the list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating the English version #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in German or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #If you have a better list please send it to me and I will format it and add it to the game. #this is a very naive translation from google translate - only resorted and counted. di = [[22, 'auf', 'bat', 'bär', 'die', 'für', 'gab', 'ihr', 'ihr', 'kam', 'lkw', 'mit', 'nie', 'pro', 'rot', 'sah', 'tag', 'tot', 'tut', 'vor', 'was', 'weg', 'zug'], [42, 'aber', 'acht', 'auto', 'bach', 'bett', 'bild', 'bild', 'blau', 'dann', 'dorf', 'dort', 'feld', 'ging', 'hang', 'haut', 'hell', 'herd', 'hier', 'idee', 'klar', 'korn', 'loch', 'mehr', 'mund', 'muss', 'märz', 'nach', 'noch', 'obst', 'ohne', 'rand', 'raum', 'rost', 'satz', 'sinn', 'spur', 'tuch', 'vieh', 'wenn', 'wert', 'zahl', 'zwei'], [63, 'alles', 'außer', 'bahre', 'beine', 'berge', 'beste', 'blick', 'blume', 'bluse', 'blüte', 'breit', 'brett', 'damit', 'essen', 'essen', 'etwas', 'fisch', 'flach', 'fleck', 'flöte', 'geist', 'glanz', 'glatt', 'heute', 'hören', 'hören', 'innen', 'jeder', 'jedes', 'jetzt', 'junge', 'klack', 'klaue', 'klein', 'lager', 'lesen', 'linie', 'monat', 'mutig', 'neben', 'prinz', 'punkt', 'reise', 'sagte', 'schön', 'sechs', 'sehen', 'seite', 'spion', 'steil', 'stich', 'stolz', 'stück', 'tafel', 'tropf', 'unser', 'vater', 'vögel', 'wiege', 'worte', 'wüste', 'zweig', 'ärger'], [69, 'absatz', 'andere', 'andere', 'anders', 'anfang', 'bauern', 'beweis', 'bitten', 'blumen', 'bluten', 'dessen', 'drache', 'einmal', 'falsch', 'fangen', 'flamme', 'flotte', 'fragen', 'frosch', 'furcht', 'furcht', 'gehirn', 'gehört', 'geruch', 'gleich', 'grafik', 'großen', 'großen', 'halten', 'klippe', 'kommen', 'krippe', 'krümel', 'können', 'locker', 'mantel', 'metall', 'muster', 'männer', 'nichts', 'nichts', 'norden', 'rühren', 'schiff', 'schlaf', 'schlag', 'selbst', 'selbst', 'selten', 'silben', 'skizze', 'sommer', 'spruch', 'statik', 'stetig', 'stille', 'streik', 'stärke', 'suchen', 'traube', 'triste', 'waffen', 'wandel', 'werden', 'wieder', 'winden', 'wusste', 'zucker', 'zurück'], [41, 'antwort', 'auslauf', 'aussage', 'bleiben', 'brachte', 'energie', 'entwurf', 'füllung', 'gackern', 'geboren', 'gedicht', 'gefühlt', 'gemacht', 'gesehen', 'gestalt', 'gewicht', 'glauben', 'klammer', 'knurren', 'langsam', 'langsam', 'mehrere', 'methode', 'nörgler', 'pflaume', 'schrank', 'schroff', 'schwamm', 'starren', 'stengel', 'strumpf', 'stunden', 'symbole', 'südlich', 'tänzeln', 'vorhang', 'wachsen', 'waschen', 'wichtig', 'zeichen', 'zeichen'], [38, 'adjektiv', 'ausdruck', 'befindet', 'beispiel', 'bewegung', 'blättern', 'entdeckt', 'erdbeere', 'ergebnis', 'erinnern', 'erwarten', 'fabriken', 'flugzeug', 'geworden', 'grimmige', 'handlung', 'insekten', 'kleidung', 'kriechen', 'kulturen', 'manchmal', 'moleküle', 'pflanzen', 'produkte', 'programm', 'richtung', 'schlanke', 'schreien', 'schwalbe', 'schützen', 'soldaten', 'splitter', 'sprechen', 'sprechen', 'tausende', 'wahrheit', 'zusammen', 'zwischen'], [33, 'angehoben', 'angezeigt', 'aufregend', 'behandeln', 'besonders', 'bestimmen', 'bräutigam', 'differenz', 'erfahrung', 'gekritzel', 'gemeinsam', 'gemütlich', 'gestreckt', 'industrie', 'innerhalb', 'kontrolle', 'millionen', 'notwendig', 'pantoffel', 'plötzlich', 'präsident', 'regierung', 'reichlich', 'schaukeln', 'schnappen', 'schrubben', 'schwierig', 'stationär', 'verderben', 'verlassen', 'verstehen', 'weiterhin', 'zeichnung'], [12, 'allgemeine', 'entwickelt', 'feuerstein', 'halskrause', 'herrschaft', 'schnarchen', 'substanzen', 'verbindung', 'vereinbart', 'verstopfen', 'vorsichtig', 'wörterbuch']] pysiogame-1.30.811/languages/word_lists/__init__.py0000644000175000017500000000003012201770060021204 0ustar tigertiger# -*- coding: utf-8 -*- pysiogame-1.30.811/languages/word_lists/pl_di.py0000644000175000017500000003065212201770060020551 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are mainly most commonly used words in English + some other words #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating this #the code at the end would format/sort etc. a mixed list of words with different lenghts. - add , between the sub-list (or if using python3 use the print(row, end=', '). #ta lista jest bezpośrednim tłumaczeniem z angielskiego przy pomocy google translate - usunięte duplikaty, nie przetłumaczone słowa i przesortowana. di = [[61, 'akt', 'ale', 'ani', 'bez', 'boi', 'być', 'coś', 'cud', 'czy', 'dać', 'dał', 'dno', 'dom', 'dwa', 'dym', 'dół', 'gaz', 'gra', 'ich', 'jak', 'jej', 'już', 'jęk', 'koc', 'kot', 'koń', 'kto', 'kup', 'kąt', 'luz', 'lód', 'maj', 'moc', 'mój', 'nic', 'nie', 'nić', 'niż', 'nos', 'ona', 'oni', 'pan', 'pas', 'pić', 'pod', 'raz', 'rok', 'ryk', 'róg', 'sam', 'sen', 'się', 'snu', 'sos', 'sto', 'syn', 'sęk', 'tak', 'typ', 'wąż', 'źle'] ,[128, 'albo', 'baza', 'blef', 'blok', 'brać', 'brąz', 'buty', 'było', 'były', 'cała', 'cena', 'chcę', 'cios', 'ciąg', 'czas', 'czuć', 'czuł', 'dość', 'drut', 'duch', 'duma', 'dużo', 'duży', 'dzyń', 'fakt', 'fale', 'figa', 'flet', 'grać', 'góry', 'głos', 'inne', 'inny', 'jego', 'jeść', 'klan', 'klej', 'klif', 'klin', 'klub', 'koło', 'krab', 'kraj', 'krok', 'król', 'ktoś', 'kula', 'kurs', 'lasu', 'lato', 'lewo', 'linę', 'mapa', 'małe', 'mało', 'mały', 'małż', 'miał', 'mieć', 'mila', 'miły', 'mowa', 'może', 'mrok', 'mróz', 'musi', 'mąka', 'nici', 'noga', 'nogi', 'nowy', 'obcy', 'obok', 'oczy', 'ogon', 'okno', 'opis', 'owoc', 'ołów', 'padł', 'pani', 'para', 'pies', 'pisk', 'pięć', 'pled', 'poza', 'puch', 'pług', 'rama', 'rano', 'rasa', 'ruch', 'rura', 'ryba', 'rytm', 'ręce', 'ręka', 'sens', 'siła', 'skok', 'skos', 'spać', 'stać', 'suma', 'słup', 'taca', 'temu', 'tlen', 'trop', 'twój', 'tępy', 'tłum', 'usta', 'uszy', 'użyj', 'wada', 'waga', 'wiek', 'woda', 'wzór', 'zima', 'znak', 'złom', 'łódź', 'żaba', 'żona', 'żywo'] ,[219, 'akcja', 'biały', 'blask', 'brzęk', 'bęben', 'błoto', 'błysk', 'cegły', 'chleb', 'chwyt', 'ciało', 'cichy', 'cyfra', 'czaru', 'część', 'deska', 'dobry', 'dodaj', 'dolar', 'dowód', 'droga', 'drzwi', 'dumny', 'dusić', 'dzień', 'dziki', 'dzwon', 'długi', 'efekt', 'ekran', 'farba', 'firma', 'flaga', 'flota', 'gdzie', 'glina', 'gracz', 'grupa', 'grupy', 'grypa', 'gąbka', 'głowa', 'głowy', 'ilość', 'iskra', 'jajka', 'jasne', 'jasny', 'jazda', 'jeden', 'język', 'każdy', 'kiedy', 'kilka', 'klapa', 'klasa', 'klaun', 'klucz', 'kolor', 'kopia', 'koszt', 'końcu', 'kości', 'krowy', 'krzyk', 'krzyż', 'kupił', 'kwiat', 'kółka', 'latać', 'linia', 'marka', 'matka', 'mazać', 'minut', 'mięso', 'mleko', 'mniej', 'morze', 'mówić', 'mądry', 'młody', 'nagle', 'napar', 'naród', 'nasze', 'nauka', 'nawet', 'nazwa', 'niebo', 'niech', 'nigdy', 'niska', 'nocne', 'nosić', 'nosze', 'obraz', 'obrót', 'ogród', 'około', 'osiem', 'osoba', 'ostry', 'owady', 'palce', 'panna', 'parku', 'pazur', 'pchła', 'pewne', 'pełny', 'piegi', 'pieśń', 'pisze', 'plama', 'pobyt', 'pokój', 'potem', 'praca', 'prasa', 'prawo', 'przed', 'przód', 'ptaki', 'punkt', 'puste', 'płyta', 'ramię', 'razem', 'rondo', 'rosną', 'rosła', 'ruszt', 'rzeka', 'równy', 'różne', 'rękaw', 'sanki', 'serce', 'silny', 'skala', 'skała', 'sklep', 'skóry', 'skąpy', 'smuga', 'sobie', 'sonda', 'stado', 'stary', 'stała', 'stało', 'stały', 'suchy', 'szafa', 'szare', 'szary', 'szefa', 'sześć', 'szkic', 'szkło', 'szyna', 'słaby', 'słowa', 'takie', 'temat', 'teraz', 'trawa', 'tulić', 'tutaj', 'tułów', 'twarz', 'tylko', 'uczyć', 'ulewa', 'ulica', 'umysł', 'urwis', 'urząd', 'uwaga', 'uważa', 'ważny', 'wiatr', 'widok', 'wiele', 'wieża', 'winić', 'wolny', 'wrona', 'wujek', 'wybór', 'wydać', 'wynik', 'wypas', 'wyspa', 'wziął', 'wzrok', 'włosy', 'zapis', 'zboże', 'zegar', 'ziemi', 'zimno', 'znany', 'zwany', 'ząbek', 'złoty', 'łaska', 'łatwy', 'łyżkę', 'łyżwy', 'ślepy', 'śmiał', 'śnieg', 'śruba', 'świat', 'żuraw', 'życie', 'żółty'] ,[227, 'bardzo', 'biedny', 'biznes', 'blisko', 'bluzka', 'bogaty', 'bulion', 'będzie', 'chcieć', 'chmura', 'chusta', 'chwała', 'chylić', 'ciemny', 'cienki', 'ciepło', 'ciężki', 'czarne', 'czarny', 'czekać', 'cztery', 'czysty', 'czytać', 'często', 'daleko', 'deszcz', 'dobrze', 'dolina', 'dostał', 'drewno', 'drzewa', 'drzewo', 'dzieci', 'dziura', 'dziwne', 'dzięki', 'dźwięk', 'gorąco', 'gotowy', 'groszy', 'gładki', 'głośny', 'główny', 'jabłko', 'jednak', 'kaczor', 'kapłan', 'klamra', 'klepać', 'klimat', 'koniec', 'korona', 'korzeń', 'krakać', 'kryzys', 'krzyża', 'krótki', 'książę', 'kwiaty', 'lekarz', 'lekkie', 'lepiej', 'lepkie', 'liczba', 'liczyć', 'litery', 'ludzie', 'ludzki', 'marzec', 'metoda', 'miasto', 'miotłę', 'miękki', 'miłość', 'modlić', 'muzyka', 'myślał', 'należą', 'napisz', 'obecny', 'obiekt', 'obszar', 'oddech', 'odkrył', 'odpływ', 'odzież', 'ogólne', 'ojciec', 'opieka', 'osiadł', 'osobny', 'papier', 'partia', 'parzyć', 'pastel', 'pasuje', 'pewien', 'pełzać', 'piękne', 'piętro', 'plemię', 'plytki', 'podróż', 'poemat', 'pogoda', 'pomnik', 'ponury', 'postać', 'poszło', 'powoli', 'powrót', 'powódż', 'poziom', 'połysk', 'pranie', 'prawda', 'prawie', 'precel', 'proces', 'prosty', 'proszę', 'przodu', 'pstrąg', 'północ', 'płacić', 'płaska', 'płatki', 'płynna', 'pływak', 'pływać', 'pływał', 'raczej', 'raport', 'reszta', 'rodzaj', 'rozmaz', 'rządów', 'sekcja', 'siebie', 'siedem', 'silnik', 'skleić', 'skrypt', 'skuter', 'spacer', 'spadek', 'spisek', 'sportu', 'stacja', 'statek', 'strach', 'strajk', 'strona', 'strony', 'surowe', 'sweter', 'sylaby', 'szalik', 'szansa', 'szkoła', 'szopka', 'szpieg', 'sztuka', 'szybko', 'sądzić', 'sławny', 'służyć', 'taniec', 'trochę', 'trudny', 'trzask', 'trzeba', 'trąbka', 'twardy', 'upadek', 'uprawy', 'użycia', 'wielki', 'wioska', 'wiosna', 'więcej', 'wojsko', 'wschód', 'wspiął', 'wszedł', 'wydaje', 'wykres', 'wyrwać', 'wysoki', 'wyślij', 'wzrost', 'wąchać', 'własna', 'zabawa', 'zachód', 'zacisk', 'zaczął', 'zaimek', 'zajęty', 'zakres', 'zapach', 'zastaw', 'zawsze', 'zdanie', 'zespół', 'zestaw', 'zgrzyt', 'ziarno', 'ziemia', 'zmiana', 'zrobić', 'zrzęda', 'zwykle', 'zwykły', 'złamać', 'złamał', 'złapać', 'łabędź', 'ślimak', 'śliska', 'śliwka', 'śmigło', 'śpiący', 'środka', 'świerk', 'świeże', 'żelazo'] ,[177, 'bawełna', 'bodziec', 'brązowy', 'budować', 'budynek', 'cebulka', 'centrum', 'chociaż', 'chodził', 'chrapać', 'chronić', 'cieszyć', 'czasami', 'czaszka', 'dodatek', 'dostawa', 'dotacja', 'dziecko', 'dziobek', 'długość', 'ekspres', 'energii', 'fabryki', 'frakcja', 'gałązka', 'gniazdo', 'godzina', 'gwiazda', 'hamulec', 'hodowli', 'interes', 'jeszcze', 'jezioro', 'kapitan', 'kapitał', 'kobiece', 'kobieta', 'kobiety', 'kolumna', 'komórki', 'kołysać', 'kołyski', 'kościół', 'krawędź', 'krwawić', 'książka', 'księżyc', 'kształt', 'których', 'kucharz', 'latarka', 'maleńka', 'maszynę', 'materia', 'melodia', 'miejsce', 'miesiąc', 'mnóstwo', 'mosiądz', 'możliwe', 'nagroda', 'napawać', 'nasiona', 'odcinek', 'oddział', 'odległy', 'odmiana', 'odważny', 'odziany', 'oglądać', 'okruchy', 'okrągły', 'ostatni', 'oznacza', 'patelni', 'piszczą', 'planeta', 'planety', 'plaster', 'podczas', 'podmuch', 'podobny', 'podpiec', 'podróże', 'podskok', 'podział', 'pokazać', 'pokryty', 'pominąć', 'poniżej', 'posypać', 'poważne', 'powiedz', 'powolny', 'powyżej', 'położyć', 'poślizg', 'produkt', 'projekt', 'przeciw', 'przyjść', 'pułapka', 'pułapki', 'pytania', 'pytanie', 'później', 'płaszcz', 'płomień', 'rodzina', 'rolnicy', 'rozmiar', 'roślina', 'rośliny', 'rysunek', 'również', 'równiny', 'różnica', 'samolot', 'sekunda', 'siostra', 'skoczył', 'skorupa', 'skrobia', 'skręcać', 'spotkać', 'sprawdź', 'stadion', 'stracił', 'strumyk', 'symbole', 'szalony', 'szczery', 'szeroka', 'szeroki', 'szmatki', 'słownik', 'słuchać', 'słyszeć', 'tablica', 'trzpień', 'trzymaj', 'trzymać', 'trójkąt', 'tydzień', 'tysiące', 'tłuszcz', 'uczucie', 'uruchom', 'ustalić', 'usterka', 'uśmiech', 'warkocz', 'wartość', 'warunki', 'wieczny', 'wieczór', 'wkrótce', 'wskazać', 'wspólny', 'wtyczka', 'wymawia', 'wysłane', 'wzgórze', 'wędrują', 'zamiast', 'zarówno', 'zawiera', 'zgadnąć', 'zielony', 'zjechał', 'znaleźć', 'związek', 'złamane', 'ścianie', 'średnim', 'światło', 'żołądek'] ,[113, 'aktualny', 'artykuły', 'bazgroły', 'chłopiec', 'czerwony', 'czynniki', 'człowiek', 'dlaczego', 'dmuchnął', 'dołączył', 'durszlak', 'dyskusja', 'dziesięć', 'elementy', 'gdakanie', 'głębokie', 'historia', 'jaskółka', 'jedzenie', 'kapelusz', 'kichanie', 'kierunek', 'kontrola', 'krzemień', 'krzyknął', 'metalowe', 'modlitwa', 'muszelka', 'nadzieja', 'najmniej', 'napisane', 'naprawdę', 'następny', 'naukowcy', 'niektóre', 'niszczyć', 'oddziały', 'odwrotny', 'osiągnął', 'oszustem', 'otrzymał', 'pamiętam', 'pantofel', 'paragraf', 'pierwszy', 'pochodni', 'początek', 'pojechał', 'pokazane', 'poleciał', 'pomiędzy', 'ponieważ', 'poprawny', 'poruszyć', 'powinien', 'powtarza', 'południe', 'praktyka', 'produkty', 'profesor', 'przemysł', 'przepływ', 'przykład', 'prędkość', 'pustynia', 'północne', 'płyniemy', 'równanie', 'samochód', 'siedział', 'siedziba', 'siedzieć', 'skrzydeł', 'sprzedać', 'sprzęgło', 'spódnica', 'stabilny', 'stocznia', 'straszyć', 'strumień', 'strzałka', 'strzemię', 'studenci', 'sukienka', 'szczotka', 'szczupły', 'szprychy', 'towarowe', 'urodzony', 'urzędnik', 'wcześnie', 'wewnątrz', 'wiedział', 'wiedzieć', 'wszystko', 'wybrzeże', 'wydawało', 'wyjaśnić', 'wypalone', 'wzrośnie', 'własność', 'zachodni', 'zaklęcia', 'zapasowy', 'zaufanie', 'zdzierać', 'zlepiają', 'znajduje', 'zobaczyć', 'zostawić', 'zraszacz', 'zszywacz', 'związany'] ,[77, 'czasownik', 'dokładnie', 'dopasować', 'dorosłego', 'drukowane', 'elegancki', 'jednostka', 'kiełkować', 'kompletna', 'konieczne', 'kroplówka', 'kręgosłup', 'mieszanki', 'możliwość', 'najlepszy', 'naturalny', 'niebieski', 'obietnica', 'oczekiwać', 'odpowiedź', 'odwiedzić', 'ostrożnie', 'pieniądze', 'pierścień', 'pociągnął', 'polowanie', 'potomstwa', 'powietrze', 'powitalny', 'pozostaje', 'prezydent', 'produkcji', 'prowadził', 'przeszedł', 'przyczyna', 'przynieść', 'przyniósł', 'przypadek', 'przyszedł', 'przytulny', 'pęknięcie', 'rozumiesz', 'rozwiązać', 'rumieniec', 'specjalny', 'spożywcze', 'szczegóły', 'szczelina', 'szlifować', 'szorstkim', 'słodzenia', 'słyszałem', 'truskawka', 'uderzenie', 'udowodnić', 'warczenie', 'wciśnięty', 'widziałem', 'wiewiórka', 'winogrona', 'winogrono', 'większość', 'wspaniały', 'wyciągnąć', 'wyciągnął', 'wyrażenie', 'zamrożone', 'zapowiedź', 'zbudowany', 'zderzenie', 'zniesiony', 'zszywanie', 'zwierzęta', 'zwłaszcza', 'ćwiczenia', 'śpiewania', 'żołnierzy'] ,[57, 'bezpieczny', 'ciężarówka', 'cząsteczki', 'członkowie', 'deklaracja', 'dziesiętny', 'dziewczyny', 'energiczny', 'faktycznie', 'kliknięcie', 'kwadratowa', 'materiałem', 'nakrzyczeć', 'nauczyciel', 'niedźwiedź', 'nowoczesny', 'obserwować', 'podzielone', 'porównanie', 'powiedział', 'powiedzieć', 'pozdrawiam', 'przeglądać', 'przestrzeń', 'przeszczep', 'przeszłość', 'przyjaciel', 'przyjechał', 'przyrostek', 'przystawki', 'roszczenie', 'rozgwiazda', 'rozlewania', 'rozwinięte', 'rzeczownik', 'rękawiczka', 'samogłoskę', 'silniejszy', 'skanowanie', 'spojrzenie', 'spuchnięta', 'spółgłoska', 'strumykiem', 'stworzenie', 'substancje', 'szczęśliwy', 'szlachetny', 'uzgodniony', 'uśmiechnął', 'wszystkich', 'wypełnione', 'wypróbować', 'zadowolony', 'zamrożenie', 'zamówienie', 'zawieszona', 'świerszcza'] ] """ a = 0 for each in mixed_list_of_words: if len(each)>a: a = len(each) word_sets = [[] for i in range(a)] for each in mixed_list_of_words: b = len(each) word_sets[b-1].append(each) for each in word_sets: each.sort() a = len(each) row = [] row.append(a) row.extend(each) print(row) """ pysiogame-1.30.811/languages/word_lists/fi_di.py0000644000175000017500000001116312201770060020530 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are a naive translation of a part of most commonly used words in English #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time the list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating the English version #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in Finnish or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #If you have a better list please send it to me and I will format it and add it to the game. #this is a very naive translation from google translate - only resorted and counted di = [[12, 'hän', 'iho', 'iso', 'isä', 'kun', 'maa', 'nyt', 'ohi', 'sai', 'syö', 'toi', 'työ'], [32, 'alas', 'alku', 'ansa', 'arvo', 'auto', 'haju', 'hyvä', 'itse', 'juna', 'jätä', 'kala', 'kesä', 'kone', 'kuva', 'kylä', 'käsi', 'levy', 'meni', 'mikä', 'muut', 'näki', 'ohut', 'pala', 'pidä', 'puro', 'runo', 'sama', 'suun', 'tapa', 'tule', 'tuli', 'usko'], [80, 'aikoo', 'aivot', 'antoi', 'aseet', 'asema', 'ehdot', 'esiin', 'harja', 'hidas', 'huilu', 'huopa', 'ilman', 'jalat', 'jonka', 'juoni', 'kaksi', 'kohta', 'kohti', 'korsi', 'kukka', 'kulta', 'kuule', 'kuuli', 'kuusi', 'kyllä', 'kysyi', 'laaja', 'laiva', 'lakko', 'laulu', 'lause', 'liesi', 'liike', 'lukea', 'luumu', 'malli', 'matka', 'mieli', 'muoto', 'mutta', 'neste', 'nokka', 'nopea', 'paino', 'paras', 'pauke', 'pelko', 'pestä', 'pieni', 'pihvi', 'piste', 'poika', 'puhua', 'pysyä', 'päivä', 'reikä', 'sanat', 'sanoi', 'seimi', 'selaa', 'sinun', 'sähkö', 'sänky', 'tahra', 'tavua', 'tehty', 'testi', 'tiesi', 'tiili', 'tulee', 'tulos', 'tunne', 'tyhjä', 'vakaa', 'verta', 'vielä', 'viiva', 'vuoto', 'vähän', 'väärä'], [78, 'aineet', 'grilli', 'harmaa', 'hoitaa', 'häipyä', 'jatkaa', 'joskus', 'jotain', 'juoksi', 'jyrkkä', 'kaappi', 'kaavio', 'kaikki', 'kangas', 'kanssa', 'karhea', 'karjaa', 'kasvit', 'kaunis', 'kenttä', 'kerran', 'kiilto', 'kirkas', 'kytkin', 'lattia', 'lausua', 'liekki', 'linnut', 'liukas', 'löysää', 'maissi', 'marssi', 'matala', 'meidän', 'merkki', 'miehet', 'mitään', 'muutos', 'nauhat', 'niellä', 'nukkua', 'numero', 'nähnyt', 'paarit', 'painaa', 'paitsi', 'peikko', 'pilata', 'pusero', 'putken', 'rengas', 'rohkea', 'ruokaa', 'saalis', 'siellä', 'sileää', 'sitten', 'sokeri', 'suunta', 'synkkä', 'sääntö', 'taitoa', 'tiedot', 'tiukka', 'toinen', 'totuus', 'tukkia', 'tänään', 'tärkeä', 'täytyy', 'täällä', 'useita', 'vaikea', 'valmis', 'vedota', 'viitta', 'vuoret', 'ylpeys'], [50, 'aavikko', 'alentua', 'crumbia', 'ehdotti', 'enemmän', 'energia', 'etelään', 'hyppäsi', 'hyökätä', 'jälkeen', 'kalmari', 'kokeilu', 'kokemus', 'koskaan', 'kuollut', 'kävellä', 'leikata', 'luonnos', 'luvulla', 'metalli', 'milloin', 'muistaa', 'odottaa', 'ohjelma', 'ongelma', 'piikivi', 'pisamia', 'polttaa', 'potkuri', 'prinssi', 'purista', 'päättää', 'raastaa', 'röyhelö', 'sekoita', 'siepata', 'sisällä', 'sivulle', 'sokkona', 'tiputus', 'todiste', 'tohveli', 'vahvuus', 'vakooja', 'vastaus', 'välillä', 'yhdiste', 'yleinen', 'ymmärrä', 'ärjäisy'], [39, 'hallitus', 'hedelmät', 'hitaasti', 'jokainen', 'kaluston', 'kasvavat', 'katsella', 'kehdosta', 'korostaa', 'koukerot', 'kriketti', 'kuorsata', 'kuuntele', 'lausunto', 'mansikka', 'ongelmia', 'paikalla', 'pelottaa', 'piirtäen', 'punainen', 'reunalla', 'sammakko', 'seuraava', 'skannaus', 'sprintti', 'sulhasen', 'suojella', 'syntynyt', 'tutkijat', 'tyhjästä', 'vaatteet', 'valvonta', 'varrella', 'venyttää', 'verhottu', 'vieressä', 'välipala', 'yhteinen', 'yhtäkkiä'], [28, 'edustavat', 'erilainen', 'hajoamaan', 'hiljainen', 'huoneessa', 'jäljittää', 'kahdeksan', 'kaltevuus', 'keinuttaa', 'kotkottaa', 'kuukautta', 'laitokset', 'löydetään', 'menetelmä', 'miljoonaa', 'mörökölli', 'näytetään', 'runsaasti', 'sanakirja', 'sivuliike', 'säikähtää', 'tehtaissa', 'tuhansien', 'tuijottaa', 'tunnukset', 'uudelleen', 'venytetty', 'viruminen'], [14, 'adjektiivi', 'hyväksytty', 'hyönteisiä', 'jännittävä', 'kehittynyt', 'liitutaulu', 'paikallaan', 'professori', 'ristiriita', 'sotilaiden', 'sprinkleri', 'teollisuus', 'tuotteiden', 'varastossa']] pysiogame-1.30.811/languages/word_lists/pt_di.py0000644000175000017500000001147412201770060020562 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are a naive translation of a part of most commonly used words in English #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time the list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating the English version #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in Portugese or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #If you have a better list please send it to me and I will format it and add it to the game. #this is a very naive translation from google translate - only resorted and counted di = [[20, 'com', 'deu', 'dia', 'ela', 'faz', 'foi', 'ler', 'mão', 'pai', 'por', 'que', 'sem', 'seu', 'sul', 'uma', 'uva', 'ver', 'vez', 'vir', 'viu'], [51, 'acho', 'algo', 'anel', 'aqui', 'azul', 'bela', 'bico', 'bife', 'boca', 'cada', 'cama', 'capa', 'cega', 'chão', 'cima', 'cujo', 'deve', 'dois', 'figo', 'flor', 'flor', 'gado', 'hoje', 'lado', 'liso', 'lula', 'maca', 'mais', 'medo', 'meia', 'nada', 'nada', 'novo', 'oito', 'ouro', 'pano', 'para', 'pele', 'peso', 'ramo', 'rude', 'sapo', 'seis', 'sono', 'talo', 'trem', 'tubo', 'tudo', 'urso', 'veio', 'zero'], [91, 'agora', 'ainda', 'assim', 'atrás', 'avião', 'baixo', 'berço', 'berço', 'blusa', 'borda', 'bravo', 'campo', 'carro', 'chama', 'claro', 'comer', 'comum', 'disse', 'entre', 'então', 'falar', 'feito', 'ficar', 'fogão', 'folga', 'forma', 'força', 'frase', 'frota', 'fruta', 'garra', 'greve', 'horas', 'idéia', 'junto', 'justo', 'largo', 'lasca', 'lavar', 'lento', 'linha', 'magro', 'marca', 'março', 'mente', 'meses', 'mesmo', 'mesmo', 'mexer', 'milho', 'miolo', 'nadou', 'navio', 'negro', 'noivo', 'norte', 'nosso', 'nunca', 'olhar', 'olhar', 'olhar', 'outro', 'outro', 'ouvir', 'ouvir', 'ouvir', 'pediu', 'pedra', 'pegar', 'peixe', 'poema', 'ponto', 'ponto', 'porém', 'prova', 'regra', 'rolar', 'ronco', 'roupa', 'rusga', 'sabia', 'sinal', 'susto', 'tenho', 'terra', 'teste', 'traço', 'valor', 'verão', 'vezes', 'visto'], [62, 'aldeia', 'ameixa', 'aperto', 'açúcar', 'babado', 'branco', 'braços', 'brilho', 'buraco', 'cheiro', 'choque', 'deixar', 'dentro', 'dentro', 'deriva', 'dragão', 'enredo', 'errado', 'esboço', 'espião', 'exceto', 'flauta', 'flores', 'gerais', 'grampo', 'grande', 'grelha', 'homens', 'hélice', 'início', 'mancha', 'manter', 'melhor', 'menino', 'método', 'música', 'nasceu', 'número', 'padrão', 'parado', 'pedaço', 'pernas', 'pincel', 'pronto', 'página', 'quando', 'quarto', 'quente', 'roubar', 'rápida', 'saltou', 'sardas', 'século', 'tijolo', 'tratar', 'triste', 'trolls', 'trouxe', 'viagem', 'vieira', 'voltar', 'zurrar'], [56, 'alegria', 'armário', 'chinelo', 'cortina', 'crescer', 'cuidado', 'cérebro', 'desenho', 'deserto', 'devagar', 'difícil', 'direção', 'empinar', 'encosta', 'energia', 'entupir', 'enxerto', 'escasso', 'esperar', 'estação', 'esticar', 'estável', 'exemplo', 'feitiço', 'governo', 'gráfico', 'inicial', 'insetos', 'lembrar', 'líquido', 'maneira', 'milhões', 'morango', 'mudança', 'nascido', 'negócio', 'olheiro', 'orgulho', 'passado', 'passado', 'passeio', 'plantas', 'posição', 'rabisco', 'rabisco', 'repente', 'ribeiro', 'rosnado', 'sangrar', 'sentido', 'sentido', 'sugeriu', 'sílabas', 'verdade', 'vontade', 'íngreme'], [46, 'acordado', 'adjetivo', 'aspersão', 'assistir', 'assustar', 'balançar', 'caminhão', 'composto', 'conjunto', 'controle', 'conversa', 'culturas', 'defender', 'detalhes', 'diversos', 'elétrico', 'escaldar', 'esfregar', 'especial', 'esticado', 'estragar', 'fluência', 'fábricas', 'inclinar', 'lanterna', 'levantou', 'milhares', 'monótono', 'mostrado', 'palavras', 'precioso', 'preparar', 'problema', 'programa', 'projecto', 'proteger', 'príncipe', 'pássaros', 'qualquer', 'questões', 'resposta', 'seguindo', 'soldados', 'símbolos', 'trabalho', 'vermelho'], [21, 'alimentos', 'andorinha', 'armadilha', 'brilhante', 'cacarejar', 'condições', 'consoante', 'contorcer', 'diferente', 'diferença', 'folheados', 'indústria', 'moléculas', 'montanhas', 'movimento', 'problemas', 'resultado', 'tornar-se', 'varredura', 'varredura', 'vazamento'], [16, 'abundância', 'cientistas', 'declaração', 'descoberto', 'determinar', 'dicionário', 'habilidade', 'inclinação', 'localizada', 'necessário', 'precipício', 'presidente', 'principais', 'pronunciar', 'silenciosa', 'sublinhado']] pysiogame-1.30.811/languages/word_lists/en_us_di.py0000644000175000017500000003561012201770060021246 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are mainly most commonly used words in English + some other words #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time list is selected #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating this #the code at the end would format/sort etc. a mixed list of words with different lenghts. - add , between the sub-list (or if using python3 use the print(row, end=', '). #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable. di = [[114, 'act', 'add', 'age', 'ago', 'air', 'all', 'and', 'any', 'are', 'art', 'bad', 'bed', 'big', 'bit', 'box', 'boy', 'but', 'buy', 'can', 'car', 'cat', 'cry', 'cut', 'day', 'did', 'dog', 'dry', 'eat', 'end', 'far', 'few', 'fig', 'fit', 'flu', 'fly', 'for', 'fun', 'gas', 'get', 'got', 'had', 'has', 'hat', 'her', 'him', 'his', 'hit', 'hot', 'how', 'ice', 'its', 'job', 'key', 'law', 'lay', 'led', 'let', 'lie', 'lot', 'low', 'man', 'map', 'may', 'men', 'new', 'nor', 'not', 'now', 'off', 'old', 'one', 'our', 'out', 'own', 'pay', 'per', 'pry', 'put', 'ran', 'red', 'row', 'run', 'sat', 'saw', 'say', 'sea', 'see', 'set', 'she', 'sir', 'sit', 'six', 'ski', 'sky', 'son', 'spy', 'sum', 'sun', 'ten', 'the', 'too', 'top', 'try', 'two', 'use', 'war', 'was', 'way', 'who', 'why', 'win', 'yes', 'yet', 'you'], [381, 'able', 'also', 'area', 'arms', 'army', 'away', 'baby', 'back', 'ball', 'bank', 'base', 'bear', 'beat', 'been', 'bell', 'best', 'bill', 'blab', 'blew', 'blip', 'blob', 'blot', 'blow', 'blue', 'boat', 'body', 'book', 'born', 'both', 'bran', 'brat', 'bray', 'brew', 'brim', 'busy', 'came', 'care', 'case', 'city', 'clad', 'clam', 'clan', 'clap', 'claw', 'clay', 'clip', 'clod', 'clog', 'club', 'clue', 'cold', 'come', 'cook', 'cool', 'copy', 'corn', 'cost', 'cows', 'crab', 'crib', 'crop', 'crow', 'dark', 'deal', 'deep', 'does', 'done', 'door', 'down', 'drab', 'drag', 'draw', 'drew', 'drip', 'drop', 'drum', 'each', 'ears', 'east', 'easy', 'edge', 'eggs', 'else', 'even', 'ever', 'eyes', 'face', 'fact', 'fair', 'fall', 'farm', 'fast', 'fear', 'feel', 'feet', 'fell', 'felt', 'find', 'fine', 'fire', 'fish', 'five', 'flag', 'flap', 'flat', 'flaw', 'flea', 'flew', 'flex', 'flip', 'flop', 'flow', 'food', 'foot', 'four', 'free', 'frog', 'from', 'full', 'game', 'gave', 'girl', 'give', 'glad', 'glee', 'glob', 'glow', 'glue', 'gold', 'gone', 'good', 'grab', 'gram', 'gray', 'grew', 'grid', 'grim', 'grin', 'grip', 'grit', 'grow', 'grub', 'hair', 'halt', 'hand', 'hard', 'have', 'head', 'hear', 'heat', 'held', 'help', 'here', 'high', 'hill', 'hold', 'hole', 'home', 'hope', 'huge', 'idea', 'into', 'iron', 'just', 'keep', 'kept', 'kind', 'king', 'knew', 'know', 'lady', 'lake', 'land', 'last', 'lead', 'left', 'legs', 'less', 'life', 'like', 'line', 'list', 'live', 'long', 'look', 'lost', 'loud', 'love', 'made', 'main', 'make', 'many', 'mark', 'meat', 'meet', 'milk', 'mind', 'mine', 'miss', 'moon', 'more', 'most', 'move', 'much', 'must', 'name', 'near', 'need', 'next', 'nose', 'note', 'noun', 'once', 'only', 'open', 'over', 'page', 'pair', 'park', 'part', 'past', 'plan', 'play', 'plod', 'plot', 'plow', 'plug', 'plum', 'poem', 'pole', 'poor', 'pray', 'prod', 'prop', 'race', 'rain', 'read', 'rest', 'rich', 'ride', 'ring', 'rise', 'road', 'rock', 'room', 'root', 'rope', 'rose', 'rule', 'safe', 'said', 'sail', 'same', 'sand', 'save', 'scab', 'scan', 'scar', 'scat', 'seat', 'seen', 'sell', 'send', 'sent', 'ship', 'shop', 'show', 'side', 'sign', 'sing', 'size', 'skid', 'skin', 'skip', 'skit', 'slab', 'slam', 'slap', 'sled', 'slid', 'slim', 'slip', 'slit', 'slot', 'slow', 'slug', 'smog', 'snag', 'snap', 'snip', 'snob', 'snow', 'snug', 'soft', 'soil', 'some', 'song', 'soon', 'span', 'spat', 'spin', 'spot', 'spur', 'star', 'stay', 'stem', 'step', 'stew', 'stir', 'stop', 'such', 'sure', 'swam', 'swan', 'swap', 'swat', 'sway', 'swim', 'tail', 'take', 'talk', 'tall', 'team', 'tell', 'test', 'than', 'that', 'them', 'then', 'they', 'thin', 'this', 'thus', 'tied', 'time', 'tiny', 'told', 'tone', 'took', 'town', 'trap', 'tray', 'tree', 'trek', 'trim', 'trip', 'trot', 'true', 'tube', 'turn', 'type', 'unit', 'upon', 'verb', 'very', 'view', 'wait', 'wall', 'want', 'warm', 'wash', 'wear', 'week', 'well', 'went', 'were', 'west', 'what', 'when', 'wide', 'wife', 'wild', 'will', 'wind', 'wire', 'wish', 'with', 'wood', 'work', 'yard', 'your'], [499, 'about', 'above', 'after', 'again', 'ahead', 'allow', 'alone', 'along', 'among', 'angle', 'apple', 'asked', 'began', 'being', 'below', 'birds', 'black', 'blade', 'blame', 'blank', 'blast', 'blaze', 'bleat', 'bleed', 'bleep', 'blend', 'bless', 'blind', 'blink', 'block', 'blood', 'bloom', 'bluff', 'blunt', 'blush', 'board', 'bones', 'brace', 'braid', 'brain', 'brake', 'brand', 'brass', 'brave', 'brawl', 'bread', 'break', 'brick', 'bride', 'bring', 'brisk', 'broad', 'broil', 'broke', 'brood', 'brook', 'broom', 'broth', 'brown', 'brush', 'build', 'built', 'carry', 'catch', 'cause', 'cells', 'cents', 'chart', 'check', 'chief', 'child', 'clack', 'claim', 'clamp', 'clang', 'clash', 'clasp', 'class', 'clean', 'clear', 'cleat', 'clerk', 'click', 'cliff', 'climb', 'cling', 'clink', 'cloak', 'clock', 'clomp', 'close', 'cloth', 'cloud', 'clove', 'clown', 'cluck', 'clump', 'coast', 'color', 'could', 'count', 'crack', 'craft', 'crane', 'crash', 'crawl', 'crazy', 'creek', 'creep', 'cried', 'croak', 'crook', 'crops', 'cross', 'crowd', 'crown', 'crumb', 'crust', 'dance', 'draft', 'drain', 'drake', 'drank', 'drape', 'dread', 'dream', 'dress', 'drift', 'drill', 'drink', 'drive', 'droop', 'drove', 'early', 'earth', 'eight', 'enjoy', 'equal', 'every', 'field', 'fight', 'first', 'flake', 'flame', 'flare', 'flash', 'fleck', 'fleet', 'flesh', 'flick', 'fling', 'flint', 'float', 'flock', 'flood', 'floor', 'floss', 'flour', 'fluff', 'fluid', 'fluke', 'flunk', 'flush', 'flute', 'force', 'found', 'frail', 'frame', 'frank', 'freak', 'fresh', 'frill', 'frizz', 'front', 'frost', 'fruit', 'glare', 'glass', 'gleam', 'glide', 'gloat', 'globe', 'gloom', 'gloss', 'glove', 'grace', 'grade', 'graft', 'grain', 'grand', 'grant', 'grape', 'graph', 'grasp', 'grass', 'grate', 'grave', 'gravy', 'graze', 'great', 'greed', 'green', 'greet', 'grill', 'grime', 'grind', 'groan', 'groom', 'group', 'growl', 'grown', 'gruff', 'grump', 'guess', 'happy', 'heard', 'heart', 'heavy', 'horse', 'hours', 'house', 'human', 'known', 'large', 'later', 'learn', 'least', 'leave', 'level', 'light', 'major', 'march', 'match', 'maybe', 'means', 'metal', 'might', 'miles', 'money', 'mouth', 'music', 'never', 'night', 'north', 'ocean', 'often', 'order', 'other', 'paint', 'paper', 'party', 'piece', 'place', 'plaid', 'plain', 'plane', 'plank', 'plant', 'plate', 'plead', 'pleat', 'plink', 'plump', 'point', 'power', 'press', 'price', 'pride', 'print', 'prize', 'probe', 'proof', 'proud', 'prove', 'prowl', 'prune', 'quiet', 'quite', 'radio', 'ready', 'right', 'river', 'round', 'scald', 'scale', 'scalp', 'scamp', 'scare', 'scarf', 'scold', 'scoop', 'scoot', 'scope', 'score', 'scour', 'scout', 'scram', 'scrap', 'screw', 'scrub', 'scuba', 'scuff', 'seeds', 'sense', 'serve', 'seven', 'shall', 'shape', 'sharp', 'shoes', 'short', 'shown', 'sight', 'since', 'skate', 'skill', 'skirt', 'skull', 'skunk', 'slack', 'slant', 'slate', 'sleek', 'sleep', 'sleet', 'slept', 'slice', 'slick', 'slide', 'slime', 'sling', 'slope', 'slump', 'slush', 'smack', 'small', 'smart', 'smash', 'smear', 'smell', 'smile', 'smock', 'smoke', 'snack', 'snail', 'snake', 'snare', 'snarl', 'sneak', 'sniff', 'snoop', 'snore', 'snout', 'solve', 'sound', 'south', 'space', 'spare', 'spark', 'speak', 'spear', 'speck', 'speed', 'spell', 'spend', 'spent', 'spike', 'spill', 'spine', 'spire', 'split', 'spoil', 'spoke', 'spoon', 'sport', 'spout', 'spray', 'sprig', 'squat', 'squid', 'stack', 'staff', 'stage', 'stain', 'stair', 'stake', 'stale', 'stalk', 'stall', 'stamp', 'stand', 'stare', 'stars', 'start', 'state', 'steak', 'steal', 'steam', 'steel', 'steep', 'steer', 'stick', 'stiff', 'still', 'stilt', 'sting', 'stink', 'stock', 'stone', 'stood', 'stool', 'stoop', 'store', 'storm', 'story', 'stove', 'strap', 'straw', 'stray', 'strip', 'strum', 'study', 'style', 'sugar', 'swamp', 'swarm', 'sweat', 'sweep', 'sweet', 'swell', 'swept', 'swift', 'swine', 'swing', 'swish', 'swoop', 'table', 'terms', 'their', 'there', 'these', 'thick', 'thing', 'think', 'third', 'those', 'three', 'today', 'tools', 'total', 'touch', 'trace', 'track', 'trade', 'trail', 'train', 'tramp', 'trash', 'tread', 'treat', 'trees', 'tribe', 'trick', 'troll', 'tromp', 'troop', 'trout', 'truck', 'truly', 'trunk', 'trust', 'truth', 'uncle', 'under', 'until', 'value', 'visit', 'voice', 'vowel', 'watch', 'water', 'waves', 'where', 'which', 'while', 'white', 'whole', 'whose', 'wings', 'woman', 'women', 'words', 'world', 'would', 'write', 'wrong', 'wrote', 'years', 'young'], [241, 'across', 'action', 'afraid', 'agreed', 'almost', 'always', 'amount', 'answer', 'appear', 'around', 'became', 'become', 'before', 'behind', 'belong', 'beside', 'better', 'bleach', 'blonde', 'blouse', 'bottom', 'bought', 'braise', 'branch', 'breath', 'breeze', 'bridge', 'bright', 'broken', 'bronco', 'bronze', 'browse', 'bruise', 'called', 'cannot', 'cattle', 'caught', 'center', 'chance', 'change', 'choose', 'church', 'circle', 'closet', 'clutch', 'column', 'common', 'corner', 'cotton', 'course', 'cradle', 'crayon', 'create', 'crunch', 'desert', 'design', 'direct', 'doctor', 'dragon', 'during', 'effect', 'either', 'energy', 'engine', 'enough', 'entire', 'except', 'expect', 'family', 'famous', 'father', 'figure', 'filled', 'flight', 'flower', 'forest', 'freeze', 'friend', 'fright', 'fringe', 'frozen', 'garden', 'glance', 'glitch', 'grapes', 'grease', 'grouch', 'ground', 'grudge', 'inches', 'inside', 'island', 'itself', 'joined', 'jumped', 'killed', 'length', 'lifted', 'listen', 'little', 'matter', 'melody', 'method', 'middle', 'modern', 'moment', 'months', 'mother', 'nation', 'notice', 'number', 'object', 'office', 'oxygen', 'passed', 'people', 'period', 'person', 'phrase', 'picked', 'plains', 'planet', 'plants', 'player', 'please', 'pledge', 'plenty', 'plural', 'pounds', 'praise', 'prance', 'prayer', 'pretty', 'priest', 'prince', 'prison', 'pulled', 'pushed', 'raised', 'rather', 'really', 'reason', 'record', 'region', 'remain', 'report', 'result', 'return', 'rhythm', 'rolled', 'scarce', 'school', 'scorch', 'scrape', 'scrawl', 'scream', 'screen', 'script', 'scroll', 'second', 'seemed', 'should', 'silent', 'simple', 'single', 'sister', 'sketch', 'sleepy', 'sleeve', 'slight', 'slowly', 'smiled', 'smooth', 'smudge', 'snatch', 'sneeze', 'speech', 'spirit', 'splash', 'splint', 'sponge', 'sprain', 'sprang', 'sprawl', 'spread', 'spring', 'sprint', 'sprout', 'spruce', 'square', 'squash', 'squeak', 'squeal', 'squint', 'squirm', 'squirt', 'squish', 'stable', 'staple', 'starch', 'starve', 'statue', 'steady', 'stereo', 'sticky', 'stingy', 'stitch', 'strain', 'strand', 'streak', 'stream', 'street', 'strict', 'stride', 'strike', 'string', 'stripe', 'stroke', 'stroll', 'strong', 'struck', 'suffix', 'summer', 'supply', 'swatch', 'swerve', 'switch', 'system', 'though', 'toward', 'travel', 'trough', 'valley', 'walked', 'weight', 'wheels', 'window', 'winter', 'within', 'wonder', 'yellow'], [142, 'against', 'already', 'animals', 'another', 'arrived', 'because', 'believe', 'between', 'blanket', 'blossom', 'brother', 'brought', 'burning', 'capital', 'captain', 'century', 'certain', 'climate', 'climbed', 'clothes', 'company', 'compare', 'contain', 'control', 'correct', 'country', 'covered', 'cricket', 'current', 'decided', 'decimal', 'details', 'distant', 'divided', 'dollars', 'drawing', 'entered', 'evening', 'exactly', 'example', 'explain', 'express', 'factors', 'farmers', 'feeling', 'finally', 'fingers', 'flowers', 'forward', 'freight', 'friends', 'general', 'gravity', 'himself', 'history', 'however', 'hundred', 'hunting', 'include', 'insects', 'instead', 'laughed', 'letters', 'located', 'machine', 'measure', 'members', 'million', 'minutes', 'morning', 'natural', 'nothing', 'numeral', 'observe', 'outside', 'pattern', 'perhaps', 'picture', 'planets', 'prepare', 'present', 'pretzel', 'printed', 'problem', 'process', 'produce', 'product', 'program', 'project', 'promise', 'pronoun', 'protect', 'provide', 'quickly', 'reached', 'scallop', 'science', 'scooter', 'scraper', 'scratch', 'screech', 'section', 'settled', 'several', 'shouted', 'similar', 'skillet', 'slipper', 'snuggle', 'someone', 'special', 'squeeze', 'stadium', 'stapler', 'started', 'station', 'stirrup', 'stomach', 'strange', 'stretch', 'subject', 'suppose', 'surface', 'swallow', 'sweater', 'sweeten', 'swollen', 'symbols', 'teacher', 'thought', 'through', 'trouble', 'trumpet', 'usually', 'various', 'village', 'weather', 'western', 'whether', 'without', 'workers', 'written'], [76, 'actually', 'addition', 'although', 'anything', 'blizzard', 'branches', 'building', 'business', 'children', 'clothing', 'complete', 'compound', 'consider', 'describe', 'division', 'electric', 'elements', 'equation', 'everyone', 'exciting', 'exercise', 'finished', 'fraction', 'freckles', 'happened', 'increase', 'indicate', 'industry', 'interest', 'language', 'material', 'movement', 'northern', 'opposite', 'pleasant', 'position', 'possible', 'practice', 'practise', 'precious', 'prepared', 'princess', 'prisoner', 'probably', 'products', 'property', 'received', 'remember', 'repeated', 'scallion', 'scramble', 'scribble', 'sentence', 'separate', 'shoulder', 'soldiers', 'solution', 'southern', 'splendid', 'splinter', 'sprinkle', 'squirrel', 'starfish', 'stocking', 'straight', 'strainer', 'stranger', 'strength', 'stronger', 'struggle', 'students', 'suddenly', 'surprise', 'together', 'triangle', 'yourself'], [36, 'adjective', 'beautiful', 'beginning', 'carefully', 'consonant', 'continued', 'determine', 'developed', 'different', 'difficult', 'direction', 'factories', 'following', 'groceries', 'important', 'molecules', 'mountains', 'necessary', 'paragraph', 'president', 'principal', 'professor', 'pronounce', 'propeller', 'questions', 'represent', 'something', 'sometimes', 'sprinkler', 'statement', 'stretched', 'stretcher', 'suggested', 'syllables', 'thousands', 'underline'], [18, 'blackboard', 'conditions', 'dictionary', 'difference', 'discovered', 'especially', 'everything', 'experience', 'experiment', 'flashlight', 'government', 'particular', 'scientists', 'stationary', 'strawberry', 'substances', 'themselves', 'understand']] """ a = 0 for each in mixed_list_of_words: if len(each)>a: a = len(each) word_sets = [[] for i in range(a)] for each in mixed_list_of_words: b = len(each) word_sets[b-1].append(each) for each in word_sets: each.sort() a = len(each) row = [] row.append(a) row.extend(each) print(row) """ pysiogame-1.30.811/languages/word_lists/gr_di.py0000644000175000017500000005351712201770060020553 0ustar tigertiger# -*- coding: utf-8 -*- #this is a list of words used by the word builder and word maze games and possibly #other games built in the future #these words are a naive translation of a part of most commonly used words in English #in each sub-list in the list di first number is a number of words in the sublist #to aviod counting it every time the list is used in the #the sublists are consisting of words with len() of 3 - 10 #I think the way of going about internationalization here would be to create a new list #with words most commonly used in your language rather than translating the English version #I am not sure if they are appriopriate for children, but if anyone is interested we can try to built something more suitable or if you like you can try to edit this list - remove the words that you think are either not in Greek or are not suitable for under 10 years old children and send it back to the email address shown at the start of the game. #If you have a better list please send it to me and I will format it and add it to the game. #this is a very naive translation from google translate - only resorted and counted di = [[42, 'ένα', 'έξι', 'έξω', 'έως', 'ήδη', 'ήχο', 'ανά', 'από', 'για', 'δει', 'δεν', 'δύο', 'εδώ', 'ενώ', 'εσύ', 'ζει', 'ζωή', 'ζώα', 'και', 'καν', 'μας', 'μια', 'μου', 'νέα', 'ναι', 'που', 'πώς', 'ροή', 'σας', 'σκι', 'σου', 'της', 'τον', 'του', 'των', 'όλα', 'όλη', 'ότι', 'όχι', 'ύλη', 'ώμο', 'ώρα'], [153, 'άκρη', 'άλλα', 'άλλη', 'άλλο', 'άλμα', 'άρση', 'έλξη', 'έτσι', 'έχει', 'ήπια', 'ήρθε', 'ήταν', 'ίδια', 'ίδιο', 'ίσως', 'αέρα', 'αίμα', 'ακτή', 'αλλά', 'αντί', 'απλά', 'απλή', 'απλό', 'αργά', 'αρχή', 'αυγά', 'αυλή', 'αυτή', 'αυτό', 'αύρα', 'βήμα', 'βίδα', 'βαθύ', 'βαρύ', 'βόδι', 'γάλα', 'γάτα', 'γιος', 'γκρι', 'δέκα', 'είδε', 'είπε', 'είτε', 'είχε', 'εκεί', 'επτά', 'θέση', 'ιδέα', 'κάθε', 'κάτι', 'κάτω', 'κήπο', 'κακό', 'καλά', 'καλή', 'καρό', 'κατά', 'καφέ', 'κενό', 'κιλά', 'κλακ', 'κλικ', 'κλιπ', 'κρύο', 'λένε', 'λίγο', 'λαός', 'λόφο', 'λύση', 'μάζα', 'μέλη', 'μέσα', 'μήλο', 'μίνι', 'μαζί', 'μετά', 'μπλε', 'μωρό', 'μόνο', 'μύτη', 'νέοι', 'νήμα', 'νίκη', 'νερό', 'νησί', 'νύφη', 'νύχι', 'ξέρω', 'ξανά', 'ξύλο', 'οκτώ', 'ουλή', 'ουρά', 'ούτε', 'πάει', 'πάλη', 'πάνω', 'πάρα', 'πήγε', 'πήρε', 'πίσω', 'πανί', 'πολύ', 'ποσό', 'ποτέ', 'ποτό', 'πριν', 'πριν', 'προι', 'πρωί', 'πόδι', 'πόλη', 'πόλο', 'πότε', 'ρήμα', 'ρίζα', 'ριπή', 'σήμα', 'σκορ', 'στην', 'στυλ', 'σώμα', 'τάξη', 'τιμή', 'τους', 'τόσο', 'τότε', 'τώρα', 'φέτα', 'φίδι', 'φακό', 'φορά', 'φυλή', 'φυτά', 'φωνή', 'φύγε', 'χάρη', 'χέρι', 'χαλώ', 'χαρά', 'χώμα', 'χώρα', 'ψάρι', 'ψέμα', 'ψήνω', 'ψίχα', 'ψωμί', 'ψώρα', 'όλοι', 'όπλα', 'όπου', 'όπως', 'όρων'], [246, 'άγρια', 'άγριο', 'άλλος', 'άλογο', 'άμεση', 'άμμος', 'άμυλο', 'άνετο', 'άποψη', 'άχυρο', 'έγινε', 'έδωσε', 'έθεσε', 'έθνος', 'έκανε', 'έλαβε', 'έλατο', 'ένωσε', 'ένωση', 'έπεσε', 'έφερε', 'ήλιος', 'ήσυχο', 'ίδιοι', 'ίδιος', 'ίχνος', 'αέριο', 'αγάπη', 'αγόρι', 'αγώνα', 'αιτία', 'αιώνα', 'ακίδα', 'ακούω', 'ακόμα', 'ακόμη', 'αμβλύ', 'ανάσα', 'αξίας', 'αργός', 'ατμός', 'αυτιά', 'αυτοί', 'βάλτο', 'βάρκα', 'βάρος', 'βάσης', 'βουνά', 'βράδυ', 'βράχο', 'βρήκε', 'βροχή', 'βόλτα', 'βύσμα', 'γάντι', 'γίνει', 'γενιά', 'γιατί', 'γλυκό', 'γράφω', 'γρίπη', 'γυαλί', 'γωνία', 'γωνιά', 'γόνου', 'δάσος', 'δέρμα', 'δίπλα', 'δίσκο', 'δείτε', 'δεξιά', 'δράση', 'δώστε', 'είδος', 'είναι', 'εαυτό', 'εκατό', 'εκτός', 'εντός', 'επαφή', 'ζεστό', 'ζουμί', 'ημέρα', 'θέαμα', 'θέσει', 'θαύμα', 'θείος', 'θλίψη', 'ιδίως', 'κάνει', 'κάτσε', 'κλίμα', 'κλίση', 'κλαμπ', 'κοινή', 'κομψή', 'κοντά', 'κορμό', 'κουτί', 'κράζω', 'κρέας', 'κρίση', 'κυρία', 'κόκκο', 'κόλλα', 'κόμμα', 'κόσμο', 'κόψτε', 'λάθος', 'λάμψη', 'λάσπη', 'λίγοι', 'λίμνη', 'λίπος', 'λεκές', 'λεπτά', 'λεπτό', 'λευκό', 'λόγος', 'λόγχη', 'λύσει', 'μάγια', 'μάρκα', 'μάτια', 'μέρος', 'μέτρο', 'μήκος', 'μήνας', 'ματιά', 'μαύρο', 'μείνε', 'μηδέν', 'μικρή', 'μικρό', 'μοχθώ', 'μπάλα', 'μπλοκ', 'μυαλό', 'μόνος', 'μόρια', 'νέφος', 'νωρίς', 'νότια', 'νύχτα', 'ξένος', 'ξύνει', 'οθόνη', 'ομάδα', 'ομαλή', 'οποία', 'πάγκο', 'πάγος', 'πάντα', 'πάρκο', 'πέντε', 'πέτρα', 'παιδί', 'παρόν', 'παχιά', 'παύση', 'πεδίο', 'πιάτο', 'πλάκα', 'πλοίο', 'πλύση', 'ποιος', 'πολλά', 'πράξη', 'πρώτη', 'πτήση', 'πτώση', 'πόδια', 'πόρτα', 'ρίξτε', 'ραβδί', 'ρεκόρ', 'ρεύμα', 'ρολόι', 'ρούχα', 'ρυάκι', 'ρυθμό', 'ρωγμή', 'σάρκα', 'σειρά', 'σκάλα', 'σκέψη', 'σνομπ', 'σούρα', 'σπίθα', 'σπίτι', 'σπρέι', 'στήλη', 'στόμα', 'συρτή', 'συχνά', 'σφήνα', 'σχάρα', 'σχήμα', 'σωστό', 'σώσει', 'τάφος', 'τέλος', 'τέρας', 'τέχνη', 'τρένο', 'τρέχω', 'τρίχα', 'τρεις', 'τρόμο', 'τρύπα', 'τρώνε', 'τυφλά', 'τόνος', 'τόπος', 'τόπου', 'τύπος', 'τύπου', 'υλικό', 'υψηλή', 'φίλος', 'φθορά', 'φλόγα', 'φορές', 'φράση', 'φρένο', 'φτερά', 'φωτιά', 'φόβος', 'χάρτη', 'χαθεί', 'χαρτί', 'χιόνι', 'χορδή', 'χορός', 'χρήση', 'χρώμα', 'χτένι', 'χωρίς', 'χωριό', 'χόρτο', 'χώρος', 'ψηλός', 'όνομα', 'ύπνος', 'ύφεση', 'ώθηση'], [266, 'άγαλμα', 'άλεσμα', 'άναρχη', 'άνεμος', 'άνθιση', 'άνοιξη', 'άντρες', 'άροτρο', 'άρχισε', 'άσκηση', 'έγραψε', 'έδαφος', 'έκαναν', 'έκθεση', 'έκρηξη', 'έκταση', 'έντομα', 'έντυπα', 'έπρεπε', 'έρημος', 'έσπασε', 'έτοιμα', 'έτοιμη', 'έτρεξε', 'έφτασε', 'έφτυσε', 'ίντσες', 'αδελφή', 'ακούει', 'αλήτης', 'αλεύρι', 'αλλαγή', 'αρκετά', 'αρπαγή', 'αστέρι', 'ασφαλή', 'αυτούς', 'αφήστε', 'αύξηση', 'βαρέλι', 'βασικό', 'βιβλίο', 'βουτιά', 'βρωμιά', 'βόρεια', 'γέλασε', 'γέφυρα', 'γήπεδο', 'γενική', 'γλώσσα', 'γραμμή', 'δέντρα', 'δέντρο', 'δήλωση', 'δίκαιη', 'δείγμα', 'δελτίο', 'δεμένα', 'δοκιμή', 'δράκος', 'δρόμος', 'δρόμου', 'δυνατά', 'δυτικά', 'δυτικό', 'δωρεάν', 'δύναμη', 'ειδικό', 'εικόνα', 'ελαφρά', 'ελπίδα', 'εμπρός', 'ενιαία', 'εξηγεί', 'εξπρές', 'επίσης', 'ευθεία', 'ευρεία', 'ζάχαρη', 'ζήτησε', 'ζοφερή', 'ηλικία', 'θέλουν', 'θόρυβο', 'ιδρώτα', 'ιερέας', 'ισχυρή', 'κάθισε', 'κάψιμο', 'κέντρο', 'κίνημα', 'κίνηση', 'καθαρή', 'καιρός', 'κανόνα', 'καπέλο', 'καπνός', 'καρδιά', 'κεφάλι', 'κηλίδα', 'κλάσμα', 'κλέψει', 'κλειδί', 'κλόουν', 'κοράκι', 'κορώνα', 'κούνια', 'κράτος', 'κρίκετ', 'κρανίο', 'κραυγή', 'κτίριο', 'κυνήγι', 'κόκαλα', 'κόσμος', 'κόστος', 'κύκλος', 'κύκνος', 'κύλησε', 'κύλιση', 'κύματα', 'κύριος', 'λέξεις', 'λεξικό', 'λεπτές', 'μάλλον', 'μίλησε', 'μακριά', 'μαλακά', 'μανίκι', 'μανδύα', 'μείγμα', 'μεγάλα', 'μεγάλη', 'μεγάλο', 'μελέτη', 'μερικά', 'μεσαία', 'μεταξύ', 'μητέρα', 'μηχανή', 'μιλούν', 'μολύβι', 'μονάδα', 'μπλόφα', 'μπορεί', 'νομίζω', 'ξανθιά', 'ξύστρα', 'ομιλία', 'οποίου', 'ουσίες', 'πάγωμα', 'πάτωμα', 'πέρασε', 'πέταξε', 'πήδηξε', 'παγίδα', 'παιδιά', 'παλαιά', 'πατέρα', 'πατούν', 'πετούν', 'πιάσει', 'πιθανή', 'πλήγμα', 'πλήθος', 'πλήρης', 'πλευρά', 'πνεύμα', 'ποίημα', 'πορεία', 'πουλιά', 'πράγμα', 'πρέπει', 'προϊόν', 'πώληση', 'ρευστό', 'ρύγχος', 'σάλτσα', 'σάρωσε', 'σάρωση', 'σήματα', 'σήμερα', 'σίδερο', 'σαλάχι', 'σανίδα', 'σελίδα', 'σημάδι', 'σημαία', 'σημείο', 'σκέλος', 'σκίτσο', 'σκαμνί', 'σκληρά', 'σκληρό', 'σκουός', 'σκούπα', 'σκύλος', 'σμήνος', 'σπάσει', 'σπόροι', 'στάδιο', 'στέρεο', 'στίγμα', 'σταθεί', 'σταυρό', 'στεγνό', 'στιγμή', 'στοίβα', 'στρατό', 'στόλου', 'στόμιο', 'συνέβη', 'σχέδιο', 'σχεδόν', 'σχισμή', 'σχοινί', 'σύνολο', 'τίποτα', 'ταινία', 'ταξίδι', 'τείχος', 'τελικό', 'τούβλο', 'τρίβει', 'τρίτος', 'τραχιά', 'τρελός', 'τροχοί', 'τρόπος', 'υψηλής', 'φίλους', 'φιλέτο', 'φορείο', 'φούστα', 'φράξει', 'φρέσκο', 'φρούτα', 'φταίει', 'φτωχοί', 'φυλακή', 'φυσικά', 'φυσικό', 'φωνήεν', 'φόρεμα', 'φύσηξε', 'φώναξε', 'χάλυβα', 'χαλάει', 'χαλαρή', 'χαμένο', 'χαμηλή', 'χείλος', 'χνούδι', 'χοίρων', 'χρυσός', 'χρόνος', 'ψεγάδι', 'ψύλλος', 'ωκεανό', 'ωστόσο', 'όμορφο', 'όνειρο', 'ύφασμα', 'ύφεσης'], [208, 'έγκαυμα', 'έκπληξη', 'έλεγχος', 'έλκηθρο', 'έμοιαζε', 'έξυπνες', 'έπαινος', 'έσπρωξε', 'έστειλε', 'αίσθηση', 'αγροτών', 'αγόρασε', 'αδελφός', 'ακριβώς', 'αλήθεια', 'ανάβαση', 'ανήκουν', 'ανησυχώ', 'ανθίσει', 'ανοιχτό', 'απεργία', 'απότομη', 'αριθμός', 'αρκούδα', 'αρχηγός', 'αστέρια', 'αυστηρή', 'αχιβάδα', 'βέβαιος', 'βέλασμα', 'βαμβάκι', 'βελονιά', 'βοήθεια', 'βογγητό', 'βούρτσα', 'βραβείο', 'βρωμάει', 'βόσκουν', 'γέρνουν', 'γαμπρού', 'γεγονός', 'γερανός', 'γιατρός', 'γνωστοί', 'γνώριζε', 'γρήγορα', 'γρήγορη', 'γρήγορο', 'γραφική', 'γυναίκα', 'γύρισμα', 'δάχτυλα', 'δεύτερη', 'διάδοση', 'διάσημη', 'διάφορα', 'διαρροή', 'διαφορά', 'δολάρια', 'δωμάτιο', 'δύσκολο', 'εκείνοι', 'εκλεκτό', 'εκπέμπω', 'εκτροπή', 'ελέγχει', 'εμπλοκή', 'εμπόριο', 'ενότητα', 'εξίσωση', 'εξετάζω', 'εξουσία', 'επίθετο', 'επίπεδη', 'επίπεδο', 'επόμενο', 'εργασία', 'ευλογεί', 'ευτυχής', 'εύκολες', 'ζευγάρι', 'θάλασσα', 'θεωρούν', 'θραύσμα', 'θρόισμα', 'θυμάται', 'ιμάντας', 'ιστορία', 'ισότητα', 'κάθισμα', 'κάποιος', 'κίτρινο', 'καθαρών', 'καμπάνα', 'κλίμακα', 'κλαράκι', 'κοιλάδα', 'κοιτάζω', 'κομμάτι', 'κομμένα', 'κορίτσι', 'κουζίνα', 'κουτάλι', 'κρεβάτι', 'κρούστα', 'κτύπησε', 'κόκκινο', 'μάγειρα', 'μέγεθος', 'μέθοδος', 'μέταλλο', 'μακρινό', 'μαντίλι', 'μαχαίρι', 'μελανιά', 'μελωδία', 'μερικές', 'μιλήσει', 'μουσική', 'μπλούζα', 'μπροστά', 'μυρίζει', 'μυρωδιά', 'νάρθηκα', 'νιφάδες', 'ντυμένο', 'ξαφνικά', 'οδήγησε', 'οξυγόνο', 'ουρανός', 'πίνακας', 'πίτουρο', 'παίζουν', 'παίκτης', 'παγετός', 'παρτίδα', 'παρωδία', 'παχουλό', 'πείραμα', 'περίπου', 'περνούν', 'πιάσιμο', 'πιθανώς', 'πλαίσιο', 'πλανήτη', 'πλατεία', 'ποταμός', 'πράσινα', 'πρήξιμο', 'προπέλα', 'προσοχή', 'πρόσωπο', 'πρόταση', 'πρότυπο', 'πόλεμος', 'σέσουλα', 'σενάριο', 'σιωπηλή', 'σκούτερ', 'σκότωσε', 'σπείρας', 'στάγδην', 'στάθηκε', 'σταγόνα', 'σταθερή', 'σταθμός', 'στιφάδο', 'στομάχι', 'συνήθως', 'σχολείο', 'σωλήνας', 'σύμβολα', 'σύμφωνο', 'σύννεφο', 'σύντομα', 'σύρματα', 'σύστημα', 'τέσσερα', 'ταξίδια', 'τράβηξε', 'τράπεζα', 'τρέξιμο', 'τρέχουν', 'τρίγωνο', 'τρίξιμο', 'τριχωτό', 'τρυπάνι', 'τρόφιμα', 'υπέροχο', 'υποδοχή', 'φέρνουν', 'φακίδες', 'φεγγάρι', 'φλάουτο', 'φοβάται', 'φορτίου', 'φορτηγό', 'φράουλα', 'φωτεινό', 'χάλκινα', 'χάλκινο', 'χάλυβας', 'χειμώνα', 'χλωρίνη', 'χρήματα', 'χτύπημα', 'χτύπησε', 'χώνομαι'], [163, 'άθροισμα', 'άνθρωπος', 'έρχονται', 'αγελάδων', 'αγοράσει', 'αδέσποτα', 'αμφορείς', 'ανάπτυξη', 'αναγκαίο', 'απάντηση', 'απέναντι', 'απληστία', 'αποστολή', 'απόδειξη', 'αργότερα', 'αριστερά', 'αρπάζουν', 'αρπάξουν', 'αστερίες', 'αυξήθηκε', 'βάτραχος', 'βασιλιάς', 'βρίσκουν', 'γαρίφαλο', 'γεμίζουν', 'γενναίοι', 'γλυκάνει', 'γράμματα', 'γράφουνε', 'γραμμένο', 'γραφείου', 'γρύλισμα', 'γυναίκες', 'δάσκαλος', 'δέσμευση', 'δείχνουν', 'διάρκεια', 'διάσπαση', 'διαβάσει', 'εβδομάδα', 'εκκίνηση', 'εκκλησία', 'ελεύθερο', 'εμπειρία', 'εμφάνιση', 'ενέργεια', 'επίσκεψη', 'επιθυμία', 'επιπλέον', 'επιστήμη', 'εργαλεία', 'εταιρεία', 'ετοιμάζω', 'ευκαιρία', 'θεραπεία', 'κάβουρας', 'καθαρίζω', 'κακαρίζω', 'καλαμάρι', 'καλείται', 'καλύτερη', 'καλύτερο', 'κατάληξη', 'κατάληψη', 'κατέχουν', 'κεφάλαιο', 'κολλώδης', 'κουβέρτα', 'κουρτίνα', 'κούμπωμα', 'κρεμμύδι', 'κυττάρων', 'λιγότερο', 'λουλούδι', 'μαντέψει', 'μείζονος', 'μεγάλωσε', 'μονοπάτι', 'μονότονο', 'μπέρδεμα', 'μπλούζες', 'μπορούσε', 'μόσχευμα', 'ντουλάπα', 'ξεκίνησε', 'ξεπήδησε', 'ξεπλύνει', 'οικόπεδο', 'ορισμένα', 'πέστροφα', 'παίρνουν', 'παιχνίδι', 'παντόφλα', 'παράθυρο', 'παράξενο', 'παρέχουν', 'παραγωγή', 'παρακαλώ', 'παρελθόν', 'παροδικό', 'παρόμοια', 'πεδιάδες', 'περήφανη', 'περίοδος', 'περιμένω', 'πιλήματα', 'πλανήτες', 'πλεξούδα', 'πλούσιοι', 'πολύτιμα', 'πουλόβερ', 'πρακτική', 'προδοσία', 'προσευχή', 'προσθήκη', 'προσφορά', 'προφέρει', 'προϊόντα', 'πρόβλημα', 'πρόεδρος', 'ροχαλητό', 'σάλπιγγα', 'σέρνεται', 'σημαίνει', 'σημασίας', 'σημείωση', 'σκίουρος', 'σκοτεινό', 'σκύψουμε', 'σπασμένα', 'στέλεχος', 'στήριγμα', 'σταθερές', 'σταφύλια', 'στοιχεία', 'στοιχείο', 'συλλαβές', 'συμπίεση', 'συμπλοκή', 'συμφωνία', 'συνέχισε', 'συνθήκες', 'συντριβή', 'συρραφής', 'σφεντόνα', 'σφραγίδα', 'σύγχρονη', 'τέχνασμα', 'ταχύτητα', 'τεράστιο', 'τραγούδι', 'τρομάζει', 'τσίμπημα', 'υπόσχεση', 'φαίνεται', 'φοιτητές', 'φροντίδα', 'χαμόγελο', 'χαστούκι', 'χελιδόνι', 'χιλιάδες', 'χτισμένο', 'ψεκαστεί'], [104, 'αγρόκτημα', 'αδύναμους', 'αεροπλάνο', 'ανάπαυσης', 'αναζήτηση', 'ανακάλυψε', 'ανατολικά', 'ανθρώπινη', 'ανιχνευτή', 'αντίγραφο', 'αντωνυμία', 'απατεώνας', 'αποφάσισε', 'βιαστικός', 'βρίσκεται', 'γεννήθηκε', 'γλίστρησε', 'γλιστράει', 'γραμμάριο', 'δαμάσκηνα', 'δαχτυλίδι', 'δεκαδικών', 'διάγραμμα', 'διάλειμμα', 'διαθέτουν', 'διακόπτης', 'διατηρούν', 'διαφάνεια', 'εγκέφαλος', 'εγκαύματα', 'εισβάλλει', 'εκτύπωσης', 'επεισόδιο', 'επιλέγουν', 'επιπλέουν', 'επιπλήξει', 'επιστροφή', 'επιτέλους', 'επιφάνεια', 'ερωτήσεις', 'ευχάριστη', 'εφαρμογής', 'ηλεκτρική', 'θραύσματα', 'καθηγητής', 'καθορίζει', 'καλαμπόκι', 'καλοκαίρι', 'κατάλογος', 'κατάρτιση', 'κατάστημα', 'καταιγίδα', 'κατανόηση', 'κατσαρόλα', 'κοιμήθηκε', 'κολυμπούν', 'κολύμπησε', 'κυβέρνηση', 'λουλούδια', 'μαθαίνουν', 'μεγαλώσει', 'μουτζούρα', 'νομοθεσία', 'ξεχωριστό', 'παπούτσια', 'παράσταση', 'παραμένει', 'περίπτωση', 'περιέχουν', 'περπάτησε', 'πλέγματος', 'πλημμύρας', 'πληρώνουν', 'πρίγκιπας', 'προστασία', 'προσωπικό', 'προτείνει', 'πρόγραμμα', 'ραδιόφωνο', 'σαλιγκάρι', 'σημαντικό', 'σκαρίφημα', 'σκουπίδια', 'σκούπισμα', 'σουρωτήρι', 'σταφυλιού', 'στράτευμα', 'στριγκλιά', 'συμβούλιο', 'συμμετοχή', 'συμπλέκτη', 'σφιγκτήρα', 'σφουγγάρι', 'σύγκρουση', 'τελευταία', 'υπάλληλος', 'φαινόμενο', 'φιλονικία', 'φτάρνισμα', 'φυτρώνουν', 'χαιρετούν', 'χιονόνερο', 'χωρίζεται', 'ψεκαστήρα'], [79, 'αγωνίζομαι', 'αθλητισμός', 'αιχμάλωτος', 'ακούγονται', 'ακριτολογώ', 'αλιεύονται', 'αναμένουμε', 'ανεπαρκεία', 'ανιχνευτής', 'ανταλλαγής', 'αποθήκευση', 'αποθεμάτων', 'αποτέλεσμα', 'αυτοκίνητο', 'βιομηχανία', 'γκρινιάρης', 'γυαλιστερό', 'δεξιότητες', 'δημιουργία', 'διάστρεμμα', 'διασκέδαση', 'εγκεφαλικό', 'ειδικότερα', 'ενδεικτική', 'ενδιαφέρον', 'επικεφαλής', 'επιτάχυνση', 'επιτρέπουν', 'επιχείρηση', 'εργοστάσια', 'ζωγραφίσει', 'ισχυρισμός', 'ισχυρότερη', 'καπετάνιος', 'κατάσκοπος', 'καταδύσεις', 'κατεύθυνση', 'κλαδεύουμε', 'κοιμισμένη', 'κοκκινίζει', 'κουλουράκι', 'μεταφέρουν', 'μνησικακία', 'μπαγιάτικο', 'ξυλοπόδαρο', 'οικογένεια', 'ουσιαστικό', 'παλιόπαιδο', 'παράγοντες', 'παράγραφος', 'παράδειγμα', 'παρατηρούν', 'περιπέτειά', 'περιφέρεια', 'πιστεύουμε', 'πληθυντικό', 'πραγματικά', 'προβάλλουν', 'προσπαθούν', 'σοβαρότητα', 'σπονδυλική', 'στραβισμός', 'στρατιώτες', 'στρογγυλές', 'συγκρίνουν', 'συμφώνησαν', 'συναίσθημα', 'συχνότητας', 'σχεδιασμός', 'ταιριάζουν', 'τελειώματα', 'τεντώνεται', 'τραγουδούν', 'τσιγκούνης', 'υποθέσουμε', 'υποκείμενο', 'υπολογίζει', 'φωτοβολίδα', 'χαμογέλασε']] pysiogame-1.30.811/fonts/pysiogameFonts/LICENCE.txt0000644000175000017500000000251112201770062020707 0ustar tigertigerpysiogameFonts: pysiogameHand.ttf & pysiogameLatinPrint.ttf Copyright (C) 2013 Ireneusz Imiolek This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Contact details: Ireneusz Imiolek, imiolek.i@googlemail.com pysiogame-1.30.811/fonts/pysiogameFonts/pysiogameHand.ttf0000664000175000017500000035231012201770063022423 0ustar tigertiger PFFTMetԬGDEF&Ԅ(OS/2Y)deXVcmap517gasp|glyf7`@ headu_6hheaa"$hmtxB&locagTբ maxp8 name 9Yposteh o_< 25KK2\p5@3 PfEd@ Q33\K UzB=g]typ9jRm4BacXHAK uDs;yU<~<6fXP/= apppppp<<<<<<XXppq9999ssa;a;a;a;yU<< 666HKXK P P Pa yX]a eA By:r/yT =hT Xl0%_A= =%=}1NN/*"!%@ #].pg"g#7USMw H ei dQ ~6  .9Zz07JN~)OQ -0Aa49LP-Q}|{zsrqp>0-,   !"#$%&'()*+,-./0123456789:;<=>?@A~CJKMOW\`dcegfhjlkmnpoqrsutvxw{z|}DbEL0iyFI[HPGQNSTURYZX^_]*@z *~X>fV x h X V 2  xR>lPv "Z4D  !#$P%%&'(V)N)*F*+V+,j,-.@./h00123H34`556Z778>89:j;;:>?F?@@@AB BClD4DEVEF|G&GHlIIJLK$KLM`MN4NO2OvOPP~QQRRRShSTUUVVW&WXXYYZ4Z[N[\h]^b_R``z`adabNbcPcd:eefgXgh|hij jkkl\lmǖ:f.ʤˀ̒8DϪ Ю4іRӮJ~( z ٌ2v N"264&2"&4 @..@.b((.?..?''=3#=$53 7";264&#    2O 7>'.'&2&'&67643LK 1$JNKK 2$:EDAuED,&8[,@ :7[,@ NS20*OR3 "32?327654& g     Y  I V&32654'&7>3276763232?654&#"#"'&#">7>7676'&'&8/   /5$%K(6PH! (&/( (&&=B." .! '@( 6(-<#&"'&'4&#"7>7674'67676'&'&8/ 5$3 ) H&F %  & 1(L,:)@!' -7  9./'4A*79<#)F" $ 2"1"327632?32654'&'7654&#"&654&TQF  H!A <#<  >HF       e?"327676'&'.#"7>76'4'&77>54&#"#'"#o T J1'N,) *&55\6*:Chv xj  &$$-8>) 7J@2(0 H:"67676'&#&32762'&'&7>763232654'&-61a#* ,:y# 02OI*  l.+ $"^-."!  /*P]; WQ"+$(  %!GM&0RM&(+ =&U"13276767237&327633276732654'.'67654&#"'"'&'&G!    + 41$? 12  %@- +?A )"%  =  /   Qe  >}!  u    [   ; ';P&7676'&'.'>76'.'&#&'&7676'.'&7>%%5/# # 05DF &<0"     ,; *H$  98( $8 ,)4*FG;+5: ;*+$ (!7*!.)8  .<37654&#"'"'&767>#"'&#"327>76'.'&9o! /2O I*  m-+ $"^-."   4-62`#* ,VK "+$(  %!GM&/SM&(+ >/*P];  <[m&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&!  0!~+'%V *  gUp@'$?n]p9 !.  '  b327676'0#"'&'&'&'&'654&#"'"'&'&7454&#"7676'&'67676'&'&(F( %B? 3,< OD&`!#   !    , '&2X!,"?  -    2   Y?[  U%% -) 2;O:=%!d&&76767676'&.7>676'&N&&8R   G0""C! mih97    01]]_  " CS"327676'&'654&#"&'&767767676'&'.23'&'"5676B 5` 3i)L' 6=D/3   /  ;6QE:/H  #  @<f 'N6:EAJ f   TFL>;Z.> A">7654&#"#&'&76767>3>54'.'&76762654&<$=^ O5'D+  %;#& O!  $4/) 6 ,&.8+ $[8g$  ))*K    8""# (5o"32654'&76763276767'"'&'&7454&#"67257767654&#"'&'7654'7654&#"'.'&#&:$    #>(B   S!    ) Z" ="`c YVf !    %% -   62 qEX7677676?64&"7654'&#"'.7>32654'&'&1#&'&76?43D~ &8ON? `   8Y +, &3BC1""C! '$"lVh/` " Y +w 0?&]]_  " ^ " |"3276767670?6767767>764&#"'&'&?65676767676'&4167017676'&'&&'&27676'23'&'6'45676$   s *"  (vLU  #  d #  "#8B]d     >  9 / 5   jM4   )   , ']&.<   . B  "b FQ"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6#       (    b 9 / ^%% -     S^q"32767607676716?64&"6767076167017676'&'&&'&23'&'61#&'&76?41#   j^   #[ ,j   b" 9 /  6.F^ " 7bZ -77    ]  "327676'"'&'&7654&#"67257>763676327>7654&#"#"'&'&54>76'&'&676323276&#"74167017676'&'&&'&23'&'6$   ZA!    ) C    "#    $  1#X7  ##Da(>9     a 9 / %% -" &(# )  ) *P7<#Z 6c)L   BR"&'&76732767654&#"#"'&'6763276&'&23'&'0'676[/  <43$"*.6 '!    $ g    ( !   -!9 J"0##"'&'&#"3276713270767654&#"'&7654&#"4&     $  u )/  %    2   ! }Z - A8 ', @"# &#""1#"'&7454&#"327673270567636032654'&'&h! c     &! b      d 2   % 8    Mc&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&767676760   ;)h/C0!""#  ('' &8N8x/ (    &   " 4  ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T&  &J"#327>'&#"7>76&'&'"'&'&7454&#"6725654&#"*GG 4j%U 6A )T$50!H !    )   %   \-!.78Q $ U%% - $D677>7654&#"'&'676&'&6&'&3276'.7>D~ &8O-\*; 7 4'8O C0!0'3!5 8 'KIC1"nlVh!$  <  9 4Jh !^D.'  9]L^ b"#327>'7654&#"'"'&'&7454&#"67257327>7654&#"#"'&'1&'767676&'&*GG 4j%U !OAC  !    ) M+D #"     @)EJ'50! %   \$+ U%% -bk! )  )e]"8Q \-&.7654&#">&'.>3276&'&*G-30+#]`,  6wt,6<'#KN#  .2/(3b\a+#]0 ;t,6xsKN#K' 2bG&32654'&7676'"'&'&7654&#"670765457654&#"'.'&>'    $>(!    ) "`c ZUe !   U%% - 62 K#"'&7616'&'&32767676327767654&#"'&7654&'* c52j     j#6 Q@ )/  %   :   $8;D7  6    )Wa*TDk22 & 5&65hBK '^]. "   "0327676767676776767677654&#"#"'67674'&'&'&'&76567>7454&#"'&547676'&'&&76765    CK  CK>:   $9;D6  B A D6     )Wa*T "TDk22 & 5&65hBK 3D )L K'& K '^]. "   d"0"'05.'&3276'.1&#"767675776?654&#"'&/767676326545&'& '4 +    "# .' *      û       # +' '     %   [n#"'&7416'&'&327676763277676716?64&"656725654�1#&'&76?43 |b53k    k"7 G< _   Z ,| !   )F\"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651>G 1)X  $"=       @  D!4) N>44 ,F  "      # H,)' Q/!)TO^l"#2767767767654&#""'676'&'&&'&767>7676'&67676766&'&5476 +(  ^0   #A O$K&(    7>6  8" "  =:'1%),2k#2) -f 2 15* '?32767767>7654&#"'.767651>32654'&'&$C % $!./   %!"D"   -&3*  ,F      Q/*( ) 7>T"&'&3276767327>7654&"#"'&7>?654&2'.767651> o1)X & $"<        B!4 >44  ,F  "     G*%'$ Q/!)!%>R03276767767>7654&#"&'&723767654'&'&2'𐡜-  ^0  #A  g*    "_ &%:  8"   )     2)_t"""1012767673276767327>7276764&#"1'&'>?6767676'&'&2#705>76 S-      G  C !   /6  3>  5  <   ? -.     9($! %5Y);Ob0#"&'&327677767673?64&"7654&2'.767651>1#&'&76?41K 1)X % $!13a    8X +O  B!4") N>44  ,F &` " Y + # G**&% Q/!)^ cz""01"127676732?21676327>7654&"#"'&7>?6'&'&"#67676'&'&21707>7670 T. !=  ? !        .22=  5   3 ),2"    ;584($! %5} I";264&##276767327>7654&#"#"'&7>?617454�      6.         4 |S b/  %"     } <O";264&##"#27672617676?64&"7454&##&'&76?61     8/  -`   8Y +O"|T c/ z` " Y +^ eWg&"7>777673276767676'&"'&'&576767654'&'&06767676'&7676'&#𐡜2  S..  !@  ! ,    .$  %*  6 2@  (! 5.%$ ([' *"   !     9 )%"#5 0-La""101276767327>7654&#"#"'&746?6767676'&'&2#705>76 S-         16  3>  5 A"     9($! %5*k"&'&"454&+"#276732?67632?676327>7654&#"#"'&7>?676'&'&b%   6. +  >)* > *         & )5  b/ w 1%*2u 2%*3"     :17*X"132767>732?43676327>7654&"#"'&7>?6'&'&5654&#) ! ?  ? !         /,) ))+1   ! 3 ),2"     ;58M$4DT#32767767767654&#""'676'&'&&&'&67672&'&547632' %^0    #A $&=    $1  8" "  =:  '1%),c  15* )2A"2?327?67>4&#"676&'&7654&2'.?>   p1!$>    -13 E "I" 2) C 4=  !7654&#"#0#7654&2'.767651>'676752330'&'67K 1)X  $!12(    '     C  B!4J  ]   ) N>44 ,F &o   - 44   # F+*'$ Q/!). O  G)O"73454&+"#276732?476767767654&#"'&'&'.5&'&'&'& &   6. +  6$  ) *# b/ w + T  "  R '"W"32767"#"#'&'&#"72?67>4&#"#676'&'&'&767654&- <  90    %E  %  "$D, M.         !   ~O0#0##0#";32767327>7654&#"#"'&7>?3264&+7654& != 2 &         6: /~ \ 6   "     Q *V"132767>737327>7654&"#"'&7>?654&#"1'"&'&?654&#) !  <*      E  @"U  ))+1   !@8) "     ]08A)*cs"32767>7327676767767654&#"'&'&'67676'.#"'&'&76?654&0367676)  "    !  $     ))+1   !07327677>7767654&#"'&'67674'&'&'&'&?654&#"#"'&'&?654&03&767676) "  +$ $<    8  E  B    ))+1   !-@!% /  ("(   /'"3&   :'A)! #+-T"&'&'&'&'&27767767>7654&"'.'&'67>7654&#"&'&z $! C%     (8$       &: AZA- I5L    ?*     3 !*5 *hg+v*Sf"32767>7377676?64&"7417654&+"'"&'&?654&#1#&'&76?41)  !  .&`   9X +@ A"T  @"))+1   !@8` " Y +) Z08A)^ {/o""&'&'&327>7676:&367676767>?64&#".'&'>77676'&'&6'&'>70>23#"'&7676Q #!'    ,!   7".#    "2  , 6I      /  ,$     %A>&2  ,  '    P/  <43$ "*.6V" 9 '    %  #       ( !     -!95'/7IZ.`p"#1#"32?32654/&'0&9*'1"$"264&2"&4%32654/&'"0332?64&'"32725126?654&#"'&#"2312310"#"32767>7676?654&#"#'&'&'&#";264&+3#";264&+"264&2"&4%32654/&'"0332?64&'"3"#1#"32?32654/&'0&9*'1""#"32767>7676?654&#"#'&'&'&#";264&+3#";264&+0R GF Q?..?.a''R RR R Q FG R                  ?..?.a''R RR R R GF Q                  X LL X#.@--@'' W XX W X LL X"   "    1\.@--@'' W XX W X LL X"   "    .Ml~"32654/&#"&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76QQK-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&!  X W0!~+'%V *  gUp@'$?n]p9 !.  ' FNm32?64&#"0&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&765Q Q`-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&! X W 0!~+'%V *  gUp@'$?n]p9 !.  '  *g0#"10##"32?32654/&'"*'1"&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76Q FG R*-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&! X LL X0!~+'%V *  gUp@'$?n]p9 !.  ' L2o"#"032767>7676?654&#"'&'&'&&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76          %-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&! "  "   0!~+'%V *  gUp@'$?n]p9 !.  ' &i Ts";264";264&#&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76    ~    6-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&! i_0!~+'%V *  gUp@'$?n]p9 !.  ' Lk}"264&2"&4&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76@..@-a((W-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&! .@--@''0!~+'%V *  gUp@'$?n]p9 !.  ' t"'&#"76767327673>7654&#""'67>5376721232723>76'&'&#"'676745632654'.&;#&'&'&'&'"1>7>7676"10#123&'&'&'&76-$5%L/  0'6A`&>0 71'C*  %:"+/:-9N  H5# 2; #I= 1-;" %4"  %*! 0!~+ '%V $    wd S3(    $?nfx 9 !/h/  uR&'&'./&#"76'&'767676767654&#".7>32654'&'&E'8O      &$  G0!"C! &lXh         /0]]_  ! >S"32654/�"">7654&#"#&'&76767>3>54'.'&76762654& Q QX<$=^ O5'D+  %;#& O!  $4/) 6 X W,&.8+ $[8g$  ))*K    8""# (5>S"32?64�"">7654&#"#&'&76767>3>54'.'&76762654&)Q QH<$=^ O5'D+  %;#& O!  $4/) 6WX ,&.8+ $[8g$  ))*K    8""# (5?*l0#"#01#"32?32654/&'"*'1"">7654&#"#&'&76767>3>54'.'&76762654&QFFQ<$=^ O5'D+  %;#& O!  $4/) 6X LL X,&.8+ $[8g$  ))*K    8""# (5>e Y";264";264&#">7654&#"#&'&76767>3>54'.'&76762654&    ~    :<$=^ O5'D+  %;#& O!  $4/) 6eZ,&.8+ $[8g$  ))*K    8""# (5bXc32654/&'"0"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6R R#       (    b W X9 / ^%% -   bXc32?64&'*"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6DQQw#       (    bX W 9 / ^%% -   b*q|0#"10##"32?32654/&'"*'1""327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6Q FG R$#       (    bX LL X9 / ^%% -   bf ^i";264";264&#"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6    ~    m#       (    bf\9 / ^%% -    CS"327676'&'654&#"&'&767767676'&'.23'&'"5676B 5` 3i)L' 6=D/3   /  ;6QE:/H  #  @<f 'N6:EAJ f   TFL>;Z.2r"#"#032767>3676?654&#""'&'&'&"# &#""1#"'&7454&#"32767327056763632654'&'&       ! c     &! b    "  !    d 2   % 8    ^t32654/&'0&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&76767676Q Q   ;)h/C0!""#  ('' &8N8x/ (    &   " 4  W X ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& _u32?64&'*&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&76767676<QQ   ;)h/C0!""#  ('' &8N8x/ (    &   " 4 X W  ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& ,z0#"10##"32?32654/&'"1#4#1*'1"&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&76767676Q FG RR   ;)h/C0!""#  ('' &8N8x/ (    &   " 4 X LL X ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& 2"#"032767>7676?654&#"#'&'&'&&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&76767676          _   ;)h/C0!""#  ('' &8N8x/ (    &   " 4 "   "     ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& f e{";264";264&#&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&76767676    ~      ;)h/C0!""#  ('' &8N8x/ (    &   " 4 fj ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& ]32654/&'*#"'&7616'&'&32767676327767654&#"'&7654&'*QQ c52j     j#6 Q@ )/  %  W X ?6763'&'&#"72123767>4&"676'&'.'&'67>76756'&'& 3##,&  R#$"#      +% ,2X    A  !  4b^|fG QTa&   2  %  '&5% Wm"32654/�"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651>l Q Q 1)X  $"=       @  D!4 W W N>44 ,F  "      # H,)' Q/!)Xn32?64&'*"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651> QQ' 1)X  $"=       @  D!4X W  N>44 ,F  "      # H,)' Q/!))p0#"10132?32654/#&'"*'10"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651>Q FG Q~ 1)X  $"=       @  D!4X LL X N>44 ,F  "      # H,)' Q/!)2y"#"032767>7676?654&#"#'&'&'&"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651>           1)X  $"=       @  D!4"   "    N>44 ,F  "      # H,)' Q/!) ^u";264";264&#"&'&13276767327>7654&#"#"'&7>?05?654&20'.767651>~    ~    G 1)X  $"=       @  D!4x N>44 ,F  "      # H,)' Q/!) Vl"264&2"&4"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651>@--@.a'' 1)X  $"=       @  D!4 .@--@'' N>44 ,F  "      # H,)' Q/!)/Wk"&'&3276776732?767>7654&#"&'&'676767654'&'&7654&#"6&'&67676767676*  #/0' % ^0   "/0   $A G2 .1  p &#A $&   0E&. 5$  1 ! 8" " 0$    )   % ) ) 2),c   2&0j"32767'&'./&#"76'&'7676767>7654&#"'.767651>32654'&'&$C  $!          %!!D"  -/4*  ,F         Q/*( * 7!Nb32654/�3276767767>7654&#"&'&723767654'&'&2'𐡜pQ QL-  ^0  #A  g*    "_ & W X:  8"   )     2-Nb32?64&'"3276767767>7654&#"&'&723767654'&'&2'𐡜QQ `-  ^0  #A  g*    "_ &X W :  8"   )     2!%cw"#132?32654/&'0&1#0"51"3276767767>7654&#"&'&723767654'&'&2'𐡜Q GF Q -  ^0  #A  g*    "_ &X LL X:  8"   )     2! Ui";264";264&#3276767767>7654&#"&'&723767654'&'&2'𐡜o    ~    4-  ^0  #A  g*    "_ &|:  8"   )     2O32654/&'"0#276767327>7654&#"#"'&7>?617454�-R RR  6.         4  W X b/  %"     N32?64&'"#276767327>7654&#"#"'&7>?617454�R R r  6.         4 X W  b/  %"     %c"#132?32654/&'" "5#0#276767327>7654&#"#"'&7>?617454�Q GF Q  6.         4 X LL X b/  %"     #a0#";03264&+30#";03264&+#276767327>7654&#"#"'&7>?617454�R        S  6.         4 x b/  %"     2"#"032767>7676?654&#"#'&'&'&"132767>732?43676327>7654&"#"'&7>?6'&'&5654&#          @) ! ?  ? !         /,) "   "    )+1   ! 3 ),2"     ;58MFVf"32654/�"#32767767767654&#""'676'&'&&&'&67672&'&547632j Q QF' %^0    #A $&=     X X1  8" "  =:  '1%),c  15* MFVf32?64&'"0#32767767767654&#""'676'&'&&&'&67672&'&547632 Q QZ' %^0    #A $&=    X W 1  8" "  =:  '1%),c  15* M(]m}0#"10132?32654/&'"*'10#32767767767654&#""'676'&'&&&'&67672&'&547632Q FG R' %^0    #A $&=    X LL X1  8" "  =:  '1%),c  15* M2gw0#"032767>7676?654&#"#'&'&'&#32767767767654&#""'676'&'&&&'&67672&'&547632w          *' %^0    #A $&=    "   "    1  8" "  =:  '1%),c  15* M L\l";264";264&##32767767767654&#""'676'&'&&&'&67672&'&547632o    ~    @' %^0    #A $&=    }1  8" "  =:  '1%),c  15* M$4DT#32767767767654&#""'676'&'&&&'&67672&'&547632' %^0    #A $&=    $1  8" "  =:  '1%),c  15* h"32654/&#*"132767>737327>7654&"#"'&7>?654&#"1'"&'&?654&#QQ) !  <*      E  @"U   XW)+1   !@8) "     ]08A)h32?64&'0""132767>737327>7654&"#"'&7>?654&#"1'"&'&?654&#XQ Q) !  <*      E  @"U  X W )+1   !@8) "     ]08A)%|"#132?32654/&'0&9*'1""132767>737327>7654&"#"'&7>?654&#"1'"&'&?654&# R GF Qu) !  <*      E  @"U  X LL X)+1   !@8) "     ]08A) o";264";264&#"132767>737327>7654&"#"'&7>?07654&#"1'"&'&?654&#    ~    ) !  <*      E  @"U  x)+1   !@8) "     ]08A)vdw32?64&'0"32767>7377676?64&"7417654&+"'"&'&?654&#1#&'&76?41TQ Q )  !  .&`   9X +@ A"T  @"X W )+1   !@8` " Y +) Z08A)^ v k~";264";264&#"32767>7377676?64&"7417654&+"'"&'&?654&#1#&'&76?41    ~    )  !  .&`   9X +@ A"T  @"x)+1   !@8` " Y +) Z08A)^  <[m&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&!  0!~+'%V *  gUp@'$?n]p9 !.  ' )F\"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651>G 1)X  $"=       @  D!4) N>44 ,F  "      # H,)' Q/!)1(e0327210726?654&#"'&#"2312312&'&#"76767327676764&#"6767676'&"'"45&'&'&'"1>7>767623&'&'&'&76Q FGR-$5%L/  0'6A`&53   @( (2&1  1)7 " $4" %&! 5W LL W+0!~+'%V *  gUp@'$?n]p9 !.  ' %l27031>?654&#"'&#"213292"&'&13276767327>7654&#"#"'&7>?05?654&2'.767651>Q GF Q 1)X  $"=       @  D!4oWLLWF N>44 ,F  "      # H,)' Q/!)a'&#"76767&767654&#"&'&76762327327676764&#"6767676'&'"'"41&'&'&'"1>7>767623&'&'&'&76+$5%L/  0'6A`&53 $#  0   @( (2&1  1)7 " $4" %&! 0!~+ '%V*     +  fUp@( $?n]o9 !/ ' 2cx0#"&'&32767677676=4&"'&747676767>7654&#"#"'&7>?41?654&2'.767651>R 1*X % $!=$ /       ?  C!42 N>44 ! ,F  /          # H+)' Q/"(e832?64&'*&76767676'&.7>676'&CQ Q$N'&8S   G1""C! X W mih97    01]]_  "P"32?64�32767767>7654&#"'.767651>32654'&'&Q Q @$C % $!./   %!"D"   -W W 3*  ,F      Q/*( ) 7e%L"#132?32654/&'0"5#0"9&&76767676'&.7>676'&R GF QMN'&8S   G1""C! X LL Xmih97    01]]_  "%e"#132?32654/&'0&1#0"51"32767767>7654&#"'.767651>32654'&'&Q GF Q$C % $!./   %!"D"   -X LL X3*  ,F      Q/*( ) 7e&&76767676'&.7>676'&N'&8S   G1""C! mih97    01]]_  "'?32767767>7654&#"'.767651>32654'&'&$C % $!./   %!"D"   -&3*  ,F      Q/*( ) 7e&&76767676'&.7>676'&N'&8S   G1""C! mih97    01]]_  "'?32767767>7654&#"'.767651>32654'&'&$C % $!./   %!"D"   -&3*  ,F      Q/*( ) 7 CS"327676'&'654&#"&'&767767676'&'.23'&'0'676B 6_  4h)M'6=D.4  /  ;7PF9/I  $  @<f 'N6:EAJ f   TFL>;Z.>T"&'&3276767327>7654&"#"'&7>?654&2'.767651> o1)X & $"<        B!4 >44  ,F  "     G*%'$ Q/!) CS"327676'&'654&#"&'&767767676'&'.23'&'"5676B 5` 3i)L' 6=D/3   /  ;6QE:/H  #  @<f 'N6:EAJ f   TFL>;Z.>T"&'&3276767327>7654&"#"'&7>?654&2'.767651> o1)X & $"<        B!4 >44  ,F  "     G*%'$ Q/!)> A">7654&#"#&'&76767>3>54'.'&76762654&<$=^ O5'D+  %;#& O!  $4/) 6 ,&.8+ $[8g$  ))*K    8""# (5!%>R03276767767>7654&#"&'&723767654'&'&2'𐡜-  ^0  #A  g*    "_ &%:  8"   )     2H'i2707126?654&#"'&#"03213092">7654&#"#&'&76767>3>54'.'&76762654&Q GF Q<$=^ O5'D+  %;#& O!  $4/) 67X LL X,,&.8+ $[8g$  ))*K    8""# (5!%cw27031>?654&#"'&#"2132923276767767>7654&#"&'&723767654'&'&2'𐡜Q GF Q-  ^0  #A  g*    "_ &oWLLWJ:  8"   )     2> A">7654&#"#&'&76767>3>54'.'&76762654&<$=^ O5'D+  %;#& O!  $4/) 6 ,&.8+ $[8g$  ))*K    8""# (5!%>R03276767767>7654&#"&'&723767654'&'&2'𐡜-  ^0  #A  g*    "_ &%:  8"   )     2Mb"#77676=4&"'&76767>7654&#"01"'&'&76767>3>54'.'&76762654&'<$=^ O5 % / 1  8& O!  $4/) 6&,&.8* $[8g/    %  .()*K   8#""  )44.dz"#0327676776765054&"'&747>5276767>7654&#"&'&722176765&'&'&2'&'6767672.  / $ /       #A  h)    #_ &.;  8/      )     1> A">7654&#"#&'&76767>3>54'.'&76762654&<$=^ O5'D+  %;#& O!  $4/) 6 ,&.8+ $[8g$  ))*K    8""# (5!%>R03276767767>7654&#"&'&723767654'&'&2'𐡜-  ^0  #A  g*    "_ &%:  8"   )     2 q%k~""#132?32654/&'4"'1*#1"7677676?64&"7654'&#"'.7>32654'&'&1#&'&76?43RGF QD~ &8ON? `   8Y +, &3BC1""C! '$"W KK WlVh/` " Y +w 0?&]]_  " ^ Y(cw0#""10132?32654/&'&"'10"#10#"&'&327677767673?64&"7654&2'.767651>1#&'&76?41Q FG Q 1)X % $!13a    8X +O  B!4"W KK W N>44  ,F &` " Y + # G**&% Q/!)^  qEX7677676?64&"7654'&#"'.7>32654'&'&1#&'&76?43D~ &8ON? `   8Y +, &3BC1""C! '$"lVh/` " Y +w 0?&]]_  " ^ Y);Ob0#"&'&327677767673?64&"7654&2'.767651>1#&'&76?41K 1)X % $!13a    8X +O  B!4") N>44  ,F &` " Y + # G**&% Q/!)^  qEX7677676?64&"7654'&#"'.7>32654'&'&1#&'&76?43D~ &8ON? `   8Y +, &3BC1""C! '$"lVh/` " Y +w 0?&]]_  " ^ Y);Ob0#"&'&327677767673?64&"7654&2'.767651>1#&'&76?41K 1)X % $!13a    8X +O  B!4") N>44  ,F &` " Y + # G**&% Q/!)^  qEX7677676?64&"7654'&#"'.7>32654'&'&1#&'&76?43D~ &8ON? `   8Y +, &3BC1""C! '$"lVh/` " Y +w 0?&]]_  " ^ Y);Ob0#"&'&327677767673?64&"7654&2'.767651>1#&'&76?41K 1)X % $!13a    8X +O  B!4") N>44  ,F &` " Y + # G**&% Q/!)^ "%""1"32?32654/&'0&9"""3276767670?6767767>764&#"'&'&?65676767676'&4167017676'&'&&'&27676'23'&'6'45676kR GF Q$   s *"  (vLU  #  d #  "#8B]d     > X LL X9 / 5   jM4   )   , ']&.<   . B  "%""1"32?32654/&'"""""01"127676732?21676327>7654&"#"'&7>?6'&'&"#67676'&'&21707>7670QFFQ T. !=  ? !        .22= W LL W 5   3 ),2"    ;584($! %5" |"3276767670?6767767>764&#"'&'&?65676767676'&4167017676'&'&&'&27676'23'&'6'45676$   s *"  (vLU  #  d #  "#8B]d     >  9 / 5   jM4   )   , ']&.<   . B  "cz""01"127676732?21676327>7654&"#"'&7>?6'&'&"#67676'&'&21707>7670 T. !=  ? !        .22=  5   3 ),2"    ;584($! %5b FQ"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6#       (    b 9 / ^%% -   xM"32?654&#276767327>7654&#"#"'&7>?617454�    $  6.         4 x . . O b/  %"     b FQ"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6#       (    b 9 / ^%% -   xM"32?654&#276767327>7654&#"#"'&7>?617454�    $  6.         4 x . . O b/  %"     b FQ"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6#       (    b 9 / ^%% -   %c27031>?654&#"'&#"213292#276767327>7654&#"#"'&7>?617454�Q GF Q  6.         4 oWLLWF b/  %"     b FQ"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6#       (    b 9 / ^%% -   xM"32?654&#276767327>7654&#"#"'&7>?617454�    $  6.         4 x . . O b/  %"     b FQ"327676'"'&'&7454&#"67056167017676'&'&&'&23'&'6#       (    b 9 / ^%% -    'z"#1#"32?32654/&'0&1#0"'1""3276767676716?64&"6767076167017676'&'&&'&23'&'61#&'&76?41R GF Q#   j^   #[ ,j   b"X LL X9 /  6.F^ " 7bZ -77    ] %Vi"#132?32654/&'0&1#0"51"#"#27672617676?64&"7454&##&'&76?61Q GF Q 8/  -`   8Y +O"X LL X c/ z` " Y +^  "327676'"'&'&7654&#"67257>763676327>7654&#"#"'&'&54>76'&'&676323276&#"74167017676'&'&&'&23'&'6$   ZA!    ) C    "#    $  1#X7  ##Da(>9     a 9 / %% -" &(# )  ) *P7<#Z 6c)L   eWg&"7>777673276767676'&"'&'&576767654'&'&06767676'&7676'&#𐡜2  S..  !@  ! ,    .$  %*  6 2@  (! 5.%$ ([' *"   !     9 )%"#5 0Sc32?64&'0"&'&76732767654&#"#"'&'6763276&'&23'&'0'676Q Q X/  <43$"*.6 '!    $ X W g    ( !   -!9-La""101276767327>7654&#"#"'&746?6767676'&'&2#705>76 S-         16  3>  5 A"     9($! %5BR"&'&76732767654&#"#"'&'6763276&'&23'&'0'676[/  <43$"*.6 '!    $ g    ( !   -!9-La""101276767327>7654&#"#"'&746?6767676'&'&2#705>76 S-         16  3>  5 A"     9($! %5BR"&'&76732767654&#"#"'&'6763276&'&23'&'0'676[/  <43$"*.6 '!    $ g    ( !   -!9-La""101276767327>7654&#"#"'&746?6767676'&'&2#705>76 S-         16  3>  5 A"     9($! %5BR"&'&76732767654&#"#"'&'6763276&'&23'&'0'676[/  <43$"*.6 '!    $ g    ( !   -!9-La""101276767327>7654&#"#"'&746?6767676'&'&2#705>76 S-         16  3>  5 A"     9($! %5fx"676767&'&76732767654&#"#"'&'77676&#"'&'76763276&'&'"23'&'0'67672g>   P/  <43$ "*.6V" 9 '    %  #       ( !     -!9]E32654'&676767654&#"#'&72567654&#"'.'&#&W5   6    ( '   89 6* 6 #B 2+ }* 3 1   P32?64&'0"# &#""1#"'&7454&#"32767327056763632654'&'& Q Q \! c     &! b    X W  d 2   % 8    i32?64&'""132767>732?43676327>7654&"#"'&7>?6'&'&5654&#2R R ) ! ?  ? !         /,) X W )+1   ! 3 ),2"     ;58 @"# &#""1#"'&7454&#"327673270567636032654'&'&h! c     &! b      d 2   % 8    *X"132767>732?43676327>7654&"#"'&7>?6'&'&5654&#) ! ?  ? !         /,) ))+1   ! 3 ),2"     ;58 @"# &#""1#"'&7454&#"327673270567636032654'&'&h! c     &! b      d 2   % 8    *X"132767>732?43676327>7654&"#"'&7>?6'&'&5654&#) ! ?  ? !         /,) ))+1   ! 3 ),2"     ;58*X"132767>732?43676327>7654&"#"'&7>?6'&'&5654&#) ! ?  ? !         /,) ))+1   ! 3 ),2"     ;58 @"# &#""1#"'&7454&#"327673270567636032654'&'&h! c     &! b      d 2   % 8    Mc&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&767676760   ;)h/C0!""#  ('' &8N8x/ (    &   " 4  ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& M$4DT#32767767767654&#""'676'&'&&&'&67672&'&547632' %^0    #A $&=    $1  8" "  =:  '1%),c  15* Mc&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&767676760   ;)h/C0!""#  ('' &8N8x/ (    &   " 4  ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& Mc&'.7676767676'&677676767676'&'&#'&'676'&'&'&&'&767676760   ;)h/C0!""#  ('' &8N8x/ (    &   " 4  ([5X=1'].%# ()4h/9     #)i^-!  'S]#6O0T& M$4DT#32767767767654&#""'676'&'&&&'&67672&'&547632' %^0    #A $&=    $1  8" "  =:  '1%),c  15*  -Tk"#01"'&7>7654&#"'"'&76767>3>54'.'&76767063036362322654&7'&'&676 (*PSQK 8'KP"OD+  %;#& O!  $4 & 6 =^ %A;AEH/  76^-A0$  ))*K   8# " )4$ %)8* $[63%RT0$n&'&'&&'&767656767654&#"#032767767767>7654&#"&'&76767654'&'&6676766&'&'45&&#A " -   ^0(^0   #A l.   (c&  #/   2)+1+    ;  8" 2 8"   )     2 t32?64&'0""#327>'7654&#"'"'&'&7454&#"67257327>7654&#"#"'&'1&'767676&'&Q Q~GG 4j%U !OAC  !    ) M+D #"     @)EJ'50!X W %   \$+ U%% -bk! )  )e]"8Q G)O"73454&+"#276732?476767767654&#"'&'&'.5&'&'&'& &   6. +  6$  ) *# b/ w + T  "  R  b"#327>'7654&#"'"'&'&7454&#"67257327>7654&#"#"'&'1&'767676&'&*GG 4j%U !OAC  !    ) M+D #"     @)EJ'50! %   \$+ U%% -bk! )  )e]"8Q G)O"73454&+"#276732?476767767654&#"'&'&'.5&'&'&'& &   6. +  6$  ) *# b/ w + T  "  R  b"#327>'7654&#"'"'&'&7454&#"67257327>7654&#"#"'&'1&'767676&'&*GG 4j%U !OAC  !    ) M+D #"     @)EJ'50! %   \$+ U%% -bk! )  )e]"8Q G)O"73454&+"#276732?476767767654&#"'&'&'.5&'&'&'& &   6. +  6$  ) *# b/ w + T  "  R _?32?64&'"0&.7654&#">&'.>3276&'&NQ Qh*G-30+#]`,  6wt,6<'#KN#  .2X W /(3b\a+#]0 ;t,6xsKN#K' 2b'h"32?64�"32767"#"#'&'&#"72?67>4&#"#676'&'&'&767654&Q Q J- <  90    %E  %  W X $D, M.         !   \*X0#"10#32?32654/&'"1#4#1*'1"&.7654&#">&'.>3276&'&Q FG R*G-30+#]`,  6wt,6<'#KN#  .2X LL X/(3b\a+#]0 ;t,6xsKN#K' 2b'%}"#132?32654/&'0&9*'1""32767"#"#'&'&#"72?67>4&#"#676'&'&'&767654&R GF Q'- <  90    %E  %  X LL X$D, M.         !   \-&.7654&#">&'.>3276&'&*G-30+#]`,  6wt,6<'#KN#  .2/(3b\a+#]0 ;t,6xsKN#K' 2b'"W"32767"#"#'&'&#"72?67>4&#"#676'&'&'&767654&- <  90    %E  %  "$D, M.         !   \*X032721050326?654&#"'&#"2312312&.7654&#">&'.>3276&'&Q FG R*G-30+#]`,  6wt,6<'#KN#  .24W LL W2/(3b\a+#]0 ;t,6xsKN#K' 2b'%}27031>?654&#"'&#"213292"32767"#"#'&'&#"72?67>4&#"#676'&'&'&767654&Q GF Q- <  90    %E  %  oWLLWM$D, M.         !   G&32654'&7676'"'&'&7654&#"670765457654&#"'.'&>'    $>(!    ) "`c ZUe !   U%% - 62~O0#0##0#";32767327>7654&#"#"'&7>?3264&+7654& != 2 &         6: /~ \ 6   "     Q G&32654'&7676'"'&'&7654&#"670765457654&#"'.'&>'    $>(!    ) "`c ZUe !   U%% - 62~O0#0##0#";32767327>7654&#"#"'&7>?3264&+7654& != 2 &         6: /~ \ 6   "     Q G&32654'&7676'"'&'&7654&#"670765457654&#"'.'&>'    $>(!    ) "`c ZUe !   U%% - 62~O0#0##0#";32767327>7654&#"#"'&7>?3264&+7654& != 2 &         6: /~ \ 6   "     Q  K#"'&7616'&'&32767676327767654&#"'&7654&'* c52j     j#6 Q@ )/  %   737327>7654&"#"'&7>?654&#"1'"&'&?654&#) !  <*      E  @"U  ))+1   !@8) "     ]08A) K#"'&7616'&'&32767676327767654&#"'&7654&'* c52j     j#6 Q@ )/  %   737327>7654&"#"'&7>?654&#"1'"&'&?654&#) !  <*      E  @"U  ))+1   !@8) "     ]08A) K#"'&7616'&'&32767676327767654&#"'&7654&'* c52j     j#6 Q@ )/  %   737327>7654&"#"'&7>?654&#"1'"&'&?654&#) !  <*      E  @"U  ))+1   !@8) "     ]08A)["264&2"&4#"'&7616'&'&32767676327767654&#"'&7654&'*J@..@-a(( c52j     j#6 Q@ )/  % .@--@'' 737327>7654&"#"'&7>?654&#"1'"&'&?654&#?@..@-a((W) !  <*      E  @"U   .@--@'')+1   !@8) "     ]08A) K#"'&7616'&'&32767676327767654&#"'&7654&'* c52j     j#6 Q@ )/  %   737327>7654&"#"'&7>?654&#"1'"&'&?654&#) !  <*      E  @"U  ))+1   !@8) "     ]08A) K#"'&7616'&'&32767676327767654&#"'&7654&'* c52j     j#6 Q@ )/  %   737327>7654&"#"'&7>?654&#"1'"&'&?654&#) !  <*      E  @"U  ))+1   !@8) "     ]08A)+0#"101#"32?32654/#&'"*'10"327676767676776767677654&#"#"'67674'&'&'&'&76567>7454&#"'&547676'&'&&7676lQ FG Q    CK  CK>:   $9;D6  B A D6    X LL X)Wa*T "TDk22 & 5&65hBK 3D )L K'& K '^]. "  '"#1#"32?32654/&'0&9*'1""#32767>7327677>7767654&#"'&'67674'&'&'&'&?654&#"#"'&'&?654&03&7676760R GF Q) "  +$ $<    8  E  B    X LL X)+1   !-@!% /  ("(   /'"3&   :'A)! #+ '"#1#"32?32654/&'" "5#0#"'&7416'&'&327676763277676716?64&"656725654�1#&'&76?43Q FG Q |b53k    k"7 G< _   Z ,| !X LL X 7377676?64&"7417654&+"'"&'&?654&#1#&'&76?41Q GF Qn)  !  .&`   9X +@ A"T  @"X LL X)+1   !@8` " Y +) Z08A)^  i s";264";264&##"'&7416'&'&327676763277676716?64&"656725654�1#&'&76?43    ~    a |b53k    k"7 G< _   Z ,| !h]  {"32?64&#"""&'&'&327>7676:&367676767>?64&#".'&'>77676'&'&6'&'>70>23#"'&7676BQQ  #!'    ,!   7".#    "2  , 6I      W W   ,$     %A>&2  ,  '  { }";264&+""&'&'&327>7676:&367676767>?64&#".'&'>77676'&'&6'&'>70>23#"'&7676    B #!'    ,!   7".#    "2  , 6I      r  ,$     %A>&2  ,  '  {(0327070126?654&#"'&#"2310130""&'&'&327>7676:&367676767>?64&#".'&'>77676'&'&6'&'>70>23#"'&7676Q FG Qa #!'    ,!   7".#    "2  , 6I      kX LL X<  ,$     %A>&2  ,  ' 9N   "$(!   =X W $+(7!D#@OQQCCLJD FHuE?  8.!#0 8;"32?64&#"%&&'&32767606?4>5>7767>764&#"'"'&5465&06536767676'&677676'.'&21&'67667676'&5&7676R R 75&/  %(=8#%ArmP! 1#)0  !/3 Znh7   )  $ $ D (WX $ N C  @44!  )'x|jA{(    ! 9 (  =   ?+=Ihq     %!F.R"|br32?64&'"72?654&#"#'&'&5&76'&'&'&7454&#"767677676'&'&&'&21'&'676QQ 2   "95>     &!=  >  X W ( V!   D  5 =!"E   ! (32?64&'0 &>76..76iQ Q/q{fDq{fӘ7&&7&&X W 33`d43_dE넄Fꅄf32?64&'"7"#7>54&#"#'&7>721632767.76767632654'&767674570054&"#"'&'54'&Q Q 6I 7 '>- )-XR:  <0  $ H$( "*1EH$$ X W . J+.   ">  dw?G>-(  #/*    2"@ /Sg a.498n'!+32?64&'*$"264$2"&4&>7&EQ Q̢tttLyUrVcX W ܝŊ*   )S";264";264"32?64&#"0"7>?654&#"'&'&'&7>?654&7    ~    "Q Q  /  %  X W ,9sA#  7i0  19B"'&'46?654&#"7676?;3265454&#&'&+"    (" D  O 4        & ' C ^( Dz"#"265>767'&'&'&7454&#"76765&767670"3#&'&#"727676&'>'&'&'67654&#4%UL"* &M     &!G/(%&5'!@A'$(G 2* ,@$OLJRE*4.  Q$V(  M!_n 5 =!"lX"&&*&N    <6&'&'&67637676&"'&'&'.676&gJ0:  ?N!8%&E4  A7Rn~2B- #2-S2 ? 5HE, 4/ C O>; $ , MH JGZs&3276&'&'&'&7>176767674'&'67654&#"#&'&'&'>76'&'&'&'&76767`z X,!NOe    # NFC6F#&   (8 c $!:1>;E lK   1?/1"&  %!  =5Pn   : tiL(77- "7     NK&76767454&#"".7676032654'.'.767632654'.P5-) Q9GHHQdqm ?,j[E>9N   "$(!   =+(7!D#@OQQCCLJD FHuE?  8.!#0 8;kx&&/&#"3276'767&76767 767>?654&#".'&'01676767676'&'&66762'&'&'&7>76 Q     S?0*#. ! %>"  ;X&  *Q00<#%B%           Z4 5J -"& D, K$ "#D#/   D  |&&'&32767606?4>5>7767>764&#"'"'&5465&06536767676'&677676'.'&21&'676607676'&5&767645&/  %(=8#%ArmP! 1#)0  !/3 Znh7   )  $ $ D ( N C  @44!  )'x|jA{(    ! 9 (  =   ?+=Ihq     %!F.R"]n"'&'&767676'&'&#"3276767632767676'03264&#&'&'.'&6&'&'&'&76>&%- P>c EI_*&%  &&,    ;   ,19kPJ#F BP U7.K _9D !!(+?+!7-nci'&2  ,&'  <   =-2 tjv-3  ;2     &!=  >   V!   D  5 =!"E   !o3276761'"'&'&7454&#"76717672327676:327>7654&#"#"'&'&54>7>&'&'&>7676323276&#"677676'&'&&'&21&'676/  $( 8)     '"#%    --   )$"  $%J,#(( -,30&.c    M A   4 < ' )  6, 7/7   7, )8 4C p=!(  E(@*      |32654'&'&7676&'&767632654'&'&'&7676767677676'./&#"'&'.'&'&'&#";0.   )+2B(  -3K$   2 _=9($%,;H(,   @;/#""#/QFCL9"   1D<@>2g4?G-=&40,/0  >85;C0"A0n=>'.2B#   2H:(hl6J P26320767632&'&'.5&#"'#'&'&546327276766546 n &2$ (<1 c(-        j -Q$ JT # &# ߹ * # M@E20#"'&'&##"'#"'&76323276766546327676<"    !  '*0   & !  '  gjk gn /  = 4 +"#&'&'&32654'&'&7676&36767&#&767767676'&'&32767676'&'&'67767676'&'1&.'&'>77676'&'1&60'.#672>01"'&767660'672>6'&'&76769! ?2'#    <(<p2" "`~R!/ '0'8&Um1R 610  #     U-K0mD%x%  $!kn 3 $'      @0" &  % #  &% " (|t , ". $ 32:('1    !! 3X  % xx   , %'         &  &>76..76q{fDq{fӘ7&&7&&33`d43_dE넄Fꅄ:\ 7.54767$7&'""'&'&'&#"767454&"327654&#"#"'&'&7454&#y)% P 7=5'26#  %;:029J8  . oS Ja  . "!7'$(9$ '*A E/-!,H --eZ '' *@d"#332654'.76767>/"#"37>76&'&"'&'&'&7454&#"767454&U5oF  <+7M?7.e4&# +=l5=0 =    &!> %#I6& ,A &k;0^ d:D+ ] 5 =!"G qHU676&7671767>?6&'.'.167676'&'&76&2'&67676 9<4"( +."(V@)""*PQ #(B  ?%''!16(< 0CGA  ,+J5*1')L    *5NMR39 %?0 \n&'&'&032654'&'&7676767676'./&"'&'&'&767767676'&'&2'&'6760#&&'#   $-  'N42- (  &'$=" ''*  2  ( * 4   " 4,- %#+jjJj 2,6"6  +,&& ZFe|e'  # . fp"#7>54&#"#'&7>7216032767.76767632654'&76767457054&"#"'&'54'&6I 7 '>- )-XR:  <0  $ H$( "*1EH$$  J+.   ">  dw?G>-(  #/*    2"@ /Sg a.498n''7@L"#"'./&#"3276567>'&'&5"#54&#&'&767622!^AZWJb)     %2 +WM(- L>[ WAMQ9yL4D (#CLh :PzOC.#  1>7 N(a/I;g;FlH22A'V$D _l&'.7654&#"'&767676&'&'4&#"7>?07>?654&#"'&'6762326545&'&" >M3#  "ZG, "'  1++!5 ;P!7  +9]J       -'#%C1  #;, = J(" 6$& )  / ! !  & -6'&'&7'&'6&/#0'.7>7> 76'&'&'&767>?''&7676761767'&'&7'7676703767>7676767>?2'&'&7676764) .&  ". %<  :+$  .    $%%1,# H$8(1$H.--&<+  D% #!  02_0562;) 0 * * E&' />,N&    /< ,'1:    *)' 6(    ),100 bH!6#(EU8/""-Mi5 !+ ';p4+45 3+ "264$2"&4&>7&V̢tttLyUrVcܝŊ*  |K iy";264";264&#2?654&#"#'&'&5&76'&'&'&7454&#"767677676'&'&&'&21'&'676    ~    2   "95>     &!=  >  Jw V!   D  5 =!"E   !f ";264";264&#"#7>54&#"#'&7>721632767.76767632654'&76767457054&"#"'&'54'&g    ~    6I 7 '>- )-XR:  <0  $ H$( "*1EH$$  J+.   ">  dw?G>-(  #/*    2"@ /Sg a.498n'%BV32?64&'"0"2767767654&#"'&'&5656764&"&'.2"'&476Q QY5%$$%k%       1,M%X W 30122%0 +2 S  %= . &&)t('A%[32?64&'"0&767>?654&#"'&'&67632654'&'&76767632654'&'&Q QU #+1.6&7  /,&&    ! +%X W  " B$4!/  (&0      !e%k32?64&'"&&32654'.7>36265676767>?654&#"'&'&'&7>?65&'&!R R Q+!      #       %X W % "      =JH   C C %;32?64&'"0"7>?654&#"'&'&'&7>?654&Q Qj  /  %  %X W  ,9sA#  7i0  $#U0#";03264&+30#";03264&+7676'./&#"'"'&'&7>?654&e         !%'+*(%"      o$.^0* #!)1a+ %,W'"#&T(  I0D"2767767654&#"'&'&5656764&"&'.2"'&4765%$$%k%       1,MI30122%0 +2 S  %= . &&)t('QO 0326567636'./.#"767676'&'67676'&'&.&  '#!!$%.[FP#'HU*   4dV/)^/E#-"$1 (m <(((:(1 18y@).8 $"F90JB! 0F2/2 AUT0?32?767676'&'>767054&"&'&&7>^;  ,I<& / .D 9@G&  &2 Td JL?;<$:4S ȇ MmH+1 e1!E@W"210#&#"2764'4'&'&'&'&'.'767654&#"'&23271"'&476#   ;G6&##&l%$$ N ;  WW6 -I^N  !4cx3003300 "b4>J ?UN  )u)&&)u)&ARI&767>?654&#"'&'&67632654'&'&76767632654'&'& #+1.6&7  /,&&    ! +Q " B$4!/  (&0      !:X"26547676'&'&'./&#"7676&'.'&76767654&#"&'&N   Y>& k"v99),3   D6, @Bq^ wZ *d "M>     +rʁQ:#>F;A"( *+& OBMG(7HriQ  eWZ&&32654'.7>36265676767>?654&#"'&'&'&7>?65&'&+!      #       V% "      =JH   C Cn=N'&'&767632654'&76767232654'&'6'&'&6&'&'.7676V&C2$[ $(+/ '$6 @.2 !%@:2'  ")C3   W +;P/U3] 9*<,25562   ?B>D>1B+9  qa`7C 51ZZlR'O*? Q)"7>?654&#"'&'&'&7>?654&W  /  %  Q ,9sA#  7i0  X1"126=273265&'&'67654&#"6&# A%3  9,Q5  !O1 W  ,= D##Z 9: | >0x"7654&#"'&5>&'&&'&67>?654&#"76767>.'.76767626=4'&'&33B'.I 7"18.E++      * K 3/+5'   : #< &1=9)1  % ,/$ >8@ / )"/&*-&# 8+1 % * ;0=)-!119R"(( G>K >Y5"265067232654'.=4&"'&'&54�" !7"G  P),   "#"   !E@F;? P"2767654&#"&'&# V\ I!GO   u{4"123276'76#.'&7454&#"767676'&'&5&763264&#"'&'&'&767>?654&#"#'&'5&#      -8&0;!.%F)2jO&-12/   :3: 390\]);>c l #7@ t@[<  36M' e`! (*   7RH%/ $)aUU+/:H:4 .YYr5,&:D-1      RI "2764'&2"'&47k%$$%k&##MMI3012210'(t)&&)t(Z+"265732654'&67>54&#"#'"#0"), JJYM  L\ Z  7  8LIDP""10'&'&7632654'&76767>.'&'2764'&2"'&475%     "  %l%##%]MMI2(49.C&% ,;KA   #! FQ8/g.22103'(t)&&)t(.KE76'&'46?654&#"7676'4&'&'&767632654'&'&!+'!#"$"$#    ++-/*-S3%    J  !#   + #&..G     oa8"7654'&3036'&'&'&67632654'&'&No97=4175?~r5****1/0a@%6  3a |M:0/%'2K+3   +"=#('/>l    T3"77654&#"'&'&7676703654&#"#&'&# t3#Io `:/-6  b`7T   $-$>(?  7!B (   $N17676'./&#"'"'&'&7>?654&[ !%'+*(%"      N$.^0* #!)1a+ %,W'"#&T(  ;9?E32654'.'&'>4&'=&'&'.'&#.467  OmmO  LiiL  OC[[a@WW@  ndd    gcdnSrSSnS2.Qs"032654'&'.4>3&/&#"6767>732654'&'&'.'676767032654'&'&#"&'&'&'"w/    -     &4(x:5 2 OG   !  "Q!    :D~O  Hn(s    WIT  #$2/)~ G>".54767654&#"1"26=>54'&'&#"54& AYkM NkYB S8#-0 81(Edf dE(18 0-#8Sa OC"1"32767327654&'&#"#"'&54&"#"'&54>7654&n@L%  &K@,# /; ;/O%M1K(1;;1(KFR C-B""-,UU,-""B-C  #M0#";03264&+30#";03264&+"7>?654&#"'&'&'&7>?654&%        O  /  %   ,9sA#  7i0  $#U0#";03264&+30#";03264&+7676'./&#"'"'&'&7>?654&a         !%'+*(%"      {$.^0* #!)1a+ %,W'"#&T(  %)32?64&'"0"2764'&2"'&47Q Q#k%$$%k&##MM%X W 3012210'(t)&&)t($%C32?64&'"07676'./&#"'"'&'&7>?654&Q Q !%'+*(%"      %X W $.^0* #!)1a+ %,W'"#&T(  %T32?64&'0"1"32767327654&'&#"#"'&54&"#"'&54>7654&fQ Q @L%  &K@,# /; ;/%X W %M1K(1;;1(KFR C-B""-,UU,-""B-C X"2646"26476767654&#"'&'&76767>3>54'.'&7672326545&'&@?H,$,$*!q 5W-     "G$ a!(  -?":"   !37.7"@ +mC9A 3  / ' 01;\%   F ,&+(  7skt"&'&#'.'.=414&"76767021632?72767654&#"1"'&'654&&'&'6762"'.7676&6d VA$17$,#$   "-&/ <,  #        K> *%$  % h!'! Y#" '// ,  . /  V    7&$'U| 5'' =$JTp"3264'.76763!264&#"7676776767654&#"0"16'&'&'&7654&#231'&'&'74376'&'&'&7676726P0,   ")H=  a6*& *d+ &(  -'T   &'"d&SS #(3,&S D  G +3/A"  #'  HY/$  ''T 3 <*1)Ju"654&#"76767727>767654&#""1676'&'>7>'&'&2'"1"'&'&'&'741676'&'&'&7>7>7>"   '#% $$?/ (  .3-B'  T7 N'%5 *v % 2!6,.R'   $   US8" 3B%:6  GFI %}h  " B.tP"3264'.76763!264&#""1'&'&7454&#"7676767654&#""654&(P0,   ")H=       ,*! &'     ,&S D  * 4 >$"&   `n&326545&76#&'67654&#"00&1.'&7727676767654&#"67>'&'&'&2'&'&7676Za=&   CBt0 $<01     $ #:&) 96 ( =% &< ?& /[7 ^33 %!86n)\C    #   F].t3>54'.'&7672326545&'&H+%,$*!q 6X1    'I$ a!(  -?#9"   !7.7"@ +mC9A 4 ) 01;\%   F ,&+(  7"654&#"6'&'&'&327676767>7676732767767>?654&#"'&'&'&7676767632326541&'&'&'&'47676!N  'LI $53$   )&   M< %0"//i">@ ww)  $   'x%*   "U#+! 5V  3767654&#"676'&'67>76'&J/6  .$  (v K(>.5#  -=7 (  I2)N%% =0 /?f"!   '!%  vO! -B"(v"'&5&76756'&'&'&327676760#7676767767>?654&#"'&'&7676?4616?654& cBN4(  "    *6      $!a  xjE$   !%& $#-   %H!32      .RN@"#&'&'4&"127654&#"'&5&76756'&'&'&327676760#7676767767>?654&#"'&'&7676?4616?654&/   0@ % cBN4(  "    *6    $!a !   L K xjE$   !%& $#-   %H!32      .RN@0""#'&#&32767623767>?41>7676767>?654&#"'&'&'&>7676'&'&67676323276&#"76767654&/&767676n &  $ `N 3 m         !   7)/"  )(-7+9 3  > 1 0 ) l(>,    .        7"%2.#%E#'!>.%Hz a *<lQ"01'.'.5'.#"767671767>?654&#"'&'&767654�\ B     ᆊ      .^           }""&'&767654&#"1'.'.'5.#"76767176767670767>?654&#"'"'&76?65654& }372$   B     ᆊ %3     Y|  QLE&   .^     'GM       ,{t"'&'&32767630"76741767>7767>?654&#"'.7>?6767676'&"767654&#"27676'&'&7676$$  " mb'7-(]h#h    " w6+  &":$"Kc  * Q 40 * &0D'#"'       !"6 .#   *0f& $A&,M"7676767654&#">7676'&'&2'&'&76767676h""/0Q1  +5< #( *F, *  *F*0) 2/M,*7].,%8%/   0x5vE7$- 0Br4x.  25{Y2 Fn"3264'.76763!264&#"767>?654&#"'&'4767654&#"#'&'./&#"7276761654&P0,   ")H  !    2* *    5'04,&S D  > 6         w\"    %c ^$c&326545&7>"3>76&'&"01#'&'./&#"727676767654&#"6741654&#W:&  E Z9AEJFO^SK -'+    5( '(   /_7 `7 Q0/C  U::d? wS$       !.  x?"#0#17342513764&+"'&'&'&7676716326505'5&'&YIbb&''E;H I2: %%\Y>  w^]zxZ00I H*'TsrXV&0FV"3264'.76763!264&#"767>?654&#"'&5&767654&#"327654&"#'&'./&#"7276741654&#P0,   ")H?  !        2*+    5(/5 ,&S D  > 6          &  w\"    %c x"'"&'&767676'&#&32767676276701#'&'./&#"727676767654&#"6743654& DB%'  .  "# # 0 5.J-'+    5( '(   a#%?D%#  "  " !HB+ ,S$       !. }av"&5&'&70##'&'./&#"727676767654&#"67437767676'&'&7654&6'&'&76767672'.'&767676  %.'  $D4;,'+    5' ''   A C<( +(   +0R $* $.3 !! =( %0?J)".S$       !. 3#:<="  " %;GO"C:," 775(0U+ o&327>'&'&7654&#"76767067654&#""'&'&7676767632656'&'&4656'&'&g7n!  $|. 2/M,*-)    *49/0 +<(  242 2/M,*.(   *49/0 +IBH= 25|Y2 1 6%-7#. 8%/4O %0 25{Y2 0 7$-7$.9$/i"'&5&76756'&'&'&327676760#7676767376767676?64&"045454&#"'&'&7676?4616?654&'&'&7676 cBN4(  "    *6     Y    $!a    xjE$   !%& $#-   %H!32 ! &0X   .RN@a'#   }f&327676762767065767>?654&#"'&5&767654&#"'&'&767676'&"&  # ) #\" '   @# %   $ " !<=#      6  66%# "'&5&7674656?654&#"'&5&76756'&'&'&32767676#7676767#7676767767>?654&#"'&'&7676?4616?654& cBN4( u`  b<]7+  "    ,9"5 *6      $!a  xjE$   luF$   !%& $#-   &H'0   %H!32      .RN@i"'&5&767654&#""'&5&76756'&'&'&32767676#7676767#7676767376767676?654&"46705454&#"'&'&7676707074616?654&'&'&7676 cBN4(   ^V.6*  "    -8"5 *6     g !(   $!a    xjE$    )9F$   !%& $#-   &H&1   %H!32 ! &0 ] #  .RN@^% #  S&327>+";011'&'&7654&#"7676767654&#"67676'&'&g7n!  $|. * 0I-)    *49 &'   M/3 +IBH= 27l xU  1 6%-   \{89$/x""176767654&#"#'&#&32767623176741767677676767654&#">7676'&'&2'&'&76767676'&'&7676""/07-("Ib    '  % na'7-']g#  +5< #(   *F, *  *F*0) 2/M,*CQ 57@[    0 ) %1D'#"' .,%8%/   0x5vE7$- 0Br4x.  25{Y2  $A&7ay"&5.767'.'./4&#"76767767>?654&#"'&'&7>?675654&6'&'&7>76( ;#?c  0R       YT      ## Z4 B! kB#$+ i    !{      <0 *!/"  9a v"Ph"&'&'&'&3276776776767>?654&#"5&747>7025654&22'&'&5>760   22  +&    2  k  # &&"" !  (  !#       &m#  O'%  (V85Sm"&'&'&'&3276776767>367654&#"067>7>76232654&'&22'"'&767676) ; 22   ;  (   0M  P -  -' &"5 2G  (      ,g   `  ,,+7j|3276767767>367654&#"676'&'&32767676'&'&567676767654'&'&267676''#'*C2   ,C  .; (   '  *+  >1P N#% 7+&K5c.# .)+ ,  +0;    *($-! %#H63R4   1O!5%G#!/#K"132?676763?41764&#"'"'&'&76767676'&'& ;;   )'/'( '&$+#  Y X    ! * )   = ^u"00&'&'&03276767701723>765>756767654&"6745654'&2#'"#&'&5&676#"'&51&72762   >>"   ;I% !  ($ . g  *&0 !+    $F ,  =!   2:4") /*$! dR ! ' `- +Q* ) ' $8 ;M"327>13767654&#"'&'&747>767676'&'&267676,++    <3D B*0 B,"  '5 &#"#2    < :   #    +^-&7675654&#"#6'&'&'&3276761767>7>767327676701767654&#"'.'&767076767632326545&'&/47676##cL  -  //Ei f@'$ 0d% > E*1  (61  +) #   $   C, s  >!*~z' !# ,  @" 39 B$! $"1 + :A'  !* "N`3276760327676767>76?64&"&'&'67676'&'&'&54676('80  -3*%  )W  Ze " H " *( ?   R""/f `+$  $   OO,. 3%5B  #)!/!0  Ab"W"'"'&767>7061654&#"2767776767>?654&#"5&747>7025654& 602( . G  58    2  " BD ,,>'U I%       &mbes"'"'&'4&#"764&#""'"'&767>7061654&#"2767776767>?654&#"5&747>7025654&-   '6  602( . G  58    2  d- 8 B BD ,,>'U I%       &m[$e"132767327>7676767654&#"'&'&767676'&'&67632654'&'&67654&H- $5 M%   *  %   # #4#'Y3  ,{  &s   #$    +  "  *$LG.%R""0'2.'&'&'&#"76707>?654&#""'&'&7>7654&#"WFL]    #"a(  +  !  $^QQ   U,+#     # $/ /%x""'&'&7>7654&#""0'2.'&/&#"7670767677>?654&#""'&'&7>7654&#!%    FL]     #"a(  &! +  !  $1),,' # $/ ^QQ  0 U,+# !'     # $/Y$}&326567677676767>367>7767>?654&#"'&567>70367676'&'&6767676'&'& .&    "$ )           / '  #  $&  0  5K      )9   (  5P"3270576743>367654&#""6'&'&'&2'&'&767654'676++R    +& (  0  ! "#"i     H5 G%  1"* y$c"167454&#"1327673270567676763276767>764&"&567>76'.& H- *- F   [         $  'Y3 -9    2)    ,  y$["67454&#"13276732776763276767>?654&#"&567>76'.&" H- ',v.  {A"  .       $$$'Y3 *7u )g7  2)*    , A"327>53767654&#"'&'&5676767626=&'&'&++S    8+   ,   (%   "i .) '!   $"067654&#"132767327061676767632327061676767632767>764&#"&567>76'.#"4'&'&% H-). G   Z  (   Z  -!     % $ 'Y3 -9  AQ'    2)**   ,    ."N]"01'"'&767>741654&#"#276777676716?64&"67654�'&74676 40 .F,  HK =;< #' +*   N! yD$ ,,>'U. =;,. ax8 L\QC  > #Sp&'&'&32705767327767>367654&#""#6'&'&'&7654&#2'&'&567654'676320'&'&5>7>76 22S    +& b  p +& (  0 /0 ^   ""      "# 0 (i     H5 % %%  1"* G     6  j"32?676'&'&#"76776767654&#"'&'&5>7>7626=&'&'&#"&'&'&++ WW(%   +& +&!     (%   ++ " p p G%  + % +   %   6     " cx"k{"'"'&767>741654&#"#276777676767676?654&#"&#"#'&'&767676705654&'&5&7676" 511( .F,  69     8    $ " BD ,,>'U. K   "*B   +%.;     -T"32?67671776767>?654&#"5&747>7654&#"'.'074&k  ;  :     2    , *e d    1+%       &n + 8"v"'"'&767>741654&#"#2767776776767>?654&#"'&567>705654&#"'.5&7>705654&! 511( .F,  47 "    1   803  " BD ,,>'U. F  $%       &m B$ 'rc""'"'&767>741654&#"#276777677676767676?654&#"&#"1'&'&767676705654&#"'.'&7>705654&'&5&7676# 502( .F,  58 !     8     70 4  w " BD ,,>'U. H  $   "* B   +%.; A# )u    _-Y}"32?676717767676767654&#"*676'&'&67454&#"'.'074&230#0'&7470732767676m  :  ; &(     . !   , *e d    1+%      i + 8   &  %}"'&'&#"'&747>7654&#"3276767767676'676776767>?654&#"5&547676?654&#"g      2  +-5 6 .         1  $    ' &n :09 9 (+% ', +%       &e  "@b"3276767767676767654&#"0"1676'&'&67654&23#1'&5670732767676+-5 5  $'      /     ":09 9 (+%       i  &  \"32767676+";01'&'&74&#"7676767654&#"0"16765654'&'&,+S   '((%  d [      *& &'     "i22  &          .' $Np"#32767327>7>77676767654&#"0#"6'&'&'&67654&2'&'&5>7654'67676G- %5 " '( +& ''   / 22  +        "#'Y3  ,{  M 5%    H5 ( >+%G     5 '^u&3'2.'&/&#"767677>?654&#""'&'&7>7>7654&#"01&'&2'&7676 2#.,     #"C<  +  !         '/#.!,'  0 ;<#     M    &" mSe"2646"2642"62""327>13767654&#"'&'&747>767676'&'&267676?nP#,++    <3D B*0 B,"  '5 &#m 3"#2    < :   #    +*Re"32767>7377676?64&"7437654&+"'"&'&?654&1#&'&76?43(  !  /%`   8Y +? A"T  ;#))+1   !@8` " Y +) Z08A)^ 9t (B    r   P k  Copyright (c) 2013 Ireneusz Imiolek Licence: GNU GPL + FECopyright (c) 2013 Ireneusz Imiolek Licence: GNU GPL + FEpysiogameHandpysiogameHandRegularRegularFontForge 2.0 : pysiogameHand : 1-7-2013FontForge 2.0 : pysiogameHand : 1-7-2013pysiogameHandpysiogameHandVersion 1.1 Version 1.1 pysiogameHandpysiogameHand      !"#$%&'()*+,-./0123456789:;<=>?@bcABefghCjikmlnDEqprsutvwxzy{}|~FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./012345glyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphAmacronamacronAbreveabreveglyphglyph Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentglyphglyphEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonek Jcircumflex jcircumflex Kcommaaccent kcommaaccentLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotglyphglyphNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngOmacronomacronObreve Ohungarumlaut ohungarumlautglyphglyphRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccent Alphatonos EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos Omegatonosiotadieresistonosglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphuni03A2glyphglyphglyphglyphglyphglyphglyph IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyph iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyph ~ɉo1pysiogame-1.30.811/fonts/pysiogameFonts/pysiogameLatinPrint.ttf0000664000175000017500000002322412201770063023634 0ustar tigertiger PFFTMewǿ&xGDEFr&&P(OS/2Ua_XVcmapBbgasp&Hglyf7head]|6hheaSD$hmtxf6 locan maxp[8 name2T!HpostS$$"W_< [[1i``\CCX@3 PfEd@ z33\`gU222t22x2i22n7i22222b2b22a22\22b22c22y22y22b2222222p2p2\2p2p2q2p2^212L222^2p2p2p22L2$2^2J22J2J2J2\@  9Zz 0Aa  !"#$%&'()*+,-./0123456789:;<=>?BA8^:8,>h*`,^<>v . h  X D  B n " H | Pg:37#gl~2.H "2764'&2"'&4756336633z-..-z-..HQNNRRNN3DFGDDGF20K"32?26504�R 7 J{ R6 2;UP&32654'&7>33276763232?654&#"#"'&#">7>76'&'#&8/   05 +S( )&/( (%'"I"(&!U'@( 6(/9+mD    6Y$HE" 2+;`B#327>7632'&'&#"7>76'&'676'&'&5   -$ ! L5!!  -'+$9 C!- #`(!50  6+9= / ; AC5: '&'&'&527654&#!k l73)&#$  2-00>!?i]') J   U 4(;U % 2 eD. % J  248P<"7>76'&'&327676'&7>767632654'& '!(%35P +,9 4&G)&'  P;5Sa-uS (> 8  If %TP12  !2k>W"32767670237&3236726505&>7232654'.'67654&#"'"'&'&!    +! 06 , 1 / $A )"%> >  /   Pf >!! .=  ~Z   70=O&8M"#7654'&'.'>76'&&'&7>72'.'&7>.''#%  4855%5 .$ *  .  ?#'3++*!  +O&(-+(! 1;=//<,(( &%(1/# !&">& .'%/%"&247P;"767654&#"'&'&7>76'&#"767>76'& 5O +-9 4&G('& +/(!(%PvR '=8  Ig %TO11  .<5S`. 21K"6?3>/&# d @ DD @ d RJ   " >21VK2";27>'&'67676'&#32+";2+A 7& #!@ww1u u#(J 1)x+#  &26$*+* #"34#%21K#"2767654&#""'&476232654'=75577    ..00.. JPONQQ DDFGCC 21K";2764'&#32+A O7557Oxx@.//.@xJ QNOPCGFD211K"";264�#53264&+53264&#A  ѩ  J 201K"26=3264&+53264&#A   J  21K&"276'4&+";"'&476232654'=755765  y+..00.. JPONQQNn \@DDFGCC 200K "26=326554&"#=4&A K     20K("#";#";:;264&+;264&+&t1 $$ 10 $$ 0K #  22+K-"#";"'&7654&#"36765;264&+&1 $#  2-$ 0K ,& 2#&$"6} 20qK$"26=73264/7654&"=4&A   K     211K";264�#54&A   K   20K!"2650272654&#" �@    J  [ ^  / 202K"&#"26503265074&#!       K L  E  21K "2764'&2"'&47=7557755.00..00JPONQQNO2CGFDDFG20HK "26=32764'&#32+A mB&##'Amm44mJ -(r(,"\ "20K."32732654/6764'&2'&#"#"'&47=7557O=0  $55.0/#*2?.00JPONQ2, 2NO2CGdcG)0-DFG20HK!+"26=32332654/6764'&#32+A mT  S%##'Amm44mJ   (r(,"\ "21nK9"3#"'&'&#"32676'&'0#"'&476322654'&A'##'AK'#MC,  )1Ma-0V44&) 4&J)%k%)&"11G &0Y<>+/ S!D R*201K"#";2653264&+&n a amK   21pK"26554&""&554&A ]] LkK K B]]Bk 6KK6k 21pK"27654&#" &A   K   7 20K"2727654&#" &" &A   K  8  7 7 20pK#32?32654/7654&#"'&A       K 20pK265057654&#"'&A    K  21pK"3!3!264&#!654&#A     J  20?e "&#"32726=4&#2"&4/)@8NN8@) U>>U>e *9[[9)  IhHHh20?K!"26=3264&#"54&2"&4A (@8OO8@( GU>>U>K  )9[[9 IhHHh20+e%"32767654&#""&46232654'&'&8NN89'  U>>U  'e[[.   $HhI$   .20?K#"&#"3272650554&#2"&4/)@8NN8@) U>>U>K 9[[9) q IhHHh20?e"327654&#"#"&'32654&2#6pNN89' +'; O;e[[.$?. @=?//20@K."#";2653264&+54763326545&/"@A A C C.   !J1'FK   K=!"  2?e,4"&#"327+&'&5054&"0126=4&#2"&4/)@8NN8@)<,- (&87P U>>U>e *9[[9i"0" 0 A/ʌ IhHHh20-K$"26=6763226=4&#"=4&A *> N8" K  I4 @[  10e"26=4&"2654&K          2#"26=4&#"#"32654&#  =, 7P      "0 A/V 20K""26=732654/7654&'"54&A #w w  K  rhc 20K";264&+"&554&A O7 ,< K e/A 0" 20e6"26=46230326=46226=4&#".#"54&A .@. .@. ?-12. e j &55& &55& 1H!!& 20-e""26=6763226=4&#"54&A *> N8" e  I4 @[  20?e"264&2"&4pNNpOU>>U>e[[[=IhHHh2i?e!"26=3264&#"=4&2"&4A (@8OO8@( GU>>U>e 9[[9) IhHHh2i?e#"&#"3272650=4&#2"&4/)@8NN8@) U>>U>e )9[[9Q IhHHh20e"26=47>3264&#"54&A *+ .2 e ~ #' - 5 21e3"3#"'&'&#"32676'&'"&46322654'&.98/44.  #8G"#>%$$% (e/@/%3%&' ! 120$"#";3264&#"'&=3264&+54&C C6& A A  f 3# * f 20-e""327672654&"#"&=4&A N8" *> e ?[   H4 21e"1"27654&#"'&B dd  VVe   21e "1"2?27654&#"'&"'&B dVVd  VVVVe   20e%"32?32654/7654&#"'�@^^ XX]]XXe  zz  zz2e)"1"32?41654&+""10"1'&B b: ?@glyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyphglyph Bɉo1̇pysiogame-1.30.811/fonts/FreeSansBold/FreeSansBold.ttf0000644000175000017500000062334412201770063021450 0ustar tigertiger FFTM[t&GDEF GPOS247GSUB,3 pOS/2mGVcmap(vcvt 2<fpgm// egasp glyfJX head ,6hhea {d$hmtxJ(&loca h2\&maxp $ nameb$postx}d prep1t27B_<  940Z9$   s/]1 @ GNU  8,`XXMp2,,y72M(MH2@M@,,D,,,,, ,,,MqMqH(H2H(c@R,MOcJ *D?,JcPABD (L +P cL cMBMH=,M,c;,"c,Mc"cCC,;Cy<c?c#c:c?,Mc:, ,, %dHH<MB,$,,d,!M r,XH'MM^H8__Myc:,@M,(m,Xe(e(ec4,OOOO?D ( ( ( ( (HO LLLLLcC,,,,,,y,",,,,Cc#c?c#c#c#c#c#H2c c:c:c:c:, c:, ,,,,,",,",,",,"McO,O,O,O,O, *c" *c" *c" *c"DcCc""?CQ?C,J,;/<cPCcPCcPCcP,CcDc?Dc?Dc?3c? (c# (c# (c##P?P?P7 , , , ,cMccMLc:Lc:Lc:Lc:Lc:Lc:  , cccMc,Rc;c,,2",Rc;aO ( cM *C) J,;Ml: c? (+(#W( ,c:< ,$M,McL:<Glc,,#9Cc@`7drdH-p5MMWPyP,CDDy?, (c#Lc:Lc:Lc:Lc:Lc:,,,y *c" *c"J,; (c# (c#,,5MMW *c"vBDc?,y c ,,O,O, (c# (c#PP?Lc-Lc: ,cM9DcC!,O, (c# (c# (c# (c#, ,c;,"X qq,,B;(- 4:"<k"c"6",  k:cCcC,XC,*C C}<y<y<tr?g<^$n$G#4''&FF?$l<lAbMKM)HM"B, , ,'O,Bc@c@c@,"c#*<N,h"[<(L'<rc@c@I$QHbCC   y y %"+*l 44CiiMtMcM M M M MMMM MMMyMdMMNM@MNMNM^MWMMMMM#MpMMM-MMMZt 9kuN99M MMHMMM M MLM@/Mq MMM)&.>;3h7#5H<0YCC5)>5~]l.[j{8{:MMqk]MMq`c;IME=  0d8x0Oa`2;[FJcSN-8x ;8W8 D!Yl ,,6  (HRR cR$ :R,@ L.ZR&RRRRRcR#R4  RRR$jRR$RR$c$0R<!RRERR"ER($Q**<<=$- g<g</<8<[<^$[<d<,$% $ <*$v<< <8<, P<J=$=$^<,$+ <<r/<g<% \< @F<$^$  z!@R<cRd<|R<nR><H #*+ R=<R*< + |9R<R<QQ<,$,.$f  = [$ Dg0<L<FLF* * :R4 )R<$zR[<3R<DL<R<:R4$6&$R=$,=",="4  - ,(Rg<Rg< (c#$^$$^$",     <*$cR<R < "$A +d$ R*<FF-AF!<FFWF-FFFI*A#<#Fv#-A-2AAA-$F(F2#%##McMM` ji<eAz|AQ<#FeAA#aF>FDF#eA_Fc#rAkjADeAOAi7A#[AXArAAeAd(\FAhA^##rAMq+e~+?)OeMq=M-/~?O)O?OLIN>SL>PC)OIL<HOh=PX?HL>*O&II22z9(.8302-!v| ;   vVh<<<G<s<v<;<P<v<<^<`PCPv<b$<gP7<f<s<H<s<2bPPV<P<`Pvu<4o~ 4?N<<p '<._+\<$ <g#+<y<{_9(?<6- (<hB'd%'Ys<-_*g'(5-92 <3,<?:) )*e:g<)<'= 8<<q)''*+zr9'<,Rc;Rc;Rc;,,"McMcMcMcMcO,O,O,O,O,cJM *c"DcCDcCDcC$cCDcCJ,;J,;J,;cPCcPcPcPABy<ABy<ABy<Dc?Dc?Dc?Dc? (c# (c# (c# (c#Lc:Lc:P?P?P?P , , , , ,cMcMcMcMLc:Lc:Lc:Lc:Lc:,,          ,,, ccccCM , +M,,,,,,,,,,,,O,O,O,O,,O,O,O,?C?C (c# (c# (c# c (c# (c# (c#+(#+(#+(#+(#+(#Lc:Lc:L:L:L:L:L:, , , , xxxxxxxxaQ'````````7?;;uwzvrzTC<@bbbbbb g<7888888888[        E\&0xx``;;bb88  xxxxxxxx% ````````HQ        ~RvxxxxxxTZ:TOM``0``OVPTTObopanQMQM8888SS88&MMMR     )9MuQM,dMM,,d,CBBBGHHI,,^2^-@\\@ W 44f4{;MSMPn>pf,""H5SN`N@@p,Mq"zA8" %W4%%%%\9%%_4_____ ____(_-(_______ _^^^knh ccO y<.PPD$]Od,Z,+*(_=O-9($ !% ,cC^`q;\.ZG ;,J,L"=M-/~?g)? Cc c "e(ee(eeee(ee(eeee(?,?B???cP,MABC,CBCBC,BXnBC,BXC,"cy<'@*@'@'''B'B'''' '''', ;X)H(eR`d$2H-H- \  rSrSM&,7 7 7,`,,V`$h8h8HHH000HHT6HH>HHh8h88HH<HH4H6e:0x<D6 4H,ZD6,8?6h8h8<4<8h8h886H8H0H<6H<6HM(M ?V2<<_@[QQsAAAAAI1IV=x?OML>PR?>H2HLHLHLHL===M-/~?O\Lb)N>SL>CILHO=PX?HL>OM&L8OSm G-&!"&s h-Wh-G2$ y G G h - GmDlP~37ouz~asV_   ( 0 3 6 9 < B H M Q \ ^ uEMWY[]} d q !!! !!!!!!"!'!+!.!2!8!;!D!K!N!!!!"""""""+"`"e$#%%&,&g&o'@-e-o.6<>ADO $7Ptz~p|1Ya     * 2 5 8 < > G K Q Y ^ f HPY[]_ p t !!!!!!!!! !&!)!.!2!5!:!A!K!M!S!!!"""""""+"`"d$#%%&,&`&i'@-0-o.8>@CFsqgYQO93" }zyljgdUTSOMLKGDA@>;983-,(pm xw۸ۯa% a   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpkfvjsgwMl|6cnTm}b:8 & 'yf|qxyzz}{g,K*PXJvY#?+X=YK*PX}Y ԰.-, ڰ +-,KRXE#Y!-,i @PX!@Y-,+X!#!zXYKRXXY#!+XFvYXYYY-, \Z-,"PX \\Y-,$PX@\\Y-, 9/- , }+XY %I# &JPXea PX8!!Ya RX8!!YY- ,+X!!Y- , Ұ +- , /+\X G#Faj X db8!!Y!Y- , 9/ GFa# #JPX#RX@8!Y#PX@e8!YY-,+X=!! ֊KRX #I UX8!!Y!!YY-,# /+\X# XKS!YX&I## I#a8!!!!Y!!!!!Y-, ڰ+-, Ұ+-, /+\X G#Faj G#F#aj` X db8!!Y!!Y-, %Jd# PX<Y-,@@BBKcKc UX RX#b #Bb #BY @RX CcB CcB ce!Y!!Y-,Cc#Cc#-KPXYF+X!YKRX!Y+\X E+D EL++D E ++D E 4++D E++D E ++D Ev++D E;++D E+D E ?+Fv+D E +Fv+DY+3}jrvv((((XdP|``p, 4\ @ ,  P p  \ 8@x,HlPH` <X@ 0h|DThp@ 4h<X8  H ` !!T!"0"""# #$#<#T#l#$D$\$t$$$$$%%d%|%%%%%&(&&&&'''X''(((0(H(`))))))**,*D*\**++ +8+P+h+,, ,8,P,h,,,---4-L-.L.d.|...../ /$/</L////0 0$0<011(1@1X1p11111222422233383P3h334 4(4x4444455505H5`5x55556$6<6T6l66667@777778 8$89 989P9h999999::;|;;< <<<<==4=L=d=|=====> >t>>?? ?8?P?h?????@@t@A AdABBBxBBCTCDDDDDEEXEF$FxFGGHGGHHHI4IpIJHJK$KLLhLMPMMNTNNOLOOP4PHPPQXQQR$RxRSXSST\TxTTTUUU4ULUdU|UUUUUV V$V<VTVlVVVVVWW,WLWdWxWWWWXXXY Y$Y<YTYlYZXZpZZZZZ[[[0[H[[[[\\,\D\\\t\\\\\]]]4]L]d]|]]]]]^^(^D^\^t^^^^^__ _`\`t``a8aPahabpbbbbbcc0cHc`cxccd$d8dde<effxfg0g@gPhh|hiHij j|k8ktkl<lpllm$mtmnnnnoLooopDpq<qPqqrrPrrss$stt\tu$u8uxuvDvvvvww`wx xxy@yTyyyzLzz{L{`{{|P|}(}~X~l ,`|p$4LtX,Phx 4Hh|L@Xl,Tt0DXl,Pp,@Th<Xl4h|,\p$p,@Tp,D|,D`DDXl$`pTh|0DXt4Pl(Lt$4\@44 PHh<<Lt h@4Ld| x0 0 ,DT\t4Dd |0@P`|$\0HXLllP|0hLTl`ph0Xd`À0Ā0ŘżDƐ@DŽȼ,tɴ4pʤDt(̰(͜<hΔ4pϬ\ИTшҤ8h԰<Հո(h֤ 0H`xא؈ؠظ,D\tٌ٤ټ $<L\l|ڔڬ $<Tlۄۜ܌Xݰ8| ߄ 8X0pdP4<,T TdH(l, Pp0l<|<tHHd<D,Xp(Hd|h$|hL, @l DlT0<   4 L     @  T  8 h X(|l\ ,l`TdTd !,!"D"##$ $|$%&''|'(p))`)*p*+T+,\,-@-.8./P/0\0122334 45566`7T8 8l89l::`:;t;<<=L=>,>??@0@A@ABBCxCDpDEhEFDFG(HHIlIJ4JKtKKKKLdLMMMN4NNO8OlOOPDPQ4Q\QRRHRSSST$TU8UhUVVhVWWWWX`XXYZ0Z[X[\8\\]$]x^4^^___``4`X`adb bhbbcTcd,dde<epef,fgPgh`hi,ijtjk4kll(l@lXlplllllmmm0mHm`mxmn nnnnoo$o<oToloooooopp,pDp\ptpppq,qDq\qtqqqqqr r$r<rTrlrrrrrrss,sDs\stsssssttt4tLtdt|ttttu u$uDu\utuuuuuvvv4vLvdv|vvvvvw w$w<wTwlwwwwwwxx,xDx\xtxxxxxyy,yDy\ytyyyyyzzz4zLzdz|zzzzz{ {${<{T{l{{{{{{||,|D|\|t|||||}}4}T}l}}}}}~ ~,~D~d~|~~~~~ $<Tl $<Tl,D\|,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4Ld| $<Tl,D\t4L\(@Xp 8Ph,D\t4Ld| $<Tl@@@@@@@@@@@@@@@@@\l|(\ L <LLLLLLLLL(Ld D(Ptx(<$|$Xtl|,@l,@Th|0DXlxPh8T0\x4X@x<HtD\t0 HdLhx$@h|4Tt4L\t”¬¼4D\|ÌÜìü,DdČĤĴ ,XtňŤ4PlƬ$@TpǬ(DȈȤ(<P(<tʐʬ4t˨4̘̄8μTϬ(Pш҄Ҵl4hPٌD|ڴ8`ۈ۸Xܘ Xݨބެxߨ8\0Tl8DtH0T @DXh| p,XX4D$<Tt $<Tl,D\t4p 8lL8dH0 h0H`x 8Ph 8 4Ll@$ L  Xd3!%!!X v'f p #5#5*C)52 #'5!#'5*8(v*8(ق)#7#537#53733733#3##7#737#j(Macw"i"g"i"Zmdw(i(ggg ccccc!&+.=35&546753#54&'#5654jsUkaD_n)%tdqgDQT v[ j/Th 66p^,7 bR`m i)L?LI_ $-2#"&46"2654%3#2#"&546"2654MkmKLlloF22F2;LuMMkmKLlloF22F2kMIkkkc1"#11"#'tkNIkkLKkc1F11"#7!*53#'#"&5467&/&546265327654&#"q${.4&'3zdO=7>54&#"#&546323NRL,EZu@5/05{np;`A7A"}bs?RO;5=B; p}z+4>32#"&'332654&'퀆&#"#&/@9gz,1<8qmd.;*#6 |.*7(7T0 iX1GU>h{}jo?  ##5!53# JtvL/!632#"&'332654&#"#9Bb{rg]5==5C~?}+mss]XH>@I6 )!2#.#">32#"&'&$"32654 $=/+'"*9 !@,[sj?i3(b<<0/=Q"F0"60K"ft81QI;8HJ9; #67>7!5~v Cg n΍.#}  +#"&5467.54632"3264"2654&1+=7op7=0,cb^;;/.;k2=>37A",#"&'3325#"&54632'"2654&"3HB&\{/%u  ^vj">E3!/78`<;r`T3kR&  no/JIzGH:>Jq%#5#5vqR 7356=##5q ?1VV#28$8b( %5~moy2z!5!5vvvv(5-5(~ moy@,#>32#54>54&#"#5@!1D;!n2F-|#22#<-/?Ab7" f?R1 &12K.(4!1BL: v9E%4>327332654'&#"327#"&5467632#"&'#"&2654&#"5lFO#ZN5lbhp_Օt[eMBϵ0KW(1A >XD`<[-';a4WgHH> \vX\qj)I.WDݩCtJ*+ KdC/7L-> %!#3# 1Y__'R%#!!23254#3254#5jIEDc1.6yNjjoo$DB((?</D#G RS޽^_,&#"32673#"&54632YdaWFT ⃈ywLF}ͰΊyM 3!2#'3254+MTm%YYG(,jhU}Op !!!!!]:}}}JJ #!!!?:}}* &#"32>7#5!#'#"&54632:(_mu[%4,"$Z*hJĝuvp"='}v`=8ئԄqD !#3!3#ߖ K'?#Ֆ'".=332653)KF*&+'*z/[?HF2-,)foJ 7#33 #B@aBPC!!] }B #33##ؖ▁8D'8D !#33ۖ!'( 6632#""32654&(¿[nn[ZomPծ|拊pvLy #!2#'3254&+Bryxdu9<tno}m86+2'#"&6654&#"327'+%PLVSjR!m\[nnZ4$MؤJ-LQQ2N1NB\tIP(%4654&+#!2#.4&+326,18Q){   4655}" .)&>?"0 @>=*08%& y)#&#"#"&'332654&/.54632_:D:Pre\TLDO>Kfo^&GP:'r1)('_Vo}|u;>4.,0ZUku 1WV##5!H\\}}L".53 53PKO:%%:O$8];;]8$!#33%  !# #333ڇzwΟqqvm9"# #'#373게޲toj#33򧕋BB !!5!5Btu}!}}}B84#3#4ppf+f!#7C(853#53ppff_= # #3 qysp},8B!5BxPP_3#~FF % -"&54?2>54#"#632#&575326JZ8$  Q4* JI(0,$)#5:YI   6 *%"M&  "#B;?2#"'#36"32654\aac22xhBA54B%}zN7Ou]JM^^JK" %"32673#"&54632#. r=5). bxye} -OZ-4aqpc5-!"&546323#5"2654&dab34B4BBhBAyzO'7N_KJ^\JM_ %2!3273#"&546.#"#BE3  -"P[s71\%*AkE -+DP_;@{9###535432&#"9SLL)'&]L]Ai*5"&%&3#"&'3326=#"&54632"32654&zlR5B'C/dy`Z27EE_iSF?=1I,"~}\`MI\\IKbC4#"#3632#V/=:d 97 Jd<.W'N5C#7#5ό}}& #"'532657#5:A$/ B:p[}};$ 73#'#3DZŤ8J=C#ό'<8% 3>32632#4&#"#4&#"#<#C.j)NWbYMa:0#9% 2#"&6"32654&-{}}9FF98GE% q``_LP_:&>% 2#"'#36"32654\f|ad22yjAA54B%XPYu^]^IM& % "&463253#"32654d}ad21jAA54BYP X^]\JO?r%3>32&#"#?P0 {j7<{%-732654&/".54632#&#"#"'+<17   wgm|d%,j1bC"$4 SaaVI 3i;:#-#327#"5#5353-N "/EE]$b L]:!#5#"&5332653:hV_Z3>@WbYxa:0R!#33^umu !# #333eQVVRQR}zz #'#373c[\XW  %533#"'5326ɚwp  *%22w   i4 !!5#5A qqq:q%8="74&#'536=46;#";#"&5v.AE6L%-)88)%L6E,\>=Oc97. .7%cO=d8#P_H8`"3#+532=467.=4&+532.AE6L%-)88)%L6E{,\>=Oc97. .7%cO=<:%2673#"/&#"#632!N v-&9  Nx0#9"#*#*BF H$ z>73#5.546753#./"( zY,hwrm,\y (OS-.Ztef} VUu]..S93#632327#"&#"'>54'#53.54632#'.#" z4@N"P/:)LE##1<7?/Y<"l.,??-,?a !#1#7# [ii~ Jd8##PPP{{!7<H.54632#&#"#"'332654./&546'654&} v[%>=& D#%5a,2Fxb$+"* O' *.  Ka$K5M#F6c2A1j ')"   d.V-=QL(P ! m?&yay!-#&#"3273#"&54632$ #"&54%"32654&(ZM5=;4X\fT\mn^Ne<ᢛ~}{NPNVOZ~jk}T❞I#/!5%#&'#"&54?>54#"#6 '5326A$\ +7,6_"  1N R .#TNNF .6,W pdf'(XH 757757Xee.eeruYYrruYYr'V x!#5!'wxު*j#.:#32#&546=4#'3264&+& #"&54%"32654& `9@Fg=\g$$gM<ᢛ~}{9@9J" %), 61Q>❞;!5;OO 2#"&46"32654&/>YY@=YY?%44#&44Y>@XZ|Y?4%#54%$48`%!5##5#5353)װwwgwwIwwH3!>54&"#&54632H(4J!08/ :\QKINH*>"6Q.H'&,"%" EJEI"632#"&'332654'#53254&#"BO4BWHIQ\=#T K!;@59 G?KKDB"=>:&$y_=#7=~FF:$=732653327#"&'#"'#3T,9  !%#*4#='n<.Rz,W&A463!####.wX/+b?b\tcHP@$3#@||${$&;632#"'732654&#"+#)C>7SE$!?&!-04 (#5273#ku@_==KWW!52"&546"2654NӖLTVVVlD**D*TNN\RN[\OP\D9\:9-/XH 57'557'5eeveeOsuYYrsuYYr(R #5273#3#%##5#53#5ku@_WYW._m_j==KW!K]]J(N *#5273#3#3!>54&"#&54632ku@_WYW(4J!08/ :\QKIN==KW!@*>"6Q.H'&,"%" EJER"&14632#"&'332654'#53254&#"%3#%##5#53#5BO4BWHIQ\=#T K!WYW._m_j;@59 G?KKDB"=>:&$!K]]J44  "`#C$#v$#f$#|$#j$#z$%##!!!!!!#5SCr}}}G,$1&#"32673632#"'732654&#"7.'&54632YdaWFT#)C>7SE$!+EK$o ⃈ywLF|(&!-04 S !"jıΊyOp#C(Op#v(Op#f(Op#j(#C,?"#v,+#f,$#j,#53!2#!4&+3#326MMMWl$*./)$mVZUR]SP6'-34-(loPjD#|1(#C2(#v2(#f2(#|2(#j2OI ''7'7TTTTTTTU##"''7&54632732654&#"WS3VRŸ_S4YJ2R\n:7U]neK[._nT\-ce0tKZ:uSL#C8L#v8L#f8L#j8#v<Ly 2+#33254&+weu9<apxm86C?*#"'5637>54&+53>54&#"#4632#0xb14AI@ -54.).ie$G1rpE59B_0(',*%`sfPf "CsD "v^D "fiD "|hD "jjD "ziDZ%.:>%32673#"'#"&54?>54#"#632632532673&"r$; [@YtM[8#  U/+u:>].TO/ %0P)#69 'P_hiYL   5!)22?{U &  >#A{"$ %132673+632#"'732654&#"7.54632#.#"6+(. ]$)C>:PC%"+hnye} -+r*G9-4]u(&!-04 Uzpc5- "CtH "vfH "fqH "jrH"CC""v+"f$"j#9&7#"&54632&''7&'"2654&%9W3Tql~}k$1(7M*F&49EErED 4"2M|y@ .%,]LM]\KO]?"#|Q#9#CR#9"v|R#9#fR#9#|R#9#jR2<! !573#3#||||jww{{ V-#7'7&546327#"326547&#"~H+K2}kKD+H/|t$27H'28G#I(MHp>F)IIkg*`J(t/`K.:#CX:"vzX:#fX:#jX %"v^\:&>632#"'#"326542daad27jAA54BY|zW^LK]]IM %"jl\#q$ "qjD#x$ "xlD%!#3327#"&5467# 14=L$'FNA;KX_`'E%5/ 2-,I$%.;"&54?2>54#"#632327#"&467#&575326JZ8$  Q4* mL $'FNB:MJI(0,$)#5:YI   6 *%:G5/ 2XK"M&  "#B,#v&" "vpF,#f&" "fzF,#y&" "yzF,#g&" "gzFM#g''H'G] #53533##5"&54632"2654&<<4‚ab3v4BBhBATCBBC7NyzO&_KJ^\JM_Op#q( "qsHOp#x( "x^#HOp#y( "ypHO!327#"&547!!!!mL("GN})]:}:G5/ 2-Q9}} %'-%327#"&5467#"&54632!327'.#" <8-L'(CM*5/#rt.SN/.?O9/^ *R4H#4/ 4-"7% ?{U EJEGqT'@C/ 4-L<"327#"&547#3#5|&(>HnMSS/ 4-GA:}}?#y,C#ό? #".=332653Ֆ)KF*&+'*zq/[?HF2-,)foC&#ML:#f-&+"fJ'".;$'N<%PC#v/C#vOPC'/C'*OPC'\;/C'\;OPC#y/C#yOU 7!!573楥oPPpXq}8Y8 7#5738888(O(&(O(dD#v1?""v|QD'"1?"%'QD#g1?"#gQ|&\<QZ3)".#5232654.#"#3>32(B3P  (B[ V@ LRC+0Q]{.H/! bOIM4%1GnBtc0?&"%3632#"'532654#"#?:hV_:A$/ Z3>NWbY8B:pa:0(#q2#9#qR(#x2#9#x#R(#}52#9#}R#!!5#"&546325!!!&#"32pZ%C30C$+?*LPbbOM:};.$ק#4}}jIsr#%)/%32673#"'#"&632632%"32654&.#"9o%: ZqBMv}}zIAs$CE3 9FF98GE7/` &P_KK LL*AkE ``_LP_u9QD%!*TLDO>Kfo^&GP:':D:Pre\'&!-04 S vn;>4.,0ZUku 1W9r1)('_U$%D732654&/".54632#&#"+632#"'732654&#"7.'+<17   wgm|d%,jza#)B>8SE$!+kc"$4 SaaVI 3iQf(&!-04 T TR y#g6"gqV$V#632#"'732654&#"7##5!#)C>7SE$!6MH\?&!-04 j\}}F+#327632#"'732654&#"7&5#5353-N $#)C>7SE$!6oEE]$b =&!-04 i rL]V#g7"'\WV##5!H\\}}-#327#"5#5353-N "/EE]$b L]L#|8:#|XL#q8:#qXL#x8:#x#XL#z8:#zXL#}8:.#}XL"%327#".467#".53 53(88(M')"<2/9;25_Z6<`?6=!3/ -H;$6kI:4"4>7#5#"&5332653327#"&T-#@:hV_Z3>oL $'GN2!@WbYxa:0R8I5/ 2 #f2:#f!Z#f< %"fj!\#j<B#v|="vF]B#y="yT]B#g="gS]43##535432&#"LL)'&]Ai*? !"32654'2#"'##53533#6qhBA54BWaac2<<2]JM^^JKԡ}zN7TCBBC~O, .3254#3254#".5463!2#!#"3ٳoojjC^,ofDc1.6y5jIBU-2:^_"RS(B?#dm(?</D#Gj$DB(C9Rx;? "32654'2#"'#!#6qhBA54BWaac2{2]JM^^JKԡ}zN7}Oy 32#!'32654#dxyra<9uontK68m? "32654'2#"'#'76qhBA54BWaac2a2]JM^^JKԡ}zN7QO, &,"&#"32653#"&54632632&#"YdaWHYdJS$/ ⃈ywND|Ͱ,3po"K.""32673#"&54632632&#"#. r=5). bxyF3I/  -OZ-4aq$pA5-,!%3254+".5463!2#!#"3هC^,of_Tm%YYGBU-2}(B?#dm(,jhUC9R74>;5!5!!".%#";R %:d?Ij55::58E6%}')EH;0/;;? "32654'25#5!#5#"&546qhBB45Ac2{2ca_KJ^^MJO}'7Nz}I5#A6 Op !5!5!5!!5!]:}}'}(3267"&5473!.#"#>32hMLjĞgOu6qvC%WefVק"[hmWo'ծ y'#&#";#"32673#"&547&54632l:DLfGBODLTY?'FQ:&r1)gx@1.4>;u|}os1/]ku 1W&J!!#"'53265!!?:A$/ }hB:p}&9##"'53265#535432&#"9S:A$/ LL)'&]B:p]Ai*5*'&#"3265#5!#'#"&54632632&#":(_mu[Pi$Z*hJĝkOR$/ uvph:}x^=8ئ-4pa%32547#"&54733W 8 *TBFPL򧕋 3j +:7.CzBCg#4#"#363232653#".5V/=:d 97 &;7(mzIb1Jd<.W'N5|H=CH(i{!BL5)732?#"&53 )> IX)/ aBNX:1-PNR,;$73#'#4632&#"DZŤ8:A$/ J=]B:pf #5333##c||}}:uCuJ##57.#"76327327#".'z)2;Hn  #!C(! N[Y_" z?9VXE{p# :l !#5#"'#"&533265332653l%H1r,AhWa,%07,%16H,&VV_T0#(<5#(<5 &33##"'53265F!:A$/ 'B:p?7"%3632#4#"#?:hV_Z3>NWbYa:0(#2#".54>32675.#"HwQ72KPYQ)+RlhMLjgONi,Kem:+\jQ7DpFHoB@WefV}[hiZ( "32654&632654'3#"[nn[ZomE_=7Ce拊pvZP`- 0Pd#I !"32654&#"&632654'3.9FF98GE!{}|G<7``_LP_B] N* 0P(8 &"32654&4632632#4&#"#"&[nn[ZomEW>pz*'+& e拊pvMXof),-2B3: 4 ("32654.#4'&'&#"#"&632632:CC:9D;y)yzyR;?>XG^UV]]S.L "32654'2#"'#4632&#"6qjAA54BVf|ad2=B/ )2^]^IMԤXA;p#PY3232673#"&546?>54&#":':PG&^ofK>ODLT\erP:D:9W1 ukUZ0,.4>;u|}oV_'()1r%-%3#".54?>54&#"#>32#326Cb1j,%d|mgw   71<+#:;i3 IVaaS 4$h0$+ &"2654&"&5463232?#"&5=WW=CQ QXtW==7<7@WbYxa:0R=> 0P 6<7332>=4./3# ,)')E=', -O46VZA=' ]g34&#"#37632'&%T32&#"#"/326?3` !(C!#  %1V2) ǐ #p{cNz 4 B3#!!57#537!5Bktܡg}C}}C}3#!!57#537#5`3lpAq5naqrCqqCrq#"&'332654&'9#5!dRNqmd.;*#6li?h{}jo3232654&+57!5!lU 8 R^'&#`0ir4&\%SI9IsyPQlZq$$ u rP#'$"+m{l_%-2'!!7>7'57654&#"#7>)og<$n95,SA2#0 $8\gtQMG]A%F/G/=.,)GJ3!@,Bl78@+ >54#"#3>32*5L,!H#]0/\FLf,I:V,# T&A8I%9'/{1&lY-XEI0:d8#P_d8"#3#PP__-833#3###535#53FFP\P2P\PpM#?'M#@'7#@cGPI#-c/P&5#Mc/C&#MOD#-1D&#M1?&5#McQ#g$ "ggD)#g,("g(#g2#9#gRL#g8:#gXL#j"8q:r#qL(#j"8v3:#vL##j"8g.:#gL,#j"8C7:#Cx % H##j"$q r#qj&$#yi f#ijp#qZ#q*'%5367#5!3##'#"&54632#&'&#"327$UUZ*hJĝ2O_mu[F5P}P`=8ئԄq1,vp,"&x% ."32654&733##"&'3327#536=#"&54632 3?>27EEC]r9lR#4i'C/dy`Z<`MI\\IKblChSF?CI,"~}\*#g*"&"gZJJ#g.;$o#gzN( '"32654&4632327#"&5467.[nn[ZomEMc9)L'(CM;4e拊pvծeh%4%2/ 3,*F#9% &"32654&'2327#"&5467.546.9FF98GE;o9)L'(CM;5gs``_LP_qz $5%2/ 3,*Gw(p#q#9#q#gfyq"g}2&+&gM#='M#]'7#]cG*#j*"&"jfJB] >54&#"#3>321JQ,.#]0/\FLm#1Q>\*!;QZ-(%\1&mX/_JP4=D#C1?""C~Q#zb$@0v #vu#vZ#v#v V#v #$ #D#$ #DOp#( #HOp#( #H #, ##0, #/(#2#9#R(+x-2#9#RP#5r#RUP+x 5?r#zUL#8-#XL+x8:#X y'6%'VV'7-'WWt6#7>32'367$54.''767>54&#"tq;P2,I5V4,% D54&''767>54#"qYVo&5&!8%C$#  H[E *E ,:&X[tfO@+,W+#" d( #3 s 8*D#g+Cr#g}K!)q!#"/5326=!5!5og"G26v*+v1tx()5!5!!#"/53265Z#"G2m@pl*+v&$y "yhDO+p#!#632#"'732654&#"7#!!!#)C>7SE$!2]:}8&!-04 c}} %6.#"72!3273632#"'732654&#"7.546{71\l#BE3  -"P}T#)C>7SE$!3hw?;@{*AkE -+DK^9&!-04 d{(#j"2i#9r#i(#|"2i#9x#i(&2y#9#yR(&2#yi#9f#ip#i< %"il\& #"'53265:A$/ B:p[ % D(% "&5463253327#"'"2654&dab300N,k4M4BBhBAyzOFrZ`_KJ^\JM_3 ;? #"32654'2#"'#4632&#"6qhBA54BWaac2:A$/ 2]JM^^JKԡ}zN7]B:phO" % F,  %#,">32#"&''7&54632#.&#"326r Pi4&<#1@-1G$ :LP#ye} -= L C.#5$55Q*  ( Z:C_pc5-* &c #"2654&"&546323327#"&=4BBhBATdab3 /$A:4_KJ^\JM_9yzOp:BNc #"2654&"&5463254632&#"#54BBhBATdab3:A$/ 4_KJ^\JM_9yzOB:p7N %2#"&'332>7!&54>3&#"ts[P"-  3EBH ]17%_PD+- EkA*{@ % H# ::7327".547!.#"#>273>7#".'71] l#BE3 j -"P=Hj'    !/ $ (;@{*AkE -+DP_0E/o?   +S954.#"#>3273>767#".'#"'+'h25GG43h&05)A! Ph65gg5#f#6 ,0,65-N(5,$N^HD]N&&.7#"'53265#53533:A$/ CCAB:pƇ"&] /"32654&#"&53326=#"&5463254632&#" 3?>26EEɇznR5B'C/dy`Z<:A/ )`MI\RSWV>_iTE?=1I,"~}\kB:p#"&U% -"32654&#"&53326=#"&54632632&#" 3?>27EEȇzlR5B'C/dy`Z<E#7 `MI\\IKbT_iSF?=1I,"~}\[r" &"327#53#'#"&54632#. r=5BXZ?Nxye} -OZCi3pc5- " 2654'7#"&5467373 Y+"[>Gb -rrX  ! OT =p]IR[ & B%4&'3262>32#4.#"#".5467.#"#>2#!;"&E@<'  -A$;?"68)9/  #,5& H*O334= ">k@$D# 8~%6P* ,G,%= .:\4! :&##"&5332653:hV_Z3>WbYxa:0RC4#"#4632&#"632#V/=:A$/ :d 97 Jd<.]B:ppW'N5C&'4#"#4632&#"632#"'53265V/=:A$/ :d 97 :A$/ Jd<.]B:ppW'N58B:p#5##5#5353ڌD@@}}}χC 3327#"&5C %.A:gp9B !#3!53#DD@@2673#"'#&#"#6323O!N v Nx Z#a#&";=33##5#".54>7**,-7%(O466{5$45#C& 3327#"&C /$A:^7p:Cq#"&'332654&'9!#3!0>Tqmd.;*#6sŌ\Nh{}jo32632#"'532654&#"#4&#"#<#C.j):A$/ NWbYMa:0^B:p?&d%3632327#"&54#"#?:hV_ /$A:Z3>NWbYWp:Ba:0<+ ##3+ÌRR$:%8$H% !3#!!#"&546325!&#"327Dl7E?8j!U?JJ?S#JP~ CWJKYC##4%4&#"32>=332>%4>2#"'#".{~x &##.& 5SS5-<< d;9f0N@#cKZT)' )&*,OQ:%$:QO-9Y8$DD8e47 %>54&'#5.6753+1::0;:1urts\V]]O \DH^y|'Z U'Z!#5#"'53253ZP0 {k7<{&'3327#"&=#"'5325͌ /$A:P0 {p:B7<{F8y%3>32&#"#FP0 {j7<{F&y%3>32&#"327#"&5FP0 { /$A:j7<{p:B?%#4&#"#4632_Vj7*-4jYb$8%432#4&#"#$V_jbY4-*7<6#'##!23264&+K6,#6N'z,#%*zES03_BA; O&>%9732654&/".54632#&#""'#"'5326=+<17   wgm|d%,j1b3:A$/ "$4 SaaVI 3i;:#UB:p&4#"'53265432&#":A$/ )'&F\B:pi&=##"'53265#53432&#"=S:A$/ LL)'&;]B:p]i*&404#"5632327#"&5f&') /$A:*ip:B&'"-%.'#".54>32432&#""3265&') I 5*El<( (P6#-)'&T I * q")1&/&13 i*5- m:& WH&-#327#"5#5353-N "/EE]$b ]t!#5#"&=#53533533#!326=1:hV_??ˌCCZ3>@WbY+Ƈa:0")#".5467#5!32>54'5!^#)/EvILxD-)#J &C*,E%&]-54.'7C324&#"2:Ibu XS;<  5z.``q:qq4Qq#"&'332654&'9#5!r>Tqmd.;*#6s\Nh{}jo32#54>54&#"@/OJ+n2F-|#22#<-.@Po4f?R1 &1;S-%3#1BHI@,#4&#"#54&'.54632,@.-<#22#|-F2n+JO/IHB1#3%-S;1& 1R?f4o@, 5l"7 32673#"&54632#.#"=5). bxye} -+"0 OZ-4aqppc5- 87#9%#y!R<,#'%2>54&#";#"2#"5467&4605,Zh34GG52tLe46hP !Arg-56h=6#f#5&N]DH^N$,5(S"T%&"327#53#'#"&54632632&#"#. r=5BXZO'xyM5#>)'- -OZCi i)$5-<&' %)"3265&%.'#".54>323#5 I *>) I 5*El<( (P6#-TT- "q")1&/&13 }}'@ NK<)33U&b !"32654"&463254632&#"#SjAA54Bd}ad2:A$/ 1^]\JOYhB:pX@,%4>323##5#5354>54&#"@/OJ+n2F-VV|YY#22#<-.@Po4f?R1 &1]ZZ];S-%3#1BHI@,%#4&#"3##5#5354&'.54632,@.-<#22#XX|WW-F2n+JO/IHB1#3%-S;]ZZ]1& 1R?f4o!!!5#"&546323"2654&4adab34BBhBAqq7NyzOl_KJ^\JM_"q%4#"&'#5#"&546323!%"2654&332654&'9@>TqTud4adab3Z4BBhBARd.;*#6s\Nh{KD7NyzOq_KJ^\JM_o32%"2654& 5tIbu4adab3XS;32#"&'#"5#53533#32>7&54632#. L CBr Pi4&<#1@-1G$ b6 EENN #ye} -~* Z.#5$55Q*  L]]$C_pc5-&&/3632#"'532654#"####535432&#"3C:hV_:A$/ Z3>]LL)'&]NWbY8B:pa:0L]Ai*5C27#332654&/".54632#&#"#"&όE}K17   wgm|d%,j1bCjf**3$4 SaaVI 3i;:#C| !!3snjqqٽq% .Z )Z )mz!#5##!#5##ddddzCCåCC &E##"&54&#"563232653E:hV_ /$A:Z3>WbYp:Bda:0R %732653327#"&57#"&54&#"5632Z3> /$A::hV_ /$A:a:0RSp:BWbYp:B UK) U)M)%U)"}U}f|)*s| |f}Z) b\w)44&C #5473ʇ,$Pm.%,i 356=#izE5CCg=Q. Ii #.=CC5EpI .Q=gt=32+53264&+t/BB/ B./B^  c=^a[ xD#4632#5254&#"`WHWHT7>Uq#IcB\MA)Sw9! xD4#"3#5.54632I#qU>7THWHcN!9wS)AM\B !A5% 56bE79E !@bL<043#'#3tIDEI}}04dM-_F3#'#tkgNRRLdd _G#'373kgNRRL_aaL#53PPL;qy_=v_Cd#53HH}<qNFC=@FjN1&qqL1N13NX1^_KW_M7533!5udt겲ddMtM'cM 7#5#53533dtudtuuduudM<!5M3232?YG ?2)$G  :B bT#7!#7~FF:~FFMI5732>7".'SG,!    ),( JiTV)!.G3#FZh>GD0 g{)9O)XV%)c}[)G5) #!5f f #!5!5fV $f #!5!fV _f[ #5!5!fV f$ )5!3DVff9g33!9fOgf9o#3!ffOog HKg4<!&qqRH)4dM&)/d Bb AcL8z@}k/}'kk/{'jejky| qAIA 3## Pff #5#5fPf  :0!533530NvNƉ;;8/!53/PxP\\#.'>7\$$Y 2($#Y=+$N ,&!+_C)_v\fp|q!5PP]x&mymj4}#532654&#"'632,, %(04F@ 2&$3Nzb}_g.L~hL&Lb3#%3#~FF~FF]J#xyc] xI:u +>3q;3z\Q;C=vx3#5#53ff,Mf3c!#5#0dhR +532654'7R5#zF4$CDl2I.-$z{5;!#5##NvN<;;9#"'#"&=332=332=7%"#$74%&4%&M"$44$""$$""$$"8g8 g-=x8 x$M |`qHT~!5~\PP<r&%0X|9kY@qIq2Ch3#YLLhC3#YLL5:!!75#m'LmmR4632632#4&#"#54&#"3%&'$3,,%34$IGw%0 DT5654&547%&l%%7D0 g9 0 d"Q|S`C)_p|>3X 58c(& &Ɉ3#5#[S@WD!#7&#"#>32733273#"/g??2)% `. ?Y Dh:B 4O0 =#|F#yyoER#||eG $~~o #5'67'3("?9B7"=Ԩ"7/JI0MJ=-@@-=J%1>32#".'#"&546323267&#"2654&#"028;*63+::0 9"00aC$'BB'#D"I)8)4P37#7#a$E_'Pe_ ^>73"&'.'326*L0M$z|y$M0L*"vvwtHB  BH 9b,TS!!Z_eST[#43232653#"/&#"H,-) 6*Q#G0?E!!0 mE&%$5#? ^HUD 5!'7'77>/6FF6/>7L2/**32**/19`DBQ:NHCQ?TL?Q:^RCQ:cXCQ;oFDQ:jXGCQ:lOK:Qi< PS<Q73#"&=3  ';1'[o  *,A,qR]_!4XL  #7#5!#5BF4XLX Rbbbb"qv#5#l##y%;'v''|-:#z2 #z6>I"F:$H%!#!|S13' *Ϣ'}X"($=M+#2#".54632>54.#"!5!f̚-[cJ17sb&FD(,;7lkxť2MQh3cD7X4" z,.#3#SÐ~$'###3673} `,,!93a^If ##33fQH !5!!5!!5!888>HHZ]K2b#!#!bb[T+#!22654&+T '>mG'*;M4/Q>DM :A..M229'h !!5'5!!2uqj###5!jj\[3#3xˬː֯'Z3%4>753#5.%4&'>2DX;2CX;8RACPARU\Fn=( OOxEm;' GG~CY]l\XDKZ#.'# 373# ²,'3`",##5".53326571JJ/0CO/!8RIAq:W3 1[?kA8+1H[4&#"!53&54>323!56@ye^u{vRhzxlikHvzbbiҜ^zuK#j'0#j2P#>#B8#D"F"]RP4&#"32%4>3537#"&'#"q6@xvx 2EA#]6{"%D,/ =U @]?c<'/)Wr)B(4>32#"'#"32654&+532654&/[Aju=w~gW1<)_+AJ:2;07s>(%-9,$#5&#"'4632,ć & 154^~L6d*<D-%2>54.#"'4>7'5!##".+; 9)9H!,<'q2+O_>"@J7$x0/,0T>;]4& igrL13Q.Om: #7b#)%#"5467&546732#.#";#"32674cH !A|s E`26Eh34GG52hE6*89,5(NVI:9(!'6#f#5' *!7'654&#".5467#5!"7BB7"1|+/C>6!eXHxX-7 9.=x-Y %3Q2sIxb)l8$'632>32'4&#"#4#"7#=U,n]!2q r<pt%76 #2#".54>.#"32>7J@H3!8gK=ZG$!3H:7n:7$01O[Xh5$Sj[O1g[sp\!A<.7327#".5300M-0.,"B. #'#373'9"#'.#"7632327#".' z )1!6"!   #!C(! N 4 z9*# {p# 672653+"'#"'#3(< $7@0O:/7.547#5!#"lBUP:)4:!2x)/>`P+-E/%="0ToA1,81#>x,m -T7#"&5###'!#I@2ET?_uDH1Hvv5+##"'#4>3232654&#"$7JE#G82SV.#EJ7$tK42ON3()Ag>($Os:'323!#"32>54&>a;&3TW0 ""s*~$6 @A'*K %:NH%Pt;~AV}!45JZ !E1YL"&5#5!#327A[= +O TTrr }%#".53326534aHMe2(CB'8N? AL7HO67T(<!!%2654&#4>7332##5"&APPAT#:,Qk[Em"BnEpRB@W8`A$dH[>Z{6`M.9M1%#"/#'."##563273327M*'P5L$:L'kz 3aow E3t%>53#5.533~55rs19l9N$lxwm?J=!&%2>54&'7#"'#"&546736=3!( =BD@tc\44\ctBC@@&-K!e38!ToD)7BvAAw?0'BqU9S:%1"jF""j]R#L"h R#V!F3"3.'23##".'332>7!4>C x &;(CD#5U78U0 08$!&3yXW[Xz 53I:)z=`Z<#&8WK1]X-YB1CU9B,+%52>32.#"#54.!6*5**'I.J2V"$"% "/Jl  ,D+W+2i#$DXR)6bDS3##]"]j7f /)%32>54'!326=3%##"'#"&5467#5#''A@S+ #./)BG%[54\jm.).?&rZ[q(xf`Jq<DDs"q3xU%(733#"'5326=&'#765446{d%D=)"G2$ "w\_m>\_?yF&*+v9noY'" ?U4&27332>7#"&'#765.#"'>;V yd(YP;4NPyF.="T/:MPoY*25L1> -6-/2#"'3263"#"&54>2654.#")|&8LA"J5 )ND-O{1QW05L))2M)(-Kr?( % {=)Pv=,O`1H#N_4I"(a-+%#".54>;#"3#3-!qL$IQ>)~ptmRs#C|Rs#j|\$253654/###5!#3R-  (1 F5!322654&+(/B:!& ?Z/7*036S/ \b2y &@F+21+R632#!!#3!32654#dxyrߖ <9uont7%68m2#4/###5!#3R- 7 +5'=1 ]||eR#jR#C#xRj !#5#3!3"\'$R%#!!!32%32654&#5jI?d:% N5::5(HE)}%6E8[;/0;R%RR3#!!}#ja7265!3#5!#%!#(3sƂ* lǚ ߾Rs( * # 333 ##eǤez_ y'4>32#"&'332654&+53254&#"-&:QF'?YTLDOBGfLD:9W1 uk]/1so}|u;>4.1@xg)1rR 3#33#薖!'R&xR 3#33 #薖$##5265!#"3P33& \2UdLB#'R0R+$2R!#!# ߖM\'R3$&V7!#733HrY$d,;!5# 4>;5332!#'#";2>54.+y"%94E--E49%"';&!4'!'4!&;'^4T6( [[ (6T4^`!D.0G%%G0.D!;Rj  %33#5!3 nǖ}\<h%#"&53;3#ҼY0 jKC {'R )33333}ۖ\\RjW)333333#x\\! 32#!#5!32654#dxyr|<9uՄont\}68mR#32#!332654#dxyr<9u'ont68mR 32#!332654#dxyr<9uՄont68m">32#"&'33267!5!.#"% ~TFN_ #bI,>! yα͓}FLmc}T]2R!$".'##33>32"32654&@kF43DwIZeeZYfd%>GP:>^F3ܧ|芉qxr #.5463!#=#"3ݳG_yrB<9u }cnt'}68m$%D*- +2#"&57>7>?6"32654Ja| "-9 h+&S+hBA54B%},\  * 3OWu]JM^^JK<#%#!!2%32654&#3264&#'N6 3J$)!+.^(""(^d*%#,30/,$B KaqB<##ЌqU%3#5!#53>=!3#DRn]n>%(ñe}}rU:3$%H %#'35373#'#Aձճ(  %%732654&+53254&#"#>32#"'+<71#/\^A,%d|mgw,;1bC"$ !nGIVaaS@"%J;:#<+ 33##<ààRR<+&x<% 73#'#3Ȣ_!###52>45_er  =DZ ("6&<^ !##33#qHabb)G)< 3353#5##<ˌˌ$:%R<!###<ˌU<&@%S$ %F###5qUq %\$&!+2#"'##"&463236"3264$"32654f|ad22da{gd22jAB45A7jAA54B%XXYYu_MI^]^^]^IM [<u 33333#5<ˌVnUI}$3;3#5#".5$xv&@>$!B/<: )33333:UU<)333333#CxnUUI%#!#5!323254&#%P97lkumT0)47!qjF"#< %#!3323254&##%P9lkumT/*47!jF"##< %#!3323254&#%P9lkumT/*47!jF"# %.#"#>32#"&'33267#5w 11+- }eyxb .)+: @<8-5cpqa4-=8q<,%%##33>32#"&"32654&.ffl~zm8==87><mxxS^^^MQ^4>3!#5##7.55#"3.'N6#,=DTz*%#,30X;AqB$"Ci$"jjS8&"##53533#632#"'5>754&U2;FF:e :7 F`^1l4<.7h::hrW'M5>wM/>~^8+<"jN$ %%#32673#"&54632#.#"3c :+). bxye} -+11 8=-4aqpc5-8<  %V<L$"j&M^#2#!##5>=!#32>54&^uQ_ 'T?.hhm '?Q<:Y3JquD|nc<^2#!5##3353#32654^uQ_ˌˌhhm3$?Q<:Ync/6"##53533#632#4U2;FF:e 96 =-7h::hrW'M5Ad<%#j<+#C %"xj<  !#5#333eň}}U!#&53533#&']Kpsw)EB&E5:~67o߾@t !#&3>53653#.')M%"*$FIC    4ZG>]v2DC) F5F<3U<$ 6632#".#"!26$¿f iSRk q klPծcrsbOcuv$:% 2#"&6."#326.{}CbCC10D% >GH=O=II&' q| /&'#& a & aF$''#7'57'57382C58=C@CCBBzc 53353#5#zxxxc98]P@!P@C "#4>323".+;yFd;Jx>G (N;s(*C^(!(!_e& _' _Dy' _y' _3' _F' _f' _ _33Si "/<IT_35>5##546737'654''&5477#"'7327''7632&#"#"&'335532#.#p*F&@qp*F&@O*)&- O*)&-"O))#$2"-O))#$2"-#;38 *$8;38 *$<;38 *$8;38 *$O))#$2"-O))#$2"-O*)&-O*)&-p*F&@rp*F&@Rj 3#333#5#"&=33267薖!nLpL8 D!# 8LL9 B#< "&=3327333#5##LpL8 D@ àVntà 8LL9 BBRI}R32654#3#32#!#5353<9uOOdxyrFFX68m"OVont+O_?73264&##!#53533#32z*%#,'N6PPOOtmqqBD30OEEO;]R 654&+327'7'+#!29< -8/89(5Bry(86-8/89tnp<&@% %654&"327'72'#"'#36AjAA578f|<;8<3:d22(9M_^] 78N{vQ;8< XPYRR`3#53!j<##35ЌU~] 3###53!!󿿖NN}:}"} 5!#3##5#5Q\hhBIqbZZRT_3#!!32+5326=4&+nn%.@@.s}d~``~}700732+4V55,,\@6#>>%!69 2DdO8,2$}q %O85N' j*%3#5### 333f,eǤlz_ %3#5#'#5#'35373InEձe}(*64>32#"'53254&'.'332654&+53254&#"7&:QF'?Y}NMC('L!-rTLDOBGfLD:9W1 uk]/1sg|.G,3 /2!2 zi;>4.1@xg)1r  %;%#"'53254&'&'3326=4.+532>=4&#"#>32 ",=$OMC('L!++<17$\^,%d|mgw,;,C$/G,3 /2!0"$  n IVaaS@"%Rj%3#5##33dqFۖl<%%3#5#'#373VnHe}R%'#375373#'#,,OrȪO++E4A<%7'#375373#'#$$O/4O+*~"7,> 3#3 ###5353MMƖHHOKO? &3#73#'##53536633;[;'w 3 ###5ۖ\} 73#'##5FqRj%3#5#!#3!3xߖ lK<u%3#5#5##3353Vntˌˌe}R !#!#3!!!ߖ K}< !#5##335!#ˌRqQT!#!#!32+5326=4&+ߖMnn%.@@.s\~``~}700732+V55,,ˌ@6#>>%!69 2DdO8,2$}U %O85N',%/"&54>3";&54>3267#"'7654&#"-\g{~M'9G9b{[Mb yhE>HR[ '%<ŝOwG}m]uItD-pb8X ?GKLba^$%("&5463"&5463267#"'7654#"5zDb*dLOf5HN \W:8:A)&xr[N:IkfeO]C.?%A$7['83,'&#"32673#"'53254&'.54632YdaWFTxNMC('L"- ⃈ywLFt 0F,3 /2!2ɟΊy$ %'"32673#"'53254&'.54632#."r=5). hSPMC('L"-ajye} -OZ-4Wm /H,3 /2!2vpc5-jW %3#5##5!#xHl\}}  %3#5##5!# Vnte}qq y#33򧕋BC8%#33oԧwmQB y7#535333##򧕋ȖhB5hCG#5#53333~ԧwmhB5hj|%3#5#'#3738D0޲loj %3#5#'#373Cn:[\XWe} j#5!#!33#5!ο !n\}}!\#5!#333#5!srsˌ`n+qqI}Dj!#5#"&53;33#\n@.n~`07{0P!#5#"&=3;33#tb\*$dVnY]##I<h5333#5##5"&53,OVWOh3`WY{'UU^*5<7.=35333#5##Qk0O33OZT5 cgSFr32#4&+#3ܞn@.~`07F!#54&+#332*$db\##Y]*0!.#"#"&5"&54632#4&#";>32!32>7LTFAX ~uYJATn%!^~cZ,>! FLLyδYwQ]A>%0/7|2 % 13.#"'";>32!32673#"&5"&54632#4& ,'$$!Hae}<6). bxq\I1,FTd+% k=]dpcNQY-4aqG\6H:. *;3!.#"#5.5"&54632#4&#";>32!32>73LTFAX\uYJATn%!^~cZ,>!  oFLL ʤYwQ]A>%0/7|2n  ;%)3";>32!32673#5.5"&54632#43.#"$!Hae}<6). cO\emq\I1,FT ,'$=]dpcNQY-4Sm yG\6H:.v+% R#' *#xs} #xRT2+5326=4&+#33nn%.@@.z~`j`~}70^0745hVnter  I}=DZ ("6&RT%!#3!3+5326 ߖ n%.@8Y`~}7Y]##Rj#333#5##n8D8<!##333#5#qHabbVnt)GI})R"$x$"Dxt"$j&"D jt%##!!!!!!#5SCr}}}G$b%.:>%32673#"'#"&54?>54#"#632632532673&"r$; [@YtM[8#  U/+u:>].TO/ %0P)#69 'P_hiYL   5!)22?{U &  >#A{Rs#x|$"x^,%!326>32#"&5!4&#" TFAX7 ~dY,>! FLL/yαz2"$= ,#j'""jm( *#ju} #j y#j~  "jsyq2RZ#q<+#qR#j<+#j(#9$$:%$#j7$:#j8"#j "jo Z#q %"qr #j%"jm #}%"}~<h#j$"j{RjR 73#5#!!nl}< #3#5#Vntq}R#j6<#j y'#&#";#"32673#"&547&54632l:DLfGBODLTY?'FQ:&r1)gx@1.4>;u|}os1/]ku 1W%+%3#".547&54632#&#";#"326Cb1;,wgm|d%,^\$71<+#:;J%"@SaaVI n  $$9##5265!+53265"3P33& 3X:_Z1\2UdLB#'(E9!%X!+532>55##52>45hkaF%0)er  Fb i@=DZ ("6&+4$&(%T :ZR#'##37'373o%ۖbo'? U"=<%#'#'#37'373oKYIo ZjUhA gF~%7653'#".53327L )LE_(KO:%#yQX=Q$$8];F2#54 !!#4>@NKO;%T%;O$8];dd};]8$- "4&#";#5#".54>3 3PA.B$<^7&BzY'n1<1*ll%=BK-Nu_2A!4 #5476 3#GRRGmmx@JJ@x}F ".53!! =3NKO;%T%;O$8];n}FF;]8$<4%32#54.#!#53327>54.#"3!&5!2H.42rf+W1(@<1J'[H"B/ .71 )*F)7O'(4"#tgF %!33#rԒF2#54 !!4>@NKO;%%;O$8];܂};]8$FH 3"326=#".546;54&'#"#4>;23#8"'MF:v?\2c2I#*3SU,r66W*SK*:6 /G8%z)760% A_0g2h- %2675#""&=4673533#3>7_6?xwvc`e/Au`:6}|jsg}}fF"#3632#54&0A#FSInE*A4)# ";Yc>``o]F733FFE53!".=##332>MoD'9=^'"@ 8\fHY[p]*S*?! +4&#"326!2'.+#"&5467"&=7z~\^V[|i,p  "֔K=RB!72>=4.#""327&ϑ{]P%v5H:1I$//1c#3B$+ 9M SZbx3b?)*6,%---A!+.)L &<Hh !<23!4 #54>5PKO:%m%:O$8];};]8$#%!5467&'767'.'c^0^ILg5ȑ)6p o =8i>"y>hR"F".53 5!#PKO:%m%:O$8];};]8$#N/%#".5332>54.#!5!254&#"#432Nx&HK6# 1%%0,$l@3cHj6Qo $8\;(9 5'$.Z,(a(CE$<@7 ".5#5! =3PKO:%m%:O$8];Z});]8$-c$'5.'"32>=3#".=46Z"E'grL?+"~?h=*Nglg~OIQ6#Y_a(;H;jaA#4.#"#4>32 $C51=" C|ZGlD*b7F76H9cOu^1";Xa-d%%5>=4&"#54>32Z;u}RxI$CnBPx;gnw- xkUM@I32%! C|ZY{AbFS" l %0CDOt_12`tA :654.#"32#54.#!#5332654&#.'54>324&AC&/G&`.JSrf>XB I. -DqG,UZC+HU;&9R(#:6PN .7*$%)k&OVA+)?iCgA23##4 #4>:PKO:%mm%:O$8];};]8$A3#".53326A|YIlE*A5cE?YKsa4 9Wc@Z2>?\-5332>533#5#".-=,.?#Z<^[}Cpo&.>"87,2`u$84>32#'.#"#".=332654.?N|KMs;#JF.*2Oa`O2z]F'K5?Y'?QUQ?'Fg2+9K.:2"' /V;h4VV-+*3-(!-PF2#54 #4>?PKO:%%:O$8];܂;]8$(X-92#"&=332>54#"#6767.54>32654&#">Om3=T|~J>*-+8 5k)E0/DH,0D'CA&Y/?xj~q 2A 4$m>9'%BB(&1(/.%.F33##F#'04>753#5.3>54&'#.AZC#DXC/-AXE"#EYA-/%-!PN05RMjGrD1;92EtHGsF4223Et )D*Tb-M2Tdx!#"'!!#5#53462!"32654&tvL5}WW4BM425G 9__+g};3.'854.mY˥Nb8О6?,wd%FF+-=6fj8dX #8fCs5kL=_8$ #&/#"&=3".54>;235"4.#25ɠu@Z*#DM6xQt<1,#u0'zVM5 635H#+HL+NiXa,;~c=_ 53'767$( 1Ti)1( P '373zj3G32?+"'7>t#< )+08M #@)*s5 3u)_C 7\/#2#"'&'&=3#;2654&#"#54>vJ<8/ ^ $+*a+/L84@ ,/B7:63Z'?3eR3CfQZ<-%3#5#"'#"&533253326:Ji.?\Z`'f!"25 !,EEebw33@5'FA&$%3632#54#"!!#A:hV_Z3>WNWbYfIa:0]&p% "32654"&4632533##UjAA54Bd}ad2NN1^]\JOYPA]XA7r%36323##4#"#A:hV_NNZ3>NWbY]a:0<!#5#"&53!!326=3:hV_WZ3>@WbY5]a:0:#&u% "32654"&4632533#ZjAA54Bd}ad2N1^]\JOYPg]XF %/#33#o^ʌ]w]A&$%3632#4#"!!A:hV_Z3>WNWbYMa:0?]A8t%$.4&#"#3>323##".546;#"3251A{P0oh::"5"0F#EGF (<&8{j7<5Pnx 5L&33E_x3# #"&546;533+"3267"2G;"vyff'6 6B@+In<% qȌ0,5GLJF8 4#"#3632#V/=:d 97 Jd<.W'N5F7 3#N]F8!#5#"&5##3332653:hV_NZ3>@WbYya:0R# '"32654&';##"&5467&54>?.9FF98GEUcta{}h]&P``_LP_ 1v=Rq+,P A8$##"&5332653$:hV_Z3>WbY5a:0RF#3632#4&#"Њ9I;S+)+p(#@M2I8-#9 /"32654&#5#"&54?654/&54?.9FF98GE* > :irZFk}fk :(:``_LP_%  >{$;MP   1A8r%36323#4#"#A:hV_NZ3>NWbY+]a:0L7!&'7!547&'767 qfUpҢ)!(5Di_RQsPFF )yGr>A$%!#5#"&5332654./&546;"$:hV_Z3> .'&(@WbYxa:04  -]  &%3#"/7326yDW.  Dej {A$!#5#"&5432&#"32653$:hV_)'&Z3>@WbYi*{a:0R8-/4&#"'7>323!!"&54>7>k03&!j !)7Y3# k! 0h$K?%\   $5?1Ax DM$9'0> 5A0#3632#4&#"ˊ:Rʊ57:%%0%MAD8t!;#"&54?654/&54?Irh!^,y/LvP:x 6F- x2(, '"78(%3#5#"'#"&533253326:Ji.?\Z`'f!"25,EEebt33=5'F#82,!"&54?4.54>323'7>54&#"-b%66%KmBq;DF2( */I45):Tt+!^4*2T7Jf*mO}>@/ (D&JH=/5!4A)%36323#654&#"#A:hJpY/x7'3>NWb; ]M +:0A$3#5#".53326;Q/H*  26:%$0+,=&QJDDA8r3##"&5332653$N:hV_Z3>k]WbYxa:0A{%!#5#"&5332653632#4#"$:hV_Z3>:hV_Z3>@WbYxa:0RNWbYMa:0A8$%3632#4#"#A:hV_Z3>NWbYMa:0(8#0#.253#".'3327#".54>"2654&"H65dF*C-"!2u4BNs87tU,GF^FJ0(!/?O0! ## Y$PPNVzL[cJM]ZPF>3#l@\A8{##"&5332653632#4#"$:hV_Z3>:hV_Z3>WbYxa:0WbYMa:0A8E% "32654'2#"'!!#36xjAA54BVf|ad2W2^]^IMԤX])PY#;+$4>32".%"32654.#2SX/x"5HGLGI5! '*)(4K)(Ry@FmB++Ai "J53I#Oa1H##8&-##5"&5335.54>;654.:W 7,w{AJ8T1 6QO!x67H (  "1V5rl_ 2%3.2N)vY'7Ar%3#5#"&5332653$N:hV_Z3>]]@WbY5a:0Rq}*727#"'7#<8'#I*-~M!E +}&&z&z&&]e&W~&w&w+r}3#+RR8X 4&+532#}Q4Hm7m.Js1KGLX4&+532+53265N7<_8% 7lGź5Pm*Ns#4@5GK2sN*>S%#54>=!3!*/*v*/*eek7K!6)B :N!3PeX 2!.'#!Z>c8% .#X'7D3X"2 CyX4&+##5!2!53G8EHH[,pq1CsdsO8X3O IgX.#52!530 M`Cm(s,aCsLaX7!2#".%4&+>5L/YN/m(XV8S2z 8''7 v3[:mu2\,L !+*"<CX%653573Z^)U9Øq%YR=H<Lx$H8NY;#".=!#.#$5A$9$x #-<&#s?,]7  OUX";#".=!2#!532=4&##5A)5'Ik9<\L"X"s =()EK+Eb,swL+8 X #36753 _Cɞ7 SZ ?:M=^X!5!3>=3CFE Ǟ$0is3P8WX%>75!5!5'#U>*\*@0t -@s1t;?X 4&+532#P5χ}m3Es~dLX"+"&53326=3+;2653*KwEO}D%0F9@R-O8n)YO3hO#5L#*3X>O>X4&+#'532=#5!2#"N7U!.H6$WB.{n3D>Y/tvsyiOX3333OvXXIX33ԋxM9DXIX33ԋM9D9D2#'5*8(ق2 #'5!#'5*8(v*8(ق#2>32#".54327"&4632,5  ,'03 3-6-N&;! A/P,<:0&&f "&463253"00"$..m0D00D0pp(10:".54>32'"32654&".54>32'"264& &0! ' 8M 0'#*&0 !0& &0!M8 "4"#v 8&2M8'8 *,#  9&'8 8'8M+#"4":%4>54'#"54>7654+532>76753###"L%+%#eM .-R /F\-A -2U,0,7B~qY6(/Vz:*:GC@h_;E  +(pP"0,,62I^!pI.44A8B%4>54'#"54>7654+532>7675;##+##"L%+%#eM .-R /F\-A -2U,0,7BdpdqY6(/Vz:*:GC@h_;E  +(pP"0,,62I^!pI.44A8;@.#";!#&#"32>32#".'67&'+##53>32375$>?'\|;^> $I"9 'J/375#".'67&'#5!3.#"#46323##+&#"32>32-kl'J/?"m^yglog;^> $I"9 xu{ -4%(P5^G5spbY0Lovp&#C ")")"("-;326767!%# #53>3#.#"!32654&#"nMc,5 nK8^w]UX/DvK`'7#C@Y a\"W3O-;2]4)2==+j#E^Shp@]F2&Ysp4@*,1B"h%463267!5!##'#".7327'&#"aZAA,jLD+tFk|4Q. n@0UV<1A0=Zw45_Hppp~$4@//;w5":3275%4&+532353##5#"'> 8hX3$,s#apq>B\@Qp C,2Eo5~^+\W$-2654#!5#5!!32#&'#"&54>327&#"@V51iOVi8,5u&WgPj&K7"/3@5F/).(,4ppKWG.W0l.0BT@-.'14632!5!5!##"#"&26=! b6:e%"n1KR3K.ppTh#%,S"'-7467&54>3!5!5!#!"632!"&%654'# 0& )yl)fGaW+ٓ^o@@",>-"2 Opp  7)?, 463235!5!##5##5#".N;@~pp" A6A3pp 17"#"&547&'#5!##".#"&5463232654&'327N!4gC&:pWcxd +2*<"'*5*S?UW,Q,M* "+UppJB7URl'#)#&6-&9%1V(;53!#327#".'.547&'#5!#!"A"ypc%YP/4B=(vp oȁ.1H!kTR!H1X32"&'>7675!5!##"$I8%(^t.Jz-\7_&&#%[}LDq,Lpp@\-7 $"326544>75!5!!#"&k@1KhX1_?@`2aL=AF0:7*@51 EppE 24@*h+474632654&#"#"54632327!5!##"&7327&#"#_MkbPscF1NoC$c 5(s G^avmM 5?JY<:F` .6C *Wpp-=k,OJ,T@8$-4632!5!5!#!632#"'&'#"&254#"^28ՀMcHX !G3u1#79 +k3G)rpp!7+VG;,/@m# '!/%2#".'>325&'#5!!&'#.#"32>_E$Sud"?Z3=?1nMB:k"+,+4O`  ] #U=5K-$)J7!5!##".563232654.#"#"542# eNhwa8~\= $=>2$<< Wb1(qquD;dWj$0- !B+*+ GB!#5#"'654'#5!#!353275JpVX}v8qz:JC_j'l2qq0"g ?<1V&%2#".'#"5463235!5!#!326L YEg:$ Ab1:yH`9y $R#4ND*82P.pp[Q/!#5#"&'654'#5!#!3270pRWC,8e{,D@>^'O>[!pp "A=0+74675!5!!5>54.#".!yhk{?()!)=4Jb!%!9 M\pp\N)B()j-#%8 U0#.j+72273##5#"&'>54+5Z=UKH\xpTWOP$ .g $b32>7!5!##".5463232654'#"&%&#"32'@E%[M.eP@3RU,qjN5EcsL\066U9JR)<;#%!pp\V=R54+53233####"$kjp OhC?f6spCp)-' 7654'#5!####"&32=35A`)qjSBP5OG"ѭM(ppD@Vvu#'[R@".54;5!5!#'2=#"␠g2z-*D\ g=upppU ;$DY(+7467'#5!#5>54.'#'.%7#XU;:WU~0C! * \,Z*RfI{ZppZ|Hfp'&#5  4$vp;'*47467'#5!#5>54.'#'.%7#"&5462gWU;B.-JzZppZ{Ifp'%$4 7/vp- !,,B,'4>;5!5!#!"3!#327#".'.+?3;zEp?0[]2T448.G&8 Hpp j-[&<2A&74654/#5!####"&35"&54>32_ kp$@$.#0$" #10i"%(Sppa+[G0#!) 1$#074654/#5!####"&35)^ qzp$>%.i4"&Sppa+[G4>;#"325!5!##".,!;&JB1vOIE"9:Ci 'p )sF[pp1G%J8T 2#"&54$-"," -"L7##5!#pl`pp.#"3###53>32$>?'qqowwlgy^N.LoppupI23###53.#"#46glogg(>?"m^ppbY0Lov b #"'5327o[\]f\d]((r)'b #"'5327#"'5327m]Z_f\e\l^\]c_d]''l)(((l('`#"/.'&5432 )*J]v#J< )-45?j#46;2.#"#"54632#"&#"+"7( A^J2!1 $L@.a:94S '! @_2 k/ :l #".'&+"&'&54632;  \V5  $>108#$  (30#  %4|+#"'67&#"".'&#"#"&5472326322  /( F`  @.^@K .?&(7 9  3#F<-& M.#52bXe>a \;R73"&Xe>a@ \;R+73275##5#"'654+532353#".54>327hqq &6&< *"&5463246;5!5!####".73275#"#00#%/0&o\XrHypaIt8qU1$A@11#%/0$#1N\pppSo4-^$ '4632!5!5!##5!#5#".".54>32N;@~pp" T$%" %//A6A3pp  * 2#"1<2327!5!##"/#"'#"&5463232654#"#"&5463R IFkKP+#+ />&9$ |Ge8I\rA7UC dppBB-Y%A*' *!8-= %#&3".547!5!5!#!">32'4#"32"&46329~kF ` =Y@LdlG^P0T>*#%()$!-Mr?OqqG &1*M?@O1&%6,88!q 4632"&"32654&!~YZZY0Po .8*Qoo@YX~XY>qP-H(oPRoQ+4632#"&547#".%4&#"326o-PM.5e [=6V1! ;K9W84,iRo-Y=@58X+,u4I,!/9+$4&, ( .s/%2>54#"#"54>32#"/&+"&54632 HZ>?CGfO[D0Z1)}/,HP4J?/&d&R75'0OS-Il= ;$,%)1"*!p@2#"/.546322654.'&'#"&546323654&#"#"546;C!3*m b.12'%XY5z V0=O?~D'?bOD.? %?'$! "0 0&-B!" (2 *1"1D(3"&54>74&'.5473254'5%"32654& $op0 "EM?O=AbO & >%/p BggCp/H* $9NP /B!!-" 223273#5#"&'>54+5L=UKIED^ooXPKO;)m;738,R4 ?p.BK4>32&546;#"&#"#"&#"32632#"&#";2+".54?4.,GG%]MI109:*1*F !1BrR)RH4] ;9X'#,8R* /E#+*:F &%4%3$V&) ",9&!!7:1('< &2#"547>54&#"#"&54>d~ =-l23aE&6 -&Xti3FHF?+!^f9K( %1R* 4632!!2#"&'4'. \87<)Dv9_'1+0^/&p *MW>*#ԫ$  C"3#!32#".=47#"54>323&54632#*./&>'!4$,-FrHL:b$b]>$5$3,8!XI.U" .5 % )NQ=&"6Urn9 8(=0(-0?K$462#"54654&#"#"&PP9 0%$19)7GF8,D 4!)("-Dv".543232>325313 6#0  ,&Q C0L+=**Q%9!pp%*%#".'67&'#5!#&#"32>32375d'J/ $I"9 o-k -4%(P5^G5spp&#Cfxu$1&#"#".5#53>323! 7673254&#"H)e]u_WN0KL MM 1N2hG+)puBH^Sf>cVppGB8@%6= E)O=\fmz".5#53>32>3#".'&+"#".'&#!#".547#"&5432"3265427674&#"#32F9\T7!%"*=kDpP&AE|P/((EeB^3 #/P[t( $/&F3Rc p*0&K6;E-i):&gIu|o@ZB0M8A6QY%8"HS@% $ 6jojA99$iQDG.!&  *N 3.%NB=K7?(P)5;"5332>7X%-PV @ <$#"&54733254.5473zxi 56m/99//:9/{i&'$$8Q3N/'#)A+( $:(&-9[<I"%#".54675#"&=334&#"32Io6]N.g~)xLZI87QM:lq/U8bj*U: mY7:758:<\%1%#".54>?4#"#&546324&#"326\qGzV-Q^96"$xmPSa+*O>9VQ?=Ony*eI;Z5[b(" N\XR<(%C<>GD8=B<< '2"&54&#"#&!"5&54632632'4&#"3261d! M Rrx~)' ERdqdM/EfZyw .,.3.-,4Bt!%J)6972/Kv Re~9:vYbq.C=^?<<#!%#"&54733254&#"#&54632#zjpB7t54.?z]jv~n(%&8J5C8-[i<&*%#"&54732654򂂮&#"#&54632&}mpAr33:$*=.;7xf\bbn{n)!&:KR<:/d5%.9J= er^Wj,"<)4%#"&54>7#"&546326324&#"3264&#"32eg .7C[yPJu#EaXqM'!3* ",1@0/H@20bnsdC$XUBM\YH"+-z#" ##`=<.1@PP-%#"&54632632#6=4&#"54'&#"32765kmjdGK`ljAAw`+41$313BU41<C!#654.#"#&547>32CQxG//GxQ hN}ȡ )F-///E)ӣ>*jQG><&#%#"&547332654&+532654#52&ilB893&*#(JYs_bjj)!&9LR<-#654#"#54&"#54#"#.+53&54632632632{ !Bx4x13 [ivm[<$>=W7(UgZWI,+LK&1\JZ1CJD;]#yy"#ypFo5G!#,/\B#6qPZ|????h<&%#"&5463254&#"#&546324&"32j_`1?1,02}Zcw8Z<<-,iro^_t%-A=0/WbtcZ??Z?P$(%#"&54632327#"&#"6324&#"326$_bSPw7&%3"w>MVq=,-:9.-<]pq`\OTx%!%|T,@>\>>P&#654&#"#54&#"#&546326325x+%&!""!&%+x5l_N9:V\efng8(73""38'epe`w77z]<&1%#"&547332654&+5232654&'&5472&hmA92:,$#$0x 9?=(^-2fl~k)!&:K>2%2x 'm ;,_H/%#"&54733265#"&547332654'53273zjpB7<8-0^:>di##gHTjv~n)")8JI>j,76=:"*,VB<6%#654&#"#4654&#"#&54>7673632632CC#%*x 0)+>>+>\HX1x3Nd]W(>>|e_{f%W<>YS&,]=:f6f """."".`9>rOjgXgcf[](,B;DH32632pUABI.x5#8:x-4$ /J>U o9!%5AXWC!'!I:$ )*.M=<;D%2>54&+532654&#"#"&54632632#".54734&#"2/B $)/0$**$%'81*-]~VcG=eKl2/5*5_Z5cK3#$23Fd/,,:x:%$,(?DDcZSdGGdJ5QO?}v*R9('";7F33F3<#"%#"&54733276=4&#"#&546253#zjpB7I5 %+b6xjv~n(%&8J.,-#1&GT6< 6"#4654.#"#&!#"53&54632632#654&2 #%x &!0(V-F.4 tHJ_z`Q@@gTj16- ) f* #1(K4 -/<i[_v@@zUPSdB,<<##%#"&5473326=#"&547326=3#|koA8<83OTc!$+X4xkum% %&8JI>)bT?B6B-<<,y2I&.%#".5463254#"#4654#"56326324&"2IuArPgE<89x5<=6BD)8TRTLjLLj^t*`Ccp"LU ! PL(22uVf99f9P&#0%#654&#"#4>32#"'6324&#"32>&@C:6'ExTh3!<;$/NJ(%]5! >?08d< %#"&5463234&#"32`]\58xx;,-<<-,`qq\[x%UX@?Z?Pg%-&#"#4654#"632#"&546326324&"2g=<5x98:GjhjTRV1*HB6LjLLj4LP ! UL"mfcjlfGVu00(f99f9<%0%#"&5473326=#"&54632537/5&#"32#dpB7<83N=VTDA;xaaaax4.%-1\q~n(%&8JI>(E54#"732XkCjpA,A Bx*4Ml8>\t#3* $"n6O7?. %R}9GxU1_ "9&%Ak+(7 8*:X);;!:# Yh .&@*>Nx26M ^$<%D#"&547332654&#"#523254#"#523254.'&5473%& B$8-HL$c <7&>%# JH % F5GX$x_O?"5 E 2 "E(>"oa6:"&P.,P/-& / %#"&547332654.5473vXSrn2%)7):9)n+3+U\\Q%..(#1 #@-!2#">$%#"&54675#"&=3;4&#"326f`jZi$n~ n<:;;B46@dkq^Zw$H&;GF<4?>(4%#"&54>=4&#"#&546324&'326)(df(&#KS71'9T R>8>B08%#"&547&#"#.#"53&546326324#"32b\Xv 0-'"60 3=S2+ &;8M/"8DWqhYJ/9[TdnZVVZ_oX1#/L2;Y5# )D-- dYZz::pf||t #"&54733254#"#&54632c_Xun0+XQ)( n qW>_g\U704/*1e,c=+ Va2%4+532654&#"#&54632#"&547332>OM#%5"*3n|QLw0*4%eg\wn01' HZ7%!&*)NWMI.GS@i{g[0&$*2>6%Q$0%#"&547#"&54632632$4&#"324&#"326Qe`]qK1;:EnICbD2JMR  !")1/.0./*br]X"Z;HYNAE,s>*0!%4FL2/CE"%#654#"#"&546326324#"327n7EHd_\qj^U@5LR[X..,1Wokiditaup\_y;;cluE04G%#654&"#&546320n08f81n1ud^{d[gX4CC4`_`Mds)%4+52654.#52#"&547332>5OM6+ "87&ZYch_una *HZ%7 Z 7%b%"kye]0&$*p+)`F&'&%53&54632632632#654&#"#54&#"#4654#"Ee_WA00QI42JGZ%n%#'Cd!!DdG-KE23?\I5WZMZ}.::.bHAQF=)6i $\",k +) b&fzw_[t l61h{aZ5KJ62??&4327#"&#"632#"&54&#"326*7!)q.&8@[w}derJ=537>21;' n .0 t[cs{f6JK52??&%#654&#"#54.#"#&546326323m2&)%d%)&2m3^UX;;XU^F|Q+>)&((&)>+Q|FVq;;q.%#"&547332654퀆.5473}_V n 412>:G#^.BB.n-AA-8118\a]T-"2=,0D(c< +5&" ( =,2D K,#"&5473325"&547332654'53273g_Rwn,,[(:(b|SZ!$((z_gWNA24%.7ez 186A=!!/ L=9"#54.#"#&54>53632632#654&'2d !)&2m37WjkW7t&!>$#0H&%G+:\R^3m2&J7-@+$>+Q|FSO<'#-4' ,>;;sTF|Q+>%#"&54'332654.5473Rizuq-: n**P`jg(3,,(2HY-7B%#"&5473327654'#"&547&546324&"264&#"26+BXQ*2n2pi)(XP@>VDCS>AQ2lx+B*'H()#!+*D*VO}K1xs{lYVY"!AYQ=Q0+H>YVB<)!,,!%33#,.!"118#"&547332654#"#54#"#"&547332>32632uhf4?!BO/5d %&E)/<"n"!)1+ (S9Gsvcb)*'5".MB)54#"#"&54632632$4&"32m1UQ/f FK !& >$"iXTtzSTA1XFVaa1R12():hb&J4& '`5C("c"V):XglSRkFF`Gw')R;;R;!#"&54733254&#"#&546323Rvn3.R<$) n WHD3n9VOA24%/6e"#/">GT0w6%#654&#"#54&#"#.#"53&54632632l!%$c,S8ETOU+ $73I-#=MWr^^K55[N]?HF6)>'%+82=~Ic3$)N- dNb;9g$#"&547332=#"&5473326=3&'~Qyn4/V4COY-n-3- 1n>F?AXO?24%/6e%aPLGII-4( (4%#"&5463254.#"#4654#"56326324&#"326ubaw[@8 4j3-4/8A&+RF=n734>;12>auu`[u Z! O6l$;;`J5KK52??#%#654&#"#46326324&#"67n731+9nv[Fc8SRY#33Zpca2A>+Y^@BZ/r,E4r2%#"&5467332654&+53254.5473r9)_VwB83nk('~Ec78-RM8B8n&43#'9~Da([KLPR=A9"^/+9( 3 %"&5463234&#"326uv\@8nn915=;15;auta[u K2DJ62?F&2&#"#4654#"632#"&546326324&#"3264-3j48@[wabu=FR+&A8/=537>21;T6O !Z,$ u[`uuadJ`;;$ 6JK52?? %1%'#"&547332=#"&463237'.#"326 _g`Sun4-RC%D]XCM6n___B#-0!@`fUPA21(.7e )YXGqQ bo%&")%#"&53734&#"326ց`avnwr_Vjn=537=31;_vv`dt`6JH43B?Q#"/#"'532654&"57'&#"&546327654+53232654.'7M9Z)Zo+0]@RHN&2 N[)b?S'G7;.K  P H9NSE A->Am!Xs $3:9=MOZ Z&39z 2 0$ 9%#"&547332654+52324#"#53254.'.'53*GL*`{ p t0BO9% NP #R-;[$;n7IH2;??D-A"g^#s&-?ZTZ  3"$ 1-<H="DK4.5432# 57>3232654.54323254.43232>54#"P1;1 #9L*16 4kJNNjSmuT:5?5% Q#3<3=m(5<%8%! !O4#!A=!&%22/$d!e~q'.!/:%5D8*K('%23"'#527&54>2'4"6A+!pSUnDO#9;<::#nGGbc++c+\,B!!A-`YBB:&&#%2#"&54>73254#"'7#5!2(< riZn!3 5-dZ2wk%=?!ioaP#0/-2{p0c2<#"54654&#"#".54732654'53254/.54632$ "#Rz>WPf%C?%K-l6C7lK]PEXT "("""* F/H/Jl52lVi!A-^3% +R4-nJb!$JbKOYF'0:4>323#3##".54>;5#".7;54#""32=(O7````7O()S;GG75#53#"&5332654&#",,uuuT^740_a4yj'JK'..'&..&_ss_^s9ScOO_i1>\--9' %"32654&63232544+#"[nn[ZomE@U-2C^,of5 e拊pvZP֔9(B?#dm<#7#5Җ}}.V.732654.'#53&54!2.#"3##"&'1k54&'7#".54632%654&#"A|$NG.]C54#"#4632Fh~.32#"&547332674.#"` $/H->Id%&8jH|,JU/=Jm!, 7($ &7QY8%T0#**HrrHʲhY,J9#**k6SL((K;2<!!##ݖ}<R!#!R|S'2%53##"'#"&547327&5462327654."/8kE_YYhn{dM -+(.sn*&cD OO!GM211XTbNZ)!-{xtRXjjX !# #333ӇzwΟqqvm9"#X!.4632#4&#"#".5467&32654.q\Rr'88's5@5.c^c@:E(+=@@gp[&(!8;D\2]&5R3a+ LB5I58!B&9@3#4632#52654&#"ϖe(VQ3K1<10>#Zu6_;T}3,'DK)(+3#".54>32#&#"32654'#pO}~EXLxK2/VO Wq *G/`MoOCjL-MD()Eaf;JpEyi(AA,51>=< #33##Җ▁8D'8-!2#5#"&+532;4&#"#54>pz_SF%%*'+&*FKofQq),-2FH?[/ /953#32>32#4#"#"'#"&547'6326732654`6.?E0G$w2,(@!G(7D[UvDJ-HWF 5C*$AAg33'?B#>#1({FixnieKEN|OhL<+555K($233###"&546264&#"}@kF43DwIZeeZYfd%>GP:7'%>^F3ܧ芉qx< !#3!3#ߖ K'2%#"&'332654&#"'675#53#2oc91A@?@Ma_40Vxzq\ 0UDF[<\8zOOy753#32?33#"&=4$!@me{OOA8:Y}f_6' 6632#".#"!26'¿f iSRk q klPծcrsbOcuv%~,%3!535.=#53533#3@@GTP"iuss\B' &#"32>7#5!#'#"&546327(_mu[%4,"$Z*hJĝuvp"='}v`=8ئԄq$(#".547327>32#&'&'&#"x6+@ a>>_T,D0&s`&  n$3#'*9/gyq*IM8,%Ah"<;32#54&+#ҁfADNVFC-Q !!5!5Qtu}!}}}*$#53#;4&#"3#53>32#5#"&'*.!,S*'%'---DG'pzDdSOO" ),!%OO8Q*ofhV'C ""32654&6327&'725#"'#"[nn[ZomE+ npnA(P e拊pvZP֚?# ii*o(p %3!53#5!#H}}}}}f7%4673254.#"#4>32#"'#"&547327&F9lm&:?78#6HB!SO*;hEZNKIvf]G5%g =EtDrD%;0L. SL32632#"&'732654&#"#"&547&32>54.GL#`S|m_eF'VX4>=>DmVTo uD- j@2En?!DDnY`^/-8"//&nĀbldd`,!##"&'732653332>32'654#"#"'N$Bzh+*#'0 3?]n-+$.B8 6K$30):oC$0(YL%Y23GD);)e/552f=%432.#"3254.#"#4>32#"'#"&547327&FWd= m&:?78#6HB!SO*;hEZNKIvf]G5޿Ml >tDrD%;0L. SL3 #"D/fS[gg[D]6,CR[B`2KYQ^onA:uHDgh_AEBo 333##5!5Cg}}<i 32#!332654#һdxyr<9uՄont68mj#"&573273632#4&"#, REo6(REo0.[d-*e[d-), :D732654'7#"&54>7&54632>32#52654#"'654#"#(t 4UR(R=jy4%$x~>Fs %&:]D ,+'M!( *N-pE$86rU1O@!'6Z\8 I9o-$%r&"<p#54&'5254&+#!2skct9<Bry?pq8>?o?:m86tnOt:"&53326=3$pz*'+&*FKof),-2FH?[/`!#373733#'s5{''{8:۸m%')Q.732654.54!23!53&#"3##"&'1k,86S1hBOO-8! OAO%DA'`R 52#"&5##5!32654[}luyPW-'}Ygq|c>)+,dF 3##53ږ&'I=Ja 5!##535ږ&\}'I=J`m!#33s%)Q&732654.54!2.#"#"&'1k,86S1V96&"86*9:X3%DA'`R*'42'>54&#"'654&#"#"&54632632654.c[W -9'9x >9F's{ba9?e (.( <^\ff d,# e@*+)mZZ7[mlP[#7:%U09B732654'%#"&54>767&54632#"&5473254654&"<$`G0vNam(*g+? UHIU4omaNv0u$<60:*0.6!GJ]nhQ&G,<CQPVVPRC@"K^Qhn]JG8-2*:7$$''%:-!!4632#54&#"] zp)KF*&+'*b}fo/[?HF2-,</!!] })&#"32673#"&54632YdaWFT ⃈ywLF}ͰΊyS$,%#"&=#".54632333+3265%54#"|pnr-SR1vVckgg +2#4:,}~xvF$I2e`e\6A}5?CMSZ:)4#53>32632'>54&#""&547&#"%2>54/8kE_YYhoY'-LG(.sn*&c-D OO!GM211yWO t4"+A{xtRXjjX<i #!2#'3254&+ҖBryxdu9<tno}m86')4>323!53&#"32654&'7#".'7MpAu,V-/%MlCo  #5!#3#VL\&[=SU'<3#3%632'>54#"#ҖK$.78#]!=&! @,&X p ' 0zk< 7#33 #ҖB@aB5 3!"&5!3#"32>51$)#'.#"32677''#"&5463277bdmCYddYCmdbHLaJ``JaLwtv7iyxi7vtA[tYnαnYt['$%2=3327#"&'#"&54632#&#"0?,8@GX )y<ĝ(_muk1MTl)QA %ئԄquvp)4@"&57327&546323267.54632#"'54.#"654.#"c22xkVZZ8/^qjohJ0Nhl8d`H 'd5 f M6 {{wa$~nG[ejG32?Q 0@[hLi&"cVs' *6632#"654&#"323%327#"&/.#'¿bm\j7c2 #&n[l8h#; Pծ9#v[%!g; +sa10V *o*3732>54&#"'4>32#".54632'654&#"$i7Jt@ -z)N9J\FcX?piL-jLuW:7Gqx;8K=]O)zC}^:Gjfz`sGFc1B:~ "654&#".54632#"&'732 ' !(9-rxoat32#"'#"&547327&547'"iFFFF$h#m&:?78#6HB!SO*;hEZNKIvf]G5/#FxRRRREy*EtDrD%;0L. SL8L:H>7TJ4,>7{DWznS"9"j-~I0 76#851K}+"0-=C$%#"&533254&#"#'7>75#53#CvV[s68]H3\<0Xj1/X40vvzs|rq[Llb#;h\OOZ984632#4&#"32#54&+#9s*QP1<-,=fADNo/[?+268(VFC'&277'.#"32>7#5!#'#"&546`JaLHbdmC_mu[%4,"$Z*hJnYt[Atv7ivp"='}v`=8ئ<%#!!23254#3254#5jIEDc1.6yNjjoo$DB((?</D#G RS޽^_6'z$6 %#zDR#y%;?#y ER3#y%;3?#yERY'q%;V?'qE,$#j"$ #jM#y'!"yTGM3#y'3!#yYGM]#q'V!'qoGM+*73254+!2+632#"&'732654&#"7㇩FYYG#)C>!81E$!2}TkhU8&!-0 4 c! 1"2654&632#"&'732654&#"7.546323#54BBhBAB$(B>!90F$!3Zpab3/_KJ^\JM_:9&!-0 4 d qzO'7GM6'f'6!'fGOp#q"(C  'COp#q"(v 'v^O6p'f(6 %'fZHORp'|(R %'|THO+p'x !&xo5JJ#y)9#y=I*p#q*"&#qJD#y+C!#y:KD3#y+C3#yKD'j+C'jK$8$!#632#"&'732654&#"7#3!3# #)C? 91E#"+] K+&!-0 4 V'C7&z|KDH'x+CH'xKR<'|,R<'|L$0#j",v;$'vJ'v.;$'vNJ3#y.;3$#yzNJf#q.;`$#qNP3C#y/C3#yOP3Cp#q3p#qPcC#q/m!'qOP6C'f/6%'fOB'v0<8'vPB#y 0<8#y"PB3#y0<38%#yPD#y1?"#yQD3#y1?3"%#yQDm'q1?m"%'qQD8'f1?8"%'fQ(##|"2v.#9'v(#|"2j.#9'j(#q"2C#9'C(#q"2v#9'vLy'vi3:&>!'v,SLy#y3:&>#ySP#y5?r"y6UP3#y5?3r%#yUP3p#q%?3r"q1&Pm'q5mr%'qU y#y6"yp V 3y#y63%#ygV y'#ys@#yF y #y9"#yu# 3y#y-3#y.V#y7-g#yW3V#y73-#y WmV'q7mA'qW6V'f76E'fWL3#j8:3#jXLR'|8:R'|XL8'f8:8'fvXL &8'v+|:'v+L'j#iu8:'j-'|9&|pY3#y93#ygY 'C0:'CZ 'v':!'v,Z 'j3:'jZ #y1:#yZ 3#y4:3#yZ#y;"yt['j;&jp [#y< %"yr\B#f="fR]3B#y=3#yV]mB'q=m'q^]Cm'qK2R&jkW'zZ %&zs\'#^)D4#y=A3#y$3 %#y^D"$N "D#v#f$` #v#+'C#f$  &C+# "$fR""&$'|,f '|o3#fg3 "fhh&$#xj #jt&$#xk #kj*#c5"$x "#&$#x|6 #|k3#xg3 "xhhO3p#y(3 %#yfHOp"(: "HOp'|( "|hHO#vi #v,+p'C  &C+O}#"(fJ"Op#f"(|1 '|O3p#f3 "fi?",oC"j?3#y,C3#yL(3#y2#39%#yR("2c#9"R(#v#!#vD, 'C9 &C+(#H"2f#a"(!#f"2|4#9'|(3#f#39#f(#jb#!"jn,c(#k b#'Cc("bg#"c(#|b# #|c(3#yb#3I#ycL3#y8:3#yzXL"8J:"XL#jq:"v^rL'Cq:#CrL"qB:"r L#|q:"||rL3#yq:3#ylr'C< %!&C,\3#y< %#y+\"<2 %"\'|< %&|q\P"q~.>P#.>P "~.>P" .>P ".>P".>P"U>P#>"q"R"~B" "h"sn"&q":"ql.B"n.B "~.B".B ".B".B"q#"#"~#p"#b"#^"#d8""qv1D8""1D8 "~2.D8".D8"5+D8"%D8"OD8#D"q%"%"~%t"%k"%\"%rKq"%Ln"%"q.F".FT "~.F:K".F<N ".F?J".F;F"F7T"FE9"q'>"'"~'}"'l"'e"'im"'l"'"q~.L#.L "~.L" .L ".L".L"q-"-]"~-2"--"-"-"qm.R"p.R "~.R".R ".R".R"DR"rRv"2$"25G"2Xp"2+#q:V%#4V"~[%V"h.V,#:V""~1V#V#V"q69"6P"~6"6$"6"6]j"6j"6P"^>P";>"LB"(B8"JD8 "WD"F"F"^L";L"MR"*R#'V#V9P"D9P"D9P "D9P"D9P "D9P"D9P"D9P"D~#p{#p#p"#p#p#pn#pq#p8""8""8 "8"8"8"8"8"#p#p#p#p#p#p9q#pEBn#pN8+#8%#8#8#8,#8"#8#8##p #p#p#p o#p{!#p"Cj#pO#gj#ps$P"xm>P"qo>9P"D%9P"D>9P"D9P#r>9P"Dh#xp#q""|#pT3q:732>73#".=3   !$[~'"  C?bT3 3565#V2RLJ673ʇ,)$&P{(8 .#B 35>5#B,)$&P{(8 .#By} 735>5#B,)$&P}{(8 .#B #.=P&$),}". 8({G'H'Hy}'I'>  ###5353 t3t>#3##5#535#5353tttt2, 2"&462IIhIJJ34IIhI-E "&=43E  Y} @\>&h\ 7#5!#5!#5㖒@$y  $/:E2#"&46"2654&%3#2#"&46"2654&%2#"&46"2654&?WX=>XX=)):*)2C[B?WX=>XX=)*:))S?WX=>XX=)*:))W?;WWzWP))))O 'W?XX=)*:))?WX=>XX=)):*)2C[B?WX=>XX=)*:))S?WX=>XX=)*:))W?!0 #/;2#"&546%#"&54632"&546324632#"&7'77''~&$)%%($&z(%&%$%%(????W('&'y&$'%&'($z(%&#Խ::::pS#MQ%.%#5>32#547'57>54&(:NA"r?M |&%OAb7" c;Q6  /$W:" |Yt+1,!5,hh"%q7#"&/5326F+8]_8+JN"y7&&7y"="2q57>32'&#"M+8]_8+JNU#z7&&7z#<-3#'#6xyllx-챱D' ' J I5[A!5[ASQ3#WYW!`-$;#"&=47.=46;#" (G>H:!H>G(!PsSIk1M9ISs ?,m1-#7'57>=4&+532+5326=4&! (G>H!:H>G(m,?sSI9M1kISs >-@#"c"@i#c"py#"M0 #67!5{e0nk}A####5!2t\b?b+/Xw`6PPH19j19%!53#5!2#3+99$Jk32l<<1r$rKtEDtLe" IqR %#.=3#VV1? b8$82#v"q.'e' I A?'yZ'y 83#"/&#"#7>323267^TG4M#!&^ ZA;6$+#?: ! !9= " q57>32'&#"M+8]_8+JN#z7&&7z#< Z&5463276327632#"/#"&/#"&54?#"&546?#"&54632'.5463281!"0J%.!/e} "33" |h/!'I1!"0J'!/e} "33"zh1!%I^"33"|i4-#&I1!"0J'!.e} "33!|i-#'I1!"0J'$,f%1&y.'y y=4@'e''%'y'yL'y~y~%'yt'y'y'y?y?% 'yy@%8'y<&y<'yy9*R'yc'yc&y& 3y%'yB'yy%'y'yA'yyM4632#".74&#"326EX/@! .?"!"# #$ix#BL2"@L2\ADXZ?C4L )N ##5#53#5N._m_jK]]J J#632#"&'332654&#"#78'(@O\IBSY<"('#+Q)KYRAEVE85,%&, L'4>32#&#"632#"&7"32654&55"/"S' "&5;IUCVK'&(%Fb./"&&-)%M=EWpt,#"+-"#*Q #67>7#5QQL[,AB\d|T^K P)#"&547&54632"32654"2654&A;JZGHZJ;S@?St<&'&E '&B'&[8&G=LL=G&:2BB &! %%"&L _eK ##5#5353KuMuuMGmmGmmK!!7GK`&G ?)(cQ)*M(8{8Ht+Iu8N)J*L8Q *P2LKV(LoVLedKk(+VD:)+XH:)+rR:) 8\[8)+V:)73##5#535#535!!3#OOOOIPP?SkS BM3#3#63232>7#"&#"'67#53.'#53.54632#45.#"誉 $i  C$>&0 R)DZo{n> o9W5"$5? N 3N  ZUM+N@N&-e3JO0# 8/")<8%3#4&'#5#54&#"#3>3267sG?F'"cs)#-3#C.j) &i UEh %Qln &82C)#P*.###'##5#535#53533533##5##3'#3----33]5e415]]WggWWWWP&5VPX%>73+!32#54#!#>;,>L7 APk0s5:q7W0 zYI/X+#%%!5##5#"&546325#5353"32654&%6u3Jj||gF2NN}3=>30:;AYYS+{%?S))VVUGLT$\.".'#73&47#73!2.#"!#3#32>7BOB7 M,C0> 7D+-.BZU<"9N %:eAD* D|WHD" DFM"8E0654#"4''#67.54632#526h MKt7G #iUE^WAFu9693  _wk2|$?:N!ViXCh_cGcs"2 '53#&4.'>73#5.546 Dnj  $ ksDts7&&76z%!$* }hi jmprV ##5!5!HHXX}}}}!>7MW@/IdFAYM/Y!&'7!N.AXLd_/MYA,w3K:c!3P , !.'>7#=,0I>>I0,=#B(M+9L<7n,4.E99:;B.7)R,4.H879;C.4,.J(R;33?N'M,0I'U;02>P(H0= #iS0OWM#!5MNPN9'yB'yy-#5!#5{NMdpp9 , !&'67*6n,ii,n6>F8-||-8PR###P:OG:ORHH=<G@I@0 G@{237''7'7/DE-''(&,EDH,9;;9,(4@`3#2#&547#"&54>?2>54#"#>73262#.#"32673#".54676UU*< .q?=1=8$+ 6$& a_a 1$'6&3CPc%;B(chH-B!*!:! 96+ (" HB#%10G5%$?6@L!'JQ..5u'F$4@m3#2#&547#"&54>?2>54#"#>73264632#654&#"#".547332654&/&UU*< .q?=1=8$+ 6$& a_a 1$'6&31kUFPd"$G[p^.D"fL"+#;_! 96+ (" HB#%1AV92   AGT$#2  #&8r! >%4>32#"&72>54&#"3#2#.#"32673#".54676@zOR_wP^%9 +%6O,UUCPc%;B(chH-B!*!:PRUK~V,A8+3nL+2!G5%$?6@L!'JQ..5u'F%#:3#2#.#"32673#".54676#7#"&5473326?3UUCPc%;B(chH-B!*!:g @)1;;g38$6 2g!G5%$?6@L!'JQ..5u'F2# 5- 75- yR,5!.#"#>32#"&'33267^H TFO_:}S[yα͓}FLodv#),rCK^!>723254&54673#"&#"#4>232>73#".#"#4>& *"'aK3 y"4.=Y%( qb:)E'79'y,MQpfJ6&'4Na`4 4M&y#)#  Rf#)#Q]3NQ4!K&327#"&54>7'7>324#">K/ x!VQOQ *I0]VE*$8@`O8|:*-:1'E wKFR5444632#".53032654&#"#'.'$8 j.&9& %=BRq5kRS_+T?-4#o 9$ % }Q!=2# )>LtsP"" z52FX^N;(%D:!.)6#&#"#"&'332654&/.54632##33#X[%+%2H@:dYWc\40,1'/@F<\R-2%[^U[VT[RH  <6FOOI%'! 96CJ7]^8]1f733@/(/\//\G##5!##33#/_m?^U[VT[zNN]^8]6 6,;F; J. %H"")l=XMbX/X?6X)D4@?xf)33@/$/\;/\C*  /c 3!5!} ]'}<  C3###3#/4632#654&#"#".547332654&/.UU#+L-8@'># '>#L-8@'> -8 $ )#"&54632&'.#"#>3 "326543i?js[,@! 9*"'+/=$b:=/0<QQ18tf"K06"0F"F;9JH8;;\ !5!5!5!!5!uu!:}}'}33%!?'})= !! !!5 8!TApzy\|]( #!5 #ww3#qWYW!:'7Ka$ -/FUd %#"/73254632'&#"k0?9  S|U#  -9Z6$ sw@\wn9D27#537#5!73#3!'{IDAb#TDDa4wywu8=wywy8- %!5 %5~Q[[.mox- %!=-5~Q[[Jmoy %3!53!V X2p #6WsH 2#"&5464&#"326߼ 㷱믵f 4D 8'#"&547&'#".5475#"&547&'4/&54>75.'67.54>7'>7$54&/>54.'654lnMQ'}p- # &p|(QM*eK)-%=/E  3:%&1% .4$!9/ 3;&)4% '.%!-;)#!()#"fUhrn;0c (?* ;)< ?( c0;ooj6`S,U++R==&) (  7S/'G0*+/*2 !6T1)I1(*  (.SxC(iD3#<('<#"<'Q:Mc 0%!527>7#"&54>7#"' =- % -6=W'0:797791(W=6- %99 (!V=(:*'7FuKJuE7'*<(=V! 64632>32.7">54#"#".aF4XX4Ec-9A<:==A8,(2?Q\EA=%X#1!4+Ha9229`C-REFT^NQ`VDAJ:,$la},)^NQV(X++/8/K.'>7'67.K#P+2wY`y),8|7#"&54632&5462632#"'$49'U)Ig^D ii D^gIYC&?B%99$9$#*kKIh!HeeH hIKkP.A'c N%3&32654.'326!527>7#"&54>7#"' <C$/&4 49<=834&J- % -6=W'0:797791(W=6- h" )0,4% 5+-H+,I,+4 %4N99 (!V=(:*'7FuKJuE7'*<(=V! 2.54632>Ec-9A<9==A7-aFm8X`C.QDFT^NS`UB@J)Ham76K .'>7KX'+m`y),ZdLRtC9X+0AMY%!5>7#"&54632&5462632#"''3&.#"32>76732654&#"74&#"6$49'U)Ig^D ii D^gIYC&?BC;%Z$48 * V ] <2f6,,5 /'b%99$9$#*kKIh!HeeH hIKkP.A';")4,/; %AC;.+8*9: ;F& %#"&46323L4-BB-3"+S%..J.-7#"&46323#54.'.&L4-BB-6 *1P)*1E %..J.-7&%{U88 &/ 7#"&54632#"&46324O91DF/:#O6/EE/9"Q())(&-ƕ&--L-K75%#"&54632#"&46325N:1DF/:#O6/EE/9"?~Ey())(&-ƕ&--L-`!#"577>324&#"32>Ihk&'D  V_&B >3*ET30  \TO5= G* 5775DDD Y WpEV;%555755757757775>FF,,,,FF>>>J- 24- 8.5H,Ei&547.#>7&'32.'>?/4&54654'>32%267>7632327#"&'&/.'&547#"&'>7&'>;&5477654'4?&54?&5472>54'#"&'#"32?632+%>7.#"327'&5465.'&'6324654.'&#"3263232654&"#"'.'&'&'&'32?6=#"'>7>7&5472>7327"&+"27>32&#"54#"+654.'>7v60F\<+/I >0 %$ =  *@i/CCC 2  'YT w` .)*DAcE O(X6A($s Q.g-OM 6$" zt  $  tg Q <$ -.S+"-I$& ),8yZX&O#$^&0 (E,! . %3 4(  kfd  :S a#*$] aL-=5#,&; C  >    4  B! o  G+4,<0 9'2//@ O 7?C  {&q* $ F &&& ,/N >d& Y !o+4V Fm#%0#(EE 7@ l}E'! 03 $ n5e5 m"!< "7)`  (@'M ?  )W& ,, 1"'%llf JA/T8.:S0$Da* @$4fU< >    0)      $<2"&4264&"vtRRtRoRtRRt/80 66  !."!268<_<WqqWqq80 66  373.>7#5#84&RV _c V"  xW>2I%ᛠ%I2>WW> ea >W6r !##5333#xbbxbb0x0xH 373#'#H؏l8 :D3264&#"2#"&54632#"&5473533##5#&5463264&#"  ?W7UQ%%QU7W?>V P|KxMMxKyR V"  CW>2I%ᛠ%I2>WW> lPDDxDDNn >WH!3533##5#!!8|xppx|xbbxbbx0!!b]`(H7!3!3Pxxx`( '%EaE#cc6;!#5#4>75.5353>53#4.'xx -=a;Qx;"x#I3x2H#x .<`;Qw:"x"I2!908) 8AU23%$$&2 818*!8AU22$"H3#3#'xdIq6F5!5.5353>53!!#4.'#5#4>75QQx;"x#I3x1H"x";wQ;_<. x"I2x1H#x)>kE0x8AU23%##&12V@8x!)808!2%#"&1 'E::'H353!3bxx4(w"575"#TXTTXT I\fg?2z$F  @</#5*8(Q<#'5*8(K######535432&#"35432&#"KSLL)'&)'&]LL]Ai*5Ai*5#5####535432&#"LL)'&}}L]Ai*5####535432&#"35LL)'&'L]Ai*5 )#5######535432&#"35432&#" LL)'&)'&}}LL]Ai*5Ai*5 '53######535432&#"35432&#"~LL)'&)'&'LL]Ai*5Ai*5S'W&AA?!#5#"&=3326=#"5473;./&546;"!32653#5#"&5#$:hV_Z3>Їi*.'&(0)Z3>:hV_@WbYa:0 '&-] * a:0R@WbY A7!#5#"&5332654./&5463!!!326=3#5#"&5$:hV_Z3> $.'&WZ3>:hV_@WbYxa:04 -]a:0:@WbY &A85!#5#"&5332654./&5463!632#4#"#$:hV_Z3> $.'&:d 97 V/=@WbYxa:04 -W'N5Jd<.D &A8.6"&5463!!32653#5#"&5#3##"&=3326=#"3;LQ6\Z3>:hV_N:hV_Z3>*O@CSa:0R@WbY]WbYгa:0hU'A8g9!#5#"&5332654./&5463!332653#5#"&5##"$:hV_Z3> $.'&Z3>:hV_N@WbYxa:04 -a:0R@WbYyD &IX'52-273#"&'30d;#@Qd55OJIX&VCX%+533>53CY{nm@]s;1q=X##5>7'3>=3g"-   .o;2AQ$ #. 63"-8M5?0X!5!##RSssO^X.'!5!#!3   4|m sP&5%]LX&. '!5!#!5!>7 !L3Y-?+A&m sP'5$+s >M#54>76=!3!M@[[? )-'D|2H)'=*ek*%  /B P_X 2!.'!!T>c8% .#X'7D3X"2 ? X.'!5!#  Cɠ4m sP&5%>X(.'!#'532=#5!# &+  UA WB( 10&n&" 2* ,tvs#)9"2!5353w#wwL&L&L&&L'&=rX&;=X&,=X&&MbX&/X&?6X&OdX&1 X'3sX'LaX&5)X''@F>8X&LX&>S&HCyX&CIgX'HLaX&/H8NY&MEOUX&ZF=^X'tP8WX&)?X&LX&>X'&Mb&0L&OU&8S#53>753m_l B9*"r #'3=46323467>54&#"#3 m2&$0((c$8(oX/6'xxAP.=5'* $=( ((A3Qg -NuuQ Le462&0% ,,` 35>5#p*F&@<;38 *$RQ5!##5##5##5[\\\KK//==//#y"y#y7"y#m#"&'#"&54>3267n ~ s /-(0*)/ 6>]U(+4*%2 pG};#327#".'.546;53#"$~ 7# B*6 .0L&C?L#*. %B8|-#"&'4326753t< e4S1 ]ޑg=S  : >726=35!5!####".'7 V|pf X ( q!pqj$P hG&".'#"5462353'32=/;! .EBNI)(655/$76753#"(8P;. T9)UN!7,"Y.54&#"#"54323273Lti#%)D. :>L @QCUw>,&,0' g;1(K4=&}"53#5654&"3"&546T>JD>4CDA   =FVhSSU/?QH3-+  HS=8Ms47332>32#".s 3+%  ?1537+- 0E, ' " 7M-X #"&'30 +.5 2.hX#"&'#"&546326735!*T t 1,/)7, /a  iwOT'-="#C A' DD-L#"&'43267535!s< e4R0 `if>R  : ?[DDWX32>32#"&54735!3" "4.;T .ij8]M012I]m/*pDDX#"&'&'35!0 !v5'5Ui")K;,>%DDh5"&#"&'#"&54632675!5!s  &5 s 4%0(03"-LL' H)4> "5566-4#"&'43267535!5!s: e4M!0 `xxhc-S  + ?n11u003#"&54632#"54654&#"e54&#".#"'5327#"'5327462#"4654&"#"&32".5432#".=#53>32;+tha]]f]c]k`ZiH+)2F +5  30603 -b^u`$AJ?:)LM G((r)'hWaE)OO:832#".54632#".=#53>32;!!#Dia\]c_d]m]Z_f\e\ 1N2hG+)2 F +5  ,'13 )e]u_4[eG/KL C  ((l('E''m)(N%6= E)OGB8=p-6-+#&;! C0!++>uBH^SfCm~ppf -R32654&#"'326767!432327632".# #53>3#.#"!3O-;2]4#nMc,5 np,;` 30613mK8^w]UX/DvK`'7#C@Y a\"}4@*,1Bk)2=M*/7f*,"/C C+j#E^Shp@]F2&Ysp' h)& p' _' ' I' i' ' o' h' ' l' a' ' ' ' ]' ' z' J' ' w' ' ' j ' V N62#"&5474>54'#"54>7654+532>7675;!##+##"$-"%+%#eM .-R /F\-A -2U,0,7Bap aqY6(/Vr" -"':*:GC@h_;E  +(pP"0,,62I^!pI.44A8 GL$2#"&54.#";!#&#"32>32#".'67&'+##53>32375$-"$>?'c|;^> $I"9 'J/321$-"-kl'J/?"m^ygloW%;^> $I"9 4" -"xu{ -4%(P5^G5spbY0Lovp&#C#'&) ~'&) ~'&( n'& \' 'R& VfEO%4>54'#"54>7654+532>7675;+#+##""&4632L%+%#eM .-R /F\-A -2U,0,7B^00Tp^qY6(/V"00"$..z:*:GC@h_;E  +(pP"0,,62I^!pI.44A80D00D0GL#;#327#".'.546;53#"5!$~4$ B-8$ .0L&Fjx3267n ~ s /-(0*)/ 6>]U(+4*%2 pD&#"'5326=#3;A$/ ۖ!B:p?J~E*R - +  Q$i& $ B P    T } 6  % V1  H r "  &   $B&V~"("&JTr(  !.!*F" r" $ $ &&*''&**R*\- z-Copyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.Copyleft 2002, 2003, 2005, 2008, 2009, 2010 Free Software Foundation.FreeSansFreeSansBoldBoldFontForge 2.0 : Free Sans Bold : 19-9-2010FontForge 2.0 : Free Sans Bold : 19-9-2010Free Sans BoldFree Sans BoldVersion $Revision: 1.199 $ Version $Revision: 1.199 $ FreeSansBoldFreeSansBoldGNUGNUhttps://savannah.gnu.org/projects/freefont/https://savannah.gnu.org/projects/freefont/This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.This computer font is part of GNU FreeFont. It is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.http://www.gnu.org/copyleft/gpl.htmlhttp://www.gnu.org/copyleft/gpl.html?>;CG5@5=Free Sans ?>;CG5@5=tu nFree Sans tu nfedFree Sans fedFettFree Sans FettFree Sans NegritaFree Sans NegritaLihavoituFree Sans LihavoituGrasFree Sans GrasFlkvrFree Sans FlkvrGrassettoFree Sans GrassettoVetFree Sans VetHalvfetFree Sans HalvfetPogrubionyFree Sans PogrubionyNegritoFree Sans NegritogrosFree Sans gros>;C68@=K9Free Sans >;C68@=K9Tu nFree Sans Tu nFetFree Sans FetKal1nFree Sans Kal1nhuruf tebalFree Sans huruf tebal68@=89Free Sans 68@=89KrepkoFree Sans KrepkotreknrakstsFree Sans treknrakstspusjuodisFree Sans pusjuodis#mFree Sans #mLodiaFree Sans LodiaCE   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  softhyphenmicroAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflexTcedillatcedillaTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019auni019Buni019Cuni019Duni019EObarOhornohornuni01A2uni01a3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01aauni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01b2uni01B3uni01B4uni01B5uni01B6Yoghuni01B8uni01b9uni01bauni01bbuni01beuni01bfuni01c0uni01c1uni01c2uni01c3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9Oogonekoogonekuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5Wynnuni01F8uni01F9 Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021cuni021duni021Euni021Funi0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233dotlessjuni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262 gammalatinuni0264uni0265hhookuni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027A rturnrthookuni027Cuni027Duni027Euni027F Rsmallcap Rsmallcapinvshookeshdotlessjstrokehook eshshortreveshcurltturntrthookubar upsilonlatinvhookvturnwturnyturn Ysmallcapzrthookzcurlezhezhcurl glottalstopglottalstoprevinvglottalstopinvcstretch bilabialclick Bsmallcap eopenclosed Gsmallhook Hsmallcap jcrossedtailkturned Lsmallcapqhookglottalstopbarglottalstopbarrevdzaltonedezhdzcurltsteshtccurluni02a9uni02aauni02abuni02ACuni02aduni02aeuni02afhsuper hhooksuperjsuperrsuper rturnsuperrturnrthooksuper Rturnsuperwsuperysuperprimemod primedblmod quoteleftmod apostrophe apostropherev ringhalfright ringhalfleftglottalstopmodglottalstopreversedmodfrontedbackedraisedlowereduni02c8macronmodifieruni02CA gravemodifierverticallinelowmoduni02cduni02ceuni02cfcolontriangularmodcolontriangularhalfmodringhalfrightcenteredringhalfleftcentered tackupmid tackdownmidplusmodminusmoduni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4 toneextrahightonehightonemidtonelow toneextralowuni02EAuni02EBuni02ecuni02EDuni02eeuni02EFuni02F0uni02F1uni02F2uni02f3uni02F4uni02F5uni02F6uni02F7uni02F8uni02F9uni02FAuni02FBuni02FCuni02fduni02FEuni02FF gravecomb acutecombcircumflexcomb tildecomb macroncmb overlinecmb brevecomb dotaccentcmb diaeresiscomb hookabovecombringcmbhungarumlautcmbcaroncmbverticallineabovecmbdblverticallineabovecmb gravedblnospuni0310breveinvertedcmbcommaturnedabovecmb commaabovecmbcommareversedabovecmbcommaaboverightcmbuni0316uni0317uni0318uni0319uni031Ahorncombringlefthalfsubnospuni031Duni031Euni031F minusbelowcmbuni0321uni0322 dotbelowcombuni0324 ringbelowcmb commasubnosp cedillacmb ogonekcmblinevertsubnospbridgebelowcmbdblarchinvertedbelowcmb caronbelowcmbcircumflexbelowcmb brevebelowcmbbreveinvertedbelowcmb tildebelowcmbmacronbelowcmb lowlinecmb dbllowlinecmbtildeoverlaycmbstrokeshortoverlaycmbstrokelongoverlaycmbsolidusshortoverlaycmbsoliduslongoverlaycmbringrighthalfsubnospuni033Auni033Bseagullbelowcmbuni033Duni033Euni033Funi0340uni0341perispomenigreekcmb koroniscmbdialytikatonoscmbuni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034funi0350uni0351uni0352uni0353uni0354uni0355uni0356uni0357uni0358uni0359uni035Auni035Buni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0363uni0364uni0365uni0366uni0367uni0368uni0369uni036Auni036Buni036Cuni036Duni036Euni036Funi0374uni0375 ypogegrammeniuni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammaEpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosthetasymbolgreek Upsilonhookuni03D3uni03D4phi1omega1uni03D7uni03F0uni03F1uni03f4uni03F5Iecyrillic_grave Iocyrillic Djecyrillic Gjecyrillic Ecyrillic Dzecyrillic Icyrillic Yicyrillic Jecyrillic Ljecyrillic Njecyrillic Tshecyrillic KjecyrillicIicyrillic_graveUshortcyrillic Dzhecyrillic Acyrillic Becyrillic Vecyrillic Gecyrillic Decyrillic Iecyrillic Zhecyrillic Zecyrillic IicyrillicIishortcyrillic Kacyrillic Elcyrillic Emcyrillic Encyrillic Ocyrillic Pecyrillic Ercyrillic Escyrillic Tecyrillic Ucyrillic Efcyrillic Khacyrillic Tsecyrillic Checyrillic Shacyrillic ShchacyrillicHardsigncyrillic YericyrillicSoftsigncyrillicEreversedcyrillic IUcyrillic IAcyrillic acyrillic becyrillic vecyrillic gecyrillic decyrillic iecyrillic zhecyrillic zecyrillic iicyrilliciishortcyrillic kacyrillic elcyrillic emcyrillic encyrillic ocyrillic pecyrillic ercyrillic escyrillic tecyrillic ucyrillic efcyrillic khacyrillic tsecyrillic checyrillic shacyrillic shchacyrillichardsigncyrillic yericyrillicsoftsigncyrillicereversedcyrillic iucyrillic iacyrilliciecyrillic_grave iocyrillic djecyrillic gjecyrillic ecyrillic dzecyrillic icyrillic yicyrillic jecyrillic ljecyrillic njecyrillic tshecyrillic kjecyrilliciicyrillic_graveushortcyrillic dzhecyrillic Omegacyrillic omegacyrillicuni0470uni0471 afii10147 afii10195Omegatitlocyrillicomegatitlocyrillic Otcyrillic otcyrillicthousandcyrillictitlocyrilliccmbpalatalizationcyrilliccmbuni0485uni0486uni0487uni0488uni0489uni048auni048buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04cfuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04d9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFDzeabkhasiancyrillicuni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04f6uni04f7uni04F8uni04F9uni0510uni0511uni0512uni0513uni051auni051buni051cuni051duni051euni051funi0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564 echarmenianuni0566uni0567uni0568uni0569uni056A iniarmenianuni056C xeharmenianuni056Euni056Funi0570uni0571uni0572uni0573 menarmenianuni0575 nowarmenianuni0577uni0578uni0579uni057Auni057Buni057Cuni057D vewarmenianuni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058A afii57799 afii57801 afii57800 afii57802 hiriqhebrew afii57794 afii57795 patahhebrew qamatshebrew holamhebrew afii57796 dageshhebrew siluqhebrew maqafhebrew rafehebrew afii57842 shindothebrew sindothebrewsofpasuqhebrewupperdothebrew alefhebrew bethebrew gimelhebrew dalethebrewhehebrew vavhebrew zayinhebrew hethebrew tethebrew yodhebrewfinalkafhebrew kafhebrew lamedhebrewfinalmemhebrew memhebrewfinalnunhebrew nunhebrew samekhhebrew ayinhebrew finalpehebrewpehebrewfinaltsadihebrew tsadihebrew qofhebrew reshhebrew shinhebrew tavhebrew vavvavhebrew vavyodhebrew yodyodhebrew gereshhebrewgershayimhebrewuni0A01uni0A02uni0A03uni0A05uni0A06uni0A07uni0A08uni0A09uni0A0Auni0A0Funi0A10uni0A13uni0A14uni0A15uni0A16uni0A17uni0A18uni0A19uni0A1Auni0A1Buni0A1Cuni0A1Duni0A1Euni0A1Funi0A20uni0A21uni0A22uni0A23uni0A24uni0A25uni0A26uni0A27uni0A28uni0A2Auni0A2Buni0A2Cuni0A2Duni0A2Euni0A2Funi0A30uni0A32uni0A33uni0A35uni0A36uni0A38uni0A39uni0A3Cuni0A3Euni0A3Funi0A40uni0A41uni0A42uni0A47uni0A48uni0A4Buni0A4Cuni0A4Duni0a51uni0A59uni0A5Auni0A5Buni0A5Cuni0A5Euni0A66uni0A67uni0A68uni0A69uni0A6Auni0A6Buni0A6Cuni0A6Duni0A6Euni0A6Funi0A70uni0A71uni0A72uni0A73uni0A74uni0a75uni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10D0uni10D1uni10d2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10f9uni10fbuni10fcuni13A0uni13A1uni13A2uni13A3uni13A4uni13A5uni13A6uni13A7uni13A8uni13A9uni13AAuni13ABuni13ACuni13ADuni13AEuni13AFuni13B0uni13B1uni13B2uni13B3uni13B4uni13B5uni13B6uni13B7uni13B8uni13B9uni13BAuni13BBuni13BCuni13BDuni13BEuni13BFuni13C0uni13C1uni13C2uni13C3uni13C4uni13C5uni13C6uni13C7uni13C8uni13C9uni13CAuni13CBuni13CCuni13CDuni13CEuni13CFuni13D0uni13D1uni13D2uni13D3uni13D4uni13D5uni13D6uni13D7uni13D8uni13D9uni13DAuni13DBuni13DCuni13DDuni13DEuni13DFuni13E0uni13E1uni13E2uni13E3uni13E4uni13E5uni13E6uni13E7uni13E8uni13E9uni13EAuni13EBuni13ECuni13EDuni13EEuni13EFuni13F0uni13F1uni13F2uni13F3uni13F4uni1E00uni1E01 Bdotaccent bdotaccentuni1E04uni1E05uni1E06uni1E07uni1E08uni1E09 Ddotaccent ddotaccentuni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1D Fdotaccent fdotaccentuni1E20uni1E21 Hdotaccent hdotaccentuni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3F Mdotaccent mdotaccentuni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55 Pdotaccent pdotaccentuni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5F Sdotaccent sdotaccent Sdotbelow sdotbelowuni1E64uni1E65uni1E66uni1E67uni1E68uni1E69 Tdotaccent tdotaccent Tdotbelow tdotbelowuni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1e9auni1E9Buni1EA0uni1EA1uni1ea2uni1ea3uni1EA4uni1EA5uni1EA6uni1EA7uni1ea8uni1ea9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1eb2uni1eb3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1ebauni1ebbEtildeuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1ec2uni1ec3uni1EC4uni1EC5uni1EC6uni1EC7uni1ec8uni1ec9uni1ECAuni1ECBuni1ECCuni1ECDuni1eceuni1ecfuni1ED0uni1ED1uni1ED2uni1ED3uni1ed4uni1ed5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1edeuni1edfuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1ee6uni1ee7uni1EE8uni1EE9uni1EEAuni1EEBuni1eecuni1eeduni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1ef6uni1ef7uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBClenisprosgegrammenipsili perispomenidialytikaperispomeniuni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCC psilivaria psilioxiapsiliperispomeniuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDB dasiavaria dasiaoxiadasiaperispomeniuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECdialytikavaria dialytikaoxiavariauni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCoxiadasiauni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200auni200buni200cuni200duni200euni200funi2010uni2011 figuredash afii00208uni2016 underscoredbl quotereverseduni201funi2023uni2024uni2025uni2027uni2028uni2029uni202auni202buni202cuni202duni202euni202funi2031uni2032uni2033uni2034 primereverseduni2036uni2037uni2038uni203b exclamdbluni203doverlineuni203funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204auni204buni204cuni204duni204euni204funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205auni205buni205cuni205duni205euni205funi2060uni2061uni2062uni2063uni2064 zerosuperioruni2071 foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior plussuperior minussuperior equalsuperiorparenleftsuperiorparenrightsuperior nsuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior plusinferioruni208B equalinferiorparenleftinferiorparenrightinferioruni2090uni2091uni2092uni2093uni2094liramilluni20A6uni20A8 afii57636dongEurouni20B0uni20B5uni20b8leftharpoonaccentrightharpoonaccentuni20D2uni20D3uni20D6uni20D7uni20DBuni20DCuni20DDuni20DEuni20DFuni20e0uni20E1uni20E5uni20E6uni20E7uni20E8uni20E9uni20EAuni20EBuni20ECuni20EDuni20EEuni20EFuni20F0uni2100uni2101uni2103uni2105uni2106uni2107scrupleuni2109planckIfrakturlitreuni2114uni2116 recordrightRfrakturuni2120uni2121uni2126uni2127uni2129uni212auni212buni212euni2132uni2135uni2136uni2137uni2138uni213auni213buni2141uni2142uni2143uni2144uni214buni214duni214eonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217F arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CA universal existential Delta.mathgradientuni2215uni2423circle largecircleuni262Cspade heartopen diamondopenclubspadesuitwhiteheartdiamond clubsuitwhiteuni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2740uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D6Funi2e17 lowcircumflex colonmodifier shortequalsSaltillosaltilloffffiffllongs_t m_n_armenian m_e_armenian m_i_armenian v_n_armenian m_x_armenianuniFB1DuniFB1EyodyodpatahhebrewayinaltonehebrewuniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29shinshindothebrewshinsindothebrewshindageshshindothebrewshindageshsindothebrewalefpatahhebrewalefqamatshebrewalefdageshhebrewbetdageshhebrewgimeldageshhebrewdaletdageshhebrewhedageshhebrewvavdageshhebrewzayindageshhebrewtetdageshhebrewyoddageshhebrewfinalkafdageshhebrewkafdageshhebrewlameddageshhebrewmemdageshhebrewnundageshhebrewsamekhdageshhebrewpefinaldageshhebrewpedageshhebrewtsadidageshhebrewqofdageshhebrewreshdageshhebrewshindageshhebrewtavdageshhebrewvavholamhebrew betrafehebrew kafrafehebrew perafehebrewaleflamedhebrewuniFFFDcresc_cyrillic dot_cyrillictitlo_cyrillicyi_yi_lig_ukrainianuni0A30_uni0A4D.blwfuni0A35_uni0A4D.blwfuni0A39_uni0A4D.blwfuni0A2F_uni0A4D.pstfglyph152glyph153glyph154glyph155glyph156glyph157uniA30_A4D.blwf_A41.blwsuniA39_A4D.blwf_A41.blwsnounicode_3_1_3glyph161uni0A30_A4D.blwf_A42.blwsuniA39_A4D.blwf_A42.blwsnounicode_3_1_2fnounicode_3_1_30uni0A28_uni0A42_uni0A70.abvsuni0A3E_uni0A02.abvsuni0A09_uni0A71.pstsuni0A0A_uni0A71.pstsuni0A13_uni0A71.pstsuni0A15_uni0A3C.nuktuni0A18_uni0A3C.nuktuni0A19_uni0A3C.nuktuni0A1A_uni0A3C.nuktuni0A1B_uni0A3C.nuktuni0A1D_uni0A3C.nuktuni0A1E_uni0A3C.nuktuni0A1F_uni0A3C.nuktuni0A20_uni0A3C.nuktuni0A22_uni0A3C.nuktuni0A23_uni0A3C.nuktuni0A24_uni0A3C.nuktuni0A25_uni0A3C.nuktuni0A26_uni0A3C.nuktuni0A27_uni0A3C.nuktuni0A28_uni0A3C.nuktuni0A2A_uni0A3C.nuktuni0A2C_uni0A3C.nuktuni0A2D_uni0A3C.nuktuni0A2E_uni0A3C.nuktuni0A2F_uni0A3C.nuktuni0A30_uni0A3C.nuktuni0A35_uni0A3C.nuktglyph194uni0A39_uni0A3C.nuktuni0A05_uni0A3C.nuktuni0A06_uni0A3C.nuktuni0A07_uni0A3C.nuktuni0A08_uni0A3C.nuktuni0A09_uni0A3C.nuktuni0A0A_uni0A3C.nuktuni0A0F_uni0A3C.nuktuni0A10_uni0A3C.nuktuni0A13_uni0A3C.nuktuni0A14_uni0A3C.nuktuni0A06_uni0A02.abvsglyph207uniA35_A4D.blwf_A41.blwsuniA35_A4D.blwf_A42.blwsuniA30_A4D.blwf_A4D.blwsuniA39_A4D.blwf_A4D.blwsuniA35_A4D.blwf_A4D.blwsEngsami dc-./0abcdpqrs]^_`z{{| %&'(jkrstu|};<=>?@IJJKTUz{ $ % / 0 1 2 2 3 \ ] ] ^ a b f g l m n o p q r s t u    , $;ӀB6qr + ,  DFLT8armnDcyrlRgeor^grekhgur2rguruhebrlatn   "ISM .LSM .NSM .SKS .nl 6  abvsnblwftblwszccmpccmpdligfrachlighligligaligaligaligaligaloclnuktpstfpsts     (08BJRZbjrz .LPv&6 "( )IO (IL 'O &L %II *WA6",bqcr28RX ,>Pbt     .     / $(,28DHLRX&8Z| qomk   rpnl   {ywu |zxv -M,L t &.6>FNV\}}{{ "~~|| " " b6 ,  / - , + . 2 ]@FLRX^djpv| W W = @ C Q S \2 (  c d e (V`jt~ (2<FPZdnx                     z    {  |  }  ~                                           %  & fZ &@  q m     r n c d e, "  u& v *   w' x' y' DFLT8armnFcyrlRgeor`greklgur2xguruhebrlatnkern kern&mark,mark2mark< *2:BJRH R"VTlb%,l3F@M$$%%&'(())**+,--..//01 22 33 44 55 66 779:;;<<==        "" $$&&88::??yy !! ++ -- 5577$$&&(())**++,,--..//01224466779:;;<<==DDFGHHII JJMM PQ RRSSTTUUVV WW XXYZ[[ \\]]         !! ""## $$%% &&++--//11338899::;;<< ==>> ??@@   ""++,, --.. 5566 7788  % & ( ) `$%&'()*+,-./012345679:;<= "$&8:?y!+-57PLTDDEFGGHHIIJJKKLL MMNN OO PQRR SSTTUU VV WWXXYYZZ[[ \\]]         !! ## %%++--//113399<<>>@@  "",, .. 6688 % % & & ( ) HDDFFGGHHIIJJKL MMOO PQRRSS TTUU VVWWXX YZ[[\\]]       !!##%%++ -- // 11 33 99<< >> @@ 22  "" ,,..6688 % )fDEFGHIJKLMNOPQRSTUVWXYZ[\] !#%+-/139<>@ ",.68 % & ( )y$$%%&'))**.. //22334466779: ;; << == DD EF HH II JJKKNNPQRS UUVVWWXXYZ[[\\]]              !!""##$$%%--//3388 99:: ;; <<== >>?? @@22    !!"" ++,,--..55667788  % %  mm}}$%&')*./234679:;<=DEFHIJKNPQRSUVWXYZ[\]  !"#$%-/389:;<=>?@2 !"+,-.5678 % mm}}n$$&&**--224466779:;;<<==DDFHII JJMM PQ RRSS TTUU VV WW XX YZ[[ \\]]           !! ""## $$%% &&++ -- // 33 8899::;;<< ==>> ??@@ 22    "" ++,, --.. 5566 7788  % )  m}@8Xjjkkssuuzz~~ kkww~~jksuz~" }D`n  &,28>DJPV\blB<%8A8 4,i4 #%26>BDFLRV &,28DDnDXIuT;L(  &,28>DJPV\bhntz "(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz "(.4:@FLRX^djpv|hvzWhGhF?gBdR5rLQ[-D!0.3c!!hhhhhhhhhhrrrr[33333!!!!hhs"hh z"hhhh///l#l#l#l#l#YY3r!I8w8hhhhhhhhhhhhhhh333333333r!r!r!r!r![$$=DIKL NS"U](18@EJPX]bgouw}*38:bceeqr&&==iru|  !#')*+LL,PS-1,28>DV\bhnt $*06<BZZZK4ZZZZ Z `Z `NZf|Z 0ZZZZZZ ZZZZZ   Z@:Z- @F: p Y &,28>DJPV\bhntz "(.4:@FLRX^djpv|iswEfUi@@mWs@8jUXV@&@!& &&@*&M&1&:& &&&2&&wi&i&&i-&1&j2&&-&-!.`if&1&1&j2&j2&V&$=D]4579;45<bc>ee@qrAxxCDFG11H33I==JKLNOQUW^_"%'(*,<=9@C;HH?KK@MMATTBC 28>DJPV\bhntz"(.4:@FLRX^djpv|DDnD V3VDVDDY5ZDXIY: DYDUUDX0 PY7UuUU$P/[0X-XM/U P0G3>s =[..0E   2&b, "(.4FLRXj| $*06<BHNTfx 2DVhz .@Rdv $*06<BHNTZ`flrx~,>D|  G Q{  | @| | @| @| @| @GGGG            QQQQ{{{{{             { |   |   |   |   |   |   |   |   |   GQGQGQGQGQGQ{{{{{{{{{             $$((,,2288<<DDHHLLRR XX \\ $*27<99=bc>qr@irBu|LT`blt~{0 >~ &,28>DJPV\bhntzW#WWWWWWWWWnny{ynynySyyeyy y4y9yynyyTyynyHy5ynyOyySyUy=y%B%%%%%%1%%%%%%3%,%;%%%%%%%%%%%%$= D]$ DEFGINO 28>DJPV\bhnt~l))/))T)ɉo1Y ˦pysiogame-1.30.811/images/memory/f_img1a.png0000644000175000017500000001357612201770070017546 0ustar tigertigerPNG  IHDR^PLTEc\W^ f mu |  9 &%*-65879=A>DFKGNOTPy+WX^[j!`bgevWil,ooe5(rrxy<4{|6*K=~?5}Ս{ꈀD:XI{`ZPlQE񏍓gd[[Tpgh\yqqhyyq|rÉ}ه؎܊ήޜ׬´ӿZQbKGDH pHYs B(xtIME  7"!IDATx]w֖I81F OjL 3NPHСcJE@GY=Wįy/ڮepu?s\v 5k @xHy5Eb> ˡ24ݝ/"`X>!s`/./HÇ$%%Ix ~KϮ+.dMKk*Q~tx#4 e@ ayARlP,F0>|+Jg U=_2FCH}wrB!`@lʷI˖fQ+4I-ݗZKmu>.F鶛RFĜ)j3F^J_5#B2t۬Nګ--$&iJvբ.͞ _tjVc֍|ZN}@$Rl֫&ibK SOjb0*.$ . ,fb2b{>MP$|mt tf#(Jix(5h&"cbBp oF =7;3̊Ô$X+IammB{$DGb:Brcgz}Q.kgMxOSqԈ_ ^@D# Y;H.a_6< ھ틍9_I]8{o7#lG✩yC&.ʛq<$ iy q4G9ZQ>9H (3 Mѧ+ |9پȋ2!m"B Q~%`UUeH~jB'D+٢lVT)[PzMP\Ǡ9trhR{yTy6`@".-՚flTUM|8},X@f%Xo=WNMQihְg֊'7 H[hiUS꛵rVJa?eSЩ6{\%ß=BV/3]/ IʰOFA3B9Xbg>9wb:It\ PkbroU91SO {vYJR!##D& W M~Jbb2d3&KW?',N`s2I" 8mL^Xt97NJ([3`bAsr'eGx(7'=8 L#DBw}?aploA({Pc2ҊH B<.D6iۭVX}5%8Js@mHD>D:-$_ Y4 m&Z+28ğABG}AZ&e$Fj+^&z= ONIp Y'tnj0Mb.n\jɸ| e&pЫTŜ6SY 8 !Ieqq)x9Lv yH^O6CYzog6BRWfكX Q/G8MlM}7ow￀Q'9ۍB@@^^fk*9-I (_!{ps^6&L^pk+tx6=x^sSk=l q2~ 3J)Gk?#|?*`ne@JՍ5hiIvfH^*[3`,Oi@D jwj)"gJ(}5LHjQ弮J겁K+ 5E{] {x&_(P,e #qR@8/gQ}rwP퐉 s4]ױ㹺l ]srRA%J)ׇOGoZ>Ry ?< lIx:q=j%XqOG*֫ޱuw Dbba\A9F $c;q?U0DfY9[?0%".~q ͓Vz{"܇?,~_f1L*< ڽacJšT&q=uC1tN ".!.Qʈ@h2Aj2^(B"I0mo6ImyJY7Y_xp0#FYSg!fr%lx!ʅ*hŲN^hN-ze"4}d6r\:+k&qXΏ2.z~Q7;IMy@DAe&|`JR=:;4[$,H nñޙR&Ptx<ތb[I^:wS{ׇʣ$rD z `ykI@`#2GmD[+WӸg`,b"3ѥ1qdXzY"#U$қaN]M@ɇ|PM G*> 1&P1ıH3}W}^)dRR%~WhG|? 5g6ʪ& Ҩ{'E|Kb>qǑCϗGĂu@W[q}@L13LPJ2H ho)J\y ݄SmJBhC ld)EÈObqg9MhU"9 ni}QB83-h4N"ԟ95Mlv0skWA9?(緯͖wrUdx@J Ф>QŠ)cyI n }C RNqɻ@F1E5\8bޡ!BX_-gftx۝Ɯ(ٻE*"mg@8؎037?0gEy>۶Vنd,HjY.A_Ey~~cH; "1a4 ?rҙLWWtF,?_`*Elr}sN[{+Cpqu@ºA3Lfq]OW߆tsRs!,6ʴc -%フA|d't.}F =uY Ԅp 7s8_MN6qcȶ$$)n{SBj Gʹ[ĸ-" No#RCi}{o3nUq:Tx{}^Syl 7ܬ?p7Z۞ɓn2 m\۾[uá8xɫڛ|4sVq+hC=Ue1JyT]k{~7jJ HzFJG{a/n3A2m q9|"u+ʃy6Y KΪV海cB^ğpZf]/>ŀ):6ֺ vmT3))'8RPwb*7tVĮ4yiVaG[1nd^IɾCV\u8`YÂϜϫYm0Y[VÝ&sRk&=5CGKOe 'Mug@ [Tݼ5լw?c gݲ*'%ڱ[LcY65SL49j8b\km bԨ9}T3{C*gS;9re9h/4B.%1ER`'5 pL⿲Wp[yE2@8̣]?INJUװ&.EnUܷ%]#LzX*/5@?a4ڽ^+5Q 0rщ@&I; ] R)5 KO/ Υ-(p` ٽRH1.H,Mbuvk;w60gTm`jOPn<>`+:$K$e&d /f@܋lWX =}7* <6 Y<%{l:AH&8 ~ݝ<`[ p`|FtҨ}3ZLȐBƝ}єh}EjgscbrM|tڰM% }6hUa:V'H@ |w~vZ9t.a\$inNE@l9M┈g_oHu!a*0SYwuwLMJ (bf9W $5k @\+)PTFIENDB`pysiogame-1.30.811/images/memory/m_img7a.png0000644000175000017500000000420412201770070017547 0ustar tigertigerPNG  IHDR_vPLTExI^RJoTbKGDH pHYs B(xtIME  4l/IDATxo:'!~rzEV\9Պ+,+PP4S}M_ }M.KH{syeH36B@ޱc۳qRq3y|!<([!ۋE:B_aJ!"_oG-xl$׶P@V/I 1${P~>lf͛?چn1p~|r43:}ӤN97Ym^{cgaY/HE*&Q)GWȒ]8,Y}Bl`c˅'EmSRlP'?qŞ O_X_O4'h<-ЄQ ۝qKϼBGtaBlҰ)zyc {.tl a֥[&K˄n)Xz]É Gx}Ad| !.nَ)E8YdL)M%nc26w8%kAtx #䔔qK8 @\-G'ZVݲZ\:KҀ0 aƁWH[١ @@!8^%¡J<w^4wH{bۄ5sV܆4̵U<^(*tP:J6$JW3 G tWYݹ cC#QB:Jї;f)C0p~?t/,m! 1ՠKcZHġ W .Dž )UQ.ʂB }=] V$BB%w D<_Ib(D.@ՕNdr(' =xIRO]%9:YZNl#Lqef+Vo OT5,nJ- RB;ֽ0v@hga8[^і6i, ~ ǁL. ~ .S4d`WCnj B3!U!b l&$LJσ4A%mʼ`k~k]a2Oqf=B@ɏx&={*F!mtgn.|LD)Gns!M"D=ř>iAo&^t`5c*<"Q)CH>3dQawRJ9(|VQ;zW*D;ޥڐ8men'Gtr zHM?aStpcotzc%ntȔ,Bc=Lz쑆Gq BOSϤfD DH ʫ:_xlNI^FZ /V8Z 9P\ pDO>xh3 aigy @~7^!Z'@?k~ǧ6*8W:7ܵgXL*BԼuOȼ |Cԥ# IENDB`pysiogame-1.30.811/images/memory/v_img13a.png0000644000175000017500000003174312201770070017645 0ustar tigertigerPNG  IHDR^PLTE9@<ETOXSM [W] T!^[!a [" K(U'd# _%e$a&g%_)c( e)j(l)g+q(n+f.h,j-n+ i- o,q-m/i1m0 o1y.t0o1l3t0n1r3V8#q3n5v1x2q3l4t5q8{5q8 w7p8v7 u7q8}7l;z9v;z:7w<v<:{;{;v=~=~= aB/{?<>?@BADDBCD EGFFEGJIIIL&I KMMK jQ?MNN MP QPSP%RSUVVX$V X YY.Y[[Y\7y`S[Y(]_] _` b`becef9ceg i4f il_h iAj hhlJikmkmooqsprtwEvNu"twuwx$xx z rz(|~)~1"|%~$ƁƁ(Ä(7…06Y`hLj,ȉ5ŒCɋ=ƍ6ō=ēGɒH˓BlŕPw̙M˚U͞^ѠZӣc¥ЦdħЧkլoȯذzε۴ٹƽԽܽŝȷȯ˩μֺbKGDH pHYs B(xtIME   IDATx Xu},-V0td@&"3e)M('eDmB^0R‚ 6I]C6]Zn?s~=Csqx3=~=_F@F@F@F@F@F@F@F@F@F@F@F@F@F@m қ?8.0aK8o@O< #a؋.7a '\~CAv D"~SM|폟, lI8J!SO={Meu(B& B M7?C"k§Ogy9trr1$ `?" q]wܥDo``0GtMIX(/ڙon5cjDxH$q %$$aG0"0(sG%<0$0k#F7D"##"3gNʘQ wy$DL8&(:4l0f\gϖ1#0P'@N.4)"KL;wnbbb;bcb96HfE6gЩor8&wŁan*}SsULXchTh1}x p?fL 9M@MZ%" DDqd KбH ШH.?r'1qDLJ rMC6Sŋ s$&&Ěf͊4FF]=;:|t_f~9.Pn;3)C^ Vr%Xtq `@BD)I'f?s VZ9*l S=fʰj*B.ŨŔ_r-RgR )4{ Gg|x$.ڤ82PʫJ?w^)B BX.7Ef-@ /i]o(T~y((,"q!RБKB0#°,[\ʂ+wfLYRnUdeM:H"sI^AM^8 #GBfٻ9l޼iM(Pefe׬`DP&ȹ4ĹiJd-9Չ=8r8?@<{'WKb^{)BFlG"A=ܠ{ b /-Òrk\ƭbUq({=+_;`jW;=/ʎO1Л384<^LQ=@j衧pQǎwL3 (ZYϦ [SzV 'xnX )F>biQAuxrgʫj#cY_]{wQ(^J:*hAA$0ix{XX3gjpa>֦s1G>O5OU@(>aT@bg]=,`Hl4$W9Ilr1Gcێ6,9qUS|r9'D S]Hxf.J>2,$lY9U>ֶvn { T?|1D{ O0lmmj\)r@wn8s5sVN>e*X56TDb!ADŽ?~ 31#d7HvQe"5+0fYQX"%Bl.;.^V76&+McW_'B? @~F턖\.+ؤ(UN/c$  Aˇ!;w03z?wHrW'yݻIWq8"&WdKSS}-EbC17tId3"h8f+%nqֶ'ۨf~yĂoD|e?҂ʑ_eX -E$A3Q !j"?dK~*֚ur^w9zo%E>w@$D@\|)sԒ{/wyLB DI3?`[W:Hn&*-\潣G>twtrݪ]rU% Bڳ 2q8=:))^ bzH^K͛[[ f?xݐr>)ZKfȻ9H ==ݝ;[[4k: i2[+I E4I?*H9$)i>sIh--u0Ge-yT})C.[|,m9}z2|eUp"#N16D*A …+:֭^]*%}{Y#٩ҘB3ױc GE dgbK¸%Ȯ\AWh 7 Biq[ZiAZZ[I2"y\B$.C p| A8x8 u*>Q]~%d[WIn' ܭ":醤?!^a"ਭTi*[=0;߼ѷ>Ȭ}T}QHƆƚ¨'<͏+s-J0k G1FHEbYWؔ `=j7mBݹoj$2QjzP};Q:#`+K4IIduuíJuyJD쎞xoA#R~1ƀo Ǿ}H8Y-Vy$\`˒3՚BΥMHZZ۩n=!,$ 5E:~RTB.>ѽTnnsCD"sSSyaou!8R}8)%==쓃o0zCq#.Iٽ2r-)Z $!_uJW/3ʛo~78PCQ/'Q0 P2: %&yr( J rYqA!ru6m% (=rP87/#z{i&-wZآAE=t"!ȓ^88dWRϾ=I@,|'H>B$[mt\^ݻ(D@/q`=y@w+ YVMMUU%/@0o%( <%I!!oIE?I Em/_om[71V;8zK/AG ^t1[IhG p9pۊ0oIJhj/An<$} “BJ,l`>+B[$wfKK ~ѵ{OϞ=\sg^  "`6$ߨfAY+Sm@A4L7%=xh]A%[+4Т*pU\)Au*pmŚ!$m;H$PdjV!po5mۅBc$O^Rr}}sttxt$U+il]bͦ3:ȟ9@n#֕XcUXUmRek/q<4th :$S]{ߦftD($jJi+pj%aBY+⨍qUblǶp;\:vt18cמ=`]xJRA\_Ëw[ ؚ pbW }>>S_GQu@Z[Fb<849z{64 +H\@ XVVx,H R$$d4Y)8w+@lTƒi!JCM9D;(G$ bpsjadZz"II)ح|5C!Q]]M.A݂ ۵ ~ bo]/pAk+}fK4Di$b%33B4?_Y:rk7xSRGd]鷜pvGڴ cYxpF/apfJ5v,I"rq}GFʼDjAAS $~/@n3e: rctRBJ*.@faw[,_/Ulv"A%^M`N<8G'-۹!^ qר\Βb$d&f!"7 _J ד"щ z)@r+Er>Amvg=۫c2G7Y{h>@Cl٩-IJ&]S SAb;Mj ȍn&u U{ oSݐUCC /0鱝,HjdiE~/Q|%Zbj" 4N5Dx3~@1kc|݅N>Ql¸NIt5 5V ٷ4$/[B{Yb^J" 02;:.1!elbvbTҔB޷X٥AMENhc 6DV$HUbmUd^l(c>d$)3ӯLkl9)dMHZVšat+[9uH'{ ̕[[!ʊR 0ZbQ"DE<P٢Umj޾ǿK8H.Ϋ.9 mb( QKD t j$qq&y{OpjjdrsMj1okneV=Rre1K,.2/*}X-jVH- w쨨Ԕ3-G/(uP:nͭ fN.mz.'ͪk\<ɜ:/1.I;`2y 25GfG29n֭E 7E R6.}KUWO;>E'bo*6KJ ]1!^DF'je,.pSt`/UQݸEmi~ǿ-iQuC)/5D^nAc6-4lK׹ԺfV$Ym,+(` v豵wdzƩwi=Pq6 ZāN#NNkD"H TDğ dx)$**,dcHgᒑuzsv+(" P=񸫻K2 lo 0GUE NZaH@:oeg-~{?vH!/J,4 i+stvJDѿ$Gmڜk6`BCI sb71uހknI sR2͖e V$;N+Iuv+>ls=ze~#'5́ F2KDf=|Y`"J.ސ/((u,&;;)G ^?n;E )ۋ R+Τd@ xB<3NRFN-pA>o:]u M$=Z%E _k¸e5u!Q4sTˤXVWrx"E"yK@ƎܝZ N {etaiKڸŜb(IvLԧlNToha^ςЈbx!wc'\*H"se6YB]cq~i ێ#eϋ8\ GN,{Z胖LZS)*hZH0eSANm-X'VVWol/ԧ9MծAL`h8Z<ҊKvxdt“4Y8ɬi(1w{`UY;4;45664mGڡjߩ[Ez{@DrߖAz"eɴz ׳LXf'4'|,,vb'EgkJM6|kj]CVW)K++&:~ 򥙛C[)eU!gn)Z} ly9\s5J4u_@f)E"2>҄76lق B-y[݆Q0(\+2%9$/ B?5YZCΕ˜ʜ.,oh5X)45m(u*4y.$TlaC I+3+# 042kL@fHyn/G9NҚZ9RTOo X Rmkm&38p & 8`J|K2#%^ϴ䛽pGT| DijoilWxeÜ+g=iV4n@0o{,0#:g4ŏ jRR2-x&U_K%O^"5Hbt֜J Wj5f3U9rf3-6y 8Jj>?C:9EB`[Hl5yzؠ٣BWTEđP42ނeɓ, 2fJ.6-,qk>ўJgz+𲼮fA+WU(Wen$ N'c_)&> gǎ7q"GB$5lUՒ\Y!OP9|Q)OTAP {AHf$o󫱸U/)J!{~c__QRpCn}RS@y>_܉d-\ d4w`Yҋ0ҋ(B,++3 cF:v; Nc|QBYBNGyt{JA%#l `k}g$<.=+*X<˝a8a1?@nvpR N._\pXI1t4ꡩ=HYF"ssF Bi?w4"E{*Hڥ䑔?Jm󿝲./w:*/ÚPqp5)iӌ@HUnO3g-er1I CV)BRNv9+UE2ԛ@>3"({Qq?*b@(*u1c?X#\Ѡ XÓCHge6!k~/Ac.owHw wJ.˒%" shQʼnHpeVvRȬY01w =.w1A8rn9UA~ŧGmdābGr%rh?F2AH㝓0̊a1^%}c/GW=XD pԬYRԭ|1@|RK:}.=Exȡ!y|x g58^$VzӞƌ=PnaJ eD dgb)p^ C rf2S"Wՠ\I83a;q'>%]F cƌbd+gpvqmўe05!rt;]r%4ObϓSIzfV$ xE_+g%FQA!q`{cJN^~vH w䢉"\^JyIX ;@fqʤgYvh/23u-tA4>l m Df],%4-jr@+`m¿ ;]FLu(" OqTI/1 ZD~{r7SA/ҪU\\\[#vއȡ+@2f?M;Wx_qZ1MVV&- 2.]( o"7!1F̈́ OnjQ.9dzI ](~5DDdAWbx¢H&٭jq*T G9?yQ@sIAA|3)SN ο9s_>P@i|Œrƒx%=#5Z)D6T,LWA; 1>y/S'Z{_Q5|I47XyM;cstzE-<19s@D/膙j1mpZ5[=^o/#xz-J'˕xM#j:U?Wj?6ǩU(Ǖt%}EV?c|ӗfyk2k Mdy~X#ϲ}c̽bKGDH pHYs B(xtIME ! ?‹ DIDATxMhWŚBl1b rU`㐃͖5BO{q1 V%`08]$JEt1e `0kfޛy3=IޓzhAp2 !C2 !CHp:7 l4o`Oaxβ_ ggk#s:ȳ c,g eڶwv͸Yâ (!yu1 uO 0,UXE|ÊwuIuAάع)LHQ|㺭8=<͞!WZ..JgHC Dr=#D("T$fh3Je/r$~GBQN ” G fweN0%H>|jCPerI/^-2sQT T[ dDQtfoG@Y=[ķLbW0fŊMBO`"_{:/' LBĮ(̵&!-/dZ›{L[("ˇC|T?Xׄ7x&qVyģuxEh2WmK! to3Xh@_@!Pom-~ Uϲ*S%u %\>,1Tc_@\~-C<(ü_G!Pl^.!IxYj?dV嗓@͹r0^^ U-doo\$(z4ܣtV:W\sC4 ,b"5=7 P`SiF/{!J`'Aj i%H%m,(Arz(@ 0egC!QsD1T 8ғ\^!K咄I'8ٜd.b`ILMOE%)3ɾ5.p rx!acfBF_%VX1h | ʋ;%OQjRvV" 2K ºuz bYB*+FrU~+{!WKJVZL !P}G-ҫD#N=bq})#+8RZw~ D XS)]}LQK$atsĄMB_~ Y1,%%oLٚ*:_ɹT[ b ӳ hX5DE\1'AFŹִ8AYUd45xI!{ae!*KAT8SQga!XǔP-̅qyQ jl 7; $ҟ N 1z#cvu i OC:U_$^{8K׻!d}UItr$oRAĐ2WVDӋqȇ71P?6NuH{QR}?G!+8!},ܤSϿH[m UlZarp'khgmm'R|K% d q˦D8uˀ!~/k&Cf\v '^nE0$ϋqp -lA71y/{C+bhL?߀EE2 \[G/&F!m!ʂÇeuTª|-obHkB=66ϏXQÅ"]Էv ~>wNj?9>>VZKō,x0lMTuP/]x5b^jAI& X0ĞdPTIA @9gNB*cy>fzhH-g|Nw^2ڪ6ȕlX*u(|vkZ2n*;o2} 8P>})ɾmbH|BGu܌F=ȖY}5.LdJ=]xJ HѶD/O/xNc&@:UFg^/K!=?PQ*?M]HL_򣮭r YӇhR9AaMYtnȵ )+l3DRQL7(QV ?o}C7S  MOx߬0Z镠qǷ6!dB!dB@IۨIENDB`pysiogame-1.30.811/images/memory/v_img9a.png0000644000175000017500000001165512201770071017573 0ustar tigertigerPNG  IHDR^PLTE}'>?;@FW2M? ME@E ?LJ$9!HV(8&?R+2+7K!Q(<&C.2U&H"M Q*>,-h>6+g4`,p4i0o3l8dG91t>^6sBW9m7pGIFL=lGGJP8uHV;x>q;|@x@}W8D|ANiR]SUIGXWHZUO\aN\lOS]tn4V[j`iylq\ceuytuxxlr"outv~Ǔ}ɐ”5ڏ+ʝ#7͝΢Σˣ,Ѫ2ԫֱײ?L8Xִ3߸ݺ:DƱUx@AshʻHFθϱн^KߓhㅻP}{Lg޿aRyXxEbKGDH pHYs B(xtIME  4Ʒ/6IDATx TTupJ )4L-Ĵ4->B]CKW%$_`$ltuEpMR4D8rs̠szf 4!:DCt!:DCtQr]YY7fl>Żfq^>$I p<27ko]BJHm!I?JXO7pU9wqg޽u3ۥ_OS& j>)s>gEKK2Ƽ ZAj4a6tH-^7S ژ'F3xA: S Innv5r|{CPnAr%K2sxFɄ1T JU3ϓ:X]5Dju@_q$v)^\!s-p"?dede%W:\:HA O"TnJV#8^1-2CLu@᧬ Xai0a'*ΝVxE)3SH iվU++3(3+ #-)0V Vwp#ܡzUepXA!Fl" B7I-^.CjaQȸDf(=JTّpT0?u'R1VkP.@}DEs'o0W-ԁFGQ:TQ: 60`@_ht~m)֠5@V?a R0]C!0ɠCr`{lȣ $]k[CFodƎe @ m&۸#66v̘1e xB%_ Cfc< G˨Q't'0Cb X,ĎyQF R@F%A$`ABc dQ$}:uԺCRwIV+ 9K* JHIӇBZGߔDV.YIHBTXpfP^?@CJ (Q y 8M> /;jZ 3$wǽ&,CcA#>>~iYAzeS" l A\A{P)H\\ F H)Ȫ(yB1oNƒ;%+ c$yZE2V AbD*d7'C& CBQ|F'ÎV.#R a2Q|"842.Z/@*! a"M"pٚ:??7N[7nșWV wZҳHKHƷ5n,I*][^zl~c@uIO HpB J@6:$`+0#@9$kT,(ƄX~*r[5^ re_[ \+v(nq"@@I$PbcG[xޯ{ؤ'OH@(YZ#:X|`k4<dB<:Bthv?7$iػզHDZ J@]aA Gttur eP8һ7yhvc@T~ ,ы6>uϫ#[. F5>DR"3" ]maaŸՍd'38@G X̓ jFJXPnHDp`V:)$B*mg 7c{XV`$~-Zx3< !K!L&|"PTǦ(C lx4,DX N1 K5P>B*!OKDljTU1U Cr }b㲂@D q@8b[L!Imےc,3ЇOƐ8lip'Hڵ/.ZPI%B1(9]mθ E)n03Lm-y{DwI# l rKU=C\SbI83Gg-ĸ!0R 'KJ[Q#"8b*J93K&!+8lF*/&Z\H;GH)(}/ c\3p>l!&(HrڧEF?j$^]舎R*|Zܔ>NK(R4E"o[:\*JS:WmgJN-=SUdd"ٗpS$HNJ,>.JB2hƢYR t,,Pnnw`rSBb` Ӱ̢jvIbc@a굼hQ/ k0OPH$cG$T Sxx^H,yQ׾=YQSxH8LE"0MݾHDu"؟Cj!\g$R d5 kIO"d ~ڼ9|W~V/WAPJH7jN B)RJ)"אo ܨ$0]25r;W$PN;IK23I )> .GGO -RGv=ʄ!rBg~~sRg@u 8R u2I7%D] QAu!8 d JpțHJ&Q;tuikJo,YM"R0ȰZ*Q{u7& :ijBU4"$1+QRqkQ!W%f^%Kpcr$ߊSRTR A*@P'hoQva\Ғ0H#+]ӷn87jǰ'$îAZ qh"NȸqPRMCGB-hW8qDϱZ;ns'[wr o5\3<eoyTAș3guh"rf͜5/]Ze,kG{C(*`Gފ# +>=uP\޿ 9mOtH>h3چ@|rܡi؞MDiwh9g&wjB0?ǎ]qjlرc.8ځ#>s`.CCt^;S(DR>Ct!:DCt!:DTrHuIENDB`pysiogame-1.30.811/images/memory/m_img4a.png0000644000175000017500000000535512201770071017555 0ustar tigertigerPNG  IHDR_vPLTE0>3*R/xD!yzxyLbKGDH pHYs B(xtIME  4 -x^ [IDATxn<[#zёz H6dE v/Λ`/< < %ȿ: 9 [x;yr]_zCV&$7@Y">ĿQ .$CNbL]2- A uދ- ]o-7TBn"-n#YSpBC6 XEW- (`MB.W|>D>CtP1]>E36]@؛ Xj#>pȕH *& !rv#Ht+3 BEѐP, q&s,g!As1- rK1& $a#l5 RL'utKI6҅XG2RLqR])%nR ĤBTԇMt 'PtAǧ;BB\;aѢB\uaqdӿwu@8@w=#a 3QX%L nXBxڥ?4r{>Zt2\c ނj+wkW_BdU3?D E1a5Wf~F)ng3ڡ&Im2w<2+[~ >@`^~X[nR6SOd;ɽo9NY>Vg_֐cH5-m5'qiRt[ѱ#s9Y4RjE#7p?:F Rh-4.z-ta9aH>^AxHߊ:}0t~Wl; e!im%1;vHvdHl,l-K6a)Z5;L%5tU*65v>c ۠ An#el-/:0IC>҅hlJ!~U<=f .ϓ, RIsbQ N=D2wLB(:{ѱ0 &2 LG2MUZpc"6(}%xȍ#Eɒ_C^t֚uR o GNsxY= /Aյn[;24~J^OQV'#̧/VDZbYs/2=sCίzĹj S@?+Hu]V񑫫יVTO+^C-D$YAVV]҅5 wA۬s&xw('A^OƖC(Q6bVa&1a%k"!|,:@ Hs H0 (D"0,ZGϢՊT%9x]~%gs'OV]M %R P=DsySB>Ss j <~d!)R. RM$dҹlx xJgIa;lH|ޥ-*Ӓt:R+D\TֱڪdAvY2)b2X<r4|'%rC7ɐ.nǀo~KWi |]}Q!mĶZ+LBLt50P^T] A]^M@["H 9Җl%TiK9]v2C9tiwx։?h+Vh4&jѐL HJ~OZ*}$/ZZ_ H)-$eB+bk!78^ j+rEuDqZN7?'d+Sku zsBrG-SE_ [BJ`A"1%~Q&GK'+;>9x/>,M )A/U4f A<\0SQZ]T)OZ Uk))A׷#Q:ve*k(%]Ҏw/vTM V.In;u O8CQSՇg'<ܕ#Q0 Ɲ6i;wԯQ uYՎos %+Hz*GK*t,$mtsW CwuhAmpJ~-b~6ފ.0T*MG.9tbKGDH pHYs B(xtIME  7 IDATx휋_ضw"I#FJ#9Q "RmG*_UvN9~?S|~f]Z{RA 'O ?A~| ? ŏ2t {W?rG9۟@6?^r=$J/ } :d?pC4wrI"]{ٜ@>Voz}| 97xCIz/K2qA4A{?|_n%3oL svc9@-G64HH+r+FZ {HӆΣ7 o[=WdqMc\ ٞt$9<|vMX"9 ܼB?hhN |@.;ZݛWM}$#O333`*iK!]99im<;:ܿ6N. 2 .%ױ pstƫӑ x{䪭 g+OJKr-FZ$XIbpxjUH |QzZxguAhoou&xw#8.2hB2xEG&nL,޳Ρɫ6nbٹ߼LTt>"}m9Hvn%f{W-33ޗ@uɳևT*5|3*cyw5~@1`W72;+L:.#W YY{8d5ޛa8 o15XezG"ȵNAրJ3e@qr pUAvZd} )} +ԑgs!cRs-l-//mH~fuic*{_=L{ A^A"Nρc =ܟ(jL^>T~BA.Vbu˗7Hq5~8|=.n0AA6JyԅikXw^6oq1{7%䟟Y)J61+ɺcŋlp{p͛~1Y N*ط_ l6oqZ}u<?kk_H /,Yii%Xo{O>}__VWɉHb>һZzb{[$iYW3]׵_uw~н86 ='-Ʋ vycr"mKv:"[ -bLKkֵe4U7M| ?^v#_t^'<i8YbZ˷Lr{z?L uӹޓ/l'뿣50)^aBuug݊/<#On~̧R;AV^&ٰmB nnl:ݜ t!Px}G r0 YZewi5 ŷ/?J\f{IYdThJVhLϛ&Y$d%n"oJvRi n,NLÁago'{aP# re}N譬S%(Twv޾z{ nC3ޏf[GгM~XY#;KV{jXpxf6X\\׍(Y ?[m$V\=xϭXHP;i&118@ 03ai8F֧EᦃtΝ~j'@#|p{2Ј Z:;?%m:zNY6z[ i?:T& n,ݕ^9z'd.H@&H/K jw]v%@ tl@h͂&!W+D/! XpoBW F_]}5˳9X'3bm(D(!&kRjmk*BĿ~tc[0G.櫀 =eTY=B!ot:ܵazv ,v|f2r gV¨J]R.=!J \9 ,+[+M c贽 ;K^iX 2=6YK-;zIZQ] W'OH^.rZ,`ީL[ جofiϘ6>la\\\\,˒ FIʕrV+~_IGb)u{Q,i. `d(#+2JT2&s-6͵ 80<;Xy>V@.;x\½gdHi_+eRQ_0]JMnBl$&+;k%MٗbqV+"REFe%=S4IR{[QO(i޵9!FKi%*zIw2aeM5`Rkwkq)<+q Cekg's#]e_ ꠃ%jV el4e*bMyWShoQ3.Xk݃ :%бVx&E]{/.E ‰R@#Ri%"4{JFj <MYI=o $?y$%'OžÜFsŢR(9TR)N6X.et>X\Lm9ĺt5d-Lճb_r> I6ƲM) .3<|-v%$J"K !zQ`AZ:˷K _FZ "0r!N|$rQ0sz$V#%ӻ}qbC'h 10&d~ׇ r/\eY/HWl k59r9^Skk[;+++P3_r5&lZ ` % YUN@$/я],[m X M嵴On'bZu-msB$9丙5҇Kf$EA+[ڍ(Y~@**,,J$er96GƙsU5 Jz"ژ>r?J\;@FY*5ܼ=k `5 ^\wZMdi<:9d'0wu W#R34$/ frd 1@rdrQ^E"bdsdyy:nb5qoKMt0?Z*,%c2"I_o͌EhC@/n-R\o_QQ~!6.Yq]#XhIU56W*@!<W\՚++;[L <k7N&&.Ⱥ=2@<QXXh<#z@l.E5HW3s5@ iy.W\Zjޝs s=_Qi Bc^` U$)PGjmt$O@L ?{0L͑r^s0Y0~WxGY֩.EF."DNտ 䔉@/22/\t΋jtg$x>ˆJ, |ԇ ~Y8ZM m;:O_yrFǻԬWE7>ZHbd6k?:;M^:C=q˲r$C KC77ÿ"ȥFc`5 C0dY%rEO&~N ^A,pDWY>R\XK.tz.6 =*P -{JC 1dTHR _NɫljADk~Whgx\yk*8inhp4ZtgM'S &͕.]fQɢ!BvSCYs2 "%(XËddsXr5A|U$ f-Xs IU[r$h"m|\(1I}J#>ILrA v ٸL9\uZEL[KSx䨩P[@t3sq1l26b1/SL,Kf8%Q~sBg4Fj:5HMV7Am0hOaC?oJ!.?*5sg_nb!^ }-!Xxb$[kLbN4sRSI4z~{TYӲ^ 2k!.=K*{%%6QNzlt6 bHbc1wb!f.Zh9KqITl)P1Aڑz8>&4$AtgK^%n#6(Dvm -$($E1/!Fd$29p , tO |,4ư^ zHҞ'iyWcEsy O,|ɑI`'d+8!щ1-XS)o3q4.ir-#Z!bsӘI^ؽY$N$YQ1r1X =VOdF|LhAMM4b)q 1l f'OxYӴHdPMLW4NYXAz3ΝL(k pSkČ Ze[7Y9K<IcfxU9 q^C60Ĕ$}AdyK$ocִS@3 u|Qh5+H'Az܍KLt 1{mQ cS`1'h8 - en  ՊD fk+( n H,j؂hch ˺eo$<^ (ke(vgk3ѽW#IȻ6HC#IC8,0ThCĒ -$.ZAsj]>߅Yo~ Kw8rD=)D07CA}+E'"6 $fdcAgtX*UNba'Bj?m&! CB Иk{-DCBq7tH?#>#!DGZ\Oő;-!u ? ~oNyS*ICƊ. -sj6H㒺Sb}og7Kcc {c7Γht$vVT) .WYI%jz{@Hp!A5ܠ} oc9Cy(HsO,q#l..hL&'jV(r\bM %ȓ t=O=J{m9QqOO ~M/rRȹ"δlr,d᥇*dt&3)%;E̼_эq"M8(s`7iL B%ډ&ɸhw\DFH![ %T*P7׌CGn<|3ɚMo I3H&H!E]K2L^ư4@\^qb#K#"%4>m|jƦ u.Qu%[5xP2X Dȃ:9'${}JD}"}G% t;.٫NA‚O29 f24kZIAVN[r v'c̆*b@)8NihvlͼHAYTJMj'v =nnF܍K0a{0Qw?4A.?mY U5oժ+]seN r` 07:&@6b8^|Njw'Q? Y?݋ k-UE[ reC͘iZ #xPZ1b7f|q:ݔ#i\se@d)ߏ¿ӥZP8o/H} 2=%⃾/lay$9EeA/%Dkœ "Qd9˴U)s6)bpXhH u#F ;e <bwzTA/ E? }'G Z|[jm I88-?՚\{G;!.d4TYX\~(#i]s v b %FC M3h08.HyLcuP\zb"W.lCCoC1^8Ը-& D}BA=Lj5] WC#u1 Yr8 ɛh$ X"\)g8෻ <\IΠDD1 ZP%ޠ&9VPPQ%͔TP>Yd,,2R  aB"4ǐhDsHo@=~@yƻ'JHFLbش7w0h4.# Kq7skdp @Z @VXLYf+dT"J_"sk_ A 7fxЩ켋T5DrmM"v4]F Q$i$c\'fx{F eT'WBNw 鳡r܎IAXw]$B |e@/=##j%b'JUkUhqօHǣ6#)%%󪜀4j8V; $_zZb;KgAS6q0S$CA_JIx). R &W||V&@꓏ :@]i]0\&#||T.+iZz{uPF@ |P%W QIDATHz[4,vhx' ~JU`B&,&F@`)iO2/KrB%ރ-LնaRrlo5x/4w/M/_VyB>Կa"frAp.>'xˇ'TqZ !JcJӤυ0*g'sWo>b'JKʻj/Vu>H}qJY7o bٻ޴xOQTr1vCO:~q zYDd'od}{<3ǿ(*At<\?;`r߿7򍯟 ?A~ 'tOIENDB`pysiogame-1.30.811/images/memory/m_img4b.png0000644000175000017500000000207012201770071017545 0ustar tigertigerPNG  IHDR6F PLTEWbKGDH pHYs B(xtIME -IDATh=v@CT.BG#!OGp .>{@BAse;+m,fٙ .B.Đz=:XH!ӑ-tɦ% 'kIĉ&'nK$RMi I5 HD %8R}(Sor¨,9Y7$dG'^C"a$?%V|D aH N+h)A-[V%) = I[\ HH"bBh "h;<; Ԅ/"vx4 $o2lX}TM#* (p(OqצD4-u 1LI6%GPwFqeX͘D7<<غ.%+\y(rè]m~>qmXZRz?눷y^[@pxPkтJ|aG ˞QХPRbC.1H27$0z - DbI!Ieē&#D H&'k QWBMIJPHrIB Td)$PݱP2{ɬ+ MK1Xfb2?7st9\rIHb^a"&'y ٙW73¼*kZH2s7,&+|{$y(g#@xX.,X>s(۹Yf4-VOIJb=f+b,\[-,,_,,lb7$\٪^ޏID~LRr'2y?#2! HFʔDL1Q SV!!Edˊ )SLL$ROJ⇁&01&]9CtӟՑe yQ*8lIENDB`pysiogame-1.30.811/images/memory/v_img6a.png0000644000175000017500000001055012201770071017561 0ustar tigertigerPNG  IHDR^}PLTE1%7!B#>:-GQ FUPH5O%^N.aU ^Xj_$[o u\/kxe`z[Bx{`:} d+kg%}n z}r*l;z#s#y 2{6~*!+">? 2 B,,5M':XZAeYDOoWq{VkͅΈcґm֜wמށއމۨݜ߲AfbKGDH pHYs B(xtIME 9] qIDATxsyxcǪ[BL3D  6og\'J+:`ʌ>֞23 iV%$t*TX;OD@O,- uj 8MuDHOdY!dT$IEi?gAicdqH3Sk[~A iT$Hs%8`b`e-{1&DGd$o 92@n[ H0cml 1) !$x[I w jB0!Ԧ_2 (U\=O}M>{ $D'HڼG~%7P ұ 3kq(G0Weuފ_YiDdYݳ04HH } M{S+ IH#iA ΚRUJnX FD@ZdG\3)>#@3@Lcȼǩqf3+,>c?v`uB#SPVQK`'< ׬   "6T<#qUC4 Y gC ALCtB2Dq|֧pA3e*Az[=M$RD'Z=8l 7֠(n;k!mgS&wtIt\Dpd~@Z.(y1|=o"5oA D I߈=r몋LB+Ȯ'oc\f"hd".3٠Mu ]ktZ@oo3狎JjBN 5fs]zfoeD!Fo\DX$P-̪RҶek )Sslm='Ή!1W0FDsJ$c'Ȗ960\2t;Hgea1~V u[iPk;yBHZz*Oޡb : mn~ -lA4ыrrZÝfڀ_ kEAǏ|;u3AROig5ppIDŷ- ?&AT$ߠ=/y6ׯ_ywuD& Tpۍ]q NAmnH_~m+V"} @zHv|\ntꡧP|m(nwW{^w& v3]nwry|v=XCN޼yū4}{}Lۛv%>r} :M;s,XIy(Y^F2bK؀ϯ{ECZHA^E?}~;(@s&@ѐQû. l_7Atzxi;#ݒaSBQthw[ 0EI~tK"JjOQ-b˗Ô)a9BX|\AYQ DF\HU G m23|/ GV.uA,U?w%:9"+m e/wy) 3ط3:hoQ HU0+=_fk jiHJDH6jN!ƓDDKslGI[WT!l!UqKu 7XPvUmd|:dn:mh4 DQ HBwϖRfDkD 0$YVEj|4/ HeKB6M,< V !55 {f{?!-c.X)qb#8Odl Hdԭ@,X% 6%1x 2fl) _@.9H쁜Z EVߨHp 2< jDĚVEgA$UɊDY6ƨ _wRJAAF7AAAAAAA`,pN8IENDB`pysiogame-1.30.811/images/memory/v_img5a.png0000644000175000017500000001046412201770071017564 0ustar tigertigerPNG  IHDR^}PLTE   #('.+-5>9@DNHORZU[_ichlsp}|ʼn"˖% )1!*5>Ҥ.98:ӎ/ADJCxթLM6TOV̄WX$`۶Yٞ1ia<ݬjj՟rHP׹tt|}[c܅ۅ߅m{Z bKGDH pHYs B(xtIME 93=IDATx휋_Wa0cD h k:),dfV5ah*jĘ {c`%L?"=_{:9nAnAnAnAnAnAnAnA.d7] >)yD4ԯPݕm~ǮsooAkܼ7пbu /șp>PqC>AW&$jp$皻b@.?v\_(>x rۜkXoQJO(9HuJpOT\!|Ak3wW;6 Cc_{Q ۙd08p6~ާ?䍥ir5@"'8hQe3hdMua[ڍ pm2 r-@@1Oކ=@aNN X\s6t&X&<& 6>q- ?iaq)czwMڞm@Fx^Pu84qt@@:Lzhsjlx&aa7i2&¡@@Fajwn4Nsy~N H_t9[vw`ὤx|a%f HA*.Vav%^ Q/:> A*>$3Ӟ% RDd8} QZ~3G4VZ.HԎt=ֻ,}vzvh,iۭV\pmCT 60z sĤv& PP $8~HԾPrCw(-Q{SȠ}@"e/R.@&\Y!j/;i$5P / P;ʞc,-oDGq C$d֗HCTsd @0jpq8ΐD|@*i YD S E؝, M7N(/HYrݸouWf w) Y" f79*|h (,KFV s.Dݠɳ,Y|-ס׉q2-Xyl堹)LKFf Apە+x.Eo1-졂dsC>)inׇ++xQкdd2#R:2 @xT@5aliU h^A%# /vpaoei$;9+E%#CJE`Y22@ ^/9NRX AЌ)/R8Sa=Ay7d,`Sv pT&6q: ) = ɦ 57t$= 28*!j$g[4M+ж AmAj9@@/l rb9?)HL?oVl B@y*^Q#_q($p"̹AIb?C~ӆ Y!x Q}~nÈ|| Dֹ  "@ă@~, lsLF;B"&8YT-HG[1 ?s1> " ͗w̞@=@>O.% ?4t! 8]Wf5y 02޷"S$ZX3_Tilw]z6==9FEY̑Y-P,Kq>LQHeXPyTUɫH fJWg "F&I?[X@pzQ24 dD>* q5 %bp( ʱGFï oWGBәV Db@}Ov7˄$uk8R `d[EHu Tn]sX@U r~qa0836 R|d ! LZXx|}ΐp kǫȒ^Hzr18PKb67Kkyܱ(%-/"7kopqhP&mcss ,K_AVڀ0~D"0n!28dAA(J*ֶj5t{krt ,nҜpdh lJ%zA!1ʦ唔ȎȪP19a ݥ%ʲBQo$O{%-cKFV[*2tAQp@ gW:=42oгʀ[UmhH;5w2@Jً^IXY5*69RivqH"*IDIxA*Cs xlY1ɉ `&trW'MHځd4"GQE"eA%kV#T54@":{D{VUkڭpsFxLo涱T\j /XxDX}IGUtkkPWwLÑˇ#$zda`pk (ѶxjCͨD:I؜dVVfDǻ9yZ(i!4zQk)i˙ : ݘ͠ \Hq2Ͷ;UgyH8 A:Ѹg@fNO@+ҬJbd1M%)h/MjWdLD9I@Öya3G ZED7 $E1Bnڰ2ԍW;iL0oæquChLs( !}ي&펶pԟ!1Fl/ŻQZ ]͝ns:eA1o\6$t)J_xVbFlCr)H]VIv5oOVP;9gVKLWf>7Ӆk~oj)6?~?=nXny[[ʏSS _ڟ~NA_]Uw7<,* ~>xۮ[w^u^?xO_4D?zk _6ҐIENDB`pysiogame-1.30.811/images/memory/m_img17a.png0000644000175000017500000000554012201770071017635 0ustar tigertigerPNG  IHDR_v!PLTE F+r@ YYWY(TbKGDH pHYs B(xtIME  4 * IDATxnHI9(, ZI@1=Wn 3镀E+lQOueEE?\o7Cp9d sH`؝d Ⱦ27{ǐ^]+yе!Xv?eGQ,;t #OwLM9cQn;<rnRHIZ[BBC@(3춷Lɢ*E\d/@628Tl0pkQitr'ye 'H$PL(K.CB ޴%2Y 'F@s-DbPb_,hBbrC^1s(ّ^[ % }eTa&F-]VˍHkctP3ڢ J[ Ӝ@&QeT&gǶޝ@6Hj-<} ="ˀkoW$$R!h_›!N]"kB:3i'Kx#Q~Ě0$w߿隵8ĸG%)T&OM{ cvw&C-wFnXbL>0.4Z뛒_o7H3fqnO\Qk]_hT;<7dX`:=|&Oe)!B0{RǣG7j!Q>eǼյ:Aۛeybnvhgghg3E#<$%J:HsxƆS y{!ܮ߾ @P>~ -\sydݹT% euJ@vC]uMR/9ף:rU7Ye '3& #Z\ l8d\ Ar 2*JeRqQ ;9 AN hQ΃Huwd¨9$mi?( ԉW9TBO!\N[q}E ُkKgB& hNFumKI%*ns/ rh~k(E쑔ܟ !ϘH_rO4/jE:E+c(|(Je7PI)ǂbw U@anQE1o(0T)A%fEe[Q]؝ͽ \C[bVXż(xSEjO<-aAVhHd00 !^<ח^] di ~ r,P#֎!zm V 7_f@NzwRVCnr[yN9a$*Q wUNr9 qK!sV@.'o$5O0 ÉrW{2pbjrO:+[YZ :›iAjQfAa,RO5wCdybhWrBʡM?\l%Ы7Y~9΂Q"duY<.9T´ew-:bǰQC[im`]fEvq-ee^nȈ'.iw۬5;Ω_?Ti`f2@ h ̀4EEA$<]7;r ]H 9c*F` _ B J;!K}Ct 3wTr9Yhk[H-L{sX9C/EiHokV۟W mKۙEjrMgZFH28e`cKBATOR7t!Ԍvw2~:pä(Ȋۅa - z+=:q|l4Щ `߻FiNR 鮻{} gt]ctLN6B¸M,‘'Q G1 . =$X <1이ڃ5+ߟ?`C#޿>J)[KBBĹP`l$$h۳<_)y 9z`%ʗlp:Ld'D=Bw;*#Ӧ@'Fj1B<'0Btc% !i} i}Ǡa&H>tyzҏ ل'k}d1BÜӐyM9m`ʇʙ T &ΰ5s9)g:E9x ?@L^QHeo@<?̆f|a G,ɱn~x gCvCk ^j6D5ZiBBdɏ+r7{c ք&%gV*6e~3$݊K~=85SfϳS{eW ן+Ws}yŗϿ@y5~/}A oz IENDB`pysiogame-1.30.811/images/memory/m_img20a.png0000644000175000017500000000544312201770071017631 0ustar tigertigerPNG  IHDR_vPLTE A'o>VXUY(~U3RbKGDH pHYs B(xtIME   IDATxKn8l%A@НM31OU!ұ^t`֧zXU$/ |C˯-iI;ر:-Z]v֭5.6re:"ژ= mdCLm(sW*M CaC.0s5'v]&>V χ"56. 73!,Z-YB.Ӣ}mQ.J. uri@@D]_bCuazxfm-V.P1d(AX+zˉR[hr3Jիbcudr29:Aj+bdriL6{ "*H oAE65p޳9r\N _(nN;"D5DM7OTH 'B$[/vhrPR-r`xfdU[s(שTNG?tf?TTS؁i/ zױr4\9C(ZJ!%E þK>`(nc EHR)$Crn rVQnjN`KRcW&$q-aKo̺w,H-ωphƝ@m5]*p i+[*dۘgȪ-+Aȱr8}jH^kbXkdF4o>Huta|ၔ̔?H54G.P\8'Gy|1V\yE_=AAMe;0c%չY;:vc[O#qG g4H @.U:I^C2q*U*`ؘ SEKWKM$p"Rq :1Ckd'>c R7[u0ݺ]īT^~1 2/Ԗ 7r.~ g!m?PVBxM؝wE\)B%~Q~p|םC}ut&'Пs޹MP[/fZcKFE^ůbi6/{aŠn 8vo P)6^P_yҁfˁRҋkku|gel{6k>U:Pg@̋ f&btfk ^]dv< %y!YQل]Ĺ0Տ' `.89wɈxOT!ąFDԊ'.$AM 7Lwۏ$?zBoѺEB`D l˯}nM\n HEK?/B3܇؉,oGi!o3 v"cA5%wBzpdo 3dhRo u7!Ot&B\: mjKf!ǪAXo}Cz f!*!-Q ꪈ!E@ `c{oz;(Aػ$"צWcm^#Ew=ު \+ ٺ4A RaxT_BSY)Cφhjyn>s)HZ7Cýem<=^Go }aBN0"VM2TST ~X5 2.JԪosgdҫRGJ4:!^lHa&q'H0ň&4q' J5K3d1^X5:e:ceϭa"SRYb͏,%w2HIiPd!Y+ƪc@. \3Kw"ލ Ƶk?XX}uGؕof\>$٢cs q׫?d˄MlasU? ?AYlIENDB`pysiogame-1.30.811/images/memory/n_img2a.png0000644000175000017500000000370112201770071017545 0ustar tigertigerPNG  IHDR_v0PLTE-7BU)*JKgpvVrD}׶FhbKGDH pHYs B(xtIME /IDATxۿkfpyi|%)˃NpK ԥd%![d`(hې^n0:8p8X7$Cw}WtW+\j-!}WhE7M`6\AHO^d2=S8^`5È< `D]%V"c<[}xU#XhE.t]ߞ>y* FƳ/F:##;[/; ">AY]u'U#|ܡVg/\!Dw8 ,|#m tEd Gx<Lm t B @j?Ywq:d f<8ЯA~ SÃc:oX5LoQCqwԑ\V:48-ݑ2rw$-ЪԄLɜd]hv'2_"26i$E sU b)"T9靆_עsXJu`I]ۖ '112QAPHQg;>'Րo,FceK"~zuƬ6h[ b#SHRY.\ t͍GFIsB5A'*7R':ߑV*՚z4zNUT NfKORW|GHgIB$u5y"8!\O^G5Bb&*;zJuOid7һ$"Na6| yEz ҳ8f#8w7ٛ>dLIzL!\!-Eud=I<pr o?~Cafy B$.rI.9HKrxNX;b"WT c XYV-P\DDxs=g# =R,5X- 2~8Pz2!\\u{cF<C[f%2!\>EȄp Gts>1IdG027Z,d,=< Ls#oEntїL,^ҲJДLVC{U/B`&|NHCy;7dB,u{2ijMs}cd#@ Y36 h%|3f$}9򺷼:aܽ[%mL)!{ wZ׾Lҗ" .CMxȲY6L@f5#}#n׀ ÍDBG&϶FNXuxG B*" o 6eH25xS!%gtYúƻv*bH%}5q7 /K vH6ׂ#_ d"ՐPK#96E:aIīv5 j5^8- R|&^KK,!k BxWEF#k rlR R+ƳWs+w.cFHEx7OQNr>VXU_a^fheqspz|ybKGDH pHYs B(xtIME $K3 !IDATx sH 0X!D~67WfF5F}]Tű)=~{ZsHfvO7ӆ:1a)e# ͖6ǗNsrZzh>^@8:.?W\^z=Hȵ뗺ٵ=@G>0r= WQ眀C^ƺ6'wrUǗF)ETY}CSd4\S1@@6\rR4^ʅ!u2q<w|o4>{;O/VS$=O7D1@O;' ؤRd@YKӹ18yu %ȹDڒ8n2AOX88:P (a' k$8E|999Wx;vo S4 q+*}A`>uMA>s \3-Lc8ͮs 2AL|-EKY#n䧬1$ qb8ēz۾kzfp?Aq{Q=Ad-~_'W }9* J^A {ax9'v}B2t|=C5 ЛM@wrzYj1]+=m5M?~h?f`$}I֬=kg T oCOiUF 7ۃUYpKEps)ȱ *L+C\TzVD7dGsB4K~FWanFh%117f4Ղob᯶NrG8\je1,3u,!wD\aQfIFd r2/w$$5^vqT `_hzȹW, A o@F`HAU& . o$1N 2anB$QٷJ$ ˬ8|Tʬ$| _cy$_VwirU|eD ' pI٠ 0ҒDDoKkzfApEܵS,0Ȅd&4 kYO*w"«BUl@f%np5.2@fK K:U {u$ !#6 @t 1$Lj4nXu1D0-{l#cV!xly$5  fJO$oP_BJ7sB$%K:(=#$ A$Lbe$I[T#P~;$[3aFLu-mQN9$ gHP2A\"$:$Jx"Y~! &IB vSdd7U'=!f`)@!Qb`c t .DWʟ@%Kb}/Pdy I2V- ȊPYR}$V cr$ '?ȌM:5%H?HQ"Y!ծA&_R(?pzWBBYrM U":# $&?KsVY!(g$#Gl2 z;Z9qHOh.A;@ ߁AW@YJ$(.i} 8ْ/6<7< D+ k>n V3&$GpHJ滄D#L(Q*?\?>U- M| QYa!,BҪfR ߤ#+AJp -\O-[*9'ȜIAX$`+F2HH" .d@HteIZ:Io" &I"i” G@U#3À  S ]:1g8AؗfFCXi8A4-i%gID ) 䊒8 R::a`OMS$2W(9x\h$GFj܊ e߿SFVPA E+C@8洠9_uifP(>0@qH;S\Atɷߔ `.LlY@F :C0#ΰ$N^ER $6\nĂqs:}~Ya_V8D^B41C`w*ߦn73Hؗ(i7Y):~b(ry1UDhų;lTlxl9N)OH Uuro_yX0nā1[ 6'`EE>%eǶ[ˤpj1O~Yw'9ȁrOf3X۵X fy;#BlW7 0 z@d|O!]neb fV!'d?7$MRt 9Ctubҳ>μ02 PN*TbK!~`#}'%e$s)d(w]"EBqH>#'VHBIC֍g]֌bF"-(+7sHY9@GpБJLNq՝aϸvH& -TxU={8 yv.U +m;RSчtJ:$xKBX@NĢpwb^XNq%׊eR8Z0Pt Z%u&ˏP}Hy2={H{9 b˺T3V7pECKDh[^]Ŧ4z%mGWkr@̘R'|5<a+d_)>C1X˗3 Y F'>fŅ4BgG $Չ 퀒DB&ac;"6BJ3#do㟒da@=]A}򠞦wK<3rOg8f#W},~m9FHRJBZ|&8>FrBH,r$ޜIE:d1T4dR#5ZQA YHH@Fn`E|"8aEg/[,ÍL_df>? YށRR t?y K/7+jTI{IܰH:FT×CQF .o=IENDB`pysiogame-1.30.811/images/memory/m_img14a.png0000644000175000017500000001102612201770071017626 0ustar tigertigerPNG  IHDR_v0PLTE&)+27;@EIOUZ^djfnvzb"bKGDH pHYs B(xtIME 8KPlIDATxk[}Woy6MpM T2 u4Zﮮv%kNAԍ(3ڎ-ife2Lv@Hg±y,W:\YWvi{u~s]?+ d9w O}7^>u9v ұKϟgi>q%.8=}!Kz Um }yG Pvc6@ d9/A_rk>rΐe\;.+Ɛ:g 0&ܳs= ϟ$ v8;:)xW a y"G7;!pSiCp |d/aS=@*F{YD `Ga.0pk9!n*|C" qfuY*wA!~Y!QgЊe$ ':C~iE,f:A~W\Z{{pH%Ḓm~(Ox^ A`g*;lv'3 c^BSmK)N<qf}ӄy?mlӃm.d^gW ۳zDY`ln6Ƚ oBԛ* a@} HcYis/>eÒga\!čs+LTi_3Qrp?bQr0L.;!Aΐ)5H%}ԃ,Rޢ6~.66(H"j`L5$>JLV(s}kZ {5YmgZWɍ +Η)3Y bY˜`*G9EAYNEY&!.W/k#(v22<1Ǩ(cwCh߈S[ ׼@D!  ~&DbK xaI8K&uxv[(OG'ofC=mȐbLW1HarIY6+-D%FY? {&'-2~C⃡6Lu*&ا8_%| tXQl'W٧vC*z {?NP1?1!b)۶dثq'ijQ"!Ũ҂ TCInf7k2a| pE=zeWɶZQ3L /w"ȋiwbm+]$OxFxZhխy3!YQG!uXRTdV<2*^OqҫE-si2!aՂ=JXnZ tyC 6>mT;@uInZ87= <!BO2CO+w!er|Y%oͦ>座 ɪ 9/ uסBz9@Q wD}:EF FpXWn}=))[EQo|tw_?fsK2uOI9wHb|YA%ȐdA=Aj聈3xDP'Ȕ7\@Is su[87oc0,ȈH[8,.J/YYhB$v*2!. 5͊ᗾy> zf,sByQ>)yj%a詯n-NQF_mHq}XO*c0Pv#iyIƐcKUg5ax[>kel N47]Sl;k؂@ߧKEYQao .dCn As Vk!KB9a`x+0 -RY#$M4=O \Z6e3Kz 5amex [Q7/|媩NMi݈qYrEEEDa>dl)x[ 3ܧzz,d4#Tyա} Y) W@9c= V> ш.][ G2fĞZ0!8wkR.lJڠU.=dO,۲Ԋgy Ŀ4}&w<{E~ԯⲹߏ?6VDYg9;DCzh&XXGHUUOKsNNbaRUXV]\jjxx Ȃ{z%;_└ӫǪ7ʰF߲ȲU㦦!оpʌ %4@O۰^vigbKGDH pHYs B(xtIME 4؋IDATx wڸi([L! Nm73$~ou%Yɽ=9l~όF#5q ā8@q ā8@q ā8@q ā8@_@6"_!ɟGAxhs D8!+g }"HB;$|FkefDh_+B''bk˭Yt+i[}. $ }Z@$-hA~.H #[s|rAhGx>m#ۥs@6tJG 82zU'Y (v2Md F8Ȃ0$u@ NI/?dEw&BƒX 4#A3MF4T;(S#Y 2 _+ p$S@"/0WD.`Ѝk $ i.-+I&gqK Ws7Uo_~$R IPtpU)rYcA A&AIiB+;U'/>̨w H+]߂b1`ؿ0ɉ?^}'te߂G\'A7$h֬(( Gq\Qm{ H[Wu5*aEۗ/_߫"Q{b8ό#q؝8߻d!|R¬I`>+z'$E CW<[종u}׶$( [ >.Mb &_l@*̇`$AQE.+ טPJx{$'ux-fѪOE6EQxthtC4VFzS+CZ)5ȶ0ɶ$S~^kEʭ"oq:Yq>kTB}< !?2Ϣ;\xo͇=j=1WYPG &!Ą:5^UXnudIͬ, ZTBr YE~=H,~րLd (~?TMRg DmdEvW,"1R%' fDo@5A<"SǬP#Q"&ً yʝ.sH l$7KyVWUqG&IȥZEx}A! I\|kQ)>)I8G(XН: Y7YH*:h_衴oiAϼÑdF1#fqۺ0dm Y~B̗B#ns:)rQ o"yCsvE`Rμ  ~/uoP"=. b(lZ][CH'\rn;ǘrw EH,( -]]I|O3k۵!yUz~ (IiOlTS}R)A|mŨh&oĹ8nCJYD9߳@DFb۔OIʴ(!'@jۢDֆ EYpa&QW)rB0U'ncA ydTp#!-J(CPyJBA*Zݎ(EZWz)+Xj%]G߭| 0D_V;Tg(mO=CpVD4Dh)W{,fthj"[O(vBX(d ΘF 4̶A!HzEt̷(. jkߜT?r#D Adlk,4q"Q\|ye Y* ʇmL aL* y 66Đ;^nǮ !Lr+>yCɢKP"9 TWG8`h>r#cnNl6 w8P.OCp/U{G|>vc(bjACtfFVYL٨GD#:Ȣh$lG$&Jn?CqC 'pmg,2lk\Z ؀(2=Ȣ8{aq&ڎ ٥Qb8&sXC=2a v||֥v;Ä[X+/Ķw4ltgҤ㰙Z*Ȉ; Ds kImnQ/ Lƛ%{>2QJ˨6AO  OIdPT{I͢ h\vGd)I4*4ް ˗1@pFB9=jvYV[ݍ_AXHG2nx"&9h[]ͨ5-9MB8JԟE_[\c TW $[6Ѭ1$Qgtm f>@U50:2),=;-ծP$G^,ެT,E1 HpF7ɛf6o1P742Iw, "?˶=g֐]ZxU؜,² Pŗcz,/ECj FBݵı bqbDhn6͜˖YB1##h]K oqRVˁH)МsL8H;  VV֨.rx ݺiy @=swU2$F5E ^4/AV' 2PqH˂fV:/Wȟ  7M?O[=1C2yLH4N Z)Oj>Z / _xk=͋ffE|{WmK]tP 3{c,JJ?t#q?h[]B LIZ7 EȽuAMcsro} jGLK~"wldllR.a͵FX@\ӇFfk䎁4$^H}jDR{CtX0'x3/%WAAA$A}D˦] eѬ[B[Y](uׂl~9im4 X)"wMIZ賿_e޻@yu}CՕF>#}eKH䞜K= ̡맪AĠ3ŽFЫmF^]hO4]`[&{Q7~m^<#䡭Pq1|u_kk[0O: ~7U괇pJNZ~b`ȧx{@1MHX u{{;6tռ*t\ H'`Xpo]%,#׃gsm?Z~F  u;@q ā8@q ā8@q ā8@q ā8"enRHIENDB`pysiogame-1.30.811/images/memory/m_img10b.png0000644000175000017500000000172412201770071017627 0ustar tigertigerPNG  IHDR6F PLTEWbKGDH pHYs B(xtIME  }NIDAThٱn@бBCHGA3)d"=5HC?0.6\8{;3)$ݝ]C'pC %9H|و$ >4gd\RI%\22/Y ,x葐Gy'z"LqHT rHCrrqH %DଇLҐf#d3lfY|,+BBy8d,O}[υw)'ºQɮ+)GNFWvecil $\3I%AՒ{(iC;2ȑFP^īL{ {)6WKqTEGK(F 7 c- n[]`U/MuDrN?`;(iL\<|Fb&{.Hh&9F|3.-H,%!-A8Id&oɘ CH''T0AJ$g/A~,&_ TDN*/BNҝT+*]~A.*yRrf&}q?Ak<,#rCvm'7%!~d[bylE#mUR|rǁmURvn秢{}-Ӣc\1"sfBcszX4\t}hw2OT&L2)O lE%D+& y%Kk,Iͯ/klD0.&;^fdy?Nٗ*lN"Aeb"! YP03IENDB`pysiogame-1.30.811/images/memory/m_img19b.png0000644000175000017500000000162312201770071017636 0ustar tigertigerPNG  IHDR6F PLTEWbKGDH pHYs B(xtIME 8 IDATh?n0g ޳ Hܠ:7H/9uA(%K=xp ȐǨAZ@dA1%gr&|-ETWBNdtW oOB&(iGa>  \!dk!A1K ;dIid#KLQy%$~HqL}7d:n;V<׻ׅ\')4"kUHM$Rl|NZLy$U2oyy1=1c\/ZOrs,F>^H hG(Ir_ln|#w7 ه(cMM7уsI IC<$;rXe\B/c. RBo @on)R.MR $[$&-:r"Hl";`-REw'"%01)祏ER` HDgKc*q*2f$y%XbY/VOoo:: N7L;IENDB`pysiogame-1.30.811/images/memory/f_img8a.png0000644000175000017500000002757512201770071017562 0ustar tigertigerPNG  IHDR^PLTE$/(7I-8.<-A6@%1D[786I=K"5N!:M!:QnA8^JM@X#JRAGU8GY*=])|J5G]#C`$zRFLc)If*T8Ih3SfnTf;a<^6v>d6wcxjkI}p}~{wch9f@{2l5Xf5d<.oE;l=vFu6i@x\aq:oAl;Qv@p?s9!7uCw=wMBhQ]{AmIM|LxC?q:{>B~HbA:4Fx9AJUʦHF>>Φ_CdFMTG\ȳԴaLNFT\c̶]ļkRuLT[N\ìdd|kɅZSbTv|΂kre^Ў̶̘Y̠̒п}p~֊քxx֞ٗ؎٪ۃ݋ݍػ߽* bKGDH pHYs B(xtIME !F3j IDATx \u)Mh+Vr^@vEBBZ_Peb qP7cD001 dax5]L9<3 Tw`|缟 ((((((((((((((? @Ajȷ/^z軷{Hڡw-41#߾w஘P6D!}4K}jn [E;<(P=uhWnRwd=c,}׾}LKKN Gׯ_k+WXr>@9p01nxM;bMN %ʕ+ Lf$ӌ{?{ĺ烼gab"#Hrw`"1JG;gAVΚ! J59;m86,Ǒ Y#ꄄF}pIZ>>#XlK]8kÿ/ G$ɉ343û 𶣥wD'3 <裘 L!8$A( iGvm4m]Exv``p,RD^,If7|xl"1ދ}r[͔-cÁ@X'J6%2Td\Ba n?ޟQcJ[$6X:u8__,Q֭ [ᡎ 7^?7 =(^|NI(#1 dU1V䈋sMqq:.ۀo0 ~lHd*^,3@|v| c$kaWD[[jΜE}$0^o@uusk(m%[6I# J޴`:Pn b91p2WB5#µ/PZ[@H  H-Z$ b?dXq7:[V3|A4,AY.>b`a cK8VU&'Ds1@wّqYH8 )pýčk 0VFBzIa@(_, V1MA##Lk) hc8ڀj{U};G~Y~x4D!H Q) #})2jXcXva~X>mk#;8oW55z};H347Hs }8ώ} k{mHxx8GASw0 j|$R14?._>\]HDm :XgͰ\ b Q!pV aa!!` `G h`]]WU_S]͑;ùs ke{vMAD˒'aprDd6t3HD*#/9B$ 5`F mm W@NWUW:|idaa@=g ߦ ,ăiCHD`e7E}$`| { Ԡ/ȕή+MH^S*&FSyNw^SY(;[GgY ! 2C1dȎ>3H( H@cӧ9Ξ @ڮRTbНCVwVP<@ $qͣYvDUcK}euW@oK Ar9 p ȅKB :P)5ϫUkֈ@,r],;>Ѱi>c]c8!V{[$tbihllB?G Wd*|xZժJ@`$YXpt e5qQzy"y@F^e\ !a!ޒbU@@#=*iHe2Z{^$jT Hnp0qJY'r HѼDA۫_LcW ā$-/GAv~B1H%}J*3%D*E FR 5.Ag?ؗhT$m,+L @Adh@3 U*^{J-U0T(%:.,9XJq G\FI'+Wxy!h8 D3gؠoTkKd[bFJYuF1s(&w?:uۃ`%e҇pꔨTXH #9lN q4544S|zBWJug"G&uƂXc fJt6qt:w:˄<#0,ffK jFU\r \pᓦgjtjX*(RVW )N)7*eOū޾5 5*Cfb#nq 2=W*U'Ϝil~@Jq^^^WKI#}} 1SʲLIm{G ы#`%ul8[) ==92,NχLC۵6(PGII xxey]}X:"P )z"[,=;"Ha〥 z0'?4E^.AON#J J_%>)zGQ2s:]sUqpcC*f ؒ0@͂&J,,]hh6=OJOA0d0'ɣTST kNF[ώqˢ -ADyXCA',y35:p5V 43d4rJA˗ȡ9*v I$&XČ]mPȕR<酑A.UjiY !i(R,TR~VmH6X|c[Wg'[mlhAL8=c _H%RR KK#R;18u8V~ }-J[{4R߳ߑ氂 .a T*J:]eeUЦ\mm]fO<R{@Z$)Q0_ Bl;?/>S;Z\ϞYt A688b])/ǁZrL4wNAf'<ۜl6-62"Ahja`Z2j1BBTaW>ɼudeɓƈD*50H뷚ܟxz>RIc|hL'z}wvV~@0bQvZVެ_Pc?׈i'[VV1@:n$[g e[I#8Y($(DK9fKX1uEE=@@M|J"j.Ҿ ȉ>Qlz[߂#(=7;7;[,C|%nY2CɊ!5jtIIe[}㪕z+U-PL =E@# 䥨$[YT}@"|ْc1F2 `Zh\bVz% JDdirI5VSukwh|ۜȸpAO U DSU\\\ )'GqIq⣔swr)(.7e?b6*#ӝq~ r@ "+! mdAAP'q:^Ψ !uT}{࣏>Ct8<1 >Sr *#V qS[hǥG(j+Z 5 21H* D@).U*r ^,*-`@G|ֳϮ|o2e@':fi ҚqۢBNd[n'~ TS.8D*Lz}+j]/Bc_ٱ[OJrb> AUJ];җJ@tا2=8QvĪ;r ǼHrPB].^zs @q+WD"),,+-L7o?k*UU<gsPddCY ZhmJt8h9EPsϽk;oxL&-( p@NkTJ#Jsai ?ٔ&Ld$S}sh*bS_:\)|hYϭD?_ Bp_/H | $ ;]}@'Efw_Ћr'#Y L4i,KǥtuAnO /Κk;~Hҷ֟cZ$@,Vi SuHq?! Pje,}t">>QGp 8q4TKBF,BJjjЩV\LjJ1{"O:F2a>?=zNx^pIO`R_?q 㽘AA~DriMn(/="2=WޜSO$Rnj3!"5N8|B(z-#6A@p]ͦ7%ŨߗbT1}J 0ȍm1X|xԋZ=M'6Λ;ol! )p2v- Om7 0 ?"?t$'N{<77&R2WرP<5{n ,. *as D3v܃щyPP11 dD;(@S8Gr`Lc&N[D a1[l{v2 yV~ D/_}/yyGD-\3P~ '&E!vm`h&R[Hf+?9IY_wy _6xXJ8y5 InPl!6s>#aK?-X[|މ*xĜ,blDO&gMAghׯ0q{(U2Ɯ&Oiݠ3xboSV; n_+W^yl휄wJQ,QzZPLت.vn ~<o;WH:j|^^vZit+$ lڴׂ22`N|t֝( 0REy!E;8;yo۲+^JrC7gkAi.o$]V"On}/vtpgN('k sw=PE& 8XǶ {L>i4-Itk~N`RL ]o+]n[jc|ڷ2dTTF1}prta(V'ѳ%;YJAbqxZOEyxXou=w]#x pr.+̌7gU ]v,& 5N,Ax9* vzENPq;?V|/"!0*4HvbIwT<.7Z*J](XĖqXZq0.{+qFP%®P ēo0RRBٵqhX w,JjAɌZB~_Lzi5Zd#cV_ w ׸q&aP"@ S$eK<_y3~`{4Mk A}' XZ%unSeHX6s));h˕}:r?>-c(S丅Z_}A2M¸Nmx*aD ^K--u6 a 74/0pԌ5@giIENDB`pysiogame-1.30.811/images/memory/m_img12a.png0000644000175000017500000000742312201770071017632 0ustar tigertigerPNG  IHDR_vPLTE,03HMQelsE?bKGDH pHYs B(xtIME ;7.IDATx\KWH Vำ-NƒȖtf n*I̜9gRH}} 8 5/ۼMc8=J֭7tt H~Wid0\2[^CѧfW, &^Ӊpm3+Sf"vs3ʦ77gg!#!y~,bx"ٺrzƥ̛p n:Js$ 8({{k˶k\U$<|l ;_p9_)u\{.u;/4`F˄rUvfM34zԀ8h[)gwZ@b^XD∻THJq}fM~"dg>%{U '{a"P֯;~Y($yQϣt䈨Ex$C$OCˁ=?ZZ/yE{6;D ]ZmP7I͛* ۩Z=x cs=q1 L;dl@-Hm'ϲAخ’ d.jvUtcJeZ}At3ظ%G\'WDP U*,@ wB AQ\t9-Lap'#(qނHbAD<"]&^Xuma4/p]gH#BWSt iY|ԧ)l]l(!O)ObeIaot_ ưs1Ls5\ya5ܐQX&@CbjX0MaYv-WȗBwfљѤ)˔Ր!3Ib M2{M-ʛnbV62+'$i?\f]k em<|'dbgem>6cAlC7(ϢK+M7$]/p6Z;aVml~磵W˸e#TR WjVJic|&ͯV2u(/}~*h;u9f].L-c rL̝J[lցẐO?-U&Yk*-h+G, i$=ˇr4E@LpWTI`pm"U=쟞AHgջ ؇0?~: 97:fKl8ca*(hS?'|itGȅSSrK|e6S!]6F |KJ ڱNח#@د>!n{Gs8wBp>w*Y욏wXH | +a=@k6.'E(]oxL.d+!+|γCFeo O 'L IENDB`pysiogame-1.30.811/images/memory/n_img16a.png0000644000175000017500000000602612201770071017635 0ustar tigertigerPNG  IHDR^`PLTEe, 7B BTDH/.RdmK\ \msgyFpn<̋_򐄟[٫{zӦɧsbKGDH pHYs B(xtIME 4 ?BYYeqAnWV_rL/Ёsp__? ?K} 2P8_~YdxFjk@:~xXX Q~ \m#LHUEe0W cq'XƴU\E+xsY-ekg)y_qTsH/m]"XKaM~dnU1WJ"m%98O֬hM[bV$;AԮ?3E2oFbke@d(`\ĂDȻ] \ 6UT@]afS3`CcX?m:FZ|}ڈ0i)&3fڈ2vP}bյ12BR)%U*^Bp k=G2κS(`IihݼWx˥h(=`a PH+CF#8w[XQ9w3p7^- ntfY!ر+)a_㦋L 1;< V 4riNfRֱm}sN g@ffw|ހølcCb-S cI;*:U ԗDkkq> bđ-ZLԴ΁fR.{ifMs B| -<7A.!f><@Z/D4(u ?:fS.o z(h sue-Nw ̟ k>|WpGMlߖ7few# ,Z}%U}|M\DD7sݚ/I38vK{x[.Xz+w!Z\jaD+G3jT/@@Ěp:(rbBF s&n%G,|38[V P> ;pC|_UEkl0a(D)p$Zxl,|ı98N"` YynI/xKbj! װB($ \gA|A<ԃB6l ! h%EL?LeNye"VIi10`E@Zq%hg.`7[l1ɡdM$s'A4IzTM]_y]yo/泶"YW$tϜ-l^`=HFìkh2וDْ7K W/{J߇@LRrtny n*8o$0$/_ؼmr]' ::gkڼΜpEY׹ixb@! Ky >㌱q $č̄ɣ@ܝ(񊖵u|;>R{Ocw"_}GrR,;!jahq$_`#S[YZAnDp/dJ h6jT$KtMMr BpfP}|Cԩ3zwe*(C"Sj$:{3]_o $XJח9~++ģC@ռe9; b/vcRzYJ٥h)՚]51xYGƵ;%g{B;{k"rZ4!۝m:qWvt`i4V!D:)^a'AtJ A l]`E삮u0k53,۽gV>j '뼜dωa-2WU(y蘥whyn9 ]pp$t(C,qܜ<j9 Alc pl Xpw5?SuCʪ(8 x!Ь!ZC~O[H+A)}n#gAWH0`/GιkA@lOtvQfKdf+kkt #rC HQmT 26% Պ^tN r_b2;eF2G{:_ rI7PYQh)uq "6RDj d^,w6AVo.MP{?X _;A*o*7zNywL~?Fb 6 DI:xW,Hr[-1D*nw\F\p(wZ?/˺|5iH $$@HI $$@HI $$@HI $$@HI $/dIY IENDB`pysiogame-1.30.811/images/memory/m_img5a.png0000644000175000017500000000554412201770071017556 0ustar tigertigerPNG  IHDR_vPLTE0R/?3)xD!y{xoqVbKGDH pHYs B(xtIME  4S"~ IDATxn*oK<A~HUotv[j%}?ܣ7m30 \ Bu]KLJzꄜ}7r Z9]BBXV³AM=+!ZsG!5I=$k 䍈ḾUD}dQÒ\~F !!HAܸ!&!C\/!$ӽ T8n_ k|+n g !\^޺Q7! xo#\jpmoq{Rs}2WgHQ > >oe ȫሲr-^ѥ_HxHܶr BܞUזj! bnMa*0zxSC̀$.<ܷ5꺎%pF$v0΀ FjfUVZnºj4CaHN5dZY 2Us $,)%IqW=c *oWKIؐ\4li1;Y|k.w((^~`]0|ݽ\b_OWn GnA W=[܀PpGA(!wwP`fw/3 z06Cѥͪz0*ve^ʌ`BQ[b F3T_ _5Ty Iy(\Mü 铃f9J U(jOI;2# 'xMtc(AQGIE3v 1; eTݷȚ+*{yw?GP;[H >ޮB^nÅR ^cg'dJ-l{ѱ82??^\ KׁayC׉FFKwΤA߇Shs?cWdphQv\>.7ɴV&cp]Y%ģ^FNjL}nF.eKƐj"u..ʦ m0?Y].0*s/$ Kb=r}&f0M`!=iL1n q+Wۻ[**ȟ?de{ ߍb~T r^CQ c6I !}Ș$84Q c $UJ% wnxS22g-CS@ g rү58LE[A_(`-SS=g|b*],8g:NY2v,H<ǻԬ}d6Y\دB ֯5:5ÄcnXmȺd9gۦM0 qcy GdQuvv@ m +ۛXf>/y16' 7QڮB[3An~ ^7rBCr^Ew Ui|HnfCTHȑ"0Xn R[!#00ɇbpUyÐyj d뒵Dʒ"[WBT0DD@]gHJFCv2!SAj oE>Pp<}C(KeSV(< ?ћPBbkpB${7fP%HW Qk!b/5qFĮ-E^Q+ >ajbd!<z<_qW S{sw~Ip7 Qz^hBA!qHǓ[SN(> D[뢨-< tE~mguJ+7 ^<J G&N]3(Z3^'DQ=ljX+kUy6lY g ]Ūp/UEt5, TnT,Ap]'T(a{m%dHAhY <) 4PfB3eY뚞nh(GSu΅ 4@1d2Mm H 4z"I}%hTMi^2:F]zc*\}Pџ \d_F) VBa |#ORzycd)eU XiaHP[S ^J#O, eaR.6>iAUDЍjk(:[Ѝj+ .x:})Ho eeuA{-F KŖQ{gzb1&>U6W}n2l tm[ T :6mQnmq lOyWݸL :ybBIjLXdrͺՎY5 >eQ|)=[(Eob @xlt[-CJi5>eNLu=m{k߆/N1c.*Z^9Fq&!gZ[Wlf~0jl@)HTAqK PQ cWQukG!@܁4r^:1i r8 i˾}S*?~SS@\@w? wdOC8s`{xp|#Vwܞ,D `gj! F c& p滄²N ,or[fO]( F!$/:eC48c[nOR'){K|'y>I8P# 2>_uǓQZP0.{B2<_d_.'}MzEP(&:_XoKz^I-C$A@t]di?cϑ}.Ae"/*&_ qq|+Ms\ ̅$ݰLY<K Fz~דe@ /OapZ+b h&@=9\dȷHV Px-K)$n)It U+X/Vg\Pk7!)qL]-eYJEdX$B0x2- TDlqx i6.Ʊyd$@@ߋk$B4uCΗZ1D]/E) H&lyl}daH=IHLHrhVXٿf(.RA =#P@! !U Ւ/+H$CH2N Ғ巯_|O~T(ȓnNw4Z5u]Ix\^Lc~rD"9x;x4V:hKw$L:6  ԓ(IBL74^H? W%MJVW b.C-1UdkYw18Dyy}y Aplc qUQ7X5MP<V͂UyoO u)vM(cõ!x%< [=5gjul#WLWҥ [GSeSJ-J̀Iy'%r`yY} Z M7r9y䐳& $#m0FvTIF<,@pr B]OmŐʷc ʫ=r$;Wݎ ;ӳQ_9!JSW*]vGGhp#av{*'Uf鞩G dV:R3@.]TGؕ:^gJeB KcKŘ3]B2sY!W[Xp\U_ ʋb< HH=-]Y(ڙ#ۇe݂LmaH+kbiTd_"ojz-1ÏZ^ڈ Lo%A'ۇ-8J@$QsW@K"Ѡ#-@b֣ &kֹ  Nz18w%&x>}BIZ&BM-"kV>[YAP uO{F?YJ.>{19D u3)p/Cf49$úq+H gk xnҺsZ>C t᭮@V-C UM zlq;Rr&'uwo5u/E4H]{QPvejZBrzbU/ T:z+@&ʵ(9Į6d,>"'kcsMRҌ{Xً5;Yó|dD{BO&PX!Nֵ,f?!!쒪 9Qk7Ea#Dg!;2my"p4w9F\?K\s룒Su?v%UA3jYHdC)$?#)c;%nuS ʢW\\ wD_U9dsEX3Sm /vA4Mq)I%ᙉO:,obV9}qƙaW[P=i'9^fwPd]) 3#WQ*lww+=Wy^f+@H ߲YQZ=@ўq%X(?ٝ"˟tE0~ ?X dUvX+6UAUgF^E;BX|i;7rr3{V` AeA"de^&z?qƈ@6Tc c+9Vݑ%)h-9~ob ѻOYȣp"1q0Xʂ[8@0BtdG(3;(ǯ#*b/~鿿 %!ƽ{U1 ^K_ȯ#X\0D_S>FT҂K+g< gBpW.Xz|Mx1{[* sǷ3׈C)uKa)Z{b<(8ƫ?B=xėmA?1Dx(EI{Ѻʒ iخR޳j_  $,"Τױ+R,:(8F^~g0ȲZD=At3-lf5Gv>#7K0-Y\HLQ^wo[C5>| ~<}*d %  .y\'zMvG { .AcU@і7 ὰn) ~Q5ffͤ֋M'dWT#1PklĎV d$8KTyat/ *YzmBlNllEmmhvvK_v_?*-._IENDB`pysiogame-1.30.811/images/memory/n_img12a.png0000644000175000017500000000402012201770071017621 0ustar tigertigerPNG  IHDR_v0PLTE7ABU,+pvVMMoD~ԩ \bKGDH pHYs B(xtIME 2ړfIDATxOkGWR Z />hsڞfW>ͮ>B0i 95bJn'*-Rkpx_jgvM34w7;ȊaXb b b b b b b b rmQ8 @:ݮ;%!(<byP܏'AM.fof} )X+vՂr1b#DoϪ{Ғ\JbNGR=bFoVKb_RD o[7. /|&R$b'G.RA9Um@^UםC7A30£Qtp6y%ǁВ>9\fѱw̓L5iq|˶_y~ߘ1'K8rR~aMmȤe[ܔYrP ׈}zR;D8h-}Ŷ[zRpP'@+lơ;@\m  b ܜJ hփ-e[hfE+l؂ϫ#mkzCN mæ!XUqfr*! 9@P}$J* hx.OE@e{2S 5MB S$zC(FF 2i,a@`\/ؿ,Z0'z;&ՇNL/O-B)K{1tגhlB̩ rйOx$qm@ tdMi*D@aD/o$u,ԥx/w75NGH:_ "309A5MԖQׁ\T*HP9JZ(Ó@|Aϩ SA+Cts'yv$+Q@&N@ !UX*="RF_#0R"@vؑTs ix4|(\;!g{D4O.W }uy/o)H?h)F,B΃&liyx@drwi|8Vu~\9NCr drϩ nk0Nn9|̃<i@\~B҆8Ȅs 8 ~Asԝze?@XP_dwz}HSz1J^l% 5,qe;\A|Ps_S -U5K֯ rlj ȁ:\mH 9P)3Ґld9UBztҿȰ}@;CHШ a\>+ Tdw{,Vv;T^w鞟Wٟr qU:?m:B] 5Í3h+ƕ IDATx훻oJ`Baㆊl4FP9]E(AT֖[R% 5+X>`!5Ar]-He#RUo9 HN N~b{ 8&)gaO 2feH))] oYOsle(F \Hphx' pw>Fg@k2/ ; dȭr 5(@ln 6P :)ۜgD$bph܊Ÿ %KDַBc<&Ec*ۥg1nBf-K 5qG٘W– >n:I" ӽ-)BzFw@!NfU\2bZsRMѧzzSӗZ;%H%ћCwVb.gèJ\8x=9hRLbmҁ##JJ WI@:I؝H[buYu@a-!&{ @k7)(AQ\gb N1P`ْ=kCv1v:pio)mCWv*nmuҫ0]u CA즪 l JsQrk@̒TcZW/5E̳ PV!`&!\P%DڣUoO %Oӕ4IPW( Y  *e)!+|S C">Ħȴ@:@ ρ{ , yj eQyq c*"ZP a?G -Dt) sK>WRtP1.|*/9WA0e ߨׯQ% I# WuxrqF W=C}͂4n1=0 }UE[ek~0Ͼѭmw9oA>Uq(YLr,>=U6  YKGS/_Ձ BoP#f'I^P2<˰^%xC -\KEH4)$4ҁ~r auFIח$-OuE2•!#uv#v炰cg!gͣoÈ|ӟR>h珚vWdٯ,~Fϖ++FgA8cTv2gXGn>hY)DTW hW+kZF3C4v[*F<[5a!K],Gă 0`k,Q6ӋE}l݊1|Cд\PZF 6J)@n#xvYmA8UIENDB`pysiogame-1.30.811/images/memory/n_img25a.png0000644000175000017500000002543712201770071017644 0ustar tigertigerPNG  IHDRXsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxydEyuN/w}YYA5Ph#&&qҼ1MLhW/c -( 3 aowUuΝ;w|Χ>]=ӿ~yRJxQ88p 1N  88p BG ,DBJьz 6h]w,uŭB'x-pR/]!J])!ւ\K4~yo!ծSp'1%fDŽ$45Ѻ$ P E$t kH ~ؿ4~5χv22@ƐlF4o \a?֐aL3qe%0w9\d9o N8zRr0C HE!=˯y׽\,n*6@ƀlF, C`*'`T;CS[g1 }O?_4bQq8dc!a(2dKܽe7<Ի2Ϛip!ٌ7q9?] B!K9a-,E`җ x`Ȯ}=!Rʝ~"7W^oLPΌ0f | 8 J3Y r!%ߺ3[*"R$)x `"}2Xco/= ²QʨkC'(ر7ϖ=E  $-~ݟQ ˦]Κԗ@Pr܂T-ms{jZ<!>O,99y9zz<1ѓ (}irɵ7ԍ@yx y%fEouʼAu-=! cp0oHGO Jĵe0H(AG2#!+?-H a-rlU  H77yk 7ZOW$u!7 "Ϙ5L?{X}~q?GXT8v䪟a[O%hSSfM% K!S" {mN<ݽy L6zCc@$ 5/ofDJ_˥WY ~u^X0B/*xUaO1bI,$!&a(D٫@ }!G)ԯ 1+S// aDaᘲ浌BH$[!( +Wj*oosUs6m:,![H&,3_2QɉomaP|h%4%(82N{Ba7/eA1'|m,kۧqVM )|]~m$#Gpw^uV^xjM_gKONrᬦk8lm&LŰRJ"zJ% ߄ﱇh~tkJ[3$%a1m^+H*ACZ.m3^/nܸGydC+3 `Qz-.b2B̯~^֯V>I I(@S=+Ꙓa7iI M,ZȒ xW|?+ׇWyq;&I_fHaÆS !'>g32g(cBGObW0,sFG>KЭv-#4}o*IHA4IJ =/Ǔ='ܾ yRԺ^ %[ [x>Lh"͝ω6MGGm=zc1r~b1ӤP[a F`J$v]Z'XL+VRСcQ^F(M\93x?s8rrDm&X46O;v|__7aOUs;v0|{bgZ%c OGYX囈PGD%a0"Pyh|2[E˒1鈘$^&bF.^$|غZ5hEjU =džt%K<{Z47B,^> ɑu򮅂^p 󥩗I K W]'C:l5"6%E |/F>}~Ņp㮻j2[B А hnn93`֪W^MCC=n2?E'WAE x%AY#F[dƴ;ލ1iMפ@ؿg.2e z뀏c a,hmi]*-w1e+O\~FҢW'9&ځ7B Z1^`IΚ`j[ ysnMCڲ"5Ok1?uo\*BݻwȼyN,bG^zpx`C1%K ~mQS* sG^ kiuk&A3iI pb?'9?Ӯ O}LiEڭΛzUA-0Ꝇ ?%NMI2}jcdWϡ{zIO ]oݾ1>._iGHrzDoŕ}֞=3ղ2+΍PwȕP;Ӭȍi!fePgNN(t(]$0ڊH]X3L 46Y4< }O~j=/SgR.{廉'^8A1'9KK~DkIDZ TJ^?%Bv'(acbڪ޶oݟ_ fw'޿ƦgMwAm?x/7>*,$H!lBz]HG"V/NSc<^o퐭iV]XC^Wx~9 .`΂hjEc4}<XTS[`r5iU±pt܀P5m#x5b,ӻ֞VeE)%z$CxNgk֭֙3URW1|3#ppPom ?Z; %1 i\ssXD}e(K-iM3SLN*qO}'|m/B~{&{.͈6 9gJ˩_5c{5EP¾CmF?69@gZ Xi)]kXT%IiurcG`H/ra~Nv?& 9Y\֮BJe-^7| :TZߌ|J2)tq:J'?R·~^w!%Ɏʒ<-ށv~ռ?1@]e^[iWi!ԏ;Ju UiŒ1,)mM@*M*-8g;oiRlFLΚ5'y*t uNz(UZK BeR4KYQrfRi)oAY2?*3w8hFUn{[IIuҲe(nY 8ٛJˍc+@ @s?ps*-HL~tepjbXvYϬyVkZ B2z?lŏ:"LlޑA z*-Wz0#Aw !.me|{j%KC$(}=t!9Ӷ鯮SOwJ(=nLvtŇW|xE='UIQE_k+j`3tG*S>Wυ_N ɂLZq6*We%Nؤ.|L6#nV4:R:EYݢa&MLBSw*zվCg$N夭e,HøxJW^<էl2Y+GRG&q 14jM zXY UH~saByJSZVt<$X~j dN{Qg6-g}3cZHZ&FvTHW(𳵒> B 62N H6#.*eS+(hW'{;v1vXNr+g$}9 B>u$ dfLۢ!zvH^1ٱJF42VjVr+kCrҲs>M52L=0]"t;v_hzeֵ+G{; Bkya6BpdB EǐTZ㧩*@ƈlFj P.]14 k#R)4-C")SU]Mt ybCHJ@|}^}GePܖ{#މ\M4$05/k*#+b0:^bk=$/x6|˾69 \΂ lF\vTdjVcb V@iXH̺itS,MdH1X9d&3W|aWHһqd"j5kLZ+?1]e]|(Tg]!O>)Y@tGpo>P,f(V& IDATT3pr0Eʃ{%lD ?>UQeTqU͈Fl̮{ZFw`$fz P Y.{0R}#z N ![]/BDt Ks9zR$ݽ=}7qSp>d3b_%Ι_Q 틘>H"7~H> gA͈*ljPGT?vš^ tF8xTB~ nP}'lF xh5 ^vPU]T ;M[fyxMwȇ&x7d3rT/8&,UdQ8 OoҾ!SM:!*mLxtJo}S[-H6#ϙW]^2$VzxIN8PWL1gNVsTuX']OHhD>IQԵ@&ւ|5Hz &zA餪pS b)axV ('L&jL2ax@\"J-W*}i5;W&H ʹ^ D!^-W'*DmƘ~=uԪ෩)PVvԝJzYak1Ф)o jk ͂ 5>J_Jl7T8˂0o2YY1:n*נR~ 6ͺIJ$NUI $L쭱 g*hk!= =JRYD/ȼ  !́,Rԫ@0g5<-oHo!TB9cO@ХI"YUH] NTR]Czj$ :*eĢZD(hYKdZ ENT_~CXИQԫ@rw8jZ9DZOUzM!]8-:r81N  88p 1N  Ba6#Yq\VA8u)`0҃8 D $x>X\(rS?* JEg1ԫ^>8Q2-lLtOߊUBZt*ChΎTumA**R"tpT2[۟SUԵ@*ꃠ۱$B8gp>HE0UM%F]&QuԵʕB䇸 VuQDM*MxKꢳ H DM*Φ)q%I]ijM&K8u\GՈHEҽ$Q=_g ck2u&=2lu5gEz BZF7*)FNՈbMM@UD $ D֣f%л %C3$UE d]nGIkz'oU[2JBzA'}4o`R cxSobLGUR"D:]$k ςT敡Y %sԫH0KũF޴q="ɳV˽f@l:3XDdN#4*r) qi֞_x17@Im9@@V%E@W3q{iX6<=Ѯ?m-W6+,Q?oPc(QBSG a'>NՉȀ% / G z &XѧL[+A!8a/C^Ե@NŒ֔J Mq7i U(j(IN42sDӨ>j%^Ե@ Eu D'N„cԵ@6Rq:u%=W8&B:8-jA!p 1N  88p 1 RHIENDB`pysiogame-1.30.811/images/memory/m_img5b.png0000644000175000017500000000173512201770071017555 0ustar tigertigerPNG  IHDR6F PLTEwMbKGDH pHYs B(xtIME "˓WIDATh=r@*(TI> G0GpC )tq7LGhRdPP 9oY6 d ﷻB+"MU ^>DR_Dl  ā!R! %!]] x #[)H|Hg>"B=Jw?h#$GP G9uFm>lz$F݃ӡ K:Ho[{}L@FVuǤ4% #Xy])Ѽv+^}#1B>Nijy7E4jEʫ{H?„ 1(]k*wW&_R@|S0>Ev EHBQ"?C+ïyEBBrY٪0 HB|ᛑmF8QPDZ7IS2@ʕgޑ%Og{iX:|3NGZVv1<*\ T!*Ku,Q!ǔR9S`K5ro&gjd+ARʷ'jĕ q! BCb)9Rpo1A2ٮȊ|DMQ6Q ;Ҡ#}"?LJg0[Lj [xɅ+ K1d9[ Vn] BG ՈI1Rh2Bj Uɸ=)R6i&o̢kH9b/Z~( r0 [,’n(o;~"CSe\B/`A沩n?Ɏ)>| /PGG+2GUڿIENDB`pysiogame-1.30.811/images/memory/n_img19a.png0000644000175000017500000001061212201770071017634 0ustar tigertigerPNG  IHDR^PLTEJTSa,5 j!x9F@Jy4AT;*,9ʉKbiHD̦KMRĶOϚmiXӟfZм`otiwkih1r}zۃ̃ݑF΋[ĖԘ㨱q٤浶ݮʕѫkxbKGDH pHYs B(xtIME 4!:9PIDATxk{gbb2L#Vj\urNU_14Cb\|o D(@Q D(@Q D(@Q D(@Q D /ӁNfG<l]t ǟylVj5|@Ѕ/O+YejLsr0KbٖoӃyjǡw K5O4Do'y{$|n,l.$+r )\\/|ɒR/RS/|~yv"y5Gu& ^_pd 4GלӁ/ǫ;|,yN!ͲyJ (k~~:FΟ_My^t{H`Y5~LJ}G IW$Z|:Z+P q:Wȥ7aAK a"Zkfga-7mҫ9gfD>Q1$;YdK2=dm2X3#L]/=|qZx +~Ȝ( پ`#f8󫎨:I!N"}lŃF=R\]x}Ӹ22 R:80 a%3BymEAc$ 1~"DpȈ"qn ^ 3&@z.o 7 ~Xa0IB@#dj +m?вW!Og4& NLD(Md4lJDԬ"<͗'D:T NiyŘv<ժyy*V1,5}~yX>9SֹkMr8Ƞ^MwkpD8OO nwp-/ ]@8Bm~DnM^ [#tf C #ȷNgys"o`oRWFl䶓ewӴ]nQz͒zV'٪v{_y`-v|#}Y];?yπxB+ Q,َ9D{yX }πM;ma=r]{IGI4ũ@(v,=Nb &ޝC÷xh+'8d-QT@>v ?dK8Rִ)A$T  @ky`jss + ηWAV"FĦ$ > A-D" t ٞk6A&>-:qIJrZ# VVFrd-A$˱3Gݐc")Mi co_QmJrFP@73iɼoHRx{ܡ"ƑAq<S,Y ׹RdXW2-Cx;Y $U{n[rYE'8FOcK@ ) %FRfdq J)=i!e z K;N yZ|)Հ80w8FXH|u_hӲq4VmA}@A]rKfn@; o`'s$(42 &6:*}W/x%dH(On u6 -ىWTO[ tFZ-_ѫ~6DtW!" ?nhZ4'cX8h[V(D 6xrUjƵ$.{).}NA0g@X-FN "T~ jX YBb>~Ճ=hgᝐeg6M3q4 ^R/D3!B ~9|ݖc]FHa \(!G Yo[lBi;|DF-A)⑞R*4$Z4I-][WG" ^-PNρ (aBGܴ>HyjcLB# *R!{= J(J}\;U048?j 7U-oK"U!˗3d3Zl"%Zn\(laH~tr= m1טFOMs:lNb~mINEm ~ dvGזQ D(@Q D(@Q D(@Q D(@Q ZF=D:IENDB`pysiogame-1.30.811/images/memory/m_img8a.png0000644000175000017500000002035212201770071017553 0ustar tigertigerPNG  IHDR^PLTE  $* . "$"6#&(%(*(D'+,*-.,02/M/I14536869;8=?<`<Q>!AB@[?EGDIJH^H&qFMNLpLPROUVT[]ZW Z`a_efdkljfg'npnm:tusotFy{xy)~}0˅!If֐*ޏ֗<ݘ3ğoˤn;ߣI4VPcڲ{A`KlWu¿…kǔyʁΊӦҔֵםڦޯBkbKGDH pHYs B(xtIME 8 /IDATx wG&B'@#F% 04֢YF e+edy!桇{rNM}}ue̼y={ A dp^-T,4_(ʚAѫŗ*4. n p$Cϰ3ۇ=FAH"3˙bZo6kR\fѐmA$h:gnTNf!d{v9iVڛ^/d13a@NZ|iVG'aN'szrdDcIZt*$,rHl*1B=j9hdS(+NY@Ou*UR;IxFa8x[Azt2 JwV ã)j*Td90K1rKY !| ĪY0F1x%;Gu@ѪRN"z\H}3a[Yܤ{JCX+?|7 0cw0NYX,}.@ZM‘ͤ'<|M&DS֝ @\A|p=NFAN@QTw 2b#C9<]]' H[W|p '!bVaoCvJPtJ"4݁}GmG3:N'EUE@vAҢsxz7@ǖ@w >X u˞P&X%n%9H]{ j[ xT4ͤ*Z dAtMO3PfS .KbZ`T $ i޻m#a+Cb#ܐy@X l* :1n@68]VJrh)m KJZo9D H<z īyHӮ)+uK RAp8<=a 揬ېYV+Jծ࿋J^+&R]bժn~%i{(+к |srq/#:o߾<* 庍RVHHAjEvFiQ9߂ĩ[|>~&lUHJ9qMK^0ANMxxzЂ j!T+( 6@1MKf &x4sKr|rs*6DBZHRFOsaaR- faaaB~/+3R o/`CaK/dl|6W (Ŝ$Od\ nK)m_zK>Z:EjR"Y1!Hj;eQѨf҅s3m฼(6GܒT`^, "oZF(9|,R\Lu7%zJ*HῒL/GpD ;8 >b*QDR+:O$ٙJabJI@ VښMJViؤ )@RI}\*qę7;g20]+eO&, dC> D*Hrz&2ٺدg2etheمpbpG/)5䆩,DǒbW֭0RJˆ͹cֈ|]۲l bX?JD_SZ^sݯ$ 1-!^({ OWh:OL?Hxb[K#&_zE򫙏~!Nu=DX:;XE.mTo7ƃ@բō]VJ d$ ejއK^~kT'AB=^=Z6,c:puH.k۴Ǫ;DFp FBRLcѠl ҰrΕm z>>nD0 GRz6{r .L!W { fx(ݣc*7`ס⮌RpX [x!: `~,QQKs`5bqN5Z^퓞ݶq"a`pOrsp]'hd(&p.U+5vu/dg ;!a!H wd|aCP\xKANΠ9PidswW0,qvvğڤjкJvvh]jЍiBĉ ۾IA rT4Fo}Ba=Hlo z yr<@A <=DFd 3ΎmYL!$I&*! )>Ur6~Sr@..lHs~aўaO6s X*Q,ٴl& 9MNCE6:  !A9B1 dWpX $5.ZhV6Lj_@Br~ 1:Bm= H&-rXi9R#@ڤlCf`? " lݮI q0 HZ)Z#rrh CZZAlXmѩm[mq*ggB|Z]"Pv, G%@@ECm0iŅ''F;B=\RN's)8>Q}܀6 DBQ6&hV0~ʥk Ý3T#LXöL\r呤FH,skc88Ju (-+=SoJ*BXa>p Q^hvą7^|4Onn Y8 .b^̾]Ylja]_w.?vesMgئHHjjeU!&5o[eF%Wa2jW7| "L[ZJPJYldآ`brC~K0F/00PFlj :Hws10;-9-\ { \7X !eujۮ.ǰ\NяeW[-|V*Ԗ$_c %ƽ{;=Nr~a3r,TFS0ج@F6Ҝ0! K*RP :yRsYVN-_ݻ0o#/+su}&})*I9',)lkRB2ρ0 E-D&+ICdvZ  KEyO εJX:8tmhMAtZiפ[O3ui1QW86Mv89Bױ 3.%e^hI˞=IwYT\+kRpl&2#>IwtoTRcS#wn -m֚gpFA1(܄ 'R" f2B #=קhS`~g KD 6{bD~[&1mGsL̢2RdsS*tv+Ub_ ',T2G=ќSpwnOW3OB*bepRw#b2@]$3 u~f*~DBJ[g=ֽIzꝀ('zMDY6)N$i1TkNruQR#.Z]_z WʼˆXoDFyC XDSXgZncfvq&{ ԃ3nTu+0" s'+w rGZ斉,wEUvxJrniG7\-Ks ܳ)(A.R[v[]mErq%h`9Z٥e,͎s+Js _\ű01kfOCY^Z|`7..㽽߾?K$}dmy,---.>|D30Xy{rW09/_Ib N3o_FVI)nzj!{. ݀5![T h{Z Ht#810i!o^oG(fN6~*bne`WQo/b(ptYUx 0=oo]:!LWc8pgIELӅz/^6B4W==^{ɓǏؓ0=~Pq͍ly=-y)@|AMRF-?/ёk>%~^/v{1_$ c8Q5A8`Og\~;zxa0XA/$\"\ȺOV` \60L+ؗ)ߟ6; S#U~g_|cK0NJngl*WF9kA;6%k[?׷O!7ؠnKT? Ȼyq^-x` |ou?y={ A@Q|e(IENDB`pysiogame-1.30.811/images/memory/f_img5a.png0000644000175000017500000001517312201770071017546 0ustar tigertigerPNG  IHDR^PLTEG9]EuQQT_5~Y}^Uehzg_pX~vdsxr qg(m&w _%pA~'uf#v[)ty=k4{%o&v(rς zy+ %w%'~(K 7L'+,R; u/j5)**T%%IPN233@>1;;EGGWQĊMOFFVǿanZM[UVOPJԀޛܽ@j]ܧ$/skzMtѠUdl r\O{zhpШGdE*؂DrvWx_W^ԛzae[\:I:s3?xb X1k={{l69_@  ɱ] X_}žנ6@cU1/aV-F=h^jwZO!߳$~B-:T7"U3V# 3~A.$I IFOV{E;v_w+Kd^  IKVCb3LݱC)gaNE10EduQdu9% IIrYk74$X<KȘä c(~2ې8(L&=rw؄hDZX*WT,}XljZ,ϧ bO,kp[HbPdojX^8H`Pb4Fy DHHLrcUu,7b/~dck A F "߲ZElB1*#Po uReDkzXQ ܀k N#$bI: ILeDU!ƈ\@Z¸oJK*'~7zmOڄþF,a*1(hB!T0$K%J* ZL ldJo6*/ Ŗ.+5oռO cgpl#Bd* X6P X!g0u ^%U^K>jHxY)HB1Hb|Ì<1a1qIڀUAEHq8pAE$V˪ Ap?) $$$AF!6x ritLK>cl:PqY-ȷK"vRdK„BVsxkADYZʪvY:qPE%z sA ^Y~F lB3*|m( cʦWd qGY8H$=HX8G<.t_"ɠlzE"wF[\EM9 fT>@XJ$9n,v[{2~E 2MtV nt,..Xl"fQg"/JҴvIL6Y-||A6 =P$ ?#  xߚ6ֺxs:^M2%Y f\'_XBƢE)qB2}C9`$.ؗe6 昵XLfW0Qsk+`=L;8ݬH:,Z2ю H@i`0pG/ 벹!4@fM&PMWd?Eu)BItR8 bodv ] ![qy,6@ry e2*Y:X\v$z(0G)i" .70oS8Iw "ZwUOJҜAY$bm$ ud!w0I %H[jy)'_ :[&_ "qH ⬄ o puvU712Ku5]vZQPA ?/dl$AI6B Kc|_©Qˬ}ٶbl4n$D )W%H +E(POD͢۶EbpD~haoQRN@wKS0{,Vkܳ(wyp!v /ʗfEn"qX_dlʮ7 xrFBNnOy*T[݁ 7G)x'[ˮeQ3, YbϚdib;Yh[$lT](0%9`]lfb̤ǻay+̶zt A!V9]@J-Vq5ijn% LKcf _pkHRѰ.ADR)ؕ["USȼt֒AA@ų)p&N0$-HrՑ@Dy2JPM20buxQ|wa>c@ lbqyd4KB'UZy/QH(ltp\bk!;d3He)8r3;At"6 J0;eAҙ@R r WbkͷSv(m#vZwᾂjUG IIG`xY H[Da =QVGANm 3Mst-}mKhE._:~^윤ŎDh@ :"VZ&qGg3lfK~HӞ,rr{@$TA ΜY[@X:\ \103EY )*(CI_ S:zӏ (w:]@\^"H$R)0I*L>1==` @^z2/taA0i9qM%Dnr7*$NGۢT_ƣG==3] ٥˸j5ȁ7G~C H׻\G%bUESO}Þ0k a X\*Ci:B(,RP֏*G$?f{VVܸ9hDQP)$lP!Yċ[XF b$S{'(y5ף"ȣ0oG%0!37If h0D™&Dgu/¬ QfNJ{  lOpС,HmD3t$AHMƺ6=4$q9sN@GfVD󱵷>Q&:yh& GAWw&h&N {>G0NrXϢ,\<^YH%i NUA ۷Hrُ?~D A?U:( H9p~e[6">.0c#)Eex/y$a 7V!z9H̬ÐK(] @P`>Ȝ A*ݸ9QO7LP gIM&K0C7:>ގRp71 s<E'@~S׵T4@گZƟR ]HV@l@B_?&VI(fmȒm)Duܫp-"@=QQ8Q"H4Wϟ+_ !VJ7 VC`W'AF_<11:c!29d  RySޒ4X{/? hqq5R>|Ъs0uWWZ "Ż4 M9qL$OhfnZ[(,\%Sxm8>:NkXc]F^V妨J} ka=V4[zVtWZ:m/>49HKK`J`ƅ)>b1x{{?\J0~֚ Tk7խpajD-Zv>Yqhuq⵮4߶pd+5&~17iD2Y%fߨoӏL(a@n̵9 h h h h h h h h C[=~iIENDB`pysiogame-1.30.811/images/memory/m_img11b.png0000644000175000017500000000157212201770071017631 0ustar tigertigerPNG  IHDR6F PLTE %bKGDH pHYs B(xtIME NtIDAThڱ026&K.(p"(:J 0/36$'= ѝɦ}㑑"LC:E(B%T IXH |rdi@g_߬v&r}=,e9/_^(c"(ic& e doZaŌbkX˞.HS#kCzH/tmgl$iHHLDIm aГtc*VG#td$>-D=sV6J9If Il Ծ&mV%rMȐÀmBgm;B"@ CR!AB!"11)䀜109cr$$$G*LAI9E͉ L; 2ȗBX­c X=yl|;ǾQ]x08*YyԖ=K5!d/Àǥ>0'>I4ϻ;Z#+;2Z,,} :` U~_NeGζ; 2X= 郐~\~ORSy Z;K fV&ו# Sy[~=?s|Iu~WGaǔ;,IENDB`pysiogame-1.30.811/images/memory/m_img18a.png0000644000175000017500000001122312201770071017631 0ustar tigertigerPNG  IHDR_v0PLTE&'%453MOLmkl?b bKGDH pHYs B(xtIME ;3rIDATx[l\7c Ih d7Hdǀ q rВ5\ *A~ȃ[ȉU '" m(J!!ڡɶv!'J̜ˮϖVzo 8_(prryo6qlRb/}mog/7f\+8mQ*Ll`|lbmۇzaQM Ց!wq1䅛J)4;)9{;]r Ӵ^9Ӏ1\ V=BN $B③t`3g1ØQ!g0$ i~Fq@gs3qe+]]B(&$Ae0FƊ gX@FsGPh{2fMdc jz\ j^bGm4V1 G g3P9 Bٰ%2$&J"A#.wp`;(c&C&L;cL$MR[AnFfGBr<^$Jo:4jpsm G)ZUE#c2W$2d⅕l_i=ބO GU!5 &4,{ :2Fشr+{& {m{ b;{` 2bѽmnByXH h}IhSxq!*(NcQ\Q2P1VR< L sѢV+ĆKBށT߅pe)wd,d4vŲMpj!g!>TR҅YwqjAV<գ[ 3p]ޠ~І70oRS6K M:K'(k(T 7h:/^;\kpb=g0d!EExrs`C] )[5jjF\bgż~U_ ѱv+ Ćͮ2%ݎ#n 6|,BCLć J)\B\$å)3.fϊ/ 3|oL_D|"YUk. RvÍx&=2f; ì-,2pO&[Ƭ:!f$/X~Ye+JAwVލ<xVO J̧QU+cX]I(dL\&ڟ[e!$T]'c`!Ga)1| ˳r$.,qkEb.6[:PpR>O@V[(]]z%ܥ@2;X#;QFkp”M|W8V\lPQ'͖C!gDˏ-3w%k.]8c$+;x*Dn}% xX} 2 ].9Gh=tO:P vmAZb"[ dkd4rC(]P\/{ R" l_D[]0}K=xyJMDg ǟm$BM%Z|K͇Uȷ1 !X!;KB CE5zk YI`:O=+`0 rYi[$Koڞ|"bSCc':5YOJI Z!.ư?`WL"2+}L?s=Gp=Ϡ ꈢ-E)p8GA֎5m%k;iL ^:ʂhhE![KJ @iP_ Ie=c , $Q6S^SƷor~gUņGW-8B_:դ))PŎQ2y+bDD UB]E6 EA9!2?r6q薩O"RٱzH&@NK7zQi*ބ\?M1 fX+l}9{هc_$!^1A\߳0ͣA.J@M^C@U9 ?VU$[KwF_: ^I!^?cAZ?r),#2=^T$pn08#m[KzDw> ,y1 :F@B )Ͷ> (90Q) {UEf[Pr>ܫ%FM\Q.\L%1pSbu\ԋ+X2KHc4K)qHÆ;%2wwrH ~Mg\Y=nm|Mu'qBl,4F!,Lws(Xapx".8iaQvفX$zޭ+W) @DhV T&1e(3I찬=ed_i G_~놤| CvLRxsR3[p(kn/.rZG`뒱"'-v =[݁߄6! 7  Gtme|[LH-ܥ cz^Q O6/d䓱rg4Ӏk+$/ϡݫKtgZV(=e'C!q:- %e`pU!~"2ۻawO#kbʞ,8KC D`S!JT! I(Im,n%+Lxjb'&q8_?HU^  VЩ䇘I_Q-fk$raHq2E8,Ы+MBÚu $ ijoH0+\Ff\D@ B/cU㫡:ﺈs:M3'Q#zKfL{cʕTƲ{fuDqgPc<fUDiQbȻBjq^V1Sbu^mXU"bCLZ[m|Uҡ7Kd+Sh@&p1E؏BNnFڵɌkI3Mbi.IT0hA@-f}:?-}s?>VIr~f/~jS廷V4sl(%_=@\IENDB`pysiogame-1.30.811/images/memory/n_img14a.png0000644000175000017500000000663412201770071017640 0ustar tigertigerPNG  IHDR^`PLTE) Q6?+)@R01353258-.WSbhGcbXXjvuzzkjE٢u˘꿿׾3}bKGDH pHYs B(xtIME 2O3& IDATx $:-ay~@@l+:?Y A2H $d A2H $d A2H $d A2H $d Axʪ_(PQ4BlM3L VvU|>ny)` B Ruワ[ʺ,f*@3"00n[ ~O_Vw Dfѷⱐ;Aƒ/?]v4wg @XP3vc9Sy,2t5@K1 )xuf,2>_bq*LM \Dҭ, bbJl8G@^~]˸l8V.lR-n#k=j% 7"ȥ[4[ „B=4aE[L}[tXG RT cN Wey3 UZoG-@ Ћ}F,q"I*KmQ]yW$Z! pb}2=X_)HBut-W5쇊ߔL*W9F2r:U1 B!8b 1n7nsŽCƕsfQguKL(D!  ooc BSj)Ӈ 2- 6*A_r>wu1sAaDQNhixFyD$@o?7|[aǨq/#/*-2b^H)U2 J"{G@Yb1\4#v 2V5[m#4cW\V"ǧ #OM&/@D1%);kX2FB'I#j|ٗP*]ip "q^eiݝM㩰񓻱~ jgpͤqg0}t=\XѻApA@VDɽ5Eo$ :HiR_~e&YD-]I-NJ A7}49 $R{_{V|Df>tNc/0@dJ- r~׈7#J }YuݭǪDnMF%rc {A*1.Ql= Ǝ#Xqiq6١aAJo),Jq{&ݤ)0/g Zdqt+H5|Dg o),F|,\AZ䟀t~e0mV-E|0daD E@t>ś(ҴF^"Z|&jh< ~7;seRk^u_*^._Ķ@9HiIY֫9VzI 2*]; ݥEVo:G{0v]Pf ̇ HoGQ'ahQJx H ~ 'Sf)x^iSAY{ě=M9 rvH$dE%6B$A}m @/_/|-&! l@?oz^v$}faM57=0 N~ǀ,3Tm].jySϿSO.g!1bdz3WZi aOgA&fo A2H $d A2H $d A2H $d A2H $d AZj&\UIENDB`pysiogame-1.30.811/images/memory/m_img19a.png0000644000175000017500000000563212201770071017641 0ustar tigertigerPNG  IHDR_vPLTE0Q/xD!{|z} rbKGDH pHYs B(xtIME )9Sv IDATxr$[,=ENUfbfSo*~K# 2(Ωs"qB§Ap|A _=y 0s wrM!(73 r`$&1CL ʐ)p[ B^<1 5!/1TpEH!^ r1(+AN,Ɛ|dy/: C dGf^2/(?c8eBv46<('O׎y.G3 *iW cL#@PpιJT'CN1pp\F8Mbng [u%] JI&q45)J6)bTi1I$(a[!6r$QԴ׾СRDkl%-BNBK< Pq*B! -VIIF EI! f+*H$C'qi0 9E!\mM8LptҐMDBqéϚaH9Ҋ.q.XJw* ďnZ6)0SwƸ y[ݫ- ~PP*Vcvv=jkSz:r+yzaw)0{ޜ+EBU`)P[5b"HCJ8/Bt_%9xK3/2lt$I(I{=:<8,L5NC .=9ap9oۨޘ4|`[-|?t̮*  HN{ )Dm'e_2a# BC(>L<)hXP·7_ +N?% 9g/O'nqX(*ׄ+cG{Fqqh*e(v^ S- 4;V RɏxPXޮc11Ns #+ALRhf6p6u*5¬~Sg$2,MF?hM  Gn^UM]A[.rBT8M $\՗nd.o{s1T\sVt8'k4KӲ ?8gpTH:J*4 W% ;Rs[,Sg5p"|@Њj.0U+)ٔ*͕(ӠNw* 6}B#~$ͺR4M!Yp]$(eBB @-BLtQ,O B&JWcLWni>΁r5f5NH  :$T!v i)?y\ 1M+iųUU7Z-&=[ ᷩw gK[,s³&χ l? yKD_%HLDEςg! EQuތ< "[UkQ]-.rʃ4Wy" .TقLNg/ GQ0 %`Oy.:ckϔlh#oCQz) T_Y%[{ވuj8wۡ~9ib.0w0CH%TJ)݇wneF+ Q+Wè_0]%!xF2W&uvFm.=@Ʒφ}aUijԊ'}̽ qbKGDH pHYs B(xtIME  gc$ IDATxmh`74АZ"WEVϥN"m]d3ʇ|H,9iQA`l$[&– o-1gc5HrR-rw:el$I;(B'$?L&'6d'seoqV7 s9Xu!}s:8 u[纃]I ;cQr blZ#CHm Xe){kŪ@vzBjTgtk h&}fk5MvuHD,ieWߢ R #-Iǥ4p~_ 4w.feJGCt6$A)j:;Wyޕ?nrT3J;٩Mphٌ$J):͇w۶ɆllK{g#^ې\h-fDu$wqmG32V[!v!;3Ţ]E1^-E[džE($H `*$'փx<>N~"{]xM}$GddpO TO:`|H G̾NN~!k# p7ĹTr*ۄQr>qĻ,\lnDtԇʑٖV Iѿdwۂl]):A:bdȱ= ?Hx0~ruȐ ^#r9| *'O."}7/.^^[Yr2q`ZQ kxg@`mA)f׉;dDUPw_QA@ Z1h}6Gw();>2SFaE8ꁮ!~;EHFt͓ǐÉ0GH:|dGiea`ėM@S !wr$2.C2LqlmoH7>riV}R@ޓ1rxl c;CY3Ӗ!d[D28HSp`8K w㿊6MWd]e> Q(S}>7q/> (tN]Ġ\5KW+8/}ub Q "v͂o_N('/QojQ3m4j7X|xhT jI+K-`!*0VȄaޞPoSA.M}n^cC8gd-ϢV'`=e+Z !dq4,{NhFʼc -GCHv( x㍣!4~N `v##:vɹ +]Ō[GuyEN!}1hy"$P^Ö?JiB|!ѦTGL,^(/Б|ygܑT(nl> y(+5W߼~QA~@,AZٺRTï)c|0bT0|"?b15s Gg*^KIj)#u @ @G= |\9)q^B }2=dWo ("Sk 30?ރ-" @ݻ a[ʵHSgJzYlQ\[+҇$ YJpӈ>Er0QBr cœޞ :%Gv,!Qw,6x_47~~ H k@(5 نiAfX^jf@Iq݅~0 ZEM!ؽxmA" $Ƈ^5s{ g͎UXǪCĵ䌛@Bzn[Iښ"V<ػ (zK<Hd;⥪H+v ̸0m܆R}Kx@>taADw,-f x !ɇ@B`}!1Z[ҕY|l-p+s#% ;w;ӗI-BJR "iSn؇,u a~iD19?)B>R NE!ǘJέׇ2Cց("ܺkBXݲɎ< &Wy&@\-RR?8© V@> aqU@v)0u4r4I%qݟ^ +!mdH(,doKPi R,B5 RHpIH*D G4~-XRAtkzPVV)xA@1y+@tP)G"$`-KWsbP+Ї ˗@pA4 Is<XKF諒(yl5E0D2^ E$  FY*H$HC_f&F! 7TJ+(AGUS%}i7/4A,ܒ,USQ棢| T,{ Yp瑾B$C*%'.QwSd/hpwB+$ GȿP41? @óLJI[K3݄lNWI{oU:`&ش-y1Fٹ %Qڈi~ɄKrJT(D;a\b]m@ Q`p4ad H3v@V+c}IՓUʸ`jpF{g‚(^4pR#&A+A#:BIBk&) QH(t!ādb+)C.e@8%6NC +@)^BwVy#T %Zf*2)J3@GL<;>2'kvHcyoNCƐ@`ىKydؾ- K'V_r*T?zR oՁ0L=k bJiJ0ǻbJI@fV xe:/J%q$d'~шް>G!9,߈8}ǧp8 y 0ľ-de!4&$Q_(OM:'! =Lg.y-Aθӻ1MILboaș!77}Cxo7)$kr?2VڬqIpf:A̧BzT{?ӟj7WQ}rRYY"d s4N4NyRIw@IW Z*$Tx4}AtCQ g]؟dO/i:vΤ /ߚk'9SUo m v9DxcHORXbk~ܐ-W<Ű7Xދr RV5w4`-vd۔CT-U gLZKYEfkבU֨2܈ָ?fhfٚ*&O5neS1'*w& njqC[cF |*rsSHТ[8yIvsf:kݤ{8lK9ow*7iN-w(=KSF&u>O!A~ڞ-k{1@^ X[-p z?OR+BzYkktX\"7s y$(rO*mL9-;'P.@,jjr,ȓ 2YF?%u!@!H#yRP#jȱ,z0u 7fh@ ?EFDHG?>)% gEV4.5ohe?6u> r subӪ.^)^U )7J]&v!y 9e+a@W Cu>A-ۍ_2$><;0G) _܏d'gϊۀ|/(?ޭ|UxQΗӂcǜ_s2T~-ſH 1`4\B>ΎcQ'PF~{4Tf;7vFQ2e#l;7wjr$?n0iHnj3 fo<XӽW x R5 rwaDK-,+Wفb#ٟ=x Ņvr6J7?ݞmM;3r9{OsB3At/36o,z pc?1ݙy;K>D`/[9ȭ8tQcU ^͓4#KkߏYle 0O1hv87.}!բ)ϳ /2oβJy_/4G}NKwA[: (c&DNLޗS!  K瀱a5u5Pb' f;ԙNo#$ŧp%FOWg<(9wv#AN 6Z9CzTp-J!x ہ1.wCC5TP<ݧj 6Os.4O| d0qai_Zu5L+-뜍1 T e 4!f"7 q PM34D`Bh=pXlCaIj JkfjPOGx VgdbE?/E%eJtC1s62/G|YT3USBF E Z9~[Uj>R;Z!F ҩC.6 `Ȫt\eA)裻\ &lDh`=G²'r E:[™Ea˜W*Uo-먢%?VEqEP͹Y@GV\;IʜQ/ukB0\Aҥ{nQzhMmn'):˼ wWܦ YܬfD{uKCJ Un`ʷ teEߋ9*8"08=Eހxr G@ UVrM9!F֓2InRӰj6ڭy翲Wd"*k~ %O:~&bMh+.\+?.;vThW;k6NK!q5#vb+}Fl32m r#;ΓKvY"* ZkkLucc' x`iVaRVZ:^,Uyg=fN܅c,RNeD/W@zlzBrxyIg) XػcAg4"KvTI^,#ZuO]9 oSV93(Wv`{cBsX18&+fX ? #Vme$CGKKlIT J G}z|HOM鸁SFrZȋsCmνuB"u :Z2^ν!K#X.:~RKcCv;n_m᝹;=6&HinhgTeؐϢI- aۢ p&16DsQcA*L8S1sm!7c(^[*q*A731WVBаB~37fqAZs&’,!T 88w|xV61]M!jpEsm|/ %3anEj܆S0zV>'O`듍˟ #o/ijz>B]8?yWշ[շy} z y m 6 0IENDB`pysiogame-1.30.811/images/memory/n_img10a.png0000644000175000017500000000664712201770071017640 0ustar tigertigerPNG  IHDR^PLTEFVTjfkpq vz x#|,# 5=J Zj.a#|6!=RͅAZПrִۀݩ޼)bKGDH pHYs B(xtIME 0#ͥ mIDATx흋vڸ[10 BPZ}:ڲ,YؘYٳV'q?-͗ Ѡ*r=wʈD4UoMwu V0 %R1K$8e{ic?&Yt mA#T(Wjh_4TȮ [aI'6LJ,eAFf}|禹 +ŘyF"Xa+ Y:; /o6DDj(Yh5P9~>U"W~nLUXaO`5;Mhah{[ }F>0I@Rtb # Kq4+LP wo (E{lvC :Ҭg(u,,r%tRTOz$D^dBY!f(2R6;(Bd ݹ82I dP5,9YJ(SYaLJzU Hd#|+.)vt4WEjL=D곅*9LAd+:yOG%Pp`ngR3,1BAHOب+Sfn3؊)Ƀm Lckm~"_f`x9D(X [Z~|{CjN|T C>~ t q4f28 pn_Hw -&H1q$c5)8|gÃI,}̂n@plBt& 29Q36D7ԴCStR@A9RqXBЇOI@]i?G݄A6i CbvHI.q9Ycc:@Jr AS'm#7'OF q10:ͨm rotIJ]c~ Oy16gOv2KC(jǎjϝ)V d+j1Q .%<вO,;pT, /װ o PV-{Kd[w B#-vT#[Mi ZV*]d!0Dvה K EB(u,{" 71 -R [ Kz<@~A#n?17ϬxI!c˩XIj'  SS&/l+ 2BXf5rtڴ8s NWD G)>fWKd˚bN]W0Q "y]+=%$2t}4(hJ*)  @?LDGhҖ] d=}^y G?% F* ] S\oYcz?~H(Xv5s ? M A*n<K"4$KD~qZu+\H%`(#eWݜY?|zGi2~}:%xBT,ߪhJPq +$bK۷đq:B ?"8}Z(%`F(:N+,+1? q"V%dӽ ̂d!5b Kh&TE d%RlM]t/;G;~qn:68is m`Ү9*S9{Yݭo&Ι?ݼ~A`{AIC̬ɦӽIBO{}Baq٣I,zeV;TZpUgv.%~&gO5\^WTŲ_媄IL,.Yg=Z袊{آtsył2Ш p@ы6?h38} ^Vzpi&YBQ׻f=kpF^kV=_"J mGEt:˟eTޯIFk4_3:ǢXn[/nv 8L(Y[$b>do]8L8q*NF -D@! J6 +攅L;)Xr,M@ؽUۀp$B@z o”, {=QY gEA*N |@FdEܾ* UDHFVq7H6AVX[" gveg7 =8 **p6A]8AZ4A1O}= |?GldǍ2*Z4A9T3 @Tn |Edw3^~c" H33|$MKѲf};d@y5Ȍ/uH. 19(Z@$ ?=5uI;~͇2 Ҏ9ۃK@܌1wL_~:^gd+deI̕\G,I-LR E7Q)⎽Z FA$ҡy<~T[eO +糲eOñ;Pqq:%8= %diB|nA8w;EvH:= q˷1/ ߲ !ǡ76XChXjMdg?лcH((@f q<?? MD"7 >SbT@>HdO1ɗ!mD# CzO 7kXӴ\> ~Djix(&>o X.m6L&h@Knr\,6M+IS/{'IENDB`pysiogame-1.30.811/images/memory/f_img20a.png0000644000175000017500000002112412201770071017614 0ustar tigertigerPNG  IHDR^PLTE;DMTaS[[lfwKpY zg ZE} a   F'    <.g w   b+;: 4?F; !p++%$$!"/H&&#$" (P%)!$*R%")'-,!,T(V()--|;:02,Z-.)*472Z ((530]32/.+/-a3`|DD7826<:542/<=2fOQ__XWSRCTy-VVXUQR?YyLLȨNJR9*xD#QՊ#%:Դ)!jPJ┶(z4$sZ{H2$7q>= W:33+;fR,srLM 2A {kސi>,VS:X8jr JLL|B@̿JLa{kM&*_d+"99{XP2v߫*ʍRΟWW ,KƟYĹy F=xFD%EX"2KߛKg&l-e +\] ,aqrs² $ 7_V1{P%سO)S/S\5ჷ'4 [2bw)^ʆ", 8&JY@sT<(H1J "#ݚ5DXEAJ̤o$,[XHv^#Όⲫp\XYF=5p|~ܹ+;{1}-9,yᾧv(1 ECxJp,-v1OP%wA;qHR>:2Y8~p"LKa.Tqbe}k![ 7U!Ph(l xa0VC{6E`Gڜ+T9?1< a# p𡞉bLòb1Г_Ӕa.H,p;~[0f6tKNrrHю] \=)cV,Zf}l))9ۄ$Zsa&K`G* 0pY2KUUؚ)&x2Mü-+;⠞E=;M&fG u =)ZZYGSe[bSKv3xRB֏&L&9ja0Gf+?q{8'B>-e"e^wr 1e*Nge֋]VRKk:ܢkE`nM9 gglXPpVq? m\c\'RϪ r 0==(9f 9U&)4ç)vzAJ(\ur,l(2ޒ̇ȹ&5|5! 5{a?\r=L'_yN)nC~@ZQgˤ}T5u%_K%Whx„B>D /2RTPEPuOVZ_sqΩxhװx b 7;gVLM-4eHߴZtWv61د]_ѬMڄI}Pױoz%2&pM%8Dْw[sGV Qx 3o:}'Jrd%ȝh V~rCM&Dh5tɛMͮd}⸦wX19P戙>Y1:EJ,+u._N7PŽK Kq8 c@aټc?  1hk @?(.X 8vӧO9}/d@|ȴZi 3׊Yv2V c~ 0p™Sx{=&\+~W.=TrXv].d9xAO?o^^O#,t`N`ϜX]Մ9I ~믗d t^||@?IZީ: `u}#A0a5#uؿB.+ gɒf yq҅ڥih\+mB` x ~y0I̠((>]);W^w0iǰًW\cN%|ԑ}[?{\~؋)HrօIz!s4AGٳ/^I^^GAr$5uV/O:F' VSzu!71 ;u;$@r$?|!PDb4ji̭b}N+uM WNJ r]n=gǞދ^FQm#)s'^~2a}BIFA.HUb̰c.x%QٻkӪEI;,G{ z#IN͟ۻvAZ @p 6v:HVmy_[#0B!IyИ]c>Nv}, KÆ?}:HV00 80"s!$IcFzgDe4bd[ப 8c@0_b,w$u>Qoh::ڀ ƭB U(l-_}n@p [AĽĄI>ڶ $G9%BjXj0tQ!&KuH(nVFz"G#r$Ѷ}Pr?vЗvnڸ|ь18Լ4m!AAA*&?MeOe Y^amv'H-۰aV;t)8%|OݪEVJ:~~/J2ޯU USҥK\7L'HE o_rԙc^Ő0[ky5T2GXXDLLZc=Y"ȋZ%x<[س""bt%-[!J޻wC{>ݸ4b }#o6Z(5tцk<3t\kYV ٥oߑ#G IKld;`f6+Y0}#vkCh WMax 3 ŀ(UI\FٵkNX~ꌙ>'9|X8"ceǎu+W,>ek}bfh_d!gwkC%>11}mȉd `@I>(_VJTu9p`OV?(\}E07jxkRZ%Pd͚5:iСO@G:@|7hŲS&;JJbÙ=ܠ,:5uL5\C'K^Y(Yz͚M}ҒF 3QQB `9FUeMw/wOZ DM2A0c㳁ٽ}6ݺu{yRfzjh~X4iĈ_q0%h?]8 my}yx^;=Pt4.V/*cf,0M~ DYd5@ǴiG 3*қ*pǗvp0~ m`'l C7d3+; 4D!j(=z4JX[jrb,Z:uĎӠ*fA*lݰl m)}QPtȑ(*Fch$!!rHVۦJdڴY t0_NmcZ'B.\%l$^>w{DR2fM 8CPeZؿ1 _QKvk ۜ(Z B {i݇!$D ԩgO0$Iiii0:1h8bb]׭B$.|̙SG~$zIv [|r=I܆=6vM( Sg/%:.C5I$%G2 YBFG!̹0ʉѶ-,!u.:i@! * lkI1u Aľ%6=#|YU`5c-FݹWc=zZg; xnw-#! 8;t :2Non @޵i$uι!Թ溝~/) 3=YP^K@2[(ZݴjբT;H˕QRO IKݨN k= æ <*#"U?!$V"ۋF(#+FEEF}X8֋G}AEcѱ ;3f_x\!:݂`;6J}B&2Rm ?սꈗU$ (!?_oߟ}VN*}\Db ^`y߲ 8tQ S* 5V'ewV#lc;wJ%%M:c(HȲd5Ȗfyلhh[-N b ?~&Dx"1rDj.RSgB(1!N%Hl"U; J2+ﲲX 5d!1m(QBmHgD1}$;E2WYKiTe~\S)%!B@E:%bG S Na rH^xvtwաƉ$RRY;d9ҭ ѣgMUiiiIII3f̛.C73;-z-&Ik=P-T:4i$ry!} /-U.%#up`%P«ؒ&&9zѹM9!zxXkR]N%Ic X|oO^mX-)Xg3 (@쫦x~Ǽ5:v.ovݕZ)D i$aG,ȈX< }0q` Nl`]"CR;Cʮ@SNz׆HUd"] zjNO>'=6;w`ϊub/ 5pJCDlE~,Ig]>?𹧞Aeth 5 N,!iQDP qҷz!*ԞtZŎ93oR~]aGza+^G&pAh$-W/:guƞմƐ;{hs:y2IZrw$jح(+ IPAl :ΝV-@{ Eq; Pa-%طR=}2A/Q5>Z6Q| B2/5e+*1d5 g;Fw08iaܹ|DY&Q#hE8S01XUφy1[>NBT\"Q е5ΥTm]!*4,,Ţy~]x QVҹ"o C5R|{BAҼ;bfp#kqS8. Ҹ1.ߵ>DVs1}Db@jq"As9^"ʼn~jmok)> NB QD{avl 􃜆A"u0SH +YI(fv8__JYAR(d8k- ,fV^ozwZ^sR$ UZ f^z|5v]| "9\r=EhT*C]D8 Szӻ ƅSHFīoO<%*eA,>yR@W 1;5yĈ$ÛyӴmg#QXcmCa&j";tEp!J ڀe=%1cQXmGn[/xMĢ f^ͻχd45!* 粷wSAʯ  ճNՎTvz< )/{R0!ju*X1FsEAq½Tj}k7WkoYBl.VU2Ͻhy?[,>5AP|Apm*0>i o/`x򿶹.U}h~Yޣk~O5~hB2<0^_qۮ=6wk!Ri4@ Hi4@ H#( 9~IENDB`pysiogame-1.30.811/images/memory/n_img13a.png0000644000175000017500000000760112201770071017632 0ustar tigertigerPNG  IHDR^PLTE.&,6UC>H@Q(*ahFxg$hVWnrw}6{7ǡ4UԬʯCdDZTt ѿrƋƗŀ ϗի%4>Oܳ^wiDjbKGDH pHYs B(xtIME 2OGIDATx WH}t`" $8&$m5m5TgwO3/8?#b@ 1 Āb@ 1 Āb@ 1 Āb@ 1 Āb@2ݨo9Ûb5&p0HR v8Kbt/]M ( HA Jddݍ,۲Y b,ˉ?I!dQ|1Ȱ!^XwyueyB4/e bEvo_²Bl(x "|!p8OΎgߖe),U0`1+A( _"ӳcW˻gY%įd1r^*G$b0) 4r@: m,E`x\5B8 :hZn|vٮDZ,I%P 9~a,eٗo_L˳Pr Uiӏ jPIEa0JOO+6[ҵʴ2cQͮ!Hs $0OrR-׵F;EKV xA>|rCAI #q`YCXA̺,GV]\1;<JtGmC#%cNN>(RI/B#OLʨa!msvJ/_sP8:B45'R'(Am me]) ?ƲKI\Rl@XғJ#||xȜ9 "yQslʳʺ|U*vIUg+V4TQU"|;He]MAGeT!:[SIPsIeB<ϵtRWsx=Iqf4|n-Bƹ& 1.]AeUFU$(9a?EF\d~ό d䝹GT9. baz_8 tsYLg FYlT2,҈kgRQ$Rpe(@"حDDGrtp1T=A-~3IZIm )8&>P VpF.H@ v+\ii fu$]0mn ĹS0 h9$E77@x YO#TMީGGELK+@޾[ [1d%cڶ.SHdN ?οڥ}饑EXZU>!W\I oonNM9 iϜ7-9`|3@n QeGgWxHwU&"bMcy΅HwMlYXn0-_PE6q" iUĵF}o?$ƥ@VwS*xdiiGgPY|/OrkĊ)#y!+˨4tMWϬ|jXf&:Hi1{urc49N񻁈}U}.jOD!OAaU.oqi7~{[4bnnuT-|зac7VЅGA9&̎ -{軀<[ dVNfy%]6%؁cwnw=w-K5??_iٽ'n uTKԬt uiX5'1حfUmʧm3bQͷ175@P+AϞ,;ݲҏꘫ 3 D::#7WH gO DݲkF:yvUb^TQ hվMP&v$Rdp/E/h.D@0 Ly'.fk_ʴvS-)Y8#ý@-; Zi$[8SҎhuɍCU 7'|U.!R4"~k;VGMq$x]F(+H}0X)dD>P}@R틌〞PiWD ndN d? Fb7@ܪ}ŁxWP"ƁHpe˾oCdlP[e&p vˊ]r r¶"2d!-}Ȼau YeWDѷX݌K8ivrqQ^r B1#*a=W!8e9(ӋU!nTEUDϑAu}eZpWLZ|}@j"_18fYNxs{,*-QX8.RLAAz 6. ` !jZh ck7 b4ԓΉ>ȦrӚ*uM&դ?A Y=6Ϲ)#s0_f>02A=xo q(&SBȬ _Nox3D$dMH}V@j}0 n+-P3ǻsLDnf-bAIW _F?/vɀ 7%<߿َ ē+ |UoF%0Ŷ:}~ N[%9JyiEPНGW|% |. ٯqYRسHX vD=ƫ'=-hA3loZc#y,N~ M L4u wZodDA ~)}k[mF.Uwq[A@J$hA '$4 ":X%aE2 I)/R4AVK -r֍bIZQ 1 Āb@ 1 Āb@ 1 Āb@ 1 Āb@ 9 w_̉gIENDB`pysiogame-1.30.811/images/memory/m_img13b.png0000644000175000017500000000171712201770071017634 0ustar tigertigerPNG  IHDR6F PLTEwMbKGDH pHYs B(xtIME yIIDATh=r@14#pm&*#$mGQICA!e%X}ي6nY-{!???|sw3'7=Pc^L R*B?@^Rd#?H<4I=XF-È0 bz^[X'*A~Z׿QJ@Kq=3EA7t7;A# $H`#=#'8YYHB2A RHdG|$0xN:?I5IOV$H'K~Јr11@NXQHBV )$RHE!B YB! ԋ׋Jz'tBv4OmCȀ\c-\*r"=+2@ C,Y׹1SmqvPeT2@02ʤ$=sI!&-H _,g˕/ً.J ҷ/|X/ ?ZVs?Ӂvn݅=LٛS/'$Fdɦ7ce %#-1m^h! .}}E{MғQs&y*#ّ9 ʟjƑZO}!ǶxA-g㽳тu5#<~"|91IˉIZsO“ [+cQUO}\ n\ ˳^>vG-ֱ FSOyk~jžI d,L=EA%BaCV/5He&\0yV䲬d4?c33 Xm0 |#pxʟqlo_Թ}D^Z{IENDB`pysiogame-1.30.811/images/memory/m_img9a.png0000644000175000017500000000742212201770071017557 0ustar tigertigerPNG  IHDR_vPLTE,02HMQels:cbKGDH pHYs B(xtIME ;&5JzIDATx\KWFz48;cdSaw;t+hIgk'`v$μoR%JffN4u| rw`'ao}vN}H]|?b,(w{aKkbhkћy@ށ>ІE'#Zak[0Ɵ(tS?mAB-Xk Zl 2ш]6=.-Ok bw  H^o_m@i2En_orBjr > |/u _"; @>(H7Xq<D Q"m*З]$/iȯ1\"٬aM:?M;'taP+g|c96#K#BRqcc) IH#)p'r6CjM1&9{fL^v msJ~s{\Y2UY/7(Tqra2*kzVJL%:ʛRv#0Ǩ҉=*!j0C$z@R {̢j ?<tQ _O-Gcp,5uZ&o8}IJ2%WbLA;h$hO Ek$z'w!4 #6q-\>}09{b&g'%4,YH\*k\/gҳ Q"fc=2ls 03C%ҏo*An9J[`N{ d A$ls+eG#RғpF>P0E+FLH©HYBG6AYL?~L5 dDfB4y8H ,HSrguTcP Kj${G5(ba$pG+Taς'lTRPO%+C˞yL -w.-$pvSlTӤ;>?FQ!6b Ǭ":?ŒE>Or4CG͋ W%X\`[ wa8%AuMw(-KpO$iܹEjdADQWopqhNzn[ߞmoXVa @. E0>^[},oT !Lq=BOeAn0MmSQ<ЖֶcMq%ltG %e<ΰsBjT]\2~19jT$ 2|h@oJTXX6ӖX l0 j oӖe=m(o }s'?(3VrF0?Nk 1ɢQ2`_9P2RRՋG(|2ǴXzƅ:%d1; 2MkKN@W̖[RU2RR?r浫 GJnqh.QSy4Dk3IU5?ULW0(~l8Tu4ȋY+/Cl8&i@ :VaX@HNu f1^%Ѹ2ym%=h6K[BKZh2K4Uu<8e8(JR * oMEe ZY5 NAuuÆ N bӀh >J;2? "]MlXnN0ԞgFx!-Ц\C M7/s̷׺ɵ{NPMU2߅i[w 11:yMM/oQQgշ_BZ,+n2.z_áX6u>:ARu)Z;xȃ^#/|tx.`]TK[4Iw/<FƉ1zeN]w_pr}S۰ ^ dSL}iނw媻($/LL@tŽKLOB9^-c;([RurAjL!~4rI/~a* WyajsʃA)]΀ z7SM8N@{p6腊wFF;sS2jC:j;xY>yHt{[͂mm+mz5T~ηoB&i6"Z6OKO} o߯IENDB`pysiogame-1.30.811/images/memory/v_img22a.png0000644000175000017500000003413312201770071017642 0ustar tigertigerPNG  IHDR^qPLTErkvbKGDH pHYs B(xtIME ;0jtL IDATx흉_ȶ7w񾯲%ٲ] o!!`u'䯟SN3fRI@>u_UI;F؟߯oß}86 /'q=džo {c s7~zppc>n}n/c#;;vzv~{ۿ{߱[> ^=6v NGc/>}'8~t;~c7}=4*OW=dž~rz8<6<!}o}z48zwz7".@yӭNN܈Y'qzpr3>}qcOz]%Sˇ]oG{X4G^PmNu=uZ "6)E!<}W<O"x,CDea}v?,@ 5l/8@ 7|ER['f{\OţB;GYcӔWFs qzf ^ pK$Wḓn?G?=dGهk' 't_/דVj;;{qb&IQKn?^vY&y` YgߒYHk5IV0P^:Oz|E >$6k[خ@C Q ǒD:zx}dVᯊ=-a%1!rL"=AHzulGwᝡJREh, Gurq*:{ TY]hrD&Ofӎq,Q$T"Wa2Y"JLR=0%2#$)\6l";ɢ\]&EEa3bYʆ"{t{c4qe-Hl2fѨ[ݓ\8b:Vj\h-Kij K%,69i͓ʃhOGC1\XfĠfrzcxB>ͤS "$T+振h dg}m@TE 𩷩)Tf 1K DN_]͝>]C$쇃kcwWwPR#2d9`D 8Xcα*##fKl_f$<$Zp@@(,77w__{t gSTq1H2MީU-TlI ɋ"iB r7IyI5eESR=?z79ɢ4X.Tt\L%]5:w\G ԂcFaNH$6I _$'): >V3m٪cw)Ϥ\o/Ѝ T-VjHlPh >`K1JY= i "0!ڎ&.4gffjZhgwǏ=w@ lz"Y*o%.UYîU ݰl%prZBf SZ%Zd$QtV S3lZxb/1A$BjRd<'Bޗ@IQ ^f6H׍׏Wˎr dv/`Es`lC!հT6+jvXuOW-G](Vvs ]\Ȥ \DDVCO:>6=C ,%UTUQtS-@Y! 9]iGAi2ox^ϓKr rDaDe6VMi== Hl²Rä "ZUcK$ -XX8|ErIQv9 _nqvs@NQ'IFѰ1馩ܒu]l؂Ǫ$Ea"+8Y=—ˉ Cr%uJ)E!ãgN)nF@W0iA>\è8Y⍚8aKYOaƛX@%k&duJPVU6퇑5+2%w֏?1?L5B- X4 *nvlv RnDT}Kp4/0QB^'W wʃһX>|/n(N!HvY .pt ӁK3 'IZՙ`稚ȣ@+Ѭ riIrlxj5$C+R'}_}={מf=u "l@B y*P2'Rq8mnd^3U6H"{I.@r7+TYr"p)%E) .w?|9vvyp!]m<^L5k݋?wWWm*buʔ*8,[UX)7~$KC ]zN|{@V% %I$>Np%h\5  1VZC,*$I1py(Fǃ|rӈ#؇)Vo<O䠀CM8ͩLa8MSq[gǔ;:,Ujm)TzyI&oɒȕ! 8L(AY|^-49]%"cyVVuShզYi7j]teL]wLA-c#dH$}Eݔ%^@~G:>>ZQ(W*S10Leʱ@_R)3nR,a5py%ERBSD{a}g=4{]qY4ڬ+jf*ҲvmeZoBoikwј $k BPVHVq]KBƩ()2 T$[kysp754R% E`ZȂ>rvWJ5h0Td8AAgEm:mn e7ZEܜ j(C+G' à3OHĆe4;ݩ`@F$iA ÓtL$e3A@2$0S>eX$TU8Yv2P |j"BmASYߙy >Rg?fpT{3Ԥv%)u0 ,Q\z="!lUS+{|ydI[B0lDA֚&HVԌL-D^k6*eV*"hW $J@P#EBU;+u1Q]t9P2T{tQ2ۖիզTk)KflǗ4!0eҜ#[n c k<wJ auBĂkTә;uf5EdJE\xU !%w)S J Cr1[\h^,CКf5Ur5w۽edJ iQ$% s7vZ$ؙj쮎AMJs,%/Ad4cCI/dN՚j55C*.0.LҴMEҒ nq.]5nZ]Vd'v㏇nʚPdB0X.-Uhbh(5 ;jvjԡm*C%9_{` + -&UhHh3n3=ݟAV)JZ*4bx=~Ə\V*L`r\T0#:b MeҚp yZ{ |E5&3ݞi36ZRU<G<,gto صÝ|yw4 b2Y,2O];M@ Zhơ(lT \<0>URц*2ħnwzjٱ- iW)JW,ט[Y>wc7h^CRh57 n]WyM$4"$KVT0@9XDm}Iv-ѐynJJ+1ꇝ`܍ҿAQ"ɤT.f+ zݟ]j6L5u@l ,W 0ڠEUm96z3^t 3̚-YMZ/m^zv}n/+-e2 D$%!j$[ +?dIDATצzS`w@ЄCc 8A.9XHi\)&b&Q>6@tNwgTcosV?lh[J>FRh$Fct$eFPZ&E5 J"SmYQmE{yxx2ӱ >vTJ lVkL;}9 Ҭi-Un|9 gKK]M^Kg#a7‘dC;3y@ NSk:odkV*ٶp$M`%)-26J*nӟNg;jՖDR}}BO@MP< |P w 6ϺŖj@E;rDi,k\TJDU:JdQ"(Q I#Mt;OwԠu!K󭱛`@NZ3Kd!D`Wbl< GH4p, yRIY[-PdzHģ5qE" МZ/0ESR˫ig*rEQF$ijZFfeAh @<sK)t4#a0DCX<E$g ̧GWC*-0 S 6R$J_kXFCsk5UDB j5M,W00vֹT) ko]*6*"`(CP$dQ2GAsc˽:t"0K"Ґs9(k`h7&2ժ굦|%4vNO:U s7vp |bt !M4 "0M(d vD ]FtblU89n{E?r&u)*k̖H #4!Vohƙ'ص}Ǚ"# 8XW(DB>_*L [:T)/jn*.W"\ǧdƹ@[W!  lj74g܍]?`nZe`Ţ(GPȉ0Ƣ!$7 ̉k.PF:)&-$ݝ[:'|N #{eɂPGoA :j(frk|? F"0~OE2ܩ))qD[O]*LCLd.h[HDd'N4МE]$砿@$ #D( E㯠h*D#0B!AFahlACSPEw.]QDCUAp@YՔR5q ;O$%A)YuE! cNJ'& c@2hl9 h8E1F\̪* #t!͖@Ԫ ҵ(޿f2xal1dd$y_JCE8 .)閡 ˜r+."wMM m[fAWP#ʣ ht+hKs7y;.b=xk]%A䵖  )9IΝ٭XnЅ "Pٗj31QT?hh9Od0y) Yڹ#_7vuIW.' rd0E/^Mfew+"EXT*"D]^Mb 4j45rzқ7 AMjQ^;#k][z;B%ю-ȍA/^GD'IїP U+ @+%Teg|t Lpr2Uy֚Seyx>@޶R Jv~v׮84]j-\2)" 4Y%}/h.Q_w7o-T! xW9xlUQ{+bRVvw{ÃYv}P߀Ȣgyp<+Bek w{xwWO{kr)L'&^#afN>}< *BREX_CDz.dB4%d2MER$@Pݰ {t<@W*:n7տg6-ԴKᙘxeZ;T,Vta@!wZ+{#SՕm]nN^( ,U*xI`i^V՚]t9.݆n>yr?w^OAqŘ^'(<2kƉ%A4O@_s>\"!}$SNtHnGo]LѩZ~hx+db vݔ Z͔r%HeH4%3fgq}M8=DH,b!{p"c_wyee͛7P#νvޯ?:x݈pv<`oAl d8[T}BA5o ,Kٷ[ݕ\5)Fx vgC;4PBډQ'.(Э5-86ATPO\ ǐ]{p9oqo_vm]䑫E@8J!\g(2GǑ9$ΤcP @3BV n}G[ݭof;uG3b)VT;g~ ݥp\m<^{[bNV{D`!07ݴt a뗿><=>l[Y tCtPD,SvwOϾև #j .mX ,q_>xzamuur8g=9po !N5Z]]r7{ n_֟x^۷!rcsp~s݆G~r:agٯ=S~gY=y:3z'>GtA~s>x3D>CB66ECUUGHMMntWWWjccXURUUSXVoZ]va_xooghvv}pq7{{̏ތYm訨‡紳Ԩ%¡bKGDH pHYs B(xtIME 2=+ IDATx s5&db.H""1KLtt#ܪ[U_}s{q?Y "A$ DH "A$ DH "A$ DH "A$ DH "Ag kM޷}p7; MMxy}g5Y03_dk9q?&c}Hate+x}b;e0nv@[_d>Au ׯOkk1~_]__=~}Z$xX`u_^^(LX(\@I4v'?~5__+W0@ _^__|PFtsUѹ#Hd 7G s^C|yq,q< ]Mg=\]CDŗ+R0ALhR+ *&iT"G!!4EPf08 SD8YE :s)=SoNZ.FǦp0 '5q*/T,X t.$'N6k%##+]cz~H7Ɓ=$ NpɃg>&B=·| ;I:g2g0낐;Ur?eYk,ga2UV&ih$Ě>>5U _PZ*FnL&<ʤEX W}QN'U%R;'v h5? m!*9ET(&;*?( {r?*JjˆLJ nۑg%Ime] k'ĹzPęv>O}wfqB sy!OqK8#Y0H/_:ESnbE[2> 4oL-~ 2 dj-_u3_)yM%YF;9VJ@?IG~Q3ΩRvoZ~Rd\%c@1]66 ,, Qcu[:%K|+$Anʋַ=}u'Ff@ʣ]#EJ#1HFJK% '% @~OE+)s"$uciE%3x_$ל=[X֩ l`Bkia )CTfA8 vIU  B9B0 ( ǫTR1akylafAPI}N0. P_j-eyk#( 'ti: lYA8)*?Qd[8DAV@ "HQͅQY#̈vGSyr<ݞ{WoypvCk8GӖ2z[/gʽdu#qG~ RjXo)^3>`0St\ d M2ul^YCW"ulvZ*jJd9{D颖$p1I#e`zV=6on)"LA6~W] @&;y_m?fyAPo ZRGAo-6KEK' K(2'EM-* gm9B.e" @hViG|lѝvndsЉ@K FD˗;h7t1Ia4FS$Fy=jʹHPثtG'lXEFȆXiOg? Xz2b]h"5n`)ya?yS׿=E KطZ[A nhh . rVU 7|z$wkWNlAC/WFٓuy/t,Pf'->e#XXuM@Soccg oпv*^]"zbE NUoi~@D$Ez;{ x hdNMaWxKE"*Rk0!$kZM]t/TDq/~+Ag*Mc^Q$8#B_P`TLa/qExۼS֝b8Dի u@U@<.?d_TeALz)@om3Mz%[g.)ћE>4 \hYLPmg!F%itjb>ӋN}.8:Ȕy@*̃a c&/,yp7P_UC!sGiE@_͙uڪnu:?[+|߯ DH "A$ DH "A$ DH "A$ DH "A$ _KDB`gIENDB`pysiogame-1.30.811/images/memory/v_img3a.png0000644000175000017500000000676412201770071017572 0ustar tigertigerPNG  IHDR_v0PLTE#$!>?:UUOmmf}ģԷ,lTbKGDH pHYs B(xtIME 9  JIDATxmg۽ۣ=RE4lmjHۣ 9SVR"*H*7܆/hs_6!1G˳G&zwf\m<{s;~07po/,s[,B!E"DcC6|q&f q.VH~W}2_'x;Etr,Żwu8w%]fAfBA xBۋAfؒ]\[\5|k,YkaR,cC&&@N/tY)92R1A| /[~ 񕅂4jC{`4sݸ0<ϒ ѥWBPSR[6VYRYRIҀۥc BBsʇ - Q$eDXU) R9v`ސmY~1=Ș+E)$/#)&d{-j!LOUemel0DId 5N 2#SD9A7K f4bI?腆Th'>Ǟ *Y|C1 RYX-(T74D DbY)Ȓ \)B+Ő1iEw쇹)s٪ 6<2 u(Fd5hCeME\ֵClyԩ(i4;+8  6TI J Ҫ8TߪND4H^[,ك+2 ް@J isٗ A6ӭ#3-:;AԪ4@뎳U =k!g=ʼ .vG AXTDZ~ڭS= r$BC L!<@\x(q$pjϽdzpPWUϽLOw=VK\Kj!+K-({7ʑL%50Id. <Z <6^i=HUC0P rQb^ud6-૪ʥ rQg^pa*$< ٢@"eԮŃ|2$ ߪ`3O]dz>hF% R]$:;e.qlb(m, z "@* bb ZD>d<$XL B R8…,a{&ѧ}jk G#Af%|kcJxDzVz H .}'SEJ3 )k)G_zGAR/OEīv=D>Y6hEkV =Z^k% 15HfH5>C]fim9x BT$HfZh{Fo !ȅd| dؒ50q`LqR={0g @04O e:"s,fş8u[& /`ƠX~=ziQ7m)tR!^LuA(#o(_ۆY'VV֒&gQAFv+xZ~uOƤ(R< Zr~?~kz 2 ?s8H7Hbp ,\nj.4@p\x4} %)>䷃nOi#dJdc>(Lelu4+8mЋw+=aF76}[ݾ9Uko{Ϣ+=b† w?q~@$φ>0+ّ^}eo\(gرc 7i5~,;-Jxvz~n7UX36!,n0tC+4cԸ}m\+'N+$Tr9) HYr|s :#,i߻-! Moy`ڟD.DvЛ=}9jH:t5һ0~-@D}wԚ9r(_j"J-\~^9,u(\1 BMqf"+4m BXW)9(p_l*k,zUjΒNBUNqRz:ZQ}S)o>|6uiMlܱo߾23El#9R j||fh#*UnjZ=Ԑ/iSG~9!E"d/GIENDB`pysiogame-1.30.811/images/memory/f_img13a.png0000644000175000017500000001604012201770071017617 0ustar tigertigerPNG  IHDR^}PLTEezpW    !Q.,"a1!$<<: 4 'wA3)&$? =8-%?#YYT/;5P:3BW"_cEPd%YVC7`orCWSM$iQEtuqU7~~9]Ojff*q!f]z!l>kX@mK$~{wfև;F_GB{\r̞)E3[y]k̢Hv~uH~ƪƲϺҳ׾ۺ/0bKGDH pHYs B(xtIME #70)IDATx휋[RY0b^)M!E 0)I-F.tN4o]>DC5>g=O]߽gb & b & b & b & b & b & b & bops ''U{翤=Ӊ8O%gQ8Qr_NՊU䇣(Z)( 0?EiDS(s=#FQ7S?7>1*K/r/f{01œˏGQ.,pI`pX4J!P+@yɐ.,? E(7rOY 0Oz+TXjB Xųg1 _OON.z+!Uٳ7o|x#b9r)=*\Oȱ~OA2>l/$yRՕE;;Q՛C%C"f2XyJC߈ W+E-K{F+0wBL/>˱_P kwal,Ie>"Y8c^U|!(&)mD$' zZ{U7͂0y\02"WF6Nj996+Jӊ #'s|=N _[z',4fj1y7#de)1t C8Q(g3E&+lzEC^t1fVAb9t 0$GaL$9T9p$9UxQ50qY,!@q9@VX̱-1 ta|\VtBӕ뻹Ż8@5ZL,W9ۅRtT:>A\ƀ$pss3K^UuÑ\}h~ CY ~u.Y镳N-Rb(>R7ބ lM#Ih.YDrG{A{4 [0S+r5B !ơ`Aā ki }6iHV@˿ BH \~E ! ۟2lr>P͵ϟe#*I#Ihʑk6h(9VcyD|qu!=XP8 | J3 $k_MLr^/9H@pDA+у?!K:˅2NܝQ7L6nvR\1i XQ 9/vdM(RM^{5Aw4(܏Ɂ,)R1BeH%A6R9R9Mp s+$/EEwwb(ӿ$+e877URAT^j*2(XBI$ɝ{ H 2},KPDiP$gyA4MAMF\gI0[Y e@I$>6CsxfNWa#DA694A$_u.Ůۉ@6Hl5K 43@$8x?#:A Ld ~E u]ؕ [+Z^-HM"rbmdFgg'_/zmX-F"W6Zg@!ZD>q Xn܉^vZ@||خς8^N ;%̎S;F;uԇD*b_\nk#0CTy.p/I$55$"|C[>!K',Ҵ*qPdrUPGò@W'4%Ld\I:ʲ{;@N2ɒvmKсp7SA ϐs @\hwMWvʲƁ$rBKb\Ez7} MVh Pax-)qyDRnHhF{'GG|arÒ$#NwrrYYYu'IJ5GT؁!AYִ^9rranT G\-omm~ u'K񏹜XK&+(?gǝ$=+Դ˃'_L35aA, ;dFHu180?$D2IdՊhqaue vg%yR-hK%s>:f̟rb5LrnwH@T`cE\pL [W0_lo=Ψ$apn}F,Lʁ7m .rԍ_Bh'jK;]>Il 9/40 `  d;kAe's̙XnٻʠIE98>uֽ>*'㲖Z;I[# k;< t D]& +8K^±Ư|R-. $V&su)L}I~uH <m׮u?H/?tuOt BbD\IJy;FŝZ{]H21 r| Aр%g0g@\J5CXlFRoj'Dc($5+{w/*%AgkpuJbiAX h0Rſ +5W}p=57FQ EA6 NMH۵kmpa:\cw;)#S0nMNjUr{Aiak$˾XNnLD 0 =["'r@Eis5J#7#B.J/nH5ICm(F^\M. BV_I־& JQccP)4eV8ݿC 4M%JZJ-Hyo@9pniwHׯIcm}[Bh^EԎ@CQz=DpX$ VKzkbuskXd @ vrEt9ñ1b+Go;onNĴZ.zu^TO/ B.4\7I|fptr `YE#ۈ Aݪn IpV[B*q qD ""8X oP(eG#8m-v?>&wًu;<\'"0Z! $1O'#8Ma qZ0L+^rkθﯿL4݁_nv YmVzFo6P IC$iܪ C HCos#Kݲ,8'zZa>>!W[`hܪX$%kK |N[<;€#rId#]nnDHCl UIW}V^S^ǭN``6`?19g8}m6{£pD"^_yhzŘ]ζ'o3q려Ρ02xfrFأC٬:78E_9$[WDaW! 1-$:176:/3ElŰ [ú%[J*F080\46s# 5n~H$ImW¹#y{KZ2n V r*"Ҋ`W6k `qY[!$hՑv_[SoJYrx2cc}ԕXE3pX)7:\,"y[;!&0A98ٕ\kmXs+6+IB;&EIҚ"rA(dz'G߭>]K`nfx>4s@9ؓݼKI*Ƕ*US'/vØ-&~IW$rXbiz@w5<6¼K 15$܇anJ D &@N*ŧtG[BAL4:< uU8< DBI입XvAM$hwM"iDi O MAb*bb^0ҿn)!. (xBf9޼;Si'Ar,AЙD٫]Db8J1Oiv;jЁ b:-~ (VtjR.e\'pP9@iuH΀@YFkXr&FXeϿN7[b@tL8?N @;jM8n"^N%6;f^EJ_m5\\#yFvz<>^F\ rKM.7_ob P7dr)E$/&w ( a;:\~y " HOh[VS7u2 ?v1bx~v@: VŇn4k*ϬQ H.w Eޟ?hqMu;x:$&yۍy!Tr" 7]_HqApPv:!A/n`_;}tmHp2xC%om9V+:(@|:~A`dEꓜ1p\YH* hy$zYi}0Ebu]D5oG=+>ө IQ|>txboQ8|N{VȱwgS5I ܂-B‹Nȧ5Qሽ$‚ūފS_'gBv[>rP'QT+OED&9|)㽇{GtCɎ|:쭎$["FM<%pAh p;sΝ;3w9{Fhq!$`W3!:D9@!ArQ:Ctr!Ct C9D(!:D9@i}I9B**vSDSQTTr@!Br=Ns -oc\8UNW3j:8$?.$y?"4ś13m^<~44xS_PϧkF\Q%G,t m4]{ݼzeL*5gsJ)LB}A!AhcFSJi)|?;^8ÇSz @ BJ]sllbBa̮:A7 @W- : J*LFm X)-e;"t D/~aL7:ܵA)j*Kڗx __L.ϙaDQ;?n`T?>QYܺoLڍZ+o' Hi)lxv<6`?(/V5+Mf}ڨ͙#@2UTZo*Ǿv8;WgW'8K޹dʷ}+Nٝ:MS OePPRZSzu`t` +}PL $p# G2`8Cu\Tw ǔ7(qOy1f-w]v4[=<&c~q[4@ﵼq,XJ_2 œc9s{Bp") 6woѷ !Rllf79} ܳvU֏#}Mw"Ƴ̚3dÓ}aF捦7KN<`ID##c7$W[QzwpAך^W}?O/.bN=x9\9J~7k\:`I=P:/s6ccSlބ5akB  Q;R_q ?`g  w;Vܑ3ϰa|c'ɤۗzIᄊx]+Q@Aޭ{(Ũe7Իn$vPSɿl5E|f Y$?]? a8g?3' .I|?#$Hi){ AƱk=A'~^,G4E^sd]t}x~sg`BY(Thz+]Fpݯk}\cM3-co貣x`\8ޞh7mIۇm5d/mcxaΕ=伜]s՝xaW{M?cE{TQ|a}T2Ez|oR :%pZN.M d7{2/ 'H@.~tǣL}s*O  =.\pa^R ~Fws)DOr`Xb1@#ϜsE4Q1K vwPQx[LQ;{v007@|/l\Ѹ~]D f5W3tJ';xk6:Q Vuǔøq<8Aή9k]˒%J>8@6gURZE%U~P CsBi+Ǒ%G':i5s3SCrO:m6~&!mdb?U 7Wwfcl=:Ao~9`>Nz7 &!Q0 'Vwe(P T3__v+3^i|ёIjw'uNqn{3]ɚ{##FCDR7Fs˗}r_9~ȍ܀R"Te?Hw9^M\N{*[yu Z-+YvO6;r'G&yNJ-Vˑx~럘)Ellfڛ:u _T,j^ 'd#ҋ$$$!1x,ߞmtݨI>(w3sl| .0݀B߮ T2~ӪGޟ^H= Ƶ70&46ZerJiY,HY$s|}Yt=ize?dqbN{4vya_ˆ]}M/y%t@ Q_XWէxLWPU#A |x!}yIuD[ 8u4>Cf!4]\nl뺨e'ƍ]0}tZ-}gv#P.dM}7$tO2^yQ)R82I.BE HA-l`Mt%:ng1q]MY1EQ445rK]е7dVuLt1s侍q;_s͈k{9{ALP V@a·z4W"j_hT'׫0~\#* 1~ 2ӱWЂa=;)Һ UM˾mݶ"ufL*oA B+ 4\`DC hv-f~S4McJ4Tj(zi-HSC|;[c4%4 IƮy}..F3mnǍ@zS\r~*g搙/‘.AQP E#4 j5|ڀHEKzM?%8ln>л hJ?ٞyw'9$|e|bȆ+CN>'{]y;ش_73ɓ;P9a_)Sxy>k/$AA j(EmAouDRKr^,x|GzPT(c wL\L.<LC Yh}7dCQN:%?LrSֳ)oLqΕG:,dI;W+_'37Y={O\32,MuDW/eVx[e9%4 (ZdhhCws}u_ ;zv0}A~^yl_ɮ]!xqnm1qs3U>(/}z^,s(jQjCpBhJF;TB>h(kh $QjRkxs^CBJskgmW 15ƹol$ +Oo# @L!o?-gϣ_ڻVjܹDR|궬c^xT;7UJP8"%5ѕ mݳ0{ Þ$k:4h{rE%?%XJsöؑƜ+xb+Zu;q`?)!157kOr]|cZt)RT3슌u6E"\\z%Sz6񻽿_rn6zYo^Tr) vHRKRTpmōf-+]kuSϮr Ar]ž~_oӠHKy`tѐ 2Wj[x"rsóG=?>vķQTpq,,#uUhPDfl`h͌>i'! CbXpāElGwh'(L? [} ݇,3q_R̓ht)<>z1Ū۲Hݒ"gלG]A}^%8;f.Ωoë/}~AHj8{nZ]ε[.(aϹw8,k1~sFFse5Z}Ѳ%JRRΠck{sIUPD ŬZGmߜ,d>=.cer.]4 _KžƸF(v]CO-:GF?Ϝ+u/ҫ_$ 7;^=|v)si" ۧT}l2oܱ@IM_}Ize0$qG]nu$_mo8HAbsP&@v3}%eW#kufi>.9sYo#/yn@W'cw` m-|n7fw汅'g\cC|;_?k*>7KiI.#JuwEZy]sEgG딊i̟g_hPOKCԒ|f% |62J.PdVYpZb"^^s,'|̨۟/Z۹eqERV6Zչ07$$Z9@!$EٿG. [澦rUJ c$'ǘ/5%۩R7ڜUv96#͑缪K|*v>15ƺ8`|aanpsŅqJ*)j+2e7D&aŐabjj_ W@ ۮw=]?^6?٥G.jON-ϱcu/lteku54ް=Ⱦ{X6 ve. I |/**=ȧ\]/;`ѯfJhZ^=Sƽq>_e"h=>nWo.'ŵ_3(?_x_"}U:s8){.7/<!=ܴ+z ʲkհ?w?ry٧ a$Ÿ=Lu pi՞}40 ND*Րh4F}~TMp=/;@sFqv|>UY,j`Zp37ny]sna7DSN51sKW)W*ȍ* Ƣs^NhF^s>8:?rȐ&3mo1)~GZ53PE]..z:]w@ByP[]!!)ʕ >_eNԘ-佈 [``UrUr)ɬ6\CRVelc<9Ds^z*n=Vf]bi#`Z>C7ϮM*ꪕGߘLP 0h<;W>E)RҀ$hopKyHu/߭MH냼5d VCoX , :#$$aTy_\ >rw{= JA(F7j_}llGɡ9U({QHAOcg_TlJ ǯpV#jIb}.<|#P] p~"> ;n6Ŝ*J.)2}M%KrKeO; %O!à u! i  ,_[թ/;^ܪ.y4(Ey1R\^6 k۝+xer1/u<1XBsa/2\&fox>ʒҧfTd$5ѕ{T8lLBUjΗHE[ʽPr>dQˢL dO 7=Ҟj U|Md!/ nO&&eܰJ|%Q"0r|Be!s]^ dGSN/T7 q=&(P \ FUXhXhDŽk~ |hҼ(j."@+Shhn=R إH&)2Aa#6t*_uOr.ZvːAJ ÃGrRԼ. `d@ 8U,tA-,IιBʒ")t$;0>I)bN7t3o7}}Hc-=[ >T,jY2Zg_j&Z7 5-_svݻWLB)DR".,4p " 0qt IDATFŀVܠY]"Br!BVE!BFUS6xOzf2R*0%@P\*z/'dS3(NoBWeK^d6p7(ʞcKl#[׎[sLRŘ8*<&aAoF7B)@U,{ٲUmY]cJJ-9RDRE0v H  (JXw]d'4<2(|f>WEQx AfgrS՗LҩX6>A?l Dn0dP, U|K<7R6c] (S*>y> ~ɟWi'*FO3*k(D0BQL44Z*E@ RzvR#оPғdW )H΄{,;dcl3pC-.Ye*3U-w~['c_4Mևfíl;c m.ϐrGGB"$'{\eJDr0q$qӠ)Vˆ;M"4mĞG)FH y>SGҟ|UuU9傭= 󏠽_c9 'l+mWr^Ʌh ی_>c[X][)~^:g*>OClˍ\w- K3 t$+(G{+J!JGc䞴JUXEzQ$M]W4-&ic MӐk1r193Xмk>dY+9EvK !=@Blm\[~يaSduY%CSj vNLa ~gɐ'6#<$[-"|(ȫ JZU);Į~{IH)2gc/ϔ6Φf)FiH$n*v~d[dfQ_G]uu`^N-:=o7v% $րJ.7^`>9U.;x܃@YqZ=_{/ 3)NtXy\WA (W*L&6q!eO(@KEMuLbhU4KUkי6898_~Dzv@`01 &_x|0:eS\,fb` fw's{ L?c*%ee/]?[bp(-(^+%!쨣s5;ײҍ$ bj4KXX^9m]Fַ(-w=_BHPΜ&:IQrPv"xReYS9++ʮ1]Z8`] i33l`Rn $^x OQ*<;] '(W%,]NuKZFoVv\?EՃe7 ibT3s2SB7j )h>B?ǏaD}YOfih<0^$GL06 z$4om_r}eE탎9acyw  aZ-J\Y~ɸrx ,4rSʲ*UL.93#zfWH܀1+ 4>gT$_@ Upd?1j߳AȜd R2ԈMX:y%qiU.vm]nkO9:P/54k"N->QN0^b}MӣF.Î2J :q5f%0T)XþqKA_I%vkb__ٚQ1z=1%$Jg~NJK_0?28,ɐJxK0 iA*6OU ރދ@.5+w!ry.\2uN1a;98J@q-fV $mbk}هyΧm(9Meaͽ?",{Y$KjxIz煎l%_2 K/AҘïNJ뿫,d¾sx@/w>}M?C F~T/#Gp).I?;%S&p*)=+եϱ$\QM7$9^.$o'bj**2Zl+ĥ2{Ԧ~^ٺy|K(W<>r=%GPs~sOlicl*K`clʼnǽ2uhӋ嚊bS vPxɠ" {rdeړ&q^xvU,$I?!y1+R9"mh gEʰyIi5)w߽W6#C={?dkAER1 &y؉lm;;ΪspW8\BR^]b3ZIt SV"` l ǿM\&\ LhAQ7htSsr/'2h:of)=KG{|!zN ΩE3:0сq\[qZ{iIZm )TT4M%Lu1g+ovGߚw ]h4 Q};k 3<ܲӢW2ǜcqvxO>dl.:#6_smB3=w::*Ӱ?IȒvJ DpZ4v\4tZ4*4$M$ $M' }_hM׶KOʣ: "$" R$y{>pRKdnnget` &QPRf\p*C&944"j7vZS -LU oPvfk߹ePO*ҞD94^xTǽg0Șd'xA Ѝ`];cЄހ @(;:(Th hHo4`tX!4 uN}Fu|[N)-눪Q8d4]ս 7-9}XBH*P B X*H.FBH*Hһ{RE$3!8;SC nHG@xYO*זM >~<Νj)bj@vT55S۶N3SREXDx bgHt#4KRId Ք,jZC]#-ITQ`Yݿp}XA{x?.ӋgУFXk}VY&5L[K/p0aT%T)B2H jfkW+ulcG|{Z4d!ـU!m͌Ԣ|E=$jWn8540:iFB(Plc5 +es}]dsއ]hBMC5&EFIBtib[.vGw2$߷srNxZy1_d,,6zpw~oTT7{e#}D.el`Dž0&0^oPGp3Hhq,aQ|*U} Q^xotӋ/z!.Q@~! 9 1ddzP$Y6U lu1@IQ&8p!pɔ*F :(tJ߷f]N0HR3?FEI-+quu\Tz)l}5H`hИg wzvd֕di,Rၑ3?zpO9.t2DžNfCt-vgKl  }ߙ-ѵlm`T@,ꚟaezˈիTqW'үܔR,t(%90U)0LA) $B}ք6HaiB49ɇr{T؝ŻL ƹ xiz7YxB41d;*!.;'(SmgU2V.C PBo8c: <=]zկ,Vn`y7h2^x/TН, Sq 48[*@ i*ѣv!Kr.P #= KraEsH`dJT^~|PT1!p8 X!*Zc,D $&;8$3@wUSiHlcgb; dL`'a]vg">YL\ ̄νVdBX4wޤ#ev\70MKt/(ɲwJQknq?/v:'"2y^eİ7tib!\vH>@N(<r󔔗rzYV'Z]mW{naA/8*Uvzե% qVFQ,0=|Sdi}O8`Lr @KJftN)KlF(OoqO ank2ޭv:3?wI3z ܰ7Ź4lxKgR^Ί~goT<;$϶?ND0b}5 pvnQr_Ae:#=bJ[{;y<I]2EopjzBߕctYmOeMMݬ걾79t!F9=L3!{^e!^OxSJkwZSuAYNچGUJۉYW1R9(ow# +5³O %S{#tuw1nk>v= mO2kL .W^;0bk9)7X4ysR851y-q)hN6J J.rҋŝi^6A6Uh_xygXy42#g/1`@E.'[Xg+0gDR]&2"؝ ^gks@Zx:RJ{uٚEs%= \j?mS^|7@ƓRS9XzNcXyRV}T`cn792wza3y̭fiݤgaכ<>6F`4r9^ʧ*obD`M> Hov\/Y(j@ЕUb0/$%1 # S7qBT6&02f%ڤDz++Ăɖn+[!(Qȹf(oQE\ S՟u+ɐ vwKOP/Iz$INFsᡲQ^w>x BX1 xw! bH)N.7kZa=Lw < LeHc.8 36o;""֏-UU72)t;q;Vmιm/Y ]t Ӓt\*l^3V5,WET)@ Fz^*oxILRuzL f| _ؑQǘ/؂ Kf{j9JP=~J/'ʔ.7# د G[tᆅqL8w筦i,|w)t0?yr\^Yw KO]gQTsLy MKzg)6!&g|R9&ĵi6PT/[YJ[M%$i <[o \c 7)mڍT^wÄD)KNiH6+K~'sd*[Rp-uL彮 0dP;h R cg~bor=8K@xX秷3+̨ȪUVfYϞR׽% v3+7Dc[wKyiv#Q:oajTjQBW_-oIb^'#H%Tl'^)M^f[j/s;anӴ&:_Ϭ+R|ԺA6E `Y[Nǘ*w6TH1ͽ[r0d1ށ-ʪzj:o}XU$9's6n̋K\I@N\{Wn`QU{5׻^"֓+jf\E'O9j=)5&"e9_[e{[lϵ<]oS-瘢)\T)! IDATGgٶZ7:5}*(<3 YgPlHv}9zhvW3p5n{1SźYѲw/]?"XA}dThuiq^|# &3&0l'DpE86ķLc4'8J/cx`JE(;Yp>zz{-.`10%V,l]r҄f}t9϶U=Rf"39de6wrɵ$v鄢 JigUj3%!ɘ7rJ>5 7߅A[b=t*8ޜKJIu5`J]VǼbBPe@cZ{y Mv^x@A;T 2h:ggVJ)°Ш^p>xzz9NpʗhAy[G|:s$$#Bl>?ˮĢ3( 3ME7 лO,:#mTCזȚnzg^ `h`,֧1ԖRm~3x66imcY&ܽ;$}ɐK( 3ԋvw/N ]tljt nEaK.fbhBJ#FS ,Aض-q洃sݺpz&#{vGw^cn4'vʐ[p3ˮfdpKj|t?X*|5:TpȚ5iF{Il6S98k f>h]Ke{]^v@pM5uF}$d$LMK$У,neveȥF)-lal]΋O+ݗ. I0bLH T J O;dCC:XKdp@@I3FӼ 9)gqZ]V>HN)>M3nPIy)?jmOuYt#|вv-eE6hZ vj*E$ywWm̛'c}ٕԙؕh0gsb;OB"RYX-[\=n"BR1>O1BCՍb >O/_H<]= j8\/| R# Xax(y=oW-ѵǤbIjqڒVqsb75˥%-FRdےWώ:Z$1hʔjl.%qw|>W:=,mΝD1}ROp+梼$=]ue,,lj|G<#*-Y&*:_%N,IR$QdHhxEԭ џN}#(ܰӓZv B(1E8d6J< ^"8̬}ּnۮ&l1NԬuRB^m{sH4%YܼX@Ӆ +C>ψ blXGZcS+nVcClou Y`܀8'}= ^-1.x83JfsLDBL~9Hmh~Aݎe!ltT'c32F&:Ԛ&xQþT%3h$$zR]VR!~)dݫd6uf̶jRFryeܳ};Q5(;s' Ȃ<8AꂙΓ}Q^ΊǕ؏GDمNfr|d `{߃dLjLΗy{J#c8;|LJNB' $PnŘZqWv~μF:}u]q]>%YY1|9dN "$w9;/2:K/%f-fBBfIl&` Ξ֌kxf.@xH1ыe[;]H$yqddfΦX{7ӛGvX{;y%w/0#x?SsNE:pe;m&#l0~Ӝ6 \{QtХY1<8w^!ݡ AVY{lRqu$yGXxERz@4&dPWcˎHꥺb}O4ޏ,b3gw[c=.:%E+=#8,x2 f I-Acb7;Xݱ>Wj,pXy6mk,lwlcNT9.vDž+oqb C>}CٓfY#.B_G9TRl B 2buM骙,K"=*ә^a3 GWBW2z"QGfu,'N7"ҟFsdwn&sр70,0Z9E?Culm&ųr6f6 )㙤=4-|S{9pSPMRKSjPRվz$l+l9ju1J^Zocs=l,Ei;ѷ-l@| .[UC}#8B6!LE^0;b[No#cRju64R>vv-mU2}Pޭ2nL2nLRR!Ś[a]b*:0,7FP>/oڞ[UV}ݹ=2&І3̀ow+lidQvfYgYs͈ ɑQbJ|ODZ҇1DB0m?r<h)W7Чgzľt$,.i2qT2U[+:.:L{Aΐ>62׭s,XW"%MͅO{:ᓠArޙHФ歱ocj;)PYI}qH ^xu ۉv9iN"*svy 8S ph '[8s7 СmL2fL${x3ZWix\Wڬחҍ]IFH쏥#tIMү2lL2"jy fsLcf rWJTop<˚{(xQ l8Μ}>[@چtۖ7_ "ͻ(Z,?VpVpBp(G QT:8gl4U LtAyAF(N%ws*JunS5JtyaMiJ# fw\mA?·ZI4A~YsWPpg E$(#(]J-mliacxv0]?+B0KD(PAltJKZlT5^?D5An=t=-]*\.,ghF[ 64 J]aFhBo)3qQPu\ 'kĆCϑڒV;ڑ1d~4n /_'|ehaj(Z?yQ ɉ<`m3hBK Qq¬S6x ʓ].iL^CT5pW[ĭ μ-ӄ{1Cdžx̘gnL4vPѶP#-oT!ɵQ~' %FSb#ikC3tE9 a _WttaPRUuʆΊIJ#\me؏ 窻Ĵu5L\m)ѲE+OG*PZKj?磻NlSk+-<\hەYu f D'i.߸?]T&{اž/d~n ~ L׶-w4oui*#(-y&nc=VK^2M #㑿!,;eV2kr07.KZ7rG)x/ّ YLq\FȐAMͫd8)sZ溡=€7]lj*/BLgW:,x42]+:/0Rx>>QJj*O<&绋Bu/˄ig KډT7>`=7vilGؗXwWXuXqʘ*& 뻉+\3GA72 Cyu#~ "I^m'фOW\l̪OtL7ӵoO%-C47͊Y8g c1~wfFq[ wr,>^HI?$ &h{u)jŮ0`؇uʪĪSFAa_H4g'f]dɞ mv~]S y OW:Sw'bl__ʸn7߱O}ҐLky<oq8)~7fM>f?0=&m H|T .5Nb\%۠n#ˆ $ZFB>$Ѽ;2{0'M3^ŖXk)I'~bszq r|8/[#|'8dE X֘q̱ͳ̱ [vn*!ɾIѶ釴TR;eLү " ].0DUhK6je)u-ꍕ-{I!/ԠM}IDATi&r~Uu--p{;xsu"'VOux48=Jo"K]d]Uzj^PUjt'RIRj ?'_ܼgԘ`HI%h*65yTU* kuk$Læi4O:̾Taezy˜}3Oajʹx~oZJG_o' A5-~")z:58h8h!2 {k,,e%V2+r0t٪?uˀB =襸+1 gm ŒfSPLB]Kӫd v"R%ߎ^m{Q. jlHfnt|nxOOA2 A<4jY!35D1W nauamAu!uu=];T 244tbBM^m̬8Aʫz>^>4&I#]-TU**5oJ[#DN$+|Aƌ`6PsIfTes?G^]!sS_lknzZMB[GKTT]c3f97kf%q\AСtҭd)*]Q!w  {TUjUoH]MM74ʺp2l*'JJW+T擻?F?wAl/}g#-_yvӌ4TQTWSSSSiz:\wuHw[d6D7 ƃtPPJHA((()G^ )H)u(#-i,]i`뮴pBGб =]pwz I$͙|bw"An/}s"-jMQ3YmY'tJ~^e>Au!m4r]\f\pݙ&\nʎ@ѡ+E "\vwII#d Uz0$4{+td `ŴJBRQ75y&pW ?~[H]dthMQ[u" BihcUw3 G[3uge g]D_4ٽZ}DT;*U*%/ ybKD$"HOJk^!(f4a'=~նp I_+-Z$\r:F(;%7_'t31fT̀:@.kL;WvsZ$4Jakx 9!@9t%. `[ ֵ`] pWe5<Сtl ,^ |f]'t}{稺9d`>t-6=Iэb_?!~zS6b_}U/6Hgk8AkpvXV5:׍f];\U)=/W;& 2@NѤ! Tb>uGߺMrm!+gYwփ"ː8\>SZfi-|VQ8dϸ7q[}+"љvjndTlB!PMˡfbDKϑ^85އP*g`H歰hgF|Gf>E.z#->[P ЏpP?nI).ا/"IuMvB2КUL]]ϟTdXGUxXTqx{GTl̫ॶjp9PaeLwC+vi6f0Zusi<ٌ݂$-iҡ5-e Iqz8=FQt 5>'8qtF~Ϸh,wu󁱧A*+2ewUojets-& Z"6*==յTu~dHmǙU+3[j4i(ܐk5ˣ1,K;+p;ХIOܕQpGwO['✋u#J}SE0IttF}RKp`1gν`{?EbvwYXC^_{i 6IUQrظ u&g79kĤH FrKA oXfW$Yؚ$yn #>ش0.6yf aUǡ}:z<3< 4q|m7]UJ`Y<=.i6AUWLJ'8?@Nhz4VVO 8l<5q8eJ۸$(T&7w/3NEzEtϐRq-E ߥxG$Ģ/~,|5gi^m*uȮoG?AF1iK\/cJ%`]@IXI~V%+8SdHB_*}0Cn] 3aѽΜw ȩ  /:ָT*CZ{(oPsj -"# cGemI{>٣t2L3\ F4[-X3Qm#(ɨѺʪWf[f-!%I CItѥ1-1^fѻ竕`q_C_`20ez&kgQJtk)߭xGv~KH1%_bRǤNw3ϲWf]Čwn% CƃQqq|'P]Dw 4u0^*"я%a(:~䟾.-ABT /Tˉ+31_ex2K;ռ*+n%o̊WN$uƵkTn\XXXqX-λQӥ鲼cO8/T,K7ݣ1a:AIEnYvT:l`&%z~z~(t Y.k4d5o5K8}0ps)"_#~Lݟ;i)2/W_-k6Y~IVH贫Bc@b@aPf@BIECK^t`\$4s1MQv;Ҫ!V@|~,|b uW/yUoH)t*NJ!"Ui<wGG#'y! uWjy5w5JtE$"bMCxp",y# 먨订b:꺫iur2.!x`X14+:.hϰOIc$! n zOɒWpY!!!jt+ 3[ 5$}}n RG/T2/WuC使b '!b7iyNģDwqKd?_A D{ rQ^sBɛS2fIl*zSӬ7KXYB/89Tu(n+/ z5LPprVc |I\rB *"aHLPI+&Ż<(R ƚc҅P2(d*Bf]RvGByKs @||Q B6xEq 4!S<^HEH99U(4*$lIҎIG!@D+=)I BP 9ʤEhd AM^Psy, !yåY5I c1yD^]^^bB8x2 $h8)Ů$ hi)wr'm;~uS<o2u"ˉ)*%R~+E [s1{DT \ wI`" +@8i_>@2|n?~"j)@a uN@@ YΕv X Sd| ;M6jYx {C) B(g"߈340 Tnws BgcCUwMA&_X?-0FXc%BGb&BanNf/~ÇA../zaۖzX5˪@^euĪjuw.XK';3T_^M[ӱIKSsi]:&c"1AHn{9L|" O > I]unUNFFԋ@yiֲF6%W7$~-3A.+%yM8/)? ir+82zg@b)1~r@BȮGܐwo”zg|DTZ)68ʻMwf|pۙSJV {7CbQQ{aȅw;*xsl1YyÀ% a]&FM9)cP pj\AiCz'n2!d4U}=f>P.t*ﮉNmKKV'߆d  K@1zK7`씃PfTĆlPIHp(xfDAVIHe#<+=&~y_;7sȃM_M"l"+;&QKYJ _֖1svZd9g݄m6,̍ WvBw3!? sBx6MBDe.DVv>w3[jƦ vjM@RC8)h"rDiHHe3P|9p BD!E4!\G $14!/ˊ:!Xŝk@er-|^UqAډ./#x @ sA8iL\iiȮWBfTvhLDY] )HW8y'-X!dkN bC+,,⥄]@|GH+*;>bwik,ºE@B"=& aԼ-#*[`&:!&xB H)KKJ4a[ 9 q!]'xBit?{!m/Pt^nE$r9N@.I!}P)AsuB.:'ĵe%fv_$V"irD/xG;NF&Pم2D6@q!>HyC_o)bZ:!b-cnrJ6IY2 mŨ<A臦f W;H_xVA.-5Gj9cńC5:Ii)tA:rGqϔT&pd#1hAb:B:F: I@ "uG B.P ;ZZ!jkt0- %Ade1Qm'  hLZp5A#zFC~ = k~D+&7w@ W׷?JB-oMs++?dSIENDB`pysiogame-1.30.811/images/memory/m_img22b.png0000644000175000017500000000023112201770071017622 0ustar tigertigerPNG  IHDR<PLTEbKGDH pHYs B(xtIME  55FIDATXàS_U|P#IENDB`pysiogame-1.30.811/images/memory/n_img4a.png0000644000175000017500000000657112201770071017557 0ustar tigertigerPNG  IHDR_v0PLTE, Q_))+)1168EEWW_^tsą٣4|bKGDH pHYs B(xtIME .6 Q~% IDATxoG{ 2\VbO99Uhlɡ Z%RN!,!"K,Ehalk) "Ab{$D ůw}U՞!c|Uno\[[d n}199yڣC/!zMfH\SF Sf)GW 'ȴ[ S''!FQ;w 3,"_% #z 9A6KNƀ S^f4,g%wC$}< H] (s?ʼp8?[&q2P HH[Ɠ{wƓi1jҦdY0~e9IG^) ieĽ}d/|cÞd2[ GOWHг s,PmϻQτ'cN Of 2E4oMK\61\8m>#wxD{!A>mpO5i ORUaHMTdYi5$!v?+rЬS=8R"eyOhTإI8@Kݧ:cu37IkA~j7y̤J~q|3=PI0R95S/LpyuYC߷ M a__!QQ LT4uIs` 0RItDt2C!VY! nC r}e @ƋMs4brETb7a^|)+L 'A4wv.1é8Y._j|į)]aF doQd~5%d S2Ԯ)šX%Q֒ KIbRCW"x:$QA-,n/~ _-Q̆%NS +ny6V!ESIF>hbhjt@\rM6Hz<'b%iz/9J7iJTziN1[B)LɩR \\!dAR3CQDŻK]^EȜxE꫗N6 떀Yq`C43 ɢ3}Wr;E1O! _]s`>ꔭL\emy63$`LfHJW3{:K F4AZcSsy0Ͳ+eP,sUP3U|o p<{0ry4d[r-.05/[%pnS贜+6I oP(JV ,/JG @Jjq;d;Z/=1[P3=r*=.y4(]P>| ):Ükw` s~nց` _̈9K.vvGK]E;r䐇K{YM/\TBAeb-[*=W"OQ ecŜ8^1|su`ߧ ^j7OV|KIP ׇUE.Wns ˽kBB_WC"IENDB`pysiogame-1.30.811/images/memory/m_img16b.png0000644000175000017500000000214012201770071017626 0ustar tigertigerPNG  IHDR6F PLTEwMbKGDH pHYs B(xtIME (~IDATh1Pke0_`_[ ;H,lI,->LP\X-3l6ZQ].f޼`A/$[ND}W߄qC}B4q'!Sp$0E#Sj9GD\ iZ3 YtdOFlBR aYg*Khs>)'$dT:Ǥ^K['KY0>xғ?i #>3Xte"4RC Cu?B$KTD]_(b)!R_)=قHlK9e|!Tr4J[5viD2%#dSHy|rړOʨ#:dt1cOdj>$aJ&zTNBRg?HْcV!QY Kx;؞<[N0`a܁Bf٘ I֯Aod͂!265Xe>6ݿc; 2@DKjD< %W{7p&m?(mnkFl [<N*mql2,\-$?'Xt,5VS =>h$GDGjxm'8iQ1.ML:ַѕϑ_X(28EHRQ$:"|qƦ9vQ#HJ !M,i0ɜhg xdLwH]"]-X.[BKbŒTsZ2sL+ȣ;Y Udn F7H9%b$&`<Ƭ %y6I%>VCEo^DdG0F?":~k(uLJ#!+0eLr}` k$A uޮOЮ3Sook7WӺHS?/g&gW>]{Z jf?ȩӷpp,ۣĿrĩ'Ov]z43Gl{+7?8<2Ǧ7ן>=uyW{_zk^O`hL._z ݳv1-'>}uy S Ø|W ӿ]G@[`{xW<<ɯ=ço O=:#yNqpo߽ҫy9Q\oo9siW/mӞ>uyn/\zp|zp=S+~'Y, (n/rt{/G3w\ g ķ&LhX`ʙ3rMźP+~|g˾VAl?Գ;n =lNߊLk=$OvA>I3]|۸7p#rt'2%C, R%)`C0Po,ϹF/mWz= S|`l9dЇ8C[crEN~ 9-N9v=Hu/M\۸7ppw!a$.,<L!ſ+"2mAð`e/o g̸x`}_p`a+(UlkTn @5L *UtL{'8_ʩ/2n~u:`,r쟼dĀ _+K-aS$Sʌ 9x#\'}sז/nLq_ ]*e߰"QEkzya:4L87q̟ E_rП2,s{k9'HqiD\呤cA0W-ܸLAܘBE{̯);O;./_fkg!{a(bXAY&AWŪ:Tjpۛ@ƛ:?USjT,[8p歿Qfqp Oq栀Ҡv-3"llwJE%fq [91)/Tm70.{(UD(R+]uŶ @Vun92ꪰ3yn/p si&dx?x^ eAfjRKJp/`#D-V64cӦT2W%iʤoif]w>VLb_w'J06`mG:Y*eY`[BYZb@6Y;\p鎷ry|7q67>ZOޞrpmڟތL2 i0(8z8jXw0 +JJC)^0E v {qJ'o^{V6NԝbiDUw#I]]::lʲ:3q4Y*ZQש} Wƍ_O[Ty1 =a{PB&SLIIKcèU*z[?WK_ilupй4W6jlU o&tS((Vxˤ3Z&D6Le2>S-H* G8f 7mG(wwŭ/f>S*) r[_= iƷQg3[Jo- *n¶]I ҎT U-AވPBCx>,5!U78zq-\e6*lfc.fS*hR j@EJG,3E6X9erB6 $B]Xz2j1NŊ E'T~e}kH-_{J0H=:^}\햖'7hd( Na#lՔE)7͒-*NUYώ$]0GWrG"ѡr[ʙs "0M¦ \TaoplS`=qjLI-tY u[j0-,TeL3Sً`Tp67RR)G  $3?_g?Yi$mOj#ݬro㎗o^BbB#%%8HhQ@[dqCņL D"T4lS1jc:5$a\73>T _מq/U&6a.cOof.LE0y6 ,D%L4CvL+ʴDWt=t45#f2;Tb+vYу7~_' G՞ b|{ޘ1<}n7&1+s%DYDl_LQM5$FUTaMD&[D{?x._/S\}<9rE8_ 7޸a.E(s)D8P}X'<0u0BAdL&L9l3ԭ,1bO w=2PT`CC|7+=T*|?~ ٙ5uR|'dH&,zA:pZ MvH!jC GgUG&1uX6FտǺJp7s8sƒ/\R{U9?qñyPM90PR(9cFpXM8U*BՊLJQBrgC3N0D+zx?-;-=c[xOO{"=CJ%% ? F۶{r+)&6b\@ Hܩ[VB{Z+KuYk0PvjGOsrue=-bl 9b]ͦebswLXM0MWfS.gA0EƀK Rzp3\gUՙD +w|.-HUB ?,>s_<'GyO)>LeȲ}96Pk'JitdH1 p 8/ U;jZ  jg*QUYVAVܬ!q,.){''.\X8ŋaĩ ѢDH#-1$:L)i|ԺAM8V}TU-Z` d@f6hA͐Z"=]b‡X<' ,]?b:jK.O;x$ 0F0Č&3\еyFRaUu&PggWXAj|_Ts;%Dmӏ9lyg KϿ OJ82\3);Ҥ6 $er7"R.c>U f `S9ƭ{Ǹ{ -̢iYP9[e$8*0s3f*;9sꦉi#l !➦R'wxYC5!5R8%2/z$D 0 r\ $v0G`Kᅪ^HԷ'AnǿówžA[Nڀ!ѣF;ti60KJvw)e*Z6ؼ"LbĔ[}S}G|!w<=Fw3RpzRD8qnebo_PuןL$i.ғIŽU{R85M8OfNMNQf ɏ'#ր;I`NJ-).ԓ"g@gZRcV 0|\u=~ a3=p#}i" y#=$+Sb]$dnE,oٌ.0Ei#Yecg<Χ<^>8>P 8ɞl.+8vpx!C5Q7pz͆fNN']J tr|c#[pi312 %9sx(ȡ&ꖧ }qs_0s]oI,b@,I4Pk6FNlEyzV"3~!-` ?Y6q|p|gp}n9M6t|=XP8aX1SOhfîB*QזU`Ps'\yEgB'BՐ*?Ǟ|nϾP>&`~D8a$Sa.:  6{7PNRXoJi4/"Mkp#ꊯIuRI   ֭q Ngo6&!S:ƴ?x?pPMybEد4/m<>.*4&yݶpa%f#`QHHm ;TOK9282X/oq (mR9<|#l/ ُ^-3uS"%ec.UL7 2S6'OQ6'y92K_aGjoG p&:* %d1LuF 5DŽurL Fl:yR'v/ y~nuhy@TqU?Iȑ?)Vg/h$65 D^Vu;_g>u#>e*- ְ"0,WhAMt2x.@I]r36MJ1\OJT8m[ /SG IPl@[gVςkH#WFiZ&~ͫHA`5 ̙$+it d_E<ljr.bkKw+fO)e [CV5LփK~\)c;^C>p'_,c+#%dW SEiZ%& 9Tj=E{-!hN HTJdN*Mlfaꪗh hmj#v԰52J#*mcD(T#P/ČZŏH^ j.6.d<*;7ޔi MP*!Mo*k5c?er8Jk3!=U԰qF#%$%^[R2ou SfOP(207i}MUn+e,"9>vp)]K Au ׊Qc5ZOqF\>v9Տ鈑%Hl $IJjJ0G M6ZyBZ IDATK1}ox% iI;5 V/bd.Y4.otRth>Qn.P+Vļ%Ldm dLOuk@Ps6-pxhcaU!Jz"P3OLtH~14m$]˹C=&F R{2`VvI34MŦHݟ g^;|y5 Gyw^l.^Af\vx@p*ΘKOHzirj3f"^cņ2KGf{ 2uXŞ2'T6f180;aԤFlAYs Q>C#;*b3}8(+W.$A`~Z6W 2o?x3^N~ 6= rp#/w7i cvFF Z5D$mz~TWnM2%dr#MR56MaJlD`+P&sx:ޅ'.Wu޴4,>a\=z2,Gi;!}R i:h.i|&Jz"EQ "Ͱ{H3^A'LXҍw{ePBX6l[u%ZWhH]KR}m} +ux$Pח: `]H){wu {#m"zMejŶS3x_jȚY׼)\/n}`2ֿk>8)rFPd. MvNg:"H#3/?w^,*DŽBjsph(n(E5ƕi$Y#pad3YslJ_3y"}:HFY%m6 sy"WQu/iAW?{w#ӫnK16N0Zzl!˞1K*L4nӣiผ5A˹icnz>"ǫ=N*q?O*j ֳb9L@jItI[&i;G y7LnɃuZ%w̷`K{v顝Ծj"h7&}nFru6ҏ_ ZTs݋Bk@USYS=mכvyOwLP+CSVd86=OFz! |M慳_؜zE13>ҟu@DΕZ[4.xc!KiɚU!XmŸʯn  ,i3%l⣶1ol)_Z9M!&>7iHM2o(vP?ofk{\rtYcyBU&CB8Dٙ7J18ؘ&SJ#!Zx:2X0ބ T. c-sB3ed44'JIuL4iv6wrK" "^4FU7m;o )e9xc_Isk6SΦ3a/ˀ\ I؄Vdpt}{-pD-ՃȺB(uݰljH3VMո5.'ڃ +4G$_ܑ;cC71^,qZD_Fxj9k/7*-7qGHR`ݤTI=YQ$s4ԵHaQƈi@J}G Յ|i6iYQ6GF{\Z`[*]j1>o5/Tcd{߁nVYOXB홺,D@voaDdx4S=\u }`m-ޱdiQ+ut˲O6TMFK;mN8m{&xLI)KT!/mZ4Yr7M6Rs<d4mUUi6*+Tl^a> $Icb{_ѵ)[=ZI(XZzFX)%5C#j[v<c01~oAz^h3©H q4" 0IA'ܶWz.Qۮ&ǀLZg$LyY Z"uԊmժUj n\3 AB$ևOseE :e"Fetw&Mi8)v%mf.@jJ|B=8~)^̙c2JST>~aøc/{ɖAj)+[v}fƒ:-Y74G $2s%7-J'hF~1jX1 "nD)B/u*M34c1n: 0ws3f&YQ|tT +*5tǂrMDFNA 1EzjzЧ!$JzbI*F$Ƈ~¿?y{\~{m=5ܶp"K}*^zn JT-m ҽeF݂iJ;FsW}jiTMpk$ ~"HcLgݛΰj`Žv$xE|$U3,-W&_ąTk]s" K{<(+$4CUݓuϕlCCbLkx;87jtЈȓ>=$ж$ &TmougiaL|H@'FP4}|}'뇷G "3g^[ M"mJ4MVz Q.JwP.xB05=Jr u~I4LA <kBL 9DX.M&%7qLI"acqmLY¬-wXWZZu| >gQR;QA::z)/3t̊Hzl8YS\lxeӼZj\ڝ}k>u R/_f=sǽ@8ѦT;DƠ'H-Q1-m(,[Mwff+OF=*9efBn\tYjZ<]xG[lZ,$_2Bs`}jy[as5f.Ub *ɤXsEBOuPm $e]eX';diЉKW)Y>:qJq;׃ڻkq%옑eEE[F&:c9|Iu{~tS( :ҵӆF*%>Q3%3m,v>!]~kERGfwCjD4Z&)-MZvčE, vUғ0Ue*a/Z)h,D<dub$`/ѥ QJ ]uRX(TDj΀ydgFmB#{& [h#zJ|l]৚5O0mIe~`-.Uko~iZysߏ|}?:zDqڣb@s=s[]ʙ4Hj #gM,~#ѧ`X /1@"f t)"L+Pp['B6M'4Jo2~O&k4uD5ETiIDzĤm8dJ+gb911(-,4;\]0 @WYĤt d8 6Op{ͺz%$*HM!Zdps?ބ^^] \mjY.]g/% Lrb E9{:E [9kS B\:ue; ` VsL31V$XS'DekgVXpeN)]$fȚEՍyDlՖkb}`vlJz4:& EoӜH~f\5UPgRDUwZe Hݏ1tssjpiLȩMmryOI]WU3z'XK05l B\)&Ћ 溧S0o2=JU$"YI1Y!_Rrpd&}R-^9D+\ÒQ[o0Ed!Fw04c)8:* ꕶmj{[XZ jJ<l !Z5Me"V7*%r`@^5v Ĕm8-zVgZ$f\|~N?9?fj9^XYBBX ,^F:b1A!Gpuhسq7i)Z)TXێ 6Ε3tz]`dݪv ŵgCJW비`(eIY3j/fQkWڣsLJj>Ŭra_AʓKvRj9~O5DxHL_Μ+Ov VҤL}'Wj0f4^*p5f݉-+rbFoP:QV)&br" &%םJE$DG[44IDՇF4opU|4::P.5t&ݍ$٤&o| 陪7=]ĕ!2Xl2o;9@ \ <> lUw,=eܬ!(I%iQ1d\tU3)("k&H#zƥOk)(c,XjZ<|UbU,]'bl:w *6zH "rJK !c 7oiQ F "If2;횩b\>,+mnyo԰qrdw 8bS9`u"y+[RxT?^-@FɜX0|\Mj9?ƪQ]ڶۋʹ|f*a2g,0S,K[8=)c4cc!2I4I(Ƅss@DaT2$C~vG6[m!2_?C8ΏBb@X;܌^v.8^["ۯic p%ˎ"kmw3(h+Ni,hQ; 3Nzi9Vf\Gv6ȝ?61BU>-FFmnMp)$JbGQk1 Z tX&ݿvzI0/EunE&Zi1%ԘE <jL[Yh u 3~2 Ԧ,R=xS Y ];sa ƂժX\92)R.ɴѝυ;>մc ~_219}0\7O}п/1CX^s)Ŧ0RK)A egS*r]v =HNk.ߌ[tnN~LKs,Zl-ETQԥz6EIN|YBcBXJDSʇbIhAW^ls%QSV]vh f"J(FPs+H ϘYl nIf\C\M*1Ө\H۷<$Q(o5 i*TW*ؤ[QB`nn%Z<%Q*8^7J Ϥ~0{]%C6l-Մ_#/#%qwp%Iء4ݗNi# IDAT}j'J5 : B#=V}SPRIo?~=b1+F[v@aV7iޖxQtawDe?ħ{- Q9 20|;]MCF@(eC VHCXWy8/YG"+#̓t~dKjOԢ{ $;dHV7ܭvfVE0OfiP-\i_|ffпGY+=!|38[͝ET0XX[6{{"Kô`L$ku^}|d3!7͜d=H W·#T%udLr"D24Нxs duj*Vo(3>^fI| vǟ%y\WJe UqV 2d^TR|fj # )' ُ$94E3څ|xWCMbJ{{0FGPEԎ q/\(tK@Lc苑d=8cNּ("ݖ>$5J:s--P3ik2'?b3j/ymu}8v6yV i:)Bٛ|xFWCdq0YWPf/(?،M/]BHHDDaRXӧS !GTi*wX> X{nBR,qfYT&f`1cJ;L# *:h'7VkmԒfW&[9]gxe)!kҍRt.~T V [;#X[gof5azˎ߈(TF1"bv["*,(y)-uRzH1堦Eۤcb#< JЃeA)hS&Ң aNR J@pI% oŜl K;6nL8*{R[jEk* C Y4]2O%R +CjWCR 4X[ oL( aC|Si*Ddr' oMY Vg,"3n U-=Yd7x~iG!@ub䑳H.IAS1&-ViJb<2ܥMKߍl,~ې#o}ޘ@Ja8Gx{;~Br,4z{݈dUf/8 K:jHDMw΄WkLa 5Ci{ և#[E:YF$M )IOc 5g2++*RN{R@A#UWkC,)Hi/*A$g6?7 % ŠRci{_m6\c)1i&B"NeZa<{B/r33uPG[է:xjvT FMX[f0 =b=&*=WuE=-aQǍڤ)!A2&/&F Zݝڬ% qnrrBuJ&K&_WYg%:*I.)"PIŽJ){ ^AiFAFǓ>8]HO6+sV333Oc,(ʙ6ܓg1ޚԼy-,$R"p\mw݋65@l(t q),U$i/L9>A' ݚTQ7m%S,7I_N4OUQ"#5sՙ!G*,;\h凉&9G.-1gD* R_0}O,-"RȊc6 o~$X!&HۯeF䘅KV!Ȣ|CڠVbܿ ;o8.aNb|ZM6I|%2uZ恅yrE_:Ú XԷUӌC+jE[쉹]=1\ lN|*V Yh+r~w=-/A`FB9IUjBQao$&V'e?" i׫ 骍d4^W`;&YńK4hxa H"l #!jy,ӓQ[G즛A[s$3]Rjy"b0GKxa x;2l{u59"=$3 xD(_5a,Ilܘc|8kkg1Ԍ:`Rz#ŽW5\Tr}BZ G}Yqn@,i' dwm p*菟8ޠ A>tXNC#$f$Lz=˼=;*\XWG\P&>Vom~s}ι" HlD> T0H"UâvamEjmmG-V*T1@PBG眽cϹ73yww=g}{[sk._UъfҖˌ . qcm'gbvڥD, *kiݤ>B+oEC=I?^Y)zP!Eb\T,'C Z̗wO׻R^dIO]v)vn dgR/-2o[H,@swaZ{|&y*mUh3 {K[qH,Ifo'03StV CS*؝>9V܃Rɞ<&4vd\G̛5 q@*mn]Eu\#su lXƳYSD\CctQǪ\iO#ޥ{IgZ;k.s\.# A 8Ɲ&EUH=%;sy+ޅWHхY +AcF bqv=n^xVU!bA`MSU!۽OF}[b"!D: RXv/sb {_sB #G} 7t.}m*A\r'%'A6`Ű{/T {R {nxl4{^?A B6lSITlc^M=ʮ|PR,-̫2Pԙ7!R(^24 /L0 p– X ^GGF1L}(_y bzm}cO9$f!6" (~:^q½4@6i6CrSX>ǃ!*[}$Y66y 7]+rnoWt 2;?C'YHLdžP+H *)Fkw^Ys_NU\I h>ysi0u&VޭÁsr!.͊{`}X;ikvŠ̮JF7?j"}gqOL ȤHo iZm$y 4fD3bTd@ :M 7%Zx\]ickϏPoDkq]}"ФC_FT]f"`Cfz,W<&+5HQNW\%knMdkG KJ4) b'b0mJI9+-xꃙ'p.PL,[kb(i`IBDkʊNϮ!*}1 u <;l CpG-v" ' "噯 FrS餩3hwQ%6}fjN߿PlAK̓v@Ç|xh诽L,J) +G)2S PLkfC'DiؼBl)%*u(Cōj0닭>\#P^<c=Ϲ(v~$ ֦\<ߊ_0bAX/ f|5V;'+/yECQ2HG m<_+B]#|x`MeW#.:,U Ǭ^ ` ? 2Az-g9 3r9U\-#Hd46 lw )zl$]M eDmC4)odK!-U ŮS\[ Cd4`P<\Ok,]CHx.C MWX3c^I _}56:Yq?5 /98Ӈwj:@a PdYi zDs-d#e+"IZ`1:( 2~',LDQnqA +YrP86r64MC(W#֭[>@^nYx]M $ P,D Ȃ; +ib1aW4[N~[H:}s RzAxjF$YmbA@w&@Ä漵VbB݇_BVmWg4";XX-CĶZc饘_5%Ay ZBM6#UXi&9Oq[fpgTB^\ }yP *xUm]A"<*y'V&gkx=cx#n|\)dǢKw+]z' &l&[ ,uB_rO#Q{11"h:ʭ204. ‹e%=VC?eKLWOZJNwM m-xdC&W| -RiSgzM%X)>GeU[%Yb! C K=~#HJ`TK ~SyvJ&M&8|KU*PD3,5{W:7ZDs(k"2&tLJeȼNRLFFtrɷ)ԌJ:ɄM˒i'62t Q/ȶ] ԱzN5Iu/MSAJ2)}PK3{.#JcfRY#iQDq8lLJǺ+X^W8Ec@H)% QFلXVM<&A8QV-AX6{ADc.2>IX,&њ t4syF<|KH{@K&S8"~H+<5chv/A9:bCOLytc\^SS3ףp}`u-Fj@BLng2L"pȄ[\CBŢ׶*i9 DR}.kt$lq {ZPNKIT΅CP|XmjаZ 8XdRR?Z@'/2 J%`u[xtbB2@=rtpXPȤ *۱)d~B:_uf"N#-Ω]WEZL`nㅻYIyKi 1OS $\M%M6#F]֝F)\v ߦPdx4kePAʂ `&osg%{V5dw3*ym34xSs֝0O|ɋO:n n06,r;J 2'+5#E~(qi&Ф>s/I (8ŰkT%1ڢ  b:Z&F%)QL5XJ`(| cQdh"*صKW{6x>/2uK[jab_wS c_{FEM2[=U_<0n_&DZr4ŷ5|G߭jNbv}OGTyQqX7N} AxrWb+-8n_ZMYXZ%zh.Vg3i꽟JPL~,(1DEAxTAr3q"44Q ~x ="mRL¢F!Q,sEr)MŒotbbqU/$ n5K1" *QUgjE" =cAE||,(O} F #}T@iάsZA' m?c"`81ԧbLm$ Gb!wF&+Q4E.r0t 9X>c (D`1~R+Wlζ7(vQe  \!Ф|o(vE#]i9N 50y(%3d jU,3ɵY V%]Ɍk5H i26UR$LM+*^N!:klA`DG\iaUvtzqE@ }-B219u-Ő'4JhZ[p_A{TV8Imo&${Fy" tNNh.%i CJ{p=R>@G>8_3Wh~u mt $5 S!Lmw^\ x}դrA %,x0VRP&h°)(9UJAToKjPD~E@\S <#fh{R1/V3`!s{lϺ+s>]KKel(a)AAnk IDATTˌ=}͉ݯO+.{CMҙ`@aҬMEF~`4G^=NZA1&|xܤb%o^qQz( `Vwͮ0Z? %O#ӂtʣW] 60lh) 4[ɢаF@W' md\q&m9 bAVClc{o`kkDۺU'5і79;vF"ĸ-7;јЪju-.4Puҙ 1 "y2 A~`!Z&>`9jbd''=SHIT' V~C*IcR84h}Nψ_I>]e=8jmJ0Kbھ`IեZKͧe{XXKnM!ԴVͽX^ (nhC3!ΐIq7w\tF0Sm%1EbKD$ YDvG1!F9, TXhh Y 6}wޮ;N{LQE tBuƬBuLAHv^o6HZϻAj_b Op'<$;{vFBavpY]Id&5$.V1╀Z<#afXJB 1G; "U*:ShXEV&H(ؠvw{2[?,w !njR8K6~g :r,G8^*΋ ٙ_Ϯ=\a~ vLM'"'@_7},ﻷHJ4Ϊ3C2邚u)63w@_)P5I,g~, X0GG[KE!c` D%$Th:Ep.TOXWqkIxTwFsw@Huj\x5lFa6&+b=:s~O1랊%c0K,s,ɬSW٦&$6JUCȖ"xDbIMC7[> A+Prfi$k;-W^ݿy^xr_;3TOoB:ot!`sj̞kA#!0F2+\ Y='Fp?f'Dc$Eot;GIω ]:Uldګ%BSCW^')A8`*Nr Ёg鬽*Ha@ZƇP\慂qe2]p@G6 (Z=^R;K삷:\q-..slqE֤EVI5 1_z[H]{xJS[ ֹWa}BGRx`ͫt`u~` d)XV59Ni1Tg}˼ z ,we"Jnb '+ K.jQ@Kf%q *p  RyN#Zn#:5cLѽn>UğaUX9ش9TX֮/A=ض{ú7Onamgv;>w9%ي&:e6gV"! DQL!x0 xvF50D R4+q%%Q]nw6.% GdYhٲ`fO62 -]Jgܺ1y"|vW~p'ftܴI`@O^o>6MW@R ^zp9 $hd@ Bk(:0xr/aZKf*^yPde}Ru]U$@Q_lâ#̪A$p!k{,8HM,-B6pdVv)YдuL7N~Qig l?Bき^#mt떍8k(crv]UXRڅE#!PPF}4wA.Hͤ(wD׼j/@TwW[ULݕ[\@gM}?fƨ8C=tN{Ȃ,J䄭*qVIuwϛA&}_7m=c, __+B)6/33h:R'D)Y * a@Z& 1,UQDKE71A U+ "T}_F_ (2f&͟{ŀ3SY"UK);ixԐ2q3Tcpj Nk^, YsPe[l۽*YNu=nMFvZۙnc5͝!;o=Mz$%P#4-L@옮Iz=N?Ԓv$-ҤGRDQ(U/"(=;IޫU#ġtqz$:8s lA5 Ɔ=ˢ\\CI-K? E3N>dw ux߇=NXDUCz B]V(sYrd Wj v_!  Zz̰DbwTaD(EZUj 9Ss.ń emP!B>\Bue 8,0YKrȹ;V!u= |a493RL6q,o v8dHg{{H],=Z  `4#)T8A#a`(Fa.fG we{}EyA;A=jm៹b{$sc\:0 \R 8jJʇ!C1LJpQ?8|L{Hpk_:u6ar&׉o>%䮃Lg$iHn6?IB2s*!%5:ZX4.!dN$%.moF Ҥ~q(ڂ]Zؼr 4WfT.JqqpC:.\)md0e1^D)33r׾p-8ҡ)@IV̪%ż섄jR%HAS R,}Bs% 3شE" aOD^pki!b5]8h(ɪ|՚]@ֹK 2I&m5|`i=\td<ҙ2pda$~A Yʜh a"@5e̦mn=adc7We$+Ս:7W?mtw$fu's:IޢDg3Rg|wyՑidmD)^Aq_ Y"ܸv-PMB96X`i V̬Do`/-1^!+Vp&p!1Q4K&޲92/ ؼRn:-;.|ބO/r[n{s[^2mr K*2 AtYROP+K#oltjS !b%\wu49e(ޯ{b1ڗ՘S_A#;+>& KjV-d?3+C80tF:USbvd{ ^fyjVͪ18긇z4.3w J ᚛oPU(vP .W| ;i/i\7#5~J~C5,jyn~ sNчykѶuExcq3ݤlLy +Љ wb.3:A';K`ɖI <(we73PFK+ؼu@5D ȧ4Q=ЈuafTp)$@AQ@ ɲ"fFqezy@y[s&͡9`Zeҁg)p ]8s@x{>HSGF~.ɴ#t)ER T[Nm6 :5JkawEH L(AJzMXVD9&J$ܼ %2OVy.60:CNlc.*+Η)A#J+AxsB8 3櫾[_*w~7ߋ|IT}6 &)aD&-c%x%BJyl}w7*eDZ8R(TkF=O,b  0-RUGA̴ZsK "{SO³\Ó/W>AI  Pv'+&x}GFj 㛌V븈(ެ,g;( ]CחPp̤r"^([Uv.Cvݲ𤗾|{=l~7?N,xHQ(wf=:wy YiLd bEHYO9hQm"w Es'+Q䗾|/ao>wbqm G59סXK֠cT@SuiE6k K/QBa!KXm@S?M!_@U<"6%Ax(UP\93~H-`@$j  榗~9 o}wݩbe_5"F1j󅥲Zl& 4Yz8nV9Nz)0_Z"%%Kx[].JSR\&0TB qlH[3 .7@fFQGH&HS]l{-$7a r]5f\s7pHvۘ6s :G, cd!mΐy{af-Nn1̭+&ȻKL:)x;Xȯ/ ޱ N)@|P9W;+tSjUith6vsbbRRƬ-t)3ЪeBT *q ]h>DZim"IK6&.ui3ר8ЄD7>b< IOCO"@L YeYV- Bb&%Fha:D$2`+'7ՔԨsa%$.8Vub 7EܧT@1g;ܼ`_ؒh\'PWp\iȿU|콿ަbO;goq/P,z%DaR,۹lZbzmje}6*0!R9i\'ądgwG@}ӟO㋷|A*$qQ[JH^/&:m o_'~+@(i mt:AQU2(n-ϠŴ$Sؘ(YF_4@:: t#nz;ΙSiJsny;p-px)!ڰ-6Dv?27i-jiP;UR3fHI9n.0:+Իr$+7MVAрMh"¡ ǷE/z!Q o";>1|_w}vvOjR]R{kS·O>K(;*ͽz{1Z)>5m}Bׁ0oy3moYXhzxS9nwq ynGBRڜj7@X{ GPSk6Sb/M޺iOÍ~.bao @궻>|>;ԘHz66k {>G=ufV)u">ִIO ~u/|apGS[ loߏ魸O^Rm6{aR΋顳4Vp4Ap5u @u}AQn7?Q o2n_ſOKsFh+2C_9{="s.B'*E:^Kd_zJ*#M~sŬ~Ki2Sn|.SGP;h"|Vq-C}j*"+@ 'qu?J !AΧٽ@3 <JGlk^b\yfYv?Iq-!O@ĴO+^2@u GH1U4}0W]+\g?!|!/1Ѐaw;Ngmma&fG09r4=RztD=IzCp襗].pO{0O;A;hO;A;hO;A;hO{VIENDB`pysiogame-1.30.811/images/memory/f_img14a.png0000644000175000017500000001372712201770071017631 0ustar tigertigerPNG  IHDR^PLTEnNS'x][&yixz|! \!)M!!A!+),5,/35>57Z=|IN;z|JS"/^]^ t:巫j̶ d+@>}o7NrXrvt W7lZ8z] E"@aNR6(n.A>_\_ WwA]gtN˼pz8Vgxׄk^|@,OXY[fUŬ9pr̫+q !9co3$2;-\^Oق̀Uc{r!vݹGˬ-CT%Ȇ8Zu}o[8^JA+VAay~AV:G P߇ Amo?@ֻb8?٤xo[PQGCVKwpb<:0 o4uf =~i\4jOOe@69:D>ٜ,//`a8mߝH7׃*0cX\O|@"!@A<'ܱ1azԀ$aǑXJ wEX# m,hc@ϳi E$bā0Rff{Z(ۜ ȣYP]QFKYSdEiE #K3 xwG9B(8v?_)b(A*5rSA=mQ]0/1ohZLh}$] l#ʧo",a_>2PaX N<2U =I7CJ 3ˣm#`xee/X:x!4;E$v9@MW%`yRK"bHDdXVƔ{ )-d4 PC!qJ0M{d%^rȶmA-Lr( TYc_ȧb}- ]=\h+_ٱ\)YR7o*VLł,`F·FCei [;a gآk۝jQ&WS,[dKٶRAvbmH(ׅCxydzpfW~UȪɫeVݕAĔ0 {SccaRb6,vs}Nq&Ik\?#@) 䀇0G4Qߕ ad )%AlW[ Jvm]&dE:pv%ʹ7y7-В]=udv8Bn+N <Ց͓a޽p̎ NVKi W3,&HE?Dv -k? p7Hc:$oϒQC[Y7֋u޸;G9H*_ϲjنF(}yYLXmj XlF7Y$eވ^ CZyIQn#Kv0qvG.@fq RrXvLf}AVhG/]‚VaR {N BZ㘅MIBQrd[!d$?$㯓l^yB;!+$HޞFO@&H#) kDvAqqJP9PF䴎K$')ƹ"q(RM ZD`WAn.I͇z3 DVh'0J} kJ-D,NrΪQD5u9UXj4J%H 'y4aMǂp. t1@ k[Vj|@B~Q }(iCaubOvNĤSV6q t5 ~sa_~dٝvb@ZG$`샐86D{E`U(#\s}=H qYyhrIK_$ر[z Sk*SК Eo,JP-(@Ӻ5wVuZ0N"㮁/V"As×l&"E(r49;uݴ$mK@ QH,D7H.R";U-qyR@6`:X^w ,Rh[u 텰5{i(Q \ZvF\2\JӃ[qkwKw(;yeHEH@[I"uHN"ۃfÐg*E0d{durA::/]NNsG "JZӑi[vApjEzp bZ{ D%Q&])NGv|Q8pȦVP =ۢ#re[;Mg{ !Jɧͦ3!ѣ"5C MeQ>ĆHA3Ed,o!1NzOrvnpR -jH"quиn`Q,xUk(co(jcY3(Ea>";'g/9Mk&ޖ`9RVm'<$az# EYj@xNy{My+< %AED #x%Ė~"l˟1Hs/#.B0d;VmDzB.Iߑdy؁\_IDZp"ߦu֣ r8frEe[W6J qyI%Boi-KŽ|. xVsmߗ9$ ~C#'EBǵh>d Mj 1d;{ =ۖK 9\{i-kSt>8D]N$)R{{Ǔ^Kj or|ٳAnĔ%ijUׅѴ VDdEd.oJ04k!FS렓ն\SvzCnqSq ٱAGHj6xԼVV!ѱ}K8"&O+eeG7?d mIB-N5Ƣ8FPɒ \q̂hٗ"o-1M*r6BTwOT·N݃JEAaW5+QN.A.! /9{D^0IAaO…`[MmA'Ac +0M4 Dwz9uq-(IbPj$)ۡ[IB$Ւ{pGk@b:~F D=9S ՚<#L[CnTQ܏62px {/;||T-L i=^}m=E`%xqrҏ&m,ɭZk1+D R%*ȄoxG-@Bx|=)1٢kNS%i OTy_=ТK+COKǶ,\ۣTqhaw|8DmKb$^6ͽ:Ha0ʋM c4#Fgu-@мdÔsPQX<5P\i,8h#K8VMNSxy^׎d^]y㭒r+)֔o4|9R[~dg ]ޔ$,-reElȈEJN:~b|UF7 bPtM&Ԁ$]>zz$o{yNi(/,WwJUz8ĥikn{%H`&M:Z/ ]hYm<.T+'_z^WT+ueCfBO}wA1{1ɼ4n>_C<*\YUO` q7ԑXe+]ns"괤퓵z>ЎeE З7ªzq{_JLpȳ|*Ь" w8N~4Y_F6#|E}my1OrU+_4suյ"LRʾ1,Pwq؞7)3}Ŷ3*-Dc XTfv|4oYxK붫.8wٶ1v vS,Cq]unR-P?Ţ%}WmXׯ_%.G; ?O7.a1ޝ $|0:K\qթ_u7^Eo|թu@8?}XuALrsӽ]=FċG90ng>Q?(Ըn{EYhQ&D ?d /Ktw&.ŜIENDB`pysiogame-1.30.811/images/memory/f_img9a.png0000644000175000017500000001547012201770072017553 0ustar tigertigerPNG  IHDR^PLTE %& *),.- 213 9 7!6:> A =K2 AN4M4O5L EI!F"S9,C,T:NW<MW=YQ [@]B[B!b_D;M;dH"cIcH'aJ$k>Z=lO(shQ)hQ.hS${sV/tW*pX/oX5mZ*QaP BjB{]6v^;x_6tc2`3}c4 PpPxh0e<}eBsj6cn] 2%lClHm=p7m@\z]v>kxlsIsDsO))g>?BwIyOzJzU%Fwxkj3#HI~P>9PU[a?$@0VVd\HJ8#QVNwyML/T]ci]oZVmK]]snn^@jveQ6G/qk`=\lk^k}wqdcäq_Sf¦ĦzgY;eEȩwrKƒmή{aq[pΰ̰˰ŲhijYhFҲԳzm~SšcʔspLqw\XYwp|}ԩx~ZȲLJ[b[ցcξ|cjkr؄kڅssz܁zt||Ⴟݼރމ#xtbKGDH pHYs B(xtIME  7 ;IDATx{Xǧԍz = Zf!m+}ߵ0:I n7 qA n7 qA n7 RGj uFUɍ+ϙq111l G(Rcqc_7"Lʻ_>OXJ,H2E =]P;xH.q##AK&NXz }٧ E=}}9A \ԧGw݈ 0~IDxs9 9xo^>P]|||}4rJtQEǘ kY#vU]QQq0>IA ß8+ݥ2@sژZG_cGb9ᜣW^]|tBx\tY-I $s ҍn,ڪJc `8rQD4V_U.T]:2yltj"L6=kOQYYq10vbKU8G.;v#MDD")9wAr{t+p>rq$0DX@$8SNDW7.5a"WК@#h, 7h/(}EI~"I ؁s<=<] ·ʟlݹJcl,rO.:R j$ ~Rq|Ez\JG б^Ti':!` >'Jr"%Ѐss==5:ZQ z0$L_:C6Vh`__$E 3wU$ʳY3\p_ܹ1Xԁ#!: ywa3TJ ȅ 70#]Rު߶$=k}pn@_h*hO4 'V˰gg5EZvqaFrӃN , RaCD\>RўlʮUSQ9pAH$ AnmA$~0JN%;$G]e-?#!NrF;?84O]?f:PDxGVVLdq90 (ȫc в{q @҇9.f)bhOiݺu@p^d c }|y:~cDggh.Q9D>ZlH 2x00$g!Jy)/LB)eDjݺ_\~h+ $$AfDŽ1{q0 (Z5\PY9+;K?ŋu]B*+$(l[A%KgO0aaC¨m"|MvDAΆ{Ub ;l%KfO>aCЀA "`ϟWZL,Z?&Hv:9thd֭2O'uơ"M O+ D'muHqMF`L:tHBmIvڅtEAiaK@jj+~ީD 9+XB3q^-[rcAjFb[_BY:k: 2tp8uuײ =cEDD$9E+X:E*nnߏ ܯDr`KkuRq EgG]N (Iܚُsvdo0N,}b~Com;U_sfY"Hx0ݚ:1?KQIj[@3$ORBq"5WAo߼#% |RDDFmIJb" m ׈S7PDcۇ r7_gŋ9*A=s6/ $ YDƞ"dID=|w FƊ:r<k݊ܓWDٴ`@ۯOMd,"LSh,XNTz̜3{J2fŘuT58<XyC_Rs;d=?-ݛ>9]s 'ě W/(Țųg#. c=ǂH!q'"<5NMA 9%d9벵?=_&էsW8ϱza!q6ˣYs!nޢlcPIRqȈRZ(7'p|@t#,InkBcA˺V I CYL2hF Gz|z%}b8VJHnZ4֠2Q"wIbm`-QG҄Hzyr+$a)%n`ǂ֋۾]A d-ZEߞ=GBڄ9'K"GqdN8 86F! 1ȡ>IF8H/8'9X>.zp8P9KzL[˒^~. 1[n)1"d<~BsPTrqCYTAz9MʿvTZ =` 2^ ip&+K1C5 93=CK7+@ECF&+*2pNҧ>m_"E rU9AVNbƺVTl2nSq,c dd,0l\~U]1)dz ( 1Rr0gaD EF1tА!ׯ?" bb<.lo=15K'zxAĤ@c߭a9$E&;vԈCGORJȁo+g#$Y AVhG^zVːc 2 ?8F<Cx~#7;+Æ0QѣZ+q@1et! E;j(燠"C5{=Nxd.{X'4w5{͉tL:j0X1q5 70$G6+ )6 (_9`?*.oٔâً 9`W,qGٖNܽ < 584;jm@n d +In߬. M@DRɿ,!C9F477rx=u:@Z)& 5Xʼn^8V3oO#Za7 ְK h+ C/8YI7'JVi 7^VYԘ:GAla' B*y# 9u5{ࠃ`f@: ڀN ` m@@R8*]=0nt MÍWV)'lӵIw`v똱I_dMqVfA#ZY9QənK+ :'b☯7O].hR3m8ذTg rVL4Y9iDi[pzGg`X`pV6 ځE;`{ՀrA䖓ALJGANS K}2u4j-A'tHMcQ h 2Ǚ:K$ĕtRp&6@ī8vB7yeo⭮C~hRs/aA؝# 0D9gsYdFzM[ŖiZg4}v*¬EӰ~ ,_Í;4HXF&bsSa8g VI~~}>uAW H"^TѐHu&vCi?<'aDto$Cþ]ݰ3l Ek@1'VEnUFgS$7P#4NY4 gDlU@qd(n)dOe%DŽuoy-P0*2f4Fmߢdt$f3f g6ĄyqnǽVFU_bU$PzUM^Aa3W!_|혈0Ro?{H/$$$ +˳m*Chj _n`mCvMMΨ~k^)-4y|!cr zON㥚t(\o7SOлM޽uOPY {8GKujS^Hu'}ʷ?v=LUIVdIuO?#=cկw ܷÿC;B!BxV lK|.>|z\G}xؕ n?A\wp*խ<ya7 QEF5 TGzba4Y+~jcS0Efخ)?BE{雮]:*ˠX'Xaf`O瑱 +$ gԷݬ7_%d8\&rH&).ȜC21H,Qԝ5]+YevO':B/ٌ.c1Hh@ ijmw Fq %9@$Ef- 2!Q|0~<-5A $ -*51MkVZN/Aw=[JG)\Etmu `̵I6 sc7^@fαd>~8%@Kt?( wϱ5~ïr')%F3,*:]LH{rzi};/ÇOwxah&S0 Bz#-Ud9<„>Av1e& g5d9>jJ^%2z;ȈD}2DOl_fo*nӢ=>~O?Ìu[X,+ 6xgoaZ0]/̖Gxi8~Gk3Y, 51I`.6H3°ǝ,s \xok_foN.5ȸ(Ţ6lw"śWSLb[ʱ62ᾝ.6fq>~_qi}2 O  Ftb^ ̍;}{H/ Lˁ>>6=kP%i P@2`,_ l}]v }E H87XH~3,.*D1JLX)cO lu>)ǜ `!52IY$ayvOŹ};N#}+ w?~Cj}e-Z %^t.M^>q$IUc$$Ϛ-5 E@$Vd+5H?^j9/&1 \ M'uq  |`U+Z*ǥ7|PIYy#3 $0xS<gd'jATEѼ 5 %״o[%k.}[!4K E-'dDuIh 0PLi4JbRdj&z1[ڻy~DYb1~<֛n;50 F!*V&з6Q߂ƎI~ X=XJze;r!(qqjήp1@`xe fIp1I>p^+Qޜ ģE} `5;Nb2=buOnBIQ,h}kbk"W|+hHɍD+E΁|B|(b1),({/U{OH%RŕhQdUljY:ހ#(c݌({/7Q''ec04#&Z<UzKunпc2`fvnQ g$ 2~-A`ۣ}T,a|gJˬ YI죍άx{)-n\oQ3g&UI@ "/N| /5)krվ ivDHq%ٶzѨx=XN?^>v/l;qb1f<.l$3E bX . 1En~q!=ݧ}%bVd ?uOF4Zp꥾5^("o*x9/DWvD$#/_qsC@Nb'C$Y&V8H % $rk7#Vгgf͏xRxtN.~aYV>M~L3rC݀NAU2ÑG5ƣ [7gy\qDY>%#n}M$$)%; Ӳ"Dafd$Qƣtr߸uR~-~ _Dh+оfx%ƭb"ÈU怍d2⹎=оf|߫3A'[/ƈp 2YDQ(ñ%Zn/aţtr߸r_ơn,"Es}}D~[q=wQOA#!ot ,| áUAWEEmlIZ:^]2˒׷\\,0_ErH9[+V;yQD7#%udp!Jod-QIXÇqX}~s +z/D{EܟR[o 4'\JcaN![4 ;Vֳl9~>_ t&=/_'c K[/p=?(:Τΐwp đDbOf8aJgᩮ33/cRlxx1 cJ8A,P7֑9X jjmUԔ$.Âk:>ZLLXFb$$:栕P}~fm٨PٚmQ8$m@VcJ$ȧՋ幣s7g\+} eXuy:zڢG %>@.g{]!3њ@,/ s3Nf 6iT s/Nfgk˩,/( s3N[񳫜R>^j:-.}4{?B75춮0Eo~fSǙaiz}>8x>:p(E=G]/%!Y0 ԱL'Ux*8ƻٴr>nuUg9޴ r>jegrs&g*ȭ#Y/b5ϧњ@\MwO\={ um7?Y.@$zf'8Cl+>{y~= .N~AHjU#~Ke*z nҜ=x%%JWi7G2Ϗ4[AUkՑo{txn9?aٝrM͑|{^5]QHH wyף͑|y.s7zz#dB雿nhAkߤ5$?ey]9o|Nks7z-ytr^~ּ :^Auir7I8RFP97ގ>wȲJKq%ՂIV,I,C8⭽. %7pmL:A\s^w A6AvpN$ HQDx&syS'~nJ-m<ƈ4݀sTsdL{z>x|_Wtq염_m'|{ H:.aM5,*^!kWW#[{T3Q~TVS-g'=9fΈbKGDH pHYs B(xtIME  5K_IDATxڽo"G,"RC(]r(V¾X+趰(!(-4(88+r,Nv.1kA`Mfe+̛ffw,D @"D @"dļ]2?62 ^Ft Bo2ƓH(a"PF,~c"Ur_T0W*&ҕ]u/E{UyQa)ALGDZ5UUtW6!7lh5X46D}qQAZW+6i=ZBTX'C/xyBxiAc#L&H`]js;8 |DMc!2TnA~ALe  +&#BC3KWSnԼD^$DYi՚[\bw$[\R7d~|[b_KX ޽ZvzINHE5:X2iiV]rM "g Gn1`Dsf?`CR<ed0ӡqd*>@L שS g8u^x;;n Ycs :ĉQ*8J0!v mKHW_%ay:]yYva4vcv8"dX:,__ .GĉTxjkt~/b*S]qEH~nfa+b#劐b!䲴m})"N>P#z§@(+: Bl5w{gBGe&ց7X:֊\%MfFF9|Z32 a"d,GahgUttT;{E<GW8FDtF `߈&K9HD @"D @" P * i7IENDB`pysiogame-1.30.811/images/memory/m_img6a.png0000644000175000017500000000775112201770072017562 0ustar tigertigerPNG  IHDR_v0PLTE' <#./-R/c8yE"Y[YZ)~ƘwbKGDH pHYs B(xtIME 8Ey"?IDATxMh#_c{fl|lY(@Hm6>[( u`d=  9,{kaO 3[.cWU]?-ɒI}mT_z^Uڿ#2 #2 #_rL^ǐ,\›;xnA. <#%Lkyn; X*H*޻+hrZeP3H^Bz-{G*Ļ &7|6C o^ ;}ࢌoJcrkacg:G"n0Vµ Uo'<4w0:+hd" hW(SZ`dz(;~;mg֏ K JĐ g0h㈧aV^dVH Y/=> KK9,އ}/RNɖz૕ g{5h-РSEroY.$]' WFMߧek+Sm}_.꛳!-;¹\9C}> 947a1!Gr.ܫ{!X/Q]ruvb6a!PU,|>\:Sh(|GTa!0!T;_!cYXcǫf8!<9׸*HfIJ:Ƚ(l̫+yMjY7PɍL~ OK*?!K v.*!DFI`Ϥ bk<͆)O4icȷby}'+5c yGh!eN/D&ԤYQ-0%c$%-<$DHT&gUiy;ߜhЪ` PA oИ v HH\bAźk;hix i Lٗ ƣdzNRefQEB$QQ\[RQ/֪THwuY G>)`wRn4 ~r噠*>y썾WYP\,x!TD O3^HZΙ\J즅܀'*DЖ՜'Ǚ8ĚK!.I:&Hݾ=2l 0qd F+6Q-QAɂ RNAo"02YS*ֈJ\Qj<x4Hb-vzo Nˏb ߹hY$.^qB;=C[-P \9-huz6JPqC*S6{r3 s!DZ"p(gw!6A%wk8oicێ Nu GHX:-BJ$.?fxE}}dG߷lR\'da9[4ww g:\r< J`jrzضDZ+rrJEp ޛ MEtH_k/(F=)M4) iޠ'2pdISw265~]K 5_r6v:}WD}:%#AYRbSȄR[ȕ7WbW?G)W$"$H <47s$/:̡k<쨹 9S S%߯/&D7ѴU\A֌^WbTDb- Je~Tbp Rm⧩Z텈A&J XH DTߨb*u. $ AfyF"Ne].~-ۋii$`x rW\Z+&>4QE\6o=e<[ͩTԧ fFTS$Ss%۲nDYG:js.H9ҟj0aV mӯzMz/~maQ|(ʊccmފ: d70P*<{l7c-*Sm콩v ѹ1(eXe^rc!W (E9D)em7 1"<꟧Cj:<!!P>y-L4-ygfH3:W}ѯ>!ΐaG8-L1TC U6 g8ꔕwWmEif+)0s^a+09 6B1lzqxƫ! WZ+ӝ> 1. sw+ {Eg;Ps1bc1199COctj/6hd@5DƳ\`nj:g[4~aѥg Z0dyND˒ݢZnUeL#Kxxb)I`_SZc, )QH?X?<0'B,.+C(K&c_'G+aCe|>OxZƒzY:vN@QbqN+-abHi=+c6ķ#Xۑ}k!W:KuhY/3l_Jr{{y=,υ{st-Z)v 'p7 !41rI/FԥڎZ넃!EbnHCz`<@s'wpA:l=!>0mN.5qM4RCMyg# \ f]biH4|FKA4uC P7%.[Խ=pϓv}!(xRW{7S$ퟴФQsID\k mw[AZ,C]k% gI@6yo_Ս!@0g+Ń|7eGdAFdAF,ߑeIENDB`pysiogame-1.30.811/images/memory/f_img4a.png0000644000175000017500000001175112201770072017544 0ustar tigertigerPNG  IHDR^3PLTE,?$O7%k9j=qBwG|M#hTD]8rdpQz.bKGDH pHYs B(xtIME  7ic"el`Α$guO^i8 &`l #H@p` ӱ8}* B3LdUN?Ȑ@Cy@wĔ$f4 C۴!1D89DODXZPdgOxb1@{,$#!@aՁ`:BHE|BF7dgHuqei|1*X d\^xz알@˨K戕L+bLc%;Yyzsy#ҁЏYVͺݽ7φ戋lSݽy7g dhPVn8Vn.7iRce@nmPG?Z޼aѳq10O? olV=w!ؙd 9n`GOػ)X)Sn@ J&$mӁ cnIK{AT-hlQUm际|ljIl⊁- #0P*;A;' .p(Ja&7zŸ dh\Kln#BDI- xK0a֐üs8@s5gR "S1rK2w 2iøkg瑃U}-A*l/#ꉜ$5?CbS BQ{^,K:P!$O范'RWQ)6Q2#`@HT*^AT!+~,I"McfS!ώs֊߀rA7Jj0/ t$=r(}sV c95@3VL DžmTۡ:: P;Ai#jEQԔ/ Rгh搜8g>u{΂c鬄к d&19zj3Ն^s1< @!~C H z)l:Le{ȏ ^1j+E `oZ+ qGt@a(jx0 7YT땞 Y2Ϣ9Wl:ԲD17˹Uk٥OdsHV ukt-髄]Y nTA:'W6@FЮMi|( a[~[9˥\wFeٻG1YLﳛsdBn5(}}<Ѝ== @OtQֆeg1'zxDPv$ x fZ&!9oemXcvs)ų <9%mpWʿan tiwpiN pR`*(SVk1sĺ##A[3xyA 6Z 5dVO-SOMkP |ȸY&G~4,(A\NN=bP ;U sVi, $ɰKslT j.O@T 8~Gp u;!Ȅ6` VoLt Xj-x_Mۚjyu]B t&ϛ01ˈ7Ib6gm`c/!N>V:~$>bLnBc◭.l HYpYd0._tn$1Eȉ# #(#~Ĩ +|aHG1Tkz:)qh &ָ Ԅ(W)cA0wd4n ֪p|4) $t) S8ދd  D&ՖQ#{ ćC\DrA͈\' ޸c d*NxxG'HAtk吙uƤ?=>E }D;㚺KP8 6)W~3wmLHcLՂգPrRxIzPtjRv J1%^ʼnCIܣHұBP*Vp1oopM頓•ASf/e8QUU>3}'QpʺS?B)nE*ƑU$dПJrbwac*.|xvW;HSolq?҃GHDcuG$* TuPjQݺwңz:DEJB"Zf 3G(Hr1tIT$xZ|@K2#&;+^¾@FaSs,YBrQOη'A{5*b(k|KoeNW~ t D.̸έ@FUt'94=PeϪَ@rׄZCsTZT=/t5W]bEIPӽl!`1I؄X-οWȥ`J !bM:U[Aе2C6nGk^qRPc՝D;vjL<2F,0js%9XZe ^8\5+kG9j\'u 5cV:l,HpiW܄E*`_ TϚP7lb[+G9+nz\˟Ie+'ɣ3S%G ڡ$M( 9P;W·~q"U7刮9o"Ta?Hŀ|NK(KBMuT"nqO٭zїb(.'SB(zdܶ-ȳx~6,B5K: ߽̎GQb4)6{%$$AO,c1ŽNGvTJt(-/H,k̟ dϩ j@t7UePbT#v1r#YծɴWD  bWj i|1RC@ 0+D |4`#L! ;,,.ɡ#%v.k|DXIƢkR1„G_/M^5zxAlxA;'v'XZ4@~AH}AD<==I}IP~CCDA@H@UTXJLFFETWYNLK^^RLZKQOXQOLgVeccS`\VUSP^WooVR]WdZ[Whcn]^Zyyu_poeZl[b]k_wftaocinjs^}cpmsgvju}jydijqxlzqst|xu|z˜t΁́͐ω}ȳӀ˿ׄ׊בٍؙ܉ߓbKGDH pHYs B(xtIME  -X3o IDATx흍_ : !ZA$(#01e*d{~:ڵsݟU߬Ykdž @6GoOx<+ MAFDA#d{ݗ*^A{H3IM N9<;o޼sbG8@0w\1-Vύ -l1@t{l2Th2gYorÛtdAI ij;H`2 K&E?yw98ԃ.devK?2:5/!.apᠮS, hDfBk?c] Ct9 ?U:mX" SgW,:ك0!ؒV /9'qeY|˦^Hup85eG_g5;O~}j*]$%uXʲ_~rt*;Uz0t=JbjZ-A&oyfԓcH<_ǕiQʦdCq,@m2 C @CW}R2ROqD1dY%fH"(< O$dY'<2'e.&EP&8n1 nl, Yx=fF@&4)OsXzdV&u*U3;@4:&R!8>O)U˓{2i_kDᗠ٭$dB9ҽN@zҍ%̨d4[6 j4'?V_~ǀCvsiD\d\g 1Ѵ! *r) }r7$ITB>BB.24 &A0\ E8 #;qPl~НGx*˳Կ'}F l&%B!Lhf3ш^v|Hg&V0iD v0e8EA̕D,s}j3_&B<<[UƆ)Q?yo=h]uyl LC]Gbĵ Z붳s_"L! ;Kݒ e%x7,ǝ;fܑ4shvȄa-2=_ `XQ"B׍s!à@j (J.)%bcwP+]V^Y 0 _rg$r./Di6|. H=>26#H|"K.߬(Ye'٬f6eS ̄yDw+±u!r =WK*Hn "6S45Q|t>zyy{{GYaa!D(fBچEfyoISJ |UVirIJϱm_'am3{S\BrŅӎ'qUIuInCA>0qG=Jx #PTT\} 3 fzhOXu;ˢ,R*IWdRZژ9gJP2^id<T2T$b[g 0r(h$ I1tU$eNNHZ{(k:E9@J|8$Q&$ OKJ<ΦHdb>{ir\RrdbclL"7 Y%^+u1\2^Y*yy:*1 ih8U !bJ:}xɓ!$qYn\uGc%U nG% @f$J*\'!)㏈7r. CVr: Jkҩ4$lLO pD9!W|q SSSlXw9^F9PyQȜV:x" h%A[ !_6I-'Afnܜyst|>*%+2r{%UeԃIwכ] o/d j{A0f<(;eqwrRWF&?h\|\~̓d?hO$~f60, 27TrvZ@[: +S6rKQ,LWq^IMYA1t7.xAF"%f6_h`D^UD-PrUJT&K /bP(ҡMj t |3kcf! (hvc]k{[5 Je^U ?=id4m Y5s%$lDkdۅy()ėk/6>}'bCަkW~C{pjD"M>B_pV@j_$ bwvu$$eyN\q芏<:wq)@H0jDZPBYidA4ސ  mR3X&+^h5t;\!HdqoiiVG91| 0Dd&4qDJ( +00ɿ#ɻ]#ȇ]ohie.*>Q$\rHJY]چSw1 & Kހ:ڧ8n|W-f B rhAc P*~bC6"'0L7 2JRWWQ sE-3j1N RAic-ڨ]_Tb,TRa hl6@itTk)hXwJr>>K63-Ui ΅:X T"RhŷMR,9|9O@zlH[?,\"; ]=LAܹ7{{j5 ESfkZQK ~hl&y˒ἂBjr/HQ7mR^K"qh&̦IWNa-@}ЉrRn4 <WV_m LB9 [)̶(K$_L&˴yo k$")/22 ###6#imۛQ F<Vm>?gfH]U|o 0sߊ} ;9=^ 5eaz)QZ#e :ț|؛bY vG/7 N-Zחh [I":pb3AF"ij_xXF w:•bbU]i:jDRME^4CQ']J C'udI@Nw/}dJI[l_}Z>o7j AxPYVH>A Z U $ژ$v><a(U<$U _^k[+Ϡ4?67W5R.Ҳ-:YyZHK'?1)}  [^\fZBkV!>p#dVPk +%q%!Gws3;W&Cg x[Rô}>yO:FgS|h#}pU$W&uK/'[l磑zWu-:,`vOk(y# v-=EBXq<,ZI:R,Qɕp4M }3 %|کN$Rs&yAx\}EReoڛJWZp1GB=c[C#**YHԊ~9R$=$^|gHBꥶh@PVkr!" L JK1 5`bUJ.W/BZ6 :.zGԫ\iGr-~Y7TQrd⃱oVkx19PON;8kEʔM0a@t7 N95(z\kֲ |[˘$WCĝoA{$Q vV J*B6MJFNALԏ?NYFQ*3\Dɐ3avbG߀<`c+.F"VpL:)c]AD<<.t:^IsS2+? 2}u6L68TvW=[$SMB$} -ZhbyB6z=TA<iv) 'oJ47e̅%xb ȰWm\t~PQbݏ} TXe91۫RO DAk/8Pr,5rX()-X\\TKC׻, #|zFD{x?,곌HH46?9Is C%0bq֌浮Yh\bO#×_bthI-V[I2۴m$=jw^+Z—hX5L[0e6p5JvK}ƆXhUf5oi!#sYve%K "9[[=M4}]Ѭ%K \$p;T Gl3<"}d芛hbfvj+؉k)^ӁxVa?V>綃xoГ/wh D;y3E Dȸ"?f.էXF]PP-/fq^E#4ʅDZYbsɸfiwG]xl"I/;_8Ω|djeaiu} FWZPMw gFL}ZN[KXH뻣(U,d1z s :^MMڊrp"X{r2mǗ!J.rA1'8Z.j; ¡aYA #}ZE\=YM k9Ɇf$N(q}ֲa#LnjDyv5J4[@CydX|`2:!ÚQaQ(q]K$v_) q^lL{$ϝV0`({lVroY1&%ɠsO8LHѶCT&V&# $u@[St>`f=srTdaD˖V6%~Ę2+&nyjfǢ8\0:4g0YBAF)BU'Q(vuv"wC'vI9!je stF~\"А?lZ,wKslX@,3oxgI Vj}ZtFO|nЎ#f~mTOӸMS0s(nH4+K[F # [O%i yd؉GU9׭8-ߐ\{zCc?<@isb "i^*7 _C|t\/|a j#2_ mü %K8* 0w:ѷNwMvNGdj91f{bg| )dlr2n ï Bnn}cdLsu/yoF!ЪϦLoVU5*P8)/.$ o &EwX~clL;'b._PPiPF3]pJ/33kϗh"+ʪZ\\*q?΁GoMݴ%% cV]__?F9<\ TYucfϸ,t  FP".wK+ACցG1E~ g\Jsz%Jsab56"$<8Oiptc׎(%1Q\7CJ,TMF$Dkk[1ۃ1>4N0wUT8L2"(H4f $iUq'hgΘ #ndjJvdUo._%B xra@IF>ܺo!H7}N^ąI1Z:H)z@S./)2<8 XkC=WE"WCMv?da robct+8ΔۍF4q/ 8r]ZEIWd|r67@Fg6K;hNdF9=ͯFYU,5>m xφvI&x'p^*39_} GwmLby2u::|zfY[ڕ8_s ;2=v ny}A=9Kڹ֝[oj|[yb;S ~O|={k iw<=mA;䗶; IENDB`pysiogame-1.30.811/images/memory/m_img3b.png0000644000175000017500000000162712201770072017554 0ustar tigertigerPNG  IHDR6F PLTEwMbKGDH pHYs B(xtIME 82IDATh=@q,"E(pO#d@ApT4|#mh\LYƯEdH37u!R^Slq|S$'%und)TV3IGo@='9 E 9~3?l>`}q*sɎAlD${*ύ&OJ>ٓIA'T>YdE"Ls1&!5A _%}KO IH~/ؕ NkѲV,oef2Iz]ė =1`iKT P WK87oYĠs̚I V&bC9TIEgy;9/^CED&~1]YQJ8fG~3/!yu[i(b$QE>B8DH'QHɄ$#Fv 1)@cd#k4S #+hd Q7M,N ;.%Y+lj0 B_'hLI*Y f}\iyI[#c-=ĸ.B&L:IJfҭ-OL%gZ\b8cQ^Z[΀y5f Gƀyg##{TT_!7ȻNE+Ã%ږk4@jjQF>Z<|]i (qaӕ9I0'kkƭBn]+.[|?6o?3/>wօ*.&?NnXIENDB`pysiogame-1.30.811/images/memory/n_img9a.png0000644000175000017500000001432312201770072017557 0ustar tigertigerPNG  IHDR^PLTEDOZjhukwj#s-i8s4{:7ɖA:̯<ͳ<ȌNBɳE͢NMј]PϰUǘdWҺZտ[Ѽ_Ҿad׽iتukruz|ݹǁ̈́͋Ӎғʝ֜ڟ֣ܥ٪ޮܳ*y bKGDH pHYs B(xtIME 0&QIDATx WJgV%8@QGG4$&39{|wuu? /_ ESžʲ>u }bJGq_R< D`0PL0WlxJ2 SW<sTTk F9o S Iz%`dQF]q>eO┿EN߾!<W&iL|=7ri:2N @&~VovV瘎O>- HQd6|:/bǴ5Nxox @<-b&/xhYAy dʄ? wqGjs0QsDH1ɦt}byq2:@##uoP pZC$,)aQs iY$󽂤Aj86P! I4}ܓȌA8h,dHMz&CfcfI+.\@ 3atLIZ,nDHLLqcX~aƩ;8r_+~H6yNT6=nJۏG*?deL~Ym$M@ "/FFI+AǽLO$#Y}U˓u  @F s$%J=LH ^e#yNdI$1 0,3G¿(otf3 .q$HAܕb 3IҘCd%ܶ_{,q Cg2K"yAltYH83.50KAGġgB*IS[ٮAh ɩrn/5U G8!נAgG2] `/v K2AVuw! PUQ%$i[, l{ M+Udr0?>6t ӡ1%i[Ь|o. pBA$!3bfl݅X$$fQ@&H8Z;wfǻA!>+ pR_,0 BkeG+Į~(VR?269D\dFApeˡ؅)q41A"!ZT$]C%U84ưMȃp4]Ӝ_ԡ}?.p&4 #]rAf9q5QXց~@_-?Y lrcMn+S6Rs:srrtdXC1ک'[YuCKdr%'(7j2I'<㭢Ãã_oRܩH[vY|뛻`~A0j =7G  .mAX_:=u z/\RgD\Q#w{A2 ~9dy%DRKAuq+ #g(JX'eM"C"DQ7$i9YT?fL~啍_' vh;y߳H@H=W-NhN?ĸ~S*~y<@ NvRV9 2?!uT .AN =*3$E 0/nh3Q (Gbk>p_nA `7uk#⊏hxXɫ󣓋*fbI$I-:ݙfpT 9wKD$/ͧ mMg Ӭ 6BK{rľs1h!\키\ p<֏OBkKຖιbd:mίEqÚP3S*uK򘗇=,6An1M`$7\T9׬rBBBʣ++VT#m*Gvܹ8>(G=V^4ur~qeL{HE2+Z$Q~5"y.iNJ$HAZ,B?mށ;a֩nU_ǧ(n(e5 L."h,'zrq}us(D;,R8%zyF͢1{bA5|'BNx\  ]ATmJZr=}@F4hl15*5*C"o@,fM3-]= U^`>yz{e 2.K&0dCj7`zb[v@h4lkָշG=9آX.M^C F+~ zdDh,Yf`V[HTQNzǏN3ԭV@|=n"n r{g)!)f"I0Άl'"JbuBG94C֡ιjBr\AT'ҡҔ6@U)5d6oxtQ-+ zEr^iϲW~ 5[@I& ,~aŜd P@Q閸-̰p&Um9 >/ 8&B Ŭ8Ie5W[!ϝ5*g4`<^D`;Fv5Wl$Da8J|n z/C]dmħ J崆IQU^E*AH|Hd\iǐ"i[1h^&(2OwlZ!I{^麅30on&&~WInHܕ3MK,[B$$T"iWJRrnYx ^ J/)h㡊I2ny[@u z|vj6,2Ȣ#,WKwފQwiPh16t[Z $ d Р[*%)vB D[yZ-&*e%n5E7%j]DL敆>E{z-ZNuǢY/ȋ݋GKg@DՊJ/S[Ep"u"ILokUuU ΤkVnulB,;Fb*q U7!_4N͎i|嵠D@nۉE-`$C-O9O>W=f=&Mf SZҳB@b@31]mlC^ $kVDu@j{ddUMpW ^y**jku{*AbltճFD@ 5hb|KF ]D~Nz(A&B-ޫ/qܰe G7(.@yu`:Zj )FtˀEPĸF#"w=ѷx;`Njc G/1ܘģ]H<ؚZJKD֍}܍C92Wv*!mŞAZ@Za@I}ٖ@떛@{RcUAD ,- zHYXpNi)B,D ׉adb/4_:ÑA ]f4O]YQ2m!1Eg o{؆oӀ3\hjլ^ ma2AkZEbee½dYҊũT^ 86^FR~̬1\X@)Mj(Q8W(myGrU^W_qֆ74xu1on" T v!luZoóBvY$ qqEӮ׵G_nw 5T,nOs~6ʝW+&UuT"z0Q.ggq(z\U562QP: ۘ=M]ᶌҳ Ge~4JB&J;O*`+L^D}{%B_PaPtm:ewнom+ g e"1TK0/XJ*g | S*_5{{ Zyh/z\KB>\qQҢ\ r)W|/K) ~( 3D -Mg_ c -0|5=/ m,$?\Y boPs{9BX2`.@gJU `Ȋ) "g" zh58 2GZ"lc2fhBh`zBۃsVECm Yqd%R|yZA'& >L}@EK:W1@FN"AzsO^wìK&pAI@vHjbA$ $E l$ ˚XR!Σ ,hΟ_4 ${ T/ˍϝK|%.l V`O$7qv"F=Kr9X!tF!<_*}%ނK)nӉ.HY3rE"Na .4_(S>].KC%84ۑ\zsDLyL oA\WAdOd:Ϊ]-PebV*I*"@V&^ 71eK>P`AZqۊ <]03T?Fּ2d7E>QEV>$n0ȋYtDqlY!6Q8A&+d`86O4tpvAJAA@>WD̰zߚ﫶@@:ȝ 6[Rz2TC٧2/XDAj`T֥7sfyC%NJ {~M|2^G>+뷅856Hs W}UtF3J@UMxπ_qv1΂|_?j"\+/v 0K!}]W4σ|_2M4a#iK Rn j?J˪Q%ٮLϦ5U|;ҽ~\?' = 3jLϦ58@l;$J}_?IDV(p C}; H~/>cNA U2$ qVB\ۚ a4T-Z|p[FH=i=?Z j];Mk{g2{ N5A# U$P~}D6- $d$ZEE4idu~>C}·cvugs6q-NLA-qtmn w8[y1S:4 b{al>!ΗBa aZH 1'Վ"UN'NJC38շ4@Blq %)yK;j[e'3ġ@q7Af &y=PȴM@; "f$fk)Atk+P6{ײh,o:6ۧ+/C  ZNmg8= ־ʭȻ"d/kǁ7Ĭ2S}`7Z bt$,쬶i[-$,ny.O5-RރϦbZ5n /r{2~'srC3w $sȎƢVʇHaoSaUU<*(\H؊fE.;Vt9.X 2(֢A uhZr7#ݾ 5gL \"v~_'R'H".Gh%lp?v19п$TN>B (4k@d`s-LOk]@F (l - H V4`Hf fw@jPApHNXv:;S gBG8H;]\BFʖ(:ۃ@eq'7Bwz#k~ѺQ̧ul $$@HI $$@HI $$@HI $$@HI $l5[#tIENDB`pysiogame-1.30.811/images/memory/m_img12b.png0000644000175000017500000000154512201770072017633 0ustar tigertigerPNG  IHDR6F PLTEWbKGDH pHYs B(xtIME ZuIDATh=v@A*\tsV\"GGp"i|t@* <=X$Xw+mڙ`T99ׄF=\"*#Ѵ/^w0;œV.;  IddaAf I~̄<]wL8S mِ 5@'%\&40EzdO-Hyn3I-Ƞ&MQllpI4m@Ķu9nlQcXoݬ$( %(1bLbpZA6R#HٹgcEJd㜔8Uy)o{ˉ ls$f$rs€( ДTq[T j#A/;[NSb" bu lH8 bߐ32bsu7k%y-S,| 3IGdˈUlZ9bEێ${:)O:V|2q.؂l=n<#i'(>LT 2 MUh>摂p&$q*HCH^!H T;0G1Q*7) B.d"TvUƜ(tB3 EF$$vEBJƀ) E@ w$!kiHkGb.!o[s5òn͇˟.)_7ڮ-IENDB`pysiogame-1.30.811/images/memory/m_img3a.png0000644000175000017500000000663212201770072017554 0ustar tigertigerPNG  IHDR_v0PLTEL6V$-0(TRSL_dK{+n&BGۮbKGDH pHYs B(xtIME ;*a IDATx훽k[lEڵ * xF~zI@4F&Xx~ 5BB`mPm+Pc0Dn ~͗f;ɲ E"K9s, CCC ʼnz Ʒ`ЯUkvd qm  {aiY3oiqjCfxWH_0HD 6J$l6@ e.K"j MI3AzJ4M"qH ot]\{8*kәϽ^@fxil+@^'2"g+74p{|-lsDJ..ށxD炔_2lk{e'92㨼O} @zE+ )L8 sˠ ;duodL$ [ۧaTai,v{ȪB$´FgmㄤBfL[>V:Vȵ5 d!C@̽ =fB?-3= ̒؛g~hPיDl05GZ\ΕS;ybTi qw .`AqL4ȜoXB[%IYf"&.ʓU 2"ڵ^}u/ōDm]s=׌m Ṃ~J qD> oSFpO u$gڰ'BFuUNŭvmY]x#awpd̂¯  gJ\LE~߀g%(>BHX q$?iXB| /tBr!K[rTNw"BC/#i]n;ގi_8W Pc=޲F) DVfG> m5F}M.;whZ$CWD{!Sv+t^J%b-͋^"wC{^򯔨.9ag#:gbu`2+t3,QY:bB`y`#4%jx2ǜ$b*g+(OLQD%M,F%{E cn7;OOnݤlߙ9B 61Ӭ-tŸ5.7 ޵d%vP] T!e!3Y!&/j3P.m&! wdiv bxK^r@rG̿_%H)Vk_k.CH]h :&0PSm 1 yT]vQ[0gN}Cne6PO_`d!uy\1uK'|Jn* a{mk3vȣhZ±M!o:<bJCfA:@52<)nH#Y#/|yw<|! aScW\;RԣAt) SW AP!,,Q!:B; )H@t# y)M@\jF{EsO.5}dd!]XG/OI!OB 5{1MfPٕ+R= zb-yd$0H$3dK/FTgԕ D4艩@x4T=ɫ4JA uc" y`-b[WyuS A 1}iٓ78 u#"3CBHfa"HXAaK`t_ F[!HBc ݖA+aϥ )HCvc-!CII3 gyydqKţד ߣvZYۼ r+Z4%ygOQ,pQjmg,(<:>m觎jsjzvqu]@4IENDB`pysiogame-1.30.811/images/memory/f_img19a.png0000644000175000017500000003126112201770072017630 0ustar tigertigerPNG  IHDR^PLTECJI HV S S RPZ^ \ )T,S#c] 4T$^"]f&^a+^-_%a!4]'(b7_hlA_%1d$3g9c%8e-Ka's @e.Tc/Al-^c2dc6Fv0z!Au+J+pg@}hg;~5g _zRy]P `9X]^]u + W@\r a;w|~׏M0a߿ mM&gnpCƽ-om&L.Lxo{ﻈcÿ?iTsm|Spjl |9{>aG%5fQ?Ej֝=mܸ(/} '-z;O`~< 8GF;cD g-Cح3YH\}5oƇsxq76ӻn9h-d߿Eԩ?$1vX#'G-(d!5Юڙs/g;z詝t3ތ{1<Ťd] ;S,3}P {xp>u !!ՏpUމ&<7Cg W*> x73eՄkz>އ.ª{ί{݃ϗ: \ǫn;CJ!j^ ׎7nʾaz86f_M7nx=6=;Ύ!p5( tW keo ӼCgu6ix7SK;grӦM|M7d9 d 0e8nJxdLrOɷΌ|8in" 7I nB %_p?;~4x y{@p <9#R7z3AL%B y_w5@~XaNX?28K /LE9+P.Ae7L`W_elsL~Њ~T~<]@ykd g>u*3|;7#523LC6 vLzQkS1bΏ÷C0w`7 p`0APl8|כiI cf*3 +0?䡓~17~Wnu0q┉Sm0$S6*W?|-z'*co2>`WD^@N.!e7H6e rチ=l/^sd,yY2wɀQ0LVq@A Y.]).^pBׅҧVoopT&zr-e@=M&Woz: aX, {gy'o? ݃ygd̎(? o͐_39вҌvxR,zdЅ)1yvߙ (v .a=ģ>_b ?!)b= sqN2=`zc+ b̜>r>X_b ;9dΘU}1' >?Pp& L/in<յq &JI?ƳG-s8)Oґ󽽧jcɐrMfĹW9{1€S㉧\ F R(- )/hr f( ؾ;+Ko9ts*|qL&z#x=6o^3<ǟxbEkT*"Qi8qDoz(I/A2r#ҳ̙sow{t{-?W' 2#xlN\27y駟v6$%Kz L5[ }/&zS2lN>{X9?h&8Ql X?^E?odN5%7 7'AFs8bLwT|(/3ŗAr04Mp>$DK*hlpCbpq) .7c9-3H,#C_~A&Y~[g#HW^?4B/N +.ƒrcأ n{ fs̜(3g:9&vpj-GHF>6:\0J0 %-B A9kOz9Ϟ=ȥ!B ڗDC`[ҡа;$WrU8ܫJr<Gt|B|88C@c#0 Y?+#0P&Q!5J/1ס  \vBE$h+>\e!zIF ҕˁWQ5jErXI͆fɄ71blX #. 4Kh%:ޝO<^0f63^w̻N'ĕ 9D.@Ԩ:dvXl1dȹnw;bEqܴ-.g9sDFJbqܥ!.ȹA1UnGఙ Hm6$$#.r@-.ת:@<w|rؚ5xǮ(# DR5OFRjv*P& 1Ӣ$B.)LTA@@d556YC,+V$&&G)ܹ!*H!} |guλaLL _EXA/p w K5ka+A0~tKFe~_Yfpfj9+ ^X7H )O~~  7SuX9HO`k^ܝEdYW$m#OĐ[Pˇ;H`IJ$%IXjH<2}hNL/7\x"?bKaa(owS(1AaQik0e7@jM23/Uqt2<.rI9;T uuӋ6&'B&"QU'Mjf %Dn"#&&F)B\E ([uKH( ;vVڳ?pH"1J;KIBq̫R H?Gx*B#_Ite)3GWYܑ_z9o'T +#9uElT,qA S VnpYլwXsmfPXay d;UK/x VHwY ! VeY-Hy. aslA۰ >VSSOOEb:؋#+2/IS)U2c0V+W49$?Ч0Z[vToٲ{Ϯ6߲w/[B'l 56@Z (`2Vq0vCr / updKo\(爫ݻnۮu oCZX'ڣizFr+84CUZYa0! Cag-'WK\ēNԎۺvŦ]u~ VIIf]JRzjH$"YN}a .!6@U$f2H$⑿ys>E֖-ջq߾a$tQbM=1t T)q 4c1=\U jQ)1tW uϞS@\0>t]IIQG;YҜ2*y&(HE?ܓrUSg21ĵ0oO^-4yPMKKm- wf.kuB+L$/ .x]M"*"Y^IN^N8Nh)86c $ݻs5(>8\ p]IK)1-]~ʑ"U kTD+w&!XEQW&2:u4TOۛoj>}gg^$%)NrO,l(EmE>P\A&ADHZJ fr:Yew|w^Dn[uۛOkkojk\W^zIˆQmi=l$^w@0Ud-b29.IS@RLj~l d/Bh@ u,^LAHXl~$Sd; ^ a, }PJ,^y˱Z'AK;]r'55|Y u"0G?tΫfZE3Fg2uKRG­O^}M^UVr`h* qtšF*u8\q.[ %b1Kqj'^\^F ٠_oq|Wu (|MR+;{f"vAB9S{S4_2-滠Bi8M-ĀNwkMp`,*A Jo?qO7TK/Y܋bGKoSZN,vPU7y qzqsKwں7 נoߵ UvZiش-%U-r8mG?Eh!$g/?*tHZwK?N!7Bפ _C .Yk◃dk6mw0oK. APȶm .@Нp8</IAPUp & kOT1&'Y!om,E -sE yヲmQCR,\HEUo;΁^Ho}rmox2Leb?*Eľ6?nsU`4Q:;{=^.'8w0H"k T G\ɘ֕[ڝ]IV?q볟e)A{d7oD  j7ZPj(N# r^O0@IBZ]  MJeg//_lT BQjˆW%:5GX$M4mim(ʝĎL3(9K'PI(,\xq^)׭^.F{E|8,@!\ B'~ba$jE mA &LOe cVknD(+pv`0 #21]AKDOY,낥 -[`u ܱḏظaţFeH hmM$k}A/UCЂR! /Y8wҔիW/]te)OKuCyوt+9x3lRW:y]Z)#]-&3Id:>@'qc|ҹ!FDD̝/b;ub#M«Dv}@HZwٳW F@PsT?.\8A? a &PB`M,&[ " 'I|'X&0 H"pgG̅gPȯD;,1:Y$VՈ@}` z k >%"8fsa SM $ZAril1ăd;c]&I+<&ee5pR)$2FD‹"%B+L0!gy93ISH>Ώmr'o07yTGLaZDz}@**A),XqM$A I FCkB"+<$*VI$-F307}T4V2!/B3@SH(`qddٜ|!ҊўjPF$d0nc0^q$hTZrK0S0 $CDXalNrн(1{baR~@ai#"Ay' jtz`Sȿew}A$ ic8}FA/&^WWt*7(UZ&XفLcpWܢ1s82O9"cI `@bFixxh"!waܼ1~ A &ImFcq@]8b-NX 2A5D2mZN܋!F 1^:=&*m͑2s\X^]<>!TXp>F딅 >Cl4:QMGEf:o6 ޾1(Ra|.6~h;ߺy3mF8 H@5uZuQm;j3 ftξB\iN¤VSSUUU}[T˙̗sr2WY5Na#Ysh(RLf/Sam (Zu/k/0F_z]v9F66mhh{wϮW**^~啗r"=%E,yO36nH}yc iJNnT*v@=r(8.|au˖-mn۰w_}OuW_e/ғ&PK=EyH^-%]R}++8FFRVeyves{ۯ^u.*I6]FVdI Ve}sS[;@~}w7cq+W&8QF5%b-FBBD5Bǯ:U[mHDwxFZnB0~)iB$.r[}}S[[ssk_{޽cǎ͛Xe>F:𝓖p)Vzq`YKyVy yʣZ:>[.?H_O[>|[wQxx@g4wʕi,(ڍѣCŃ̥ޮ] ۇ LUV2yeb9#!Im&="+* 0j'US}_mB}NinᖖzDd+QJ@ sQ|L ѤϽVsQ(p Dra] yu|`0V=,!f6j0bzJ<QQͿ?fLו#DgqW)r3s2yMY6Jdn}z sF]}_7PN5*--ErU8re!Kg;\@j>o= aDr?GHFtAxD!xINPNpLTVSUWX]_\b_cgdh_ egd_bd$nlplnkfsurvtxpt+t}{|~{y)x#v}/ņ*؄Ј!ޏؐ&ה5(:1:;A¾2bKGDH pHYs B(xtIME 8;Ȥ|IDATx]_GvH)"%P ` kTrE6 }a_fm|Q72ߙ}g>?ip -[ @nrj/9}Kzx^O+! rR&N[7Qa`$'d9E#khr[7iM"SSSD q^,hxs[7 ~7)-ײq2byucja d&s1/gF9_hX6Gم|\"˲rɁ$4+'ԕQASR\>@N72UΖf9i#iTt@jC*vKHgHŵ:^PVoBy$@N^ztu͏*:N#07rDmzGbB~eV,:5#Dثb\4"\OrZKSr'O:rb'+vmmiQ]Nן䤖 ҫNBmV$'24@Z3|d{iR9&U3ib:9x&7~֞LujNT A}@Z[9z44 ty0H D}1ٝ*M /c }rq}͈}aMRNKE-gv)dgh@%вo.B8.6I-KX] %ZQylLV@FěJTcj`⋽@eAUT%G$O$~WЌxYt)VYx!Z$I`U;rE;pL~)E/.{f5`Y.`u-@PplAu>Jj X®SCc6CuASgAsRd(^3:͇]۫&HV+d[vǭBt޵j?"W dYOvW4#RSqmr9mRgF6^g]W \iolHtv] v}"6Hm%Y?@E"ve+ROU׹OMU,,D_vMNoc8;WC HjaׁpPMvN%*.a!S*orRu(c':´WYY}Q#>0KmsK &H`|aV)D*,ҒJvU5O|& l B A)qf }&!+m%8S2Nl!RIm*8_E0pq,@~r5/])LI"s7?HMnsؽ$c"848ɛV'LԬ=PdiL))D6#F)J$ %٦O9f#N oMB)CM)SK|1 N#Tf P~7*|$X~IpՖPрε\ w>%/I߷W6´O6ćӁxc4Տ/C8Hb4KTvht 1 ^ D;ILHqEp8aq(QhׁD%ZGI Yd[&ENYj%0ռÅǽ8R֢B N;!s w4 ^XdɱwtAeٙD,&fȢecjxM|y\ 1?]SY2?2D96Q1$ϠT&shb}~"bL\ vXRf%Z}i]x@v5gҠQ%͇z8 HL .{{VKDu^ozV3A z(Ȳ]qңY@ ssoxu]_")WA/ Iߍ6kbKnYFŏeT猒ssڸҁ8bO@];kN92lKZ>CRj 6qqMN3<&C8.{F=d0+4gñ2 DּɩYV_P|JǁBKb.~SjEhXh,: \,$ ֝U~ 6$$.zqȩGYs*H'ĥ'i<{NaKX<2 ,2g'a9] /7vI($ CݡJIG7sN5꿄ʸ~ӞHX*y@##[uBj̮a5I]gI*EE8H+ |T{~Dikf im?z\7SQ((oˈĕ-kq i3㔸x|[/*CMua(U~2WAv}f>٘)64zj`G%&|.bߙYnkaVLʁ fyNS*PZ>g L(k ~Kk&=*nhUJpƪ"@Xl u20mZuPhXlîⲉI|Z}^i&iINӳˈ=#R_P>ȁc%nLӒ&R#٠Y84iizu ?mXd\_q|A}wJ GqqUqӑڧ÷u{! K.I>0Erf6ãͳv}qql6?!(ͪ 㜺>dE҄} ɗ=}ZU<'&"sP*u"_2s/{zjuOluzyFvTN$>=eg,dm䎧3vDq\#F[-0-΀,bu, c첡ERs`[+R]y*)E*j҃26O&K^(cdSrd 6$/5/ycF7 qQ| t>2oZDe|w uE/7m60FBF3AJ꧹"2 9 7*x=G|*ݿ756D)28ZɞHjbƉ{鍈Aj3@\?µvuƐ`;k/׷ˢFWRO#IL"P"<5sj$B-qզT A2hbҿ/Jhă]tKF篞=PiOF8 erȋ.TPի?j]3t 0jccSqUW@)78tĻ<

@<##ɏO >0N$Ayk}C>ԖET@" D'B }vxN+9HKTHdCGZCPOzpN?WOiW?`c㷿tz'r7xEv4 Wzpͻ d_=n51ͼ$\,]W )~{gp@ V27,dL"pp7]r@yat޽{+EN:U @p>5O"ѼRWi9%1IDG&A"aek|?#FHK{> ?Ww=C|珧pWܸ`~?!ݤGOӗH|~|vKk_U}G/ZX&K~oJo/_hIp>}?v '8agoJ{ /Oz;Oɷ߫pQ}=9x!ߒ~'C$s<.IV\!ȑ AZ !@~PUPGCgӸ!@_phs_<'֝ gޡɗ? woʣx,WD%R=RZxZy[7&~etrB2G/Gq؍IeE;6O?$ r -[ @n_9rtIENDB`pysiogame-1.30.811/images/memory/f_img2a.png0000644000175000017500000001707312201770072017545 0ustar tigertigerPNG  IHDR^PLTE!$''* - .&1'4 )4(3)*3%-:&-:,.>#/?3A,5@49J/8L'I=lHt@vNtHpBstKXxNA}C~WJ{QsM?_}SwSuGq@zNTZbC]NiVbq|lwxƃƙȇ͑Ɇӡ֭۽bKGDH pHYs B(xtIME ,M'AIDATx흉_E40%0ba, *P2 #K&Mtљ>?|0p/B<.I2L{i3x_SGaJ .er/^}I6?{hp ̀ZEN>lmmYXJwwCJ6 !s[hS7BM"G^L@}c^Rd |v~oQs.+G|1Oq|_#@Mղj\(!ΏA2DuH0^^ :a`=FtwvF3n瀀돯!^@bd% -p]C.H $2$F!Rlģa$" $?L3H\ӎRH5 b2fS\ );_Q<!$pYA]0\oىY2 & 9)Ln*>-s! r@8T&9T X$ E|h_\V@c292-$N [m}( h8x, >ͥ240x| DfDewի W} .%!s(}j?fxL@,fl5aVD;pYyIDQ`V."ɦ(aH_MގP>Yf[ŵI^{0we#=ϗql:-_Tމǭ?RF:QXn3pN/WƙkLbjrqOg#B$%$\c FnD18` $!8*x[$Oï*5r (U!ˊGuQzF<7!*4ɛ7H@!hj{ 6I 4Ms: ?n!yrWd{ R)u$bC[y( Nw(;mwFLǏw.e ~iipɃQ8uLߝlTcI ֚ɩsL0D7`ہA((ˏMG$ww, =0b e hifr&  XA@Pv <7WCő ;?s,ZBk&EHKO2ݝ_t--ml #EoDyB "ÞM qh11A|Q瘚AfTte $0W)%LQ;w!zV;0^atgV^])&A ꑌQ$To7XmHAA"Ejr!bp ]=¿pBE%!V+Ȉ!kZơa"9 d 213 ,2䀖XH) ?{0`UL 'Ƒexv4a .&?:6PIWA4(PUV)+ic8$o} ] I/vR- (d3 /E64L$Ha#H7%qDZW֛@:L7A n";Hv&G;8Kr$n 0նs@Q!{!,Ġ@f ,/Hb$X۷o_. wDEjR5: 2Z` d& O Inx$]]C l o(t@ JNvɭ[}o{P( z}8* UUp氀KP$/B#az}[2Z@D';P/Tn4HD1jrH$9!C$@6&boQ77s| QF}HA&"D'9< ml:F*T PFCʊ)dt |A( !)/y,"1P͐du. *U9 -D``OW[ ƊRBۀIcnAp +\A$HF,$  =go{ߜB)~￿- fAgx mm>i(5@K@'\+0@ a.*. M!+4++$yjO}ƽ/HBtzN _1,+LJg@$U1.Kl@V׫=^tۋrdϚ.j0jBDJ/{XݼyI҇AOA|;HA 5Bz!2 Bd<)f"IQ$ȡc $){7knȠY>A,ud0[HsXdԭ P(7&nXڣ@ ˒hAɃסwA5,HʺA7hyyiҡz =<~ T2L(#b$a8n`6%%́Ah"(#dGVbM [e(b¨("kAn$UʗӯTGԦ4rpB$M@ t{@)U\ P|1s^{':b;r`/A0XqKٗyK\S~Ϭ{9 pL49nܼA1_g%jiY9L ,'dr\fgb`֛P8_ovRXmF 2̸f^r:p\0_+E0PE_$!$yj=N'rΎ!IZoDgɶk dmp7CաwL5[Y ,1 rHrf G,kfwj0rkr@Y%&=öL4-Ad>N0αwb,/+MîS . 'kkQŐk M`Lm~\QeLXUׁ*gF7w]A#?aR M Pt.*bzY x3܄{1]1g M LJUFm>$IIr)ЪTt+t&2,DYUArbeWiw/ hm dKM{׍6E0𐤼q6RHՙZ[YQJ*jpL҂|W>D$nt5mBOw~tBF f!y7-h9Hψ"SP-9IlN1yPe/hb AA tsHVƨ eM ^M>"< b, Tzn+$Tr٘u"  qVB_@27t+t16<{vV2$;ɊmA@+z871LJ.AqO$TzKLRylHF; yo8g"9$|&QH"c$xl'lZYk4\A$Bȭ81Cd&: so]*XmYL"3 (_Y. gDBmFEw+'0p)U@BdN A^0XKڕcl]9FyDŷ%jmMĮ[WbTWavb[ 7XFM+l4XQkN:$K>ŗu^L( YeMup~bs46K%4L3H_X̙l%qnbH&H>1ySBd\%Ӱ4]NMk)^9ǞC2XGuN/S):`>$H+bE + ծJ@z<罪m*Qly$AWd%iG$&q(aHrS]TRrhb׉z<2(rR=YQ㤉(DY>YMeVOA0{Q.Z ~1'T<ԕB"'ͺ 2T^sco >j*G?P*>cY&mme>'޴TT\^.R x2-d J-VP=~ SJwPQ%@E(*:@~|W 0{JlйwYM DZ\>[WU1 D⽙eXޫ۠$Z:2DyWNkey923։ l0Ҁ+ ?ĄJ5V+JR'H?Pj<#h$|[ |L)5rsf^՘ى3 hD"n LD4l6;LT]zǍRN&IO\;Ce,B=DK8|*yFC;t(Y*C^qC>-I\1O<HZ!0bQuh{c WsH4NXw pgShn~Ԅb{;!OUl|ޱa[Ǫ"3Ŧ\zPJeGM蝈'.sKyi:z 5-yo6SgYj,Esn)A@fUK!2ho57q+)Liƒ&Y{(=Na6G5 Y%W*CI=r,9 ?Jg`wIT}E/R7EaVז"t}M DdHj$G=xvl=BUjX쪇O( nbYbCXܕnz^t/Q+;" ;P>yPu4P$G:D˓$o<3@B'>T)"PQ)btB:wZ~T4+223L+J"!"^K,d mtex Ѻ_#>& ?4)Ȭ.Kf&^x6BQUNE-`3"k-ՙH" 䰖w;6:[sE2vg5}^~z&EsJI6)!cR2̈/Q}k"S@>AX'BӚ_D KXk˦ P]A mIO:o&GƿBz[F^]24gY5/}Y(iHAX{!7E,dME?y -]d# mV\M˗![#1P0=xud.`Ȃ)Zf`K(f)0ILqI?evq݂q^#B0ޑR3O!g_|azxxk W:}IENDB`pysiogame-1.30.811/images/memory/f_img7a.png0000644000175000017500000001421012201770072017540 0ustar tigertigerPNG  IHDR^PLTE"+""X7 ;BIf>sELRVX\^VWpuwnpw|ڀ|߅  ɑ=А47#͜V%')*ͥo,"E/.8.'E1 4ԯ3< ,5(?G@Q%09BEtJ/D)4)=Ea+E! uGV]Mj#HH8 $#/U"B#$B^1K102N=G=HȲ^BWPHIP@iGtGYJRSʐ˄|b[ϛ\]\m͝[\cezenkuӘ׍v~ڄجܜޕߏި2۟bKGDH pHYs B(xtIME !6tIDATxPWp69/+n5-8` HD1^? ;̡X`U80\2Xg(6ƻx-F7;5&%{uOffhu !$.....D?P"B܍EDDşD|/JEKR"Bp8n^׿}?oGķ~7/B)˸v% s=ν?9zZ( __|892o޼~x ;{fH$ 7Gv.NJf^KD@>(NPA,G Lrp2uW?/T2A9|_2RR?(d$=!(fa1 Lr>'!#U3Qa(I\.* D@G4!ew" rmgB èP,w]Dȹd+a؆\LhP'$*$ÎPֵd ɼy:$:@l%&$i11N%HtiG"َ(D}}:l@u;,7IP!1*@!#FB+,  ILZ\\KlA~FBb_KCbґ#!\^k1=8A`0$6^n (TG$΂2m&->:2rӔ"``Zbc6>ibcR~b WH0/$BhGc48MqJJc|H'lt-r;/,'bIX2szV‡fgq3_dgZ,l+qCCqEӟwLő;3cH: 0pf[$xhUK! 'HW-,Z(U ) ɶIǐ0$k&-^S>r?PȪldKfB3S8#M&r.;ۆW@!_~eɲ8mSr@RRR!Cr )I"Ymm;ח~J4)r# $ C6%h.’umJECKa=@a[l 1z]c0eBp8G b䪒NqyQ 0Z`@кu޽{c.T:M U #  Trn Nз1ay"w$CФ/bJO& 7EA.ْѺbj͒og-&Gqf+9gO?>=V1,J̒o,* dE`Hn:*Qxs z#@r3S-ʣt ~lBAFۑ(B:0h 4iՎXb9E ѳFԎBrr tfil⒒b&,9Z%ʘ>Ũ(~ȠUHi*=b W؎ [C} 5(] Yphek.y5U8^O =E2L?͋8DulԖ$Oq h>Р@eP2dnU}tͰҢ52^Fu!mgjR z_,%pj߰exlݺUfcB B0y rJv@;l޼ 7[6/ҷ:((^o(~QGql޼9q1=ABdV( ;ElHrF@6հٸAҭxn*_Fڗ 7@F\FGzMʽ>݁Wn5B$Q7rú*ǽ O~nА |X25D&F8p;zQ3>4H~L,aA|2lUGBZf`9*20/',e)Kj;H@^~Vű쇳Wyu9r)TQ~ohhHư'( ty_j?ZDG00x@)39+/#5PP|ԯQr!| q룷-܏a6dĠ#vB9]|f2JɊRC8-)/7D^ ` `nI㰡!;LZAZMNB!Sw%_sQH7ApG6#n鵾66DQI/bqsU0du )J^Lp@NYBzBBl?\wѳh?Si$1wPǕ]? !e=GJUܝA\؅Mx +k ޸{n >2 p.qyc>KdQc6w򀞫9=*[852p^]JQVm0r)%Bb?}~^[@{ $00Ň Q 9{猻*#U3ZvR.Ouo5wؖ4@NB.dP&((u[\MPwY Zat+  ~tZB_DwԺ-swhAd}^qwɰ7L Q3," w|H^M Cp+DY`!gB>EVnrml$;.a׽֐[ y_K4R\3§i q:Y@ g-O>~:W}޹pD@[(:rN!@O BٻLPco᷄p߀ȑ#Gq1 \BmڌB$˨ʾ.KQ!MpJW DQ "]/ij6@ypCFF#4 tήR;H S]] Z7 ;D2v &޵lDAy%@QpDȘμ Ђj҈M!GZ_2j TWizIETpB덦+% hLS5Qnw&"]jD .M2DۈJO'zbjpȈJK=J[G}͍a4@~#M t$#*dD=E@)nVD16M$k0WTVjR@XB>¨$˺]֕5|$M)4ZͱjL[iAйA=4U6@4 :DWO5?HmGT4_'_`Ot&N4E!t㗵+}{G4u!r `7*Mm$_:R[o@_IҔ@[^7lxBH"!p rڊWB Μ|uܒ‘$w!w!w!w!w!դc~HIENDB`pysiogame-1.30.811/images/memory/n_img6a.png0000644000175000017500000000632412201770072017556 0ustar tigertigerPNG  IHDR_v0PLTE\%;EIP`&[br=gԆPӘpȥF@bKGDH pHYs B(xtIME 0 ) *IDATxkIݛտ@IAOmgpfy;,y;  D]XX^@UĀ H¼ &L~uwuwUuUOޜ &fҟje}|||<~7`!ctw^=B.+妓2"9%U.W*歭zC>Ȧ$x;,1d[}һfRiݒd Z:1 @J. =<:zX{+ā!;t2K#:whX O)d,V>-d3z@8І %=HLU=!|ceݿ;|UԃTϔV~"+eYK (=H*>i'Z⑼6Cpz#-H*26! Ʀ˲ ]WGG)󲔪ch Z\?);u`O ۂ}҇ -/Y֟hBBU" S@jlt-ĺxSsBU9SIJjKT+l5@kbCͅTfo="tQn>vlGp *ZzQoEo18NS!YFZjAxUAKyMNYiGCUm\9"}MƝ6eO «J )숝:/ W!;7pB^gK }He]r($,_řW)F%Kxp}ߚ я;#6!{[ZJFa**Af.}||Kyi s¿>bnI!#}xu,OUcEwE~ «JmU XWZQkB6TeF}+'Wi(h#*,1øEAH R6tҥDMr* 8ZtW{:C*UEbև|QJҢ!\蟲krHLUfܸݗ ĥkN->MUN"[x|N$灠8EHBO Ny'؃Jw&̪Z{r쯨 BQ2 ygv* d@oɈiHP'1USNV!6Mg0ܑux|+¦C#?LL=H6OE]+9|a6: 7S4*[\ԫ29Kra|rBn40(`i5 N[P9M<dBSޢGQ19(wVdt.#N>g,>ej$>:DW@h*vua/UmN5fArP|G]-O^T,@{lKЇ2 myӢQ j@zKe.2 ~ 9@ty'V3Ȧ.$+eaekH}]_S2feA `9 6V قT^<*iS׾N# %+]r k*(7YA9bPo2]r`u={KQE,7CYiʱJGWQ퓴.Fl/f-n ^cن* ;-F2E⯰E16Dzqݴ^sgfP-QY3v4O@&r9IXhE~10ߎg`W+3WΝ}bg/ EޥHn8FjGԓIA=AQG>FLIEM@IT[+MNPHL[a,QWUQT_XZ\T\c_]`kcfe`emihmcploufJ67w{zr~F{y:4E4̒91߆1ӓVHoؼ`_˻갰]CP@JCYgYCaLSE5d]@xOﹹVOeHl^IW_KBƹ_gXSKLJgȗo[vT[ʫ~vU]jOGW]freκnyǴatgn[Th҃ouσ]p~eWyזՇמקY؁aڊT\ܿݶemy7bKGDH pHYs B(xtIME  7dCIDATx \Tպ 7ʽXL)ncf25-|%D4#ijBbtDgD/b1fD3~߷{8 |3[wI4 Dh A4 Dh A4 Dh A4 Dh A4Al"fUUU3 9DI@\~DG޿fKYb 4+:p>m 55}CC -*GOa>˹K_y6L­$f8A' m]EMƲ_.]u9n]*3(67";(jVVTT/-=QTTZz+EfDV9 B&~eX4&*^*99CY ZT45OCii膟n<\Hx2,?[` -8^QV]; s)'ƲKn77OT!T]ؾzaq"S3xp>3-&'Cr &ڦQ(eȐ$*6.!ZURw`gTTl4ِ21f[~7~(dVEVc鰘XplYr}c4TQM!B!/~P^(W|xgOYjS8y'c>*T*`|P`Կ{{ -y,!1P2mWq..;33q:4!iUUߺ3XIQ }/HK,.\)DZӴj+.w))ޑ; \7~Kr_D<(DH2!N4Ro)-3^w=zCy}o@mi<4y#_cxUd0 g /o͆dJp ⥧,1lP uFcZRҬzLyAAXo.xq}+lx<8O_\! g{m|n=@ATj*~ȐxW<.œ44$s4L( ^7d[ylW^~x , L/9D,U[? J<=?vyZQ}Gݺy]: ߑ pt`&Ʉѕs9Zϱ%g=PaCZO ̐/" * #/W)+ p3HHŵBEsO<`<䀆w2G@.B DGph8:n]8::zԨѣG6;$6fq..ˁt(SKA! >>y'^w!C!c*ڷ79RHŠ !Y܅p^U]>|E$z^$<vtN"Az^N!C6 sL ۻ7s< AMXJAr٩tVɮ=(0XN|Cn:Bl'z9@ǜEA̜9aرC{.D!d[[={C!Q6 (+;dP;z̏-[jղ5k>A{+9v$ݙD꒬)ѩ7lp^D%o#FEAG۠vE$44ZD-1bɱ$Lt`FÖ^8a4 93T<0}UW֐v:H5A+ رc͖-~~Jx_ Dt\L.YL,Ș0o)tҞ=iԾcvCCk r\$41lL1m'[!SBΝDQ\ vҤSkƟQ;,*P5]XYʚŬ+ à1m4`}~S3ҹsǺJ)! RTV£2\ å>ׇt+Ai v탰CXG[i!9mL+!Ƞ|~ߙRyR\RJj+bXU^H>|!?)vXgTRb;Bah­Tmʆ7%ܭCO[;HNHH$$/ƨsYbժ=yyy;? DΝ)a;TԸ`>fPJ]4^dlXY(G^5f E "WIe߱Rmй;= E̋?DN@@Rf>=+c]SX(D-LXW(Lo\ApI7ⵟh %0D)w/k0 CBk%CXx1<ۭ]c߼aCffnB;z@ǤvW5. %nEa>;t%%X$\.@_f 8"L!$iHNN^9O(9%$j7d[MKK z=]! Ά8uŋϜ!I{޾:vԩSDddl%'M!>c`ؼV O_sՅ)aا̚`!A*!71Mob*3 &I&Kp?cdaʵA;L%-&QY?֫B(!t6u=Dt.)0TVVrImH"%ņ+ RJbJ}vDT[9YG ΡCN)*A.&oW2H!!t&"۟6A!XaX!jFXLB.J==)I贤]XT!"#z,$;+V:ϸZkm5AaBH4ڼyd. aȌԕdIE %%OI:}sTԛ 1!g3KY٬E`e<]'9䄐"%f468V@F$ ;z*.(tƋY T cF8 _ [+ x169| +<Rg2mZl J3"|9XX$k6KCrJalmNZ OzO |Jo`ضG]u*,B9T&Dd$M.NwCB};ltꞣ 2AD i*㣸/%#oI@ #7Hv[ 261Jb/6lhx7 SK3VE%pH!4ر4~uJ`slTh]v Iu\))kS{V^k|SdID*Ϝ :}Ȉ3fV8/0LJ_%mXMyE KmEB͋ TeiI $AXN0lٲj̩LB&RX "rӻC%_1y}:(!ueCa XIT!Z6`A)$˄/:.́}x{=&&ƃSK#o 痂uqbyC9Q$/326o6JpΐG l8SlьhvaW R4:n\RF~;F\cEBtnd ȗvZ؛ naGUIa"]4pfݺ' -0nݚ$1÷XA!X\abhT5{,-j ] q Icp'Z`tvˁO7NzC `鬯aNz|i)|4 !Q  y2+/'$-=t\Rx*V'i|tHw[ DIWC6mޱ|EF&KjIhma`L%#9zYnTUKG}>&lK ٱ#gd3КRe%s*.8ssQcR;-*G.ݺei%AҶ#u= џ( "EhC_ny{2  5kޞt#l*L!0ȍ0y⥀nh[VWp@B@ڢÃA|9n)!_!df'JM2C"i̥! gYiaNjWU \!ȍ_?JҾ=0v)#t3<.6";=;B&22FR$Ul X_G=bR!C$ώcxEmt 9R]^!t AxdC&KAl``qX^'@;ז) >>AEؽi׮]՗uYUJr^gp,'^.$}+EwR:6 W`-y[?̈bI\n_{|9f)搯tb֭Z:JH)+9Av+9c86 H]niaAE 7zN 6]^vcSΧh{$C=#3܀Hy1p m7rE@* v+z յw  !$Uum_>Shx+n(Nr]S@]7<=(~Q|J+QWAyBH feqU).5 }J\Y}w%cy4?L4 Y g I{>SBwjy&ELE w ?0G Tmڜ$Gt!C*,9!2%qˇV $+=)Jkn@ۇh*kW H6mΏ 9s +'^dՅ$dFs7l #Nu /d%{V߽i]$Q9N93E;ovWcmqxo'8ܨeu ᅲ {wP3.>oAt;] *u4I^R Oϻȸ:^{!SB1q)/J+˩1!|UWSJ.H w1 =^;./vpȊ>SZwWفLY޽6N $ _;HzH=*g[y q# *FW;%rjx]ADp}"#3!!wu-` ^8+/~as '_q$V0I(',+s' S8aX6Q;f;[a`|,ų˿uK#G% }F1=~ΞD|SNMW>XW$'LAnp0`ȵKe{5"nϾBoGzdFw}cca9\)J~t "+?%G\Kߟ7͍-$- bv~ۿ㫃P:9r)Lx4%yOzufoY5c۲uN,Xe[~7ǵ~aE8t&4& bKmQVo/w~)`{h{_0ypa!->.w&dK(6%҃{=bs=(y{L hvlkަkՀ퓞51ZG +[ˎzc%NKG eddlp[9pybsW󑅪ٸ^m) &̜%PcCƢE |Dd z[Us/Cy%Ð:S+] ٸ$__>~t9dω]J%s|| 9S+7j=Q#pnc'(%nG<7VCW-tYc(qKc j0)Őʄ4UZvƏ7W1KvATd<; P^ R^\5^~UQzƏPQ&' %^{]FGswF@'-'MF9&dnׁCʋ `DsQX{6Y$dXlCc͊CU}-֓jĨY2jmP Ɇ3XE{OsbhI~oRjp?%t4M4o 97NMf4mllIâҌm2T@1h,i?7Fz244 Dh A4 Dh A4 Dh A4 Dh A4ߊeIeKIENDB`pysiogame-1.30.811/images/memory/v_img17a.png0000644000175000017500000000620312201770072017644 0ustar tigertigerPNG  IHDR_vPLTE %3;R$Rr2p@^bKGDH pHYs B(xtIME   IDATxKs8`>=f1w񹪼&ٽ8bSEJ25d/_/;&!煇f& 6"sGK6ڹ d`un8Z297"vL)ۿJM/^pTG{.UА ﻩnLݣ!̔)C А;Ae(e;qWBdfBOiG>r^oGbG+wTyG0 Yf/~多6}rx4"X5i%K媍%9vX?X24.mC9μ PC& ghR'L lHK׳n^0Cee!`}"K3F]Y2O>ҹYv~e=ST34asFA,qJl:5hn|?hr*J ]? \Lb6i[]'b8:MMcqX&WaU (d8rmian>ϳHD__A!y+$lo*2I"w(ȚѺF ~|">h}#DQ;HO F{t6>4WgHp$".E;مDÏͻ'$]:ƶS06-ҤviqZB/l湁58#}> ooy_XH-aFe=g4 M̚L;iY;> !opf{`Qa#H8YtQJK2$#+,ơi> ABL0f[RGJu5yz^+gS#2rZ:;HuufetE}gKiNs  x7R^m*Aħ:Cmf]NɓZífp4ew KdKJ".Ļ3kPp CsEȾADTucQg2"!}+!oR%_;s.w:G)O|XNw9!",[)`ڳgZhiE Km kHѐֹіƔMZ:a"/i n`@wv'Ir/\ONSW kFa+ l-|F;J0J H}[\DyJ :(>!N2<2%>qJa"B:PC!|<+e0ㄈ̭㡜Ls7C}RGBT9W]!V߅BՇO~"9DԎO.qȈ?'0ѿ!AgqVrUʫ0.@li*" xeMk主!%|~.i1#ACjCjKN %ю‘ 0iOidhc/HoҌ@j.{I)l@$"*E!pōq1P}'ѐMd)+},^3+bC*y8e r"!:ViIN*tDD$e+^Ǜg㹭-ɐʗǚ'˪3"s$on@BC?s,^dC ~$W6q؇/@x˜+ҧ^4x̖KVyjɁltj1 }9/E%<pa͓+KΝbP㧡 G9!R20nOX=ۊqd ֫ʐ!? R$pzq.tTX PQϯx}}<GD_/?`Kc;/IENDB`pysiogame-1.30.811/images/memory/n_img5a.png0000644000175000017500000000475712201770072017565 0ustar tigertigerPNG  IHDR_v0PLTE%.DTK\foz3KUq˰!ubKGDH pHYs B(xtIME .3y; EIDATx_hEǷK'U?DAAgڊܾM_%hO"HAAŢyH Es )_)mR83fvwn;)(zf7ߟy qrq>A |4?NgE'*iv1Rrvf?r xF?z!Mӄjunƍt3z .H'uB.' l 1 JyQ#dl.Mo/\aH.iS/N].m)(G<dx.Ȇ?;!fe INuAU./0bGvTH9y%EgYzi?n^~}7<Ŏ,Uh.Īz 2![z v =FxBn;0t; dp$stM:'h~_ ci LT_br4,\Ch )~죹0VNP2 )A=ј-Y2^RfAz 8, udҐ\K!W_c{M)Wr-0t0Z)Wr-.֩ǣ>cGZxuhޥ?BQڣ)uLȘv'i-%[ћeP*z%VčcYi`advD{>/ b6&BX$40^A1jTK}8d}a) <bX+2)7裴/b+@.!R٣PC>ׅ1ed^9 ײ1- {mv|7ɺMupX3M.-뷬@fK&~:)_a'rHiL-xDeVʜf8(\fIYwi?좺 Rv ĩyO= 6 uOmŸ0 u22e 52(Ʊ$ZʐV˦Jr;Ol[UJFZ/ēLYa$^e-< ;‰&&&UEZS BƓ-X0??733=}@|[H(l2E A"a_.I%(_bHVo#~%~z+B?CuȱkJ \mǩl?6*}CuE¥P]QL2j: \4k[Qjz@]1 X0XW!KPW!(`b(W-+ -Y# +Fu*|Nwd 뱴I[ÀvQȬ0xZ41W]9P*{DH%AD!mPRXծCCdu~v)IENDB`pysiogame-1.30.811/images/memory/m_img9b.png0000644000175000017500000000157512201770072017564 0ustar tigertigerPNG  IHDR6F PLTEWbKGDH pHYs B(xtIME 3IDATh?0?P uRpp{8 RmCn9"lE™vA'ɁM ,'٨9/Ǔ9+/!Y}P&.! '2R[֓#xlH斋#6cYՇw ϓ)0\ ?N)˔IHBvF !@B2y,$pH"#.b gDRߘ^N}&$XzҸIV^J2mʄ>ɐ/>*C )03 TcݗAI9&(5AI "Nz5pA)LU8*05dxep:V sSjZi%ch-ZYÀhZ,-ydA&$ kKpXg{ ̌L[֌LԌDHbFƌnH ?0fMy+m:I![^';!̿";  C\֑-h:gū/Y{_L o}k4dʝ군_#WUdUwS C1{8ldeN$xqغq~:DAa4w3ES SgXҮG. ٲ'(x"T-/~~P\iGYcw87fʧ8ttGܑߛGi@3IENDB`pysiogame-1.30.811/images/memory/m_img18b.png0000644000175000017500000000162712201770072017642 0ustar tigertigerPNG  IHDR6F PLTEWbKGDH pHYs B(xtIME /uoIDATh=0.ER8ei"# &[lAGHT&gm/qYfgwg3χOF»gzZR9NX~߭RŽ #)ɉ6] ɬ~]M\,_d}FQS$RFXJjII+H&&01#d.%k\L)" S`J4\k2$oLF<"D#Ɍ';bÑ!K 9 )ޔScH&Eư oR+տ؋7{X=M'r }* J5'<)? ٢';pNH&T0v̖i'6&iBS2l0"Kgq%E-Į _'R"$r]^B]IVaM,6$HFW'[Hn;Yyt{fX+?D|݅bdY--vg͂'4Xp综WvpOBڼ3[zRϸ'5Nz;pIf~ϔ*2'}`(]2>% rJ+ڱJgtE >E#ub&EHh+;y$%b+UZ  ,$ 9R#)t$0DG&Ґ6Ld'l$0LOJeZ X~VO%Y&#R=M#Ybd2iB;Yҫi52w cȰGQkĸhdލ#5duK68Y$ɼ%N$8$ĉbā4'&ԗG&Iv(uC';-民E+q '7j1[^~%ʂS)9pSԹu/=$2Vu됎0W?Q}Ǐ(pq˕\> BrݴIENDB`pysiogame-1.30.811/images/memory/v_img15a.png0000644000175000017500000001130012201770072017634 0ustar tigertigerPNG  IHDR_v-PLTE%49G2:U(fheVz<}|IbKGDH pHYs B(xtIME  >IDATxkY~U]]#Qݮ3;T:va3A'dcJwr1fdp}B!!-CC1BlߐWKiwI1vVɰ\Z=7.|+|?ɾ1*!wcdec>L8:g#{®2t_,vM|d!ίW.?=%& pٖz=nzp4[Cޡ)Cs/}LJoBr|u$ҊۉSҥ/ 9 1[v.dѶ12|dh$\)L1w*auR.Ϯy7\v\7X,~w ?'ׅ<%R'e0,2F]~v=c~3I4||4vA0ڴ =_E&~gׂB :G넧P} <.Z:5 R֫mzfPvJ~W2Ol" ZxvEܠ=gQ~ .|K2 MK(|ݲtch䘪/iH2ٕcy (.2yx|ܠԮtQs6j>`.SmFt|_3e"b/\{o_yxͪG#h殛z DsRx}"/jE'J TUu+].d+o ͐%hؕ- -$h!MT [FkWҮjG2Z,d?mYH] vwm`>֑ވj%tԇ0Q䥒&Vnaa,lZ,P)/rlz2; <fuж@0[ٵ Y @ C]zܪCdѐ sGcP_}r^VҜ .ˆbEuAåb}8hJ%M\e7u"yQ\kĜ @a4%°RrG5><ѴYN5tg +߱,vJP* yZH+bꌽ/42C=^q+6.#3dT!@5aĆIdlW!o6J5tרVX:I‹[ȮV+LƓ8ǝ~0_D+CNG ܻWcJx$ /UI &'94y^XWTe=7%TnT ~# #݊ߪ8uBsnԇ"d4nQ}:5v `sqcͰ<_ueqܱ&[ Lb]{&ʣ?.>b(Duҍ*nIjl: V+&5ɲɬp˯L`eȱZ7ĸbSP Ȉ u6yj EF٪XR0,.襵'F/ 怮*r4@zK wFk;p =0_Qb3iq`Xh9RulᆔSxJ*ƣ`A:;@a+cO&^: ҽ5 j滠uVc-~j&7ƾ:O#T%T32ZHucAha%ǺQ^-ԅXaF) j/$ S5p0Ddyg)岶1[@F\Z g]h54EQ:-Gl9,Qe_4 EU2PLPby-ټҲ>V[.TBwDFV4Ph#F lox1dK"J4KBU k\WtZwcY;adaA((oeK'0Y/CBȤT8\9waVX20|?*|P1a]V!T@{#k/ZQ֫ 1ݗcL<>0/`Tjh‹S è&!T1|t*:\Ou$ ydvIdFT[Pr a!bf]/2ٹUȥ}GXd HL ,:wQf™ƕ |AUiUTq4I6\ &֐=r#}*TnGnf+ -m-C =Aro@9Ly?mj>[VL62PJ0m>t E}XTrlDtq8HaR WX"Wl q-1 Oqw,b^2Q۹FrE -[PhGJпv]}=Ȍ0qy[;@~ 6N娏z*]֛  ɱB,} TuK'HL DbF/̀F{| n =KH)s<׎4Lܸ `A)1~ [!¤` 260F2|Ҹ2YK-[a{\}HD7xiRR|g۲T'"X7}65*Ϗ2MY'IAh]t,a|_@8L@|SBԎPe4Q7O >h/~~ք &OX_CFQ 2cɂ uG;$I 9Ф'B\G٫PFTIŏ/}N4!c'8PX4J[nJӃi_L[&=G' o$(J,³vGw<S3X) mǀ\' ~;UH$f{;(TA\ONٵH&jeDzuhNK>d"u 7L_D].KBNe;Fi|TAHLGΏ>\ N2hȩ- jRTֲT9R!e!i*IF!Ҋ_<0Y!M¬!;Y,6/_5 /gʾB,hqvsYf`tk}_e)̘.6V $',:d~ߔ V N _ybȓɊ!7kbH- !A!CtYBZ{2nr^C6$uŐP\\TtO7V9wjIȂ+qf]L޺J yםpKqX~ q'Co}ld{==="*;o0IENDB`pysiogame-1.30.811/images/memory/m_img8b.png0000644000175000017500000000200312201770072017546 0ustar tigertigerPNG  IHDR6F PLTE~qbKGDH pHYs B(xtIME ٦/}IDAThڻ05> 9rTXEׁ@%8\ XcG <P`97BX,H`EGu;~V2|L^*Yd8׶-4n9@^mklD#x$1%ɁBN.H$Ȏm']qRE=3zFE&L)äMe㤜d'7Q' .gjH2^^_}K >GmɨOcZ)')Qs 9Glf+!qOrۇ_ "`cԗ<͵ֺ#سR}mAP՗ Zd$.gC1cŔVH+?RL|KqoU6Lzq*i~g#^ꕡ,%N^&!cP]&,+k^i=+=+hϢylJnXbR,6MK66%,ADw3J*Z\& ѹ>qOMϷj/?f"jf:IENDB`pysiogame-1.30.811/images/memory/m_img1a.png0000644000175000017500000000712012201770072017543 0ustar tigertigerPNG  IHDR_vPLTE2.+RKFm_V}ǿbKGDH pHYs B(xtIME ;.x IDATxS8[WY:ِ+jrl0ڝJb~[   if>_mo q/CFtrsD~Ϯqʯibr(Oϭ )ҕ9h jIq:[j샋NRl0C>'[c%s:T^tuCP?NT'+_$({u %eiS=ZKoR9TEl%"Z>/]6̰r)AM rYt7R!Pp04ztRXj3̅`\kv,nJ#>|T_w|7Fwn⡈ 8#Q $#^lfQ8)H$ ;A6гysڽE&]Wx=ĝ)}y/y|b>f)Y奶2z"?hPwbY8mCrF֋DDډQP\YС$:Fm> cxyxkm z $Oԇp,171aEJ]n0YiB{YО('r)ǐGh IC2bxu+~m4*ZָoA^*57 8gJ⃼؁t!t!9Q`pR,jυ&{K;)Q%7]^K/QREKsڽ\ȓX ݀E:GN")(UK!KYє1/>7?q!!odJ& R/l3:=m zu0YҠu]M GWb~u 9TE`Qש-alDՒJL!ԅMjH y@:5׌šMv.aE'm1)fŲ˄Ly͐«Pg:!q^_snw`3]5"32뢭$3o0uADBO ofo᜙~ j7Վ$7B^@JX{mŢUP~?50>UC$BCU 2k YqqLC*Z CeQ1Mm1.9͢HARqf 0w}>YЀiAj }6ufTکP)8< 1%()*`0!1+wGT2:B+kmWH)K)ԙZUxYgm*K !sWL< 2cd7R2/djnYXnRMǤ( AdqbWD cs1L 9jYTTK1rL8 NT' 5л{V(5Z/3 /.(e6񯕒n^(c+E*k--72J\azLhZv`uPi+5\/<@6բs~&|-ހ\J[Jr5'}uKΐVge o]6RbIW]in3lꫭh@AA(R`RC_]:f~Α#=7h5ܼ)ٝl; GRyoCB֭[xMΐw3Њ0Z GmEb#Do≵oMfX.Lho6ٝg CqZ?G+EkBj,KĻٱ=DoK>ee6#);sDLYMF;B"'T&xS&E"v|;[+hެ I*$ݺl ]A(A&PQB# yk~ظK.+s K}DxK(PM]]8А_H@`GEѡ e펐w9ߨ̉*~epo?" wOtXCazTN>9}>[?leiVwIENDB`pysiogame-1.30.811/images/memory/n_img18a.png0000644000175000017500000000523312201770072017637 0ustar tigertigerPNG  IHDR^`PLTE4: VC@R(*gntMkYXr*6̙$ëLmϽqeٰ͎`1e5bKGDH pHYs B(xtIME 4%= IDATx휉n:iC]1%@oyb%IT)]"93 @@@@@@@@@@@@@@@@@^ %9{/p@9Jʫ0,~n??).RJP]XJJ }{֮,}HBC,(BƤ8]9ǕS'92kKJsȗ@ DbqfAz<$YiV} CiLn Yڅ'F"#y/$cs|4N SKդO"m- SwY "Yá0^wZw7h}*"aG'%7{lebdިi8: YnEaW=q'ӷ&|ZT逈| ϓlfnx7OXqN阴HEηNur.qc@D!%g'Vd4iZBS5q@(^ɴ{Z`v#_ }3~@;U?@m9+ I> n}問VV#/b@L/}&延'C{:?bϷIJ܂PD=Hݙiiv@Uד׀DHnE q"}1^xH([Lwy%4{g(*7Imy.3u<dȾ}k'i;OyHl@rbJ]L Sr\>d1u2 C׀l}{qJ?%B2 2x]uߦby!1qyfu4JP$͞n-t!"{2HDb?@\= $sI(p-؋)>$}JNT.ҏS1R^ri6H(i wɃ% œE%Bǟ/^3E{'K. R͕T^@\nsbs/_4e:yLVPxJRnǾo{zU1O"ةu59:B^ [|&SC#;v_w4G; π_g4GU/6h R7.Ge kUx)Lo-2o=h_$ߡUTK7+?AS!vJ4˲(jѶ5%weX]͊~@@@@@@@@@@@@@@@@@:? OzdVEtIENDB`pysiogame-1.30.811/images/memory/m_img2b.png0000644000175000017500000000143412201770072017547 0ustar tigertigerPNG  IHDR6F PLTEWbKGDH pHYs B(xtIME !IDATh1n0`Fm!GE-ޠK`C{fQA>!iРU!b%,Z#HΕlo$I',R =%AѼ&Jۣ{EjMB9\X$ИJfOr$FdGGjH[CJ, q23d!1N&H\"CE!)49Ef>0b zaTe+~(p2 '7 \EK &J‡r'%ERJDL1M%bf?FHB*E4ӷdCrB dfO*BRʅOB"%<{"nq$HFr*2P;bqG>c%?na>{wG ?:>u^to|%Z^uGP}9ڋC*p&-ҀbN}^bb5P^ɱkl2='5}(99$JdH(]R sI CtS #k .o/T~+75_\RP0 _Oߌ!EKĔR$N;`uE-`z\G-WEI>%S$0b$#zo CIENDB`pysiogame-1.30.811/images/memory/n_img17a.png0000644000175000017500000001111112201770072017626 0ustar tigertigerPNG  IHDR^PLTE$,0:=GBTOa,-Uf`razj hg.nt.otzJ^]x%}4eCROc~na͙έց%Ԩ7;I߾Wco2ubKGDH pHYs B(xtIME 4*}رIDATx S:jMm"Q61!i 4ZI~FvbH3%/}tuA4 Dh A4 Dh A4 Dh A4 Dh A4dہ/b8'6c^olMbƖCBxηWRfFDzl3184Ɠ$I 6{{7֟_S q,}1Iޞ> d0bu&F axzZ.{\>-d޿Lta+ApK0&OyɌdq$LqIPY.v"Fbg1\&c1l{KA,[\*k?Y08h> xפ?V%2c/nIVÀk^_ע٣4f\U0.oV٘$Lƺk&~@( bk(AeX;и/7mh`Ub4\v!Vᖈxç蛌*l,%aǸ3 b @qc@q0nrzr=2NEE #+@OǑ YB-R! ?Rĝ_k,2g& $öc呎3@"qdq:`ߘc{4EF \|rSŸ  lF u˯y)x޴BP-C?1# ,p<"qvzqj~j)ϙG A(2ۦ}*#<"ҝ?vE$ٝav(m(IT>$z""JB&t(a0wjbaÂAB 9QAn:}|"%ljphbqSz B~6j˂J$T1_a<"^Up7b3'2_QZPZ=1qTv^chRi.hq> V uw`oZ"ig٪Bw" M&(5Md`&W푌a={v^ Fd<_[]VhRm ˔#9@.ߊPTFѝzlGL7@r3i,m>QzsTy%O(8A:ԄZ:lQx9hHb(s V5,~O롻̠JK߾@Lq ǘyY-¦hwuj=N 'mw}%xYP]Bn|څ e( N㒽fZ^)*-DxsA!TSmH MR*ib8]9;\j`_#oPBXV5cfk#bn vޏ PM=:h-~cA$jx)*QRl'R!6q{4+_MORdj6t}~/. ӡ!AR/ Dpn@#'ο*\z Hm-y`~A؁HE`X]2i Kn”,;/^}Zoo.^KJH= m?;|Xh9FR![@jňY;,d tqEd i,|~ϟC{l(oޘ\ o5esm0 0%?>{ NuՋW,F7. &/a8 $Fb,X,/*Zmۜc\hQ?(H.ۇWE3( x,*VmB.1TA]j0!s\w//%{Ar)DTp'?PY).)IB:ʫAZz [Se0@<ЫgMr4\|KHMw8*u(9+Лo 'IwI>BMDzΝ'B0Dr~gDHd^3`$`&@tm2 {!gsAfPDr8Mx_n- [~|⑻{i{hN^*Avy@ #9JAʕx(uh`A"~>|nQQzq.vzP,"zwAkID0 ֜D9SQި18IԒ (ًü7"|Ǥ9|v)B|N{90 kw0Co̚S[hy\/=Zɓi3AVἲ\ 1!G^5*qLF$K}j&NC1'Rq Oo@i*Aih*͜ԩU(Y.UۇQ_+; ]. *VÀۇ,5ĭyG%+8+>Ehq')=גQWʹJ+IPNBont} UX@ TNBI﵆K2 tR]`OlbL"AG}[X])Ċ#׎)Kv.q[vMW{IͰz3,*C(uÍk|<J#A&(êe`帀$d8guX 1$-O(Kv;{oխɾ.GH` aqR|3Hd' eaFA x;&[1U4LҨ*[r;~muMםQu*G<$%OF:A@H0ךܷXu̬!P enn,e4i#]&spQY?onVYŽ?r?1>mu s϶S ({*-PFB"= ;]?[Il28"Q %kvD}Zu >0N1VfnEbVM!@VSa6E& T`ac&%lݚ@ݷ> <9"vz+i ^,]iy@FrfO0?8 sQYR)lы.w"OYȲSڍ6`+ji> X6X@j7B{0Qll S<ޚgмd'՟Rg8a4^XJR(j-D9Lv"/@y1q?voOpTL<3 ExhAc(K!rO1QiFO%H YBSeP[( A{ώ| 8P2y$9WZTF&N'e?BT1ncQߠ*+}ư{8; UApG_}!mm{m @ J~gR7+{ Gh B6 C3-[pSm$T!g,ϥb7_CFٰ2VO;U|~f!뇚Kh A4 Dh A4 Dh A4 Dh A4 Dh҂IENDB`pysiogame-1.30.811/images/memory/m_img2a.png0000644000175000017500000000617312201770072017553 0ustar tigertigerPNG  IHDR_vPLTE "#:?Ccks{ bKGDH pHYs B(xtIME ;"XRS IDATxKs8b_);R\)3sHru˾*K>E[[U%cn4M`_ B+ Bo!?4M?>!Um?AuG5?ۇ":9?,Q?Z c̰z\̟{zCX[! ;5GѮy Zѭ$i*|3G' Ԡra qc/au˿NY=R2 wQe}BS"6C9M. _m?i,Ap_`5 :3oBSNsx~I]8zi(kfZECp>-^p ٷDs?hЈ2m#9MDhТ ό:.ltGu̎6x./AX#Ȼ sU=De#H]mSnVӷAm6q۬B"5߸I+$ZfcAڟ:C,}قl,Z ] c.YٲTfʚzyv|R։rEI+ܕHKZϖ=J޵²]{ՐtR 3ͅΥ; ΙVv kl=]´{fSnXZ ^$& BU(փrw44V=DXYUR/dMtT Sgj^<U q%\[R<[jbM/8.= 0K7 j=-+྽GԮ͖` w2* VCQWK^ cgiIA`dIm(+)22 :|>q 1}.۫B}A2 dǖ5Bg! {l e! wJD k̐[cCFX]3qv<S7'b'2I1 0 G?MWȽVf5e=bq>Av)Pb@^e:(coށ~%DH@v2rRe6dTstr[M 4+yb!Eam{$K:+(dIlvƫ6 [y# &@-I } 'gӾU $"{L $dbB6~SNH8'MDσG/:wB@| }Օ0%NB&x!n67 R',$gG波 I^_lDBBИ "pId/HBvQpya!Ye?߁<욅=!ܚNp4U·Cv7OoÚ1NaD'0rE1h8oʁ f*CCќT&7n[LfoiPI`2YUve9 J=!ʭD0P. OVi OWO":%Y!dA"3pT&?)i1C{'\?'=q*($ENl{ը# N La:p sQtl?%of9cd &tH4g`W@-iq2gՐ*=|10=9m?C߼KE+צ1I6W@mPQޣ93#<"3|R:Pv*\fhu]m}:v0Bddf+YC2wkN91|DҤ:^5iϩl>wa9Gʷ]u2_̲c[+ B+ ׿Dh1âIENDB`pysiogame-1.30.811/images/memory/v_img8a.png0000644000175000017500000001326312201770072017570 0ustar tigertigerPNG  IHDR^wPLTE_4e^:hd?ng@`iDtpJYmKtuS||V\[P}]o}`nDkw>|Hx}@~7}D4Okǂ,Xņ"ʊ&ˋ/΍ǐ(^Pɐ2Ñ;iӑ'Ж8җ-З@ŚLל#ZМCn۞ўK}١6֢PףI֣WإC֨Sת[+-W Y62S# fMyY."A(OAyμK ;v.^1!ɖj.BBj'+/elWs"ˬY9QWf1rYV/ oVf='w )2(} ugB={ ˹A AEcD"O9: n~n"譩cWh.2w R摜L =Qlɺ ; \y JO@r޴R!!憍9?fr5++9Y̒dT`ffIr*1͌MPkXSe(Tuq^w\VݥFUL] A(dr9VZEc3fBsɂeQ)6gCT~b[Q.(O P y[0,f'n1IEA^ZeKjPge$&ADŽQVI t!KR:Iώ0U=X@Re!6@JY`jAl\2pK fɲr{I+ #@Hܲr^ok[6|QPlD'^b°!R8R*6Ġ!weZ1(7WȖی>Hl-#% xēb@HʜI}yBŝ7x$+25r.H XDa dY9n9$rR9IL=]7ӌUZr(jdAC={QTU,I@u@[$Rp[4|O*TBIC+UtRLbh/i$' W"Rb0]')醴VI@aހ"\,YUu@i0sG+44 u!_S|LYtp\Miɕ\b(j\ 3:= 1Lfk\N۠ |iW\XEY[DƁ&2rL%d62$2)grsCc37J6Mr37`#J,C@ܱP穀F=c[R܊GV|5U獄怸y]hAczg.B[7!G(򲊫AdSo[ʐL@. :,ܾj(Vۍ,6*@(6dUf3+mW=6 Sy`e"$Pp#)<{M E7N8}QhsF}}dF0 Ǐ(,+,;݃@}w~US T y($[G?R[\2`N*l`O|S8F4@:J MI*9[l8:!wRD2D[=E,meZQ5ITTo V ԃFBoh'NBak@j6iu Num g ߩ}Dk#*iU3RǗTk~^MzB^{Do]iʉKp9+*=GZ,wORK߅AC:qvv;*teƂ8L!ڇwOUXj(9;g޽eTFAؚ 4gxvvJe8/r!>If;g t|GB QJiM}@D}T·=?5E8I|IOL>v>I@[m40mx=GUno S[ T> j٧.N|ضwvvHF5rŊ(8<=;MQt F}@Ptd'N3Kݥ}#@.YI}K: i.?k:}$/뾅%48NIH} di!擞+m6",'$&A Co&@''ad;H2SB *Iq@"erc?K;I jn"Aq]dK8IOON0b$q%cowA.?> 4I[\w=$INawe]D C4Zq,# Fc % 8ǎA}zɐD0 ^ @9pyYO~WK̛x1LwH&9FpK` v䢕 8I3p-+3== ':Ə *PXWR4c\ɖh!;@* BuX *ib 2CxAH%J8qppDۺlz[Ƒ9f23==f wm-B ;& h[_[LĘB@DfY###k3 k@E@DMLLP-AB2WYD΀k~ɠd OU]a,gl>CA$ALpV:1 #=h7p ]:11tbNi8D{B##E@0,@mds@hT_ ƅfzDO1;Y#'W#]2144ύSXC o & qu`}2W~BOb@p{ߛ@p]p]|mOS+)$$ X' w~&g<-%dK roC\.QA~RΊB+ 'E x\pw|Y#|b5mhd%p^lHD:XK?$ \H- QY$Z F ( )Ӹ3~ J Z $ $i1!o@nҏpA?Bg_[42DB8"LI&wf?ja 'I6~$ǛcFFhxZ !"ȋuUMu!?sJ @&A| B/փYt#~.)v 4EZZkeeJ4ܶOܜq\+ iXyU(V6mr{PUr&B x<H׍$ǂm"\h Dwl(x<໕4b^R4hh^xO \xr~ɶ va~lX!Q5362jL#Njn_ah\eØhyx7Y߶mI=d ݆f9@P +< ?mVse JǶA8c1'wNj 7ч=$;06?x5;P^?O㙥 ڪV~Od ܀zy$@ q<]P#6 BwF{d~#6rxPhm>'8A$WPOS{6cN31&*5sԿE޻fc!{+Vd'9s̮}JN2 ÅFIrd9tgnnW}Cas1?kT2g{.*ı4Eq7I0r1)ȅ89̪ؒ.4jwг9R22;lϗ688Ffէ}l܃%i=LKPˆ=3c݉}~Q]6*4;goDLc4VKm=G؞KOfyV2蓡<(OPYE{/ 4lsIw/Qgۣ[yAJ\cϟ@yTF>PF ;;jNM\n9,H NI ~wW]K GE7W\)J녗>p,^wPAx ?ЃWWZ {JOF&ph{v)uv$<80+Pnn@`a`|;8>ʀau]@=/ݽSS@׋hR S82~=gM@x# d=x5sRۀ\}"+<4n~Zүt~AR/?4gݢg'w. t9:=a򳇭bEu~ L/}%UmZMkw w w w w -iyQ IENDB`pysiogame-1.30.811/images/memory/m_img20b.png0000644000175000017500000000237112201770072017630 0ustar tigertigerPNG  IHDR_vPLTE;bKGDH pHYs B(xtIME  3)*gIDATxKS0uUa(\M)5C͕N):L_cǏ $KJ6:2!VGwL/L"m'1oW%Tک!d^ERa[@-\~d@ѵi3uuH.IG/~tIlZĤ؍o=>@u%6Zlg7DBEr6'$$6B ֢oVGf~/ "BvR R` z<(@M({/ƨ4D4:FyzPJUqS~ۏ9| "+bV#'A>+?͎쎒Ddѿ5W<4D4rGP_]XA cqhUtB 涼AZ`^~KW~V.W-/ 5J\ަi\VZFDqG4zJ;B;z@Td@b*ygLԑԑ Py,S"A'@ U"-kUAf9E,m #$HʑegaieVZH2T+Zv_jqHHC$D$".XdG2@7$xdF<2B#8X$B HJAfH$ .S!pi;gcoS~cpuHn hJپb HNEBQTd@*2C +*rn M# d@#3ᄉhIl.+Hj#կmlZ=k 䀫TVj3w!+ά҅ 8Ist"cw"cpu" cpu"k܍}Fok޵q MIrÔ{);"h}1g ^$>-էtb ѯs+Ku䌌O?*_j'`=~=#qZ9TʾO#Cv&ǖ 4zY;BL IwEDq h!+(Cc-$D S9Ypstm՜y1m#1θh鞣mY]ಊ)j &n\^p R)TL/rq{=}n'_pAGO_Q IENDB`pysiogame-1.30.811/images/memory/v_img4a.png0000644000175000017500000001562412201770072017567 0ustar tigertigerPNG  IHDR^iPLTE  =% a 9 .% M*-+B(6=0+:4eM=9GBKIIZHyA_CVPdP Z~l2qdZ6}#O%lHVGk-|+~ISt?~˸<וǔDqLo5ce5aq S5]=ԙ*I8wАG ',ToK@ 0\bPں^(x-4\Hhr'NS% )NO4F2B8jg.:?-@bzaxb4RtXkE^k_`|EL g V,QܱItEt&1\gA-X 54J8Ʊ0MC3pE_V+! RNj+"R$CXtIc/{Z ˼H-ߗ7-1HU DŇoBH%h#/t '`JF5_y[HnFGh^pNΕKZI!ռ1 +o_\K!رj2Ʉ51KtJ 9)sتP3q#8IeN]$Zi!׹&i̥k0g}j3IH&@$%$J6 1yp"lCt͠bdhR$p: /.쨪|-$j6%ʺv3$$bmٶ%TXjB ;Q%7=/2a8X8E$LgM[ӯdiYD"$$R.!P'Xi= ]fvrj=mSv@TP,I:s Vԁ!Ey#z@0P!WN=;7wMĊxa$]ۻY4Oid [8ϮłFԆ |{@JIۙvcb0yf sty:F<0^szp# eUnՎÒsu$#ՎIpE )ϱo~kO#TmLIIbRP6$X s9q!C.[X4Hn^]l]Q4 Q}޺5$GU&P(u0q_29$1Q *cq*jǨK[4@*T|L{oNkwFvբV=ge}ϩk p|HFz$٩xе(O'1'Zk8Kb-/qOI !85{a^-]}KetMͅ<𰘍5YlfS>dFKF :;\fYt!Qg&ndfS>C"ӂd Y'%L:ZD2eKfYz,{ _4[{}*6y:R/u9i^g ST . em(^"pJӷRމ7կKLbS;wc#_uBo. ɔo Y.K͸ i``K"^nKc"]Qh_^:+>O[ILLơD 4qsmmH*PKr9]Ǯ$v54r9!xA,CHm2-Ik///Ki0zO{ʋ'B)7^q臁TTyZl{+Pꃷ`CJTRK s<&!{m Jhʲʦm=S ܥN=q}HdTM1f//,ZZ~D_ܕm[jImڴUb 2ؿ?Z07MŇoʗ0>@Z. ǝ g@bʷh>;2ж6M~yIQz{8bK 4व#W0 E 8ψ]|K ,4Nw.eBSA^^)z.oqz.Ҿe§rwzwcNS*?ű8r@qYrmdaK{ҳ۲R+8pTqI3ڗc<c [-p*t9|[T8Dơ_0H {88C>7HgOQ1uЋXz ^N0MI>9N],1ȋ~-IHOw<њN̩\Doq:2 {%~̸-dl- j: Y!F q/=)\)qH 'x8PD8HHV3^Zx=Vm8UJ/8BD @-gN92v񮵥xlz zD-3JVMe,.Kr iltM UOޮj(b R~x=2@ҦMTdRѠ%lFʌJ9gl`X=TVh5kZ."UZ"dcmX2>ll^W̡}H=?w*l_$m[BW!jj/_J@ ^ZqxGo;4@gI60##b l=>`;" C yA @-)e~6j sǖr8x I/w)@8"Ң^7M F(F=ʛ@&:$5{; V)X$Y8ɐ xIX.LRq'2lF8Nh phANHV. <D{ZlϋfV[dpG:B) Ow%@96 `;! A/:\RBW}EE5_^zWl] 6͆-ST RIbE="_B:_wFʖVL|~@YIFA*m:{tS #'1hNۢL%{*V[E~1ҋkaKz ᇬWX>T,ɗ\+8"ybiG[7EGVg )ZsCZ8fj@㪚gB<om 72i'b8W*,@G~z9^g/s 7ec+`EUA2wqY~^qgBaGtVW$O [e3U,aTCu(zl.0ɗE# ,!"ǎvWqJxLJ9Oj/,߷O^`AWMǂ8vMq~Ƿ1IBOgQO~ԛYD ߛе*g/< ) GgyJKwTYȵӵ9 mH9z|dzJ_sdwAjJih#j_?ְŘ\Y72{R-t*Wgzxc`a T8W7߆#s;F[p?a A,Oc[f$)'mT;zz\BRZS:\kg OxO7vjBTG" "ǧ(!C_TT"!e2K-nE\#;{RHd=Љ]!Lkf@^yʲMTBϮ4/z:sVbT!H\+}?JWvYӒ=o͊#]bOr-?4 a}Ƒ5][}@鵇< vTHyҏtp.ۻa6+컦q-\=<=Heoͷt# ꝦNW ~sd5qn#E>-)˽w2wcOEo>5&㽚Ͼ=Ek|4}ߵ/?g׵N<&n&?$j?L5K.2Bf_,ue\^0܍+Sŗr!֍ (Gv@ ya3jf>6_^es+ɏ{@_y/7$[yr]IENDB`pysiogame-1.30.811/images/memory/n_img7a.png0000644000175000017500000001417512201770072017562 0ustar tigertigerPNG  IHDR^PLTE$+1;;KDPBUJ\Re_m$_qazgmu/s q{Juv{$4dCR:`ma Ǫ͘|!ҧ%֪7މ;H߽KWcoHbKGDH pHYs B(xtIME 0.|٬CIDATx wJi.b.186Ę)WRJƆ==n>I#F'? @Ax8i^  d;y]#{ul? eۖ/~o87lǞ$7p2ek_scYDZj9Ȳ!?b-i.ǁ?-w] 1iiD"?,zX1E  9nOd~Cг?zE_>wh>%)fldN@~Y6ZVhH4cL%_ J-k)4d9Iڜv~ δ V1?b,(,~QI"%`!(s#{$Uc#p3_RR&cwhN=%3=ĢAL` K*&GX6ٟp=1&Acsw[#.TxskxX`vHd_3eV.1t"ܨt'4 "]kTV-6VblgdVV3.Tf&:7EĒu0q\?^ 78S* &# ~3$h>W|pX/]+Wh4|+0a} (NkD$dVr=d\jǯziue`dǃI=׋P@v(4pӍql7,0i:\].S+A:j Ǿ d ;PEH66r`$cRxWXH[*և[oǣo×!%w{."\Q;V{xNa4W8<бwkAA7xhZaFsqcs3WҪhgpb @;4 @p LGIhVH~h^Dg@>F$,]kq dV(Ib }sVPjk]J>뢉Y9tSZ ;h`Ɂ}WX;~ؕ L rHFb^wiAD(@P$"Hfw08Y'ةPvSJ><(ˈB4sD}iW@97W#R,c^zȕlk6;a ;$錔 m2^͖::8YfcQȸNF R{r'aSh=^*];A'W;#~u=ߏ2N OeAc_ yșwD?Byd dZu2,aI jV'q}l~ǀjPN` ;v-=$єpŚt-ys/j̟h@ԝ),~32 yPv V9#At/G4Ah{(*`D^5-a$K|nA \ԃv5ag?f@.85]a[OuF1~6S&6-a"MK O U UۥHA:\E"Id T VǕ@6oyNLDfj)YFD>~] dMˊ >޳f19{/b&7سA|޺I) WJ2h&DrIQ*=ɚ,'$鰝p9DYaSyFeM)방 I ,vsWbuE(e8$2m8EV1dVw֗Vվ 'ӌ+G{'q/rYm=*V*j+)+Joѕ7naF=TV >J'h/\l?~ {8v^=o0| _CQ(}rs V3eg+ۯbrG7l-B 3+&X`ngo%q4r.`}\: 0 ljSBg[0+nǻCRGulKlW#Ȗ?o.=@ X&.ϼdf}} ;3g [Nu x[Ȟ3߾q?{Yh@$`޵'dm U[𦑷XyOm/0?\X͔ A%Dd`'Qv]5}#?8 ԭe{ׁ|0㰆D@jA;f_vFG3ƁEZ7x>j6;?dhF$YϮϘ8=fC?5r_f"~4YPpj$rX"hg/[;ÆQ}w-5EKAf@aFj|CsmL bc.*q,.N2+VCGqVmƍ(S,$c$!65INsF.l^Rn%Z$ ['J i^@bgwfk6u }\'Jx=v%D-`\b'R^V] *J✼p?z.;aݞ;~iT0B qy;`yiG_e'mD/֍Gn浰mV_KjFEGU8Vk9J,Ӡp-i6Q}/>)ך"%mR&d-9.;2jeKI0kpA{*^3,5PtS9@z۰!8IENDB`pysiogame-1.30.811/images/memory/v_img19a.png0000644000175000017500000001463712201770072017660 0ustar tigertigerPNG  IHDR^]PLTEKJQOURdTYW_ZmkIc\od~Ytl`kpaPŦ\W`YpadebKGDH pHYs B(xtIME  . \IDATx흋z먮K4I 0`%9Y4.HB`?r?????? wK xc-Z \/~ܷ;^ﺶZmw~/pomchH/[Gl7$e]Fr߷}6-%_u(V }O@VvtݦXN+p)LA3~~  sgZQx%2QĄ/K&D 8o;0,/b8|d%ȝ<Q"$tM1Up1-!3W(ѺQ[F($/1^ G/s9wa#X 'o<p15fH_)Ea#B mCňj(~7l4`>#kXVށO wF_iP2A3,ȾaA`(5TgAҝ3(Q6Pj$k$\W  ( ^[eFQkݏܻF"zH<\x*R \ٛ~ti2 фg$K&b +=[xw+iSn*~"&@.r( W(cM>v(uv'R*Y 8Ⱦ:.ٷʣeLث[!Z{i$} AE–G&u=_w$.JUT$# P~"Y#u!`B}PV. D"F˷P u UEHJp=A?W.,l'$f KR9D&p&B!z8ۭwnl2HHCxi]ͦR#fBxH2o׭6uV.JjR~^LMl j~WOP0׭"szYXQ9 n#"}S͕}gYPbصJ-Lfl+{9 UTJEψ" 2+:=K/p),Hx=.)9V(&!!ziK#? rKsPC k2h"T g4n1@d2R_i@H™^kcہ_=IpY; (@TX*2Z87j;KR9^ * >y7K80]e(DS#qf\(פvUA ̀r>?_<^˫Cqsw? FMiIvMiVe2=-aXw`@ݡ I2rog=d"ܽfe vhC'D@H̨B)@_'a>ˤEܬq##boDF$cBR6"/ϱ=U0_ 'N(1$+N٢@4│ M6-(e%Hj蜺">χk\V8;6<~p? )W .j6Sr0qrǁb8nNtzIDo6ȠsLGI /k@.grl\n?8@ IP$u0`0$k5))'Bf|{/D^ F":ۡP^/n!fRQį [$h,V] aB @<`x}{|C¿xr؂\_JJ h0FagxZ,;2QPWm\ d- 5p o8n6E >VX 륦] r~6$tӬ抡bPwP<HShP G+|b'&fiAbu%xz"A\"ynJ JHuk Ǚ@xTJ@uk8m?m'%r^=V$7[e Q]6 ǐ%B MD$u{'AsA XKR&/f NWσL8pql]'ԑ@p/k`<;T"* Hp]OJ *5RCaE |{4t& 9hzYk3ȳ8B _#ԭqwCOΨDpulaREh?U= gs ?pv$lH#Us̀nHXR/1Ӈ!+@:A#qWbPe ^G~%^3 aAD.JD@1|Y+9 vFN^2L^VYn 'x,Z'xr:⸝]$&DDzxV-DrQl,9 6R r\2Tws1zzq>z9朰Qj xt)$v >/K]3`ZZa"%!kq ijNX85S* 0lU!kiB4>^b$ ')'RxKE IcEfɬ1hO%V- m)O|Db3`͑tӼv@@Bx 5XVn.;y_ʴ\>@%j r/H>'@f]!Һ39uPYcYWLt`A"T@: 1Y/QLJEvҳs]XY഼@&Y M -j"% ٩)KdH }3 hJъ,HZDmx/In#5ޜu$QrJ B$RH@N 9aI`@J[G~r|IAhVE`9A9RU2tp_^!['k')f1Hnan/DoYd 7x[ "H:f`{(477OQ@T=൫#0zUCfC+_q+V^^b)-$*%/+ &8K=si7! L\@ %oNރ^:~{,0BJ6'`{Zz}=5 Kna-a#E绀D Ĥ%k&9dǽz+CZ \\|u9?i2I5/"H?K@s2D\8 %:$ KD0wqxy]mFPd# "3ÒT$okq SZE$N!^"_dž`ciqe/#A] # nY8 5Yƒyk oӍ!_K35 =@H+;FO^JfhAA2bI-~Dճs\䀭MJtFæi@F&_%5QN+= 5\؎(BF7Ы) Ypܳ-,iv/VQ^bmh#svZ\*@V(!XRuA,StolND-i a"[2MA$q=XsT6\ f9γu06πbD H."v cr[$OA{wBh|uq+#rD3XKҦ{c h9  @[%hǧ&kpM|zﵷ{m(* :ClP,Yw$zīp4#@xȻ"H|4RӠbChb㻕CW]Fjr2HbdkI^Q萖s{lp2D GSpvTF CmNM"Y󔱫WKt+iK `%oG{nTzcJ'~=Ro( ȑ"̢4R#mD<ݢ{% ߨv- 1YUT DN*!G1Dr(3=`,}WlEU_)ʸRvQ :<^Kk nyaB( Ъ" {P֧q5k`IuD⚂IX%@0K Hr,ՂT٩lI)K ı)cUyk_D4 !|^%wJE sI<ʅ{aUw'6̃lDEop=C E$ I(FƭeD,,<=::K㡊X(>> 7 G;['D"\3LZ |_rxQ+?6fUueϬ?$HiLN # tcP3Y0f$DkVp.ց(*f: 4LbEOS a"ʷh)M#osJ*ߞAT%rOuϛU@aw/&6b);i] GY znڑX IsD:5E.7:h 5tgOә`biq]9ǥp {XbDV@4E}s(hEwUYsRrFDCo㢄r*/ JG,kz^fr^ Usu l'Q$l_vGs!wM`(Gag\&]ck/jUq27IIeYEWE+l1b}rw<%U1rtlQa,p0Rg?W-]Ye#Y׋us,^ T-1vŎ\լ:C 6]T< *mPNiV%`DբʎKaȥ/Ѭݲ-]^b5Vl bR3q^ݶ8=փ8*) n{=eiσ 5h.ߘy#uy6acX>Yu\ nߗ"T=Uӳc ?k?'+cmQK]9ϯʭ>}m\Y!C ]OR9|uhX$GIv0_`BQ3־zwŬ'GXfU ˣ*(s_ QO"ṮQtw#?LMM473]dF=tr&1R¥oȍsiֽ`%3tn"+&Q6ֹ#$ tfŞ>3cI.yOYiUhs tw0>3 *N4e FubY싙g+\:Ad8&Jy^AD1\Z\ ,jY8vOVTJDO53(JYXG$`(s :Z9RGEIW5O,kLJ-~? O]EӒSG˟\}Hq2צ]jՃVk.=H&Vw~>.,>d,2bE 6? 瘻'OC ch+(T V= TJD>|7D=糲kA eLCY󟂀ɛ ܫ<@,/I(u7&WB?鈅J U!Y-*aI.s2#_A}] ޶]xFo0vW}`lxܺ*H_>~w+y8)<uIENDB`pysiogame-1.30.811/images/memory/v_img7a.png0000644000175000017500000002606412201770072017572 0ustar tigertigerPNG  IHDR^PLTE6 8!9"$8"":< ";$?"$>(!@#+>($AC E!"F#%G/D- J .D3"L"$M#/J-(O/L)"Q 4K8+O+$S"(U,S)#Y ;Q:%Z":Q?)Y':T6&\#8V2+^$` 5Z1DTD?VD-`'&c"+e+f&&i E\H4d1=a8;c1(k"4g'M]L)l#1j#EaC9h/.n'q )s"/q(6o(7n1+t#@n5/v(y WhVLmE5w-0y(=u6Iq?,}#1~WnPFu=)\nZ1',"C|48/;(>3.$)bsaG=:%isbP~D-!ZzQKDaxXU}J0#&%gyaeyl*=2oyj3&-9.P?F:/!RFJA%$1#+qr\O;,`TeZha0 A5YOpeul&#yz.lZ<,\JN@1XMTG&"H:xmbTgZq_mauh}yQDH=sC1_Rtfl]fZyq^Oo}ml^xvhhW{vowhwÕşʓəΏóŭĮǨô̥úԤӱи;ϾԭҳϹҴ־ܽGۭbKGDH pHYs B(xtIME 9 #4 IDATx{\T H  3sBF-?D9v>>xw۩vqW^R+/GSZbsA#y]z3k̬|s}׬144444444444ܖ\=Ik5EBk_ rud=[Mxz4Tfɢq{ȫ,Qͥ=|.(Fa$^6/Mv ^ókc|I[Y=A^ rd_3/;iڨ/[_ul dz˜/(@i 4ox=XeMJ£o Kq-u :zaE 7i>ʃNuV ˔=^ _DO@Vf=JohVZS0L1~Jr6p9XXM}Ѥ!sc eSS/:PB@# 9 t:tCT)= QЬ24РM7VO74w U1xk +4N$T6-+˶\6V=!zΩ,VUWިHecpxBvKxHw!)Us= @ya; A^A$#A89 E0wCَG_X>j;֟kx ktNuCi1BCAU76(Q].}?7radS !8)P^*FX$ʛ'wE0P,En"۞ FՋaa* dRWqN&LrVbDNڹi0)/6 s%8>ĐP,h6"xQYy?6xTu_~2j(Aq.a.ܼh`tq,|:^"tG c8bccczMv6e:HJMfxpt Qb#(u5SL!V*G v8/$0*aO#9&Տb3w.uA7y5j{|4DpV#:GABOҽ|yA߈V`%4IyP .G=iVI4 t~YC JC(򡯤CX(7bݯ)Z.3tS(0(lbm.1AMO:jW`%- C(]T6.KӗJљc?}Qy+ U8ōU=:lZq1><211 ^o1fUK~4:/ >Qz62=O~GEˍKǪ/xV l~ewā>Y8xp}v3n"f;8fi47Jͫ)A`oSހmtNY(^F$Qag'; 5}yQ1;0QvL{)c1<| ϖU(azs0/bO??ḧ;yk2OdjT-]d@v ]=+xqEPlJkSQO+I}y/P4',aP潰׬!=5%2C8J^@h_%PbPѕ,]g0ś;w])s 3UQIl!Kp WYcSu8 YpMwITR ۴ D+:1qvo6(5r:Dk^%EU}=1Sw;h1PVdN(<ökBY"3NOpT哘OLdVf0+u%S { .t/tL#ZxrU ĒUQ<`ZPV'[RRRhp2%2>A&]u%4NkPtvnT jX`{jG;0_$۳*I3Vl$)e=Y,}ʀ~Oף$)iLGiWe5 bV]xM-j1PrUڈ<4h9n'9E:.\α1:l$ÒQYj:fIE.נ!5I:qm/ڻs l& 1,w9'sptD5؛#xa(9`y3n/UJqUBtѠkCUghl]JfzѮEGIDH| _(+$Aw3s)](  ֛Zrǎ-6NuP]#o` R#vJgeeӉ0cLϖaC/i})?&'SؕwbII!|bI(``֠q ǵE͉՜3j]0h/ WcNmN۸}IjHcT X0NgD'7Y/ɻhJ zkqJ;UyXGQa&vtQPoq&JKl(/1zU_l۱q%PU@9 |´S 'STRvx=2lɩ (X(P^âc(8.!쫫HJlQ"VzXa_d%%xa}ؒQwJNKKe([TmlsKS.&ϭDVwuP)}4i-~dNՔv/̈́RQfl!Ŏ:l>c0IΤlKUf{@]?#H9},HV%Z)؆nyu.I_d/yY_vʔ.s`|Tw1TS@tspW ] ) h U,v&kF|Pv*8m ߞdeXW Q^Ez$PKaVʓ| 9}wUpLE+3C3HgoD(xW_tf-đNTʽYtas*%ä3W:iRAgLgȷFz:*=}~@2~nO=C$)eb7V쑤HBynYS#6"nlbaJ.c7sѠu/הTzGX!:/ay+*Q ')p`Uܟ[ :=ccjSTj 17WF9yUuQn93Ij_OVL3-br. i85N:B2Y 5="I`~=lި(Rj'%z54 I~33&g2b{XVL"\4\_hٹ2q∁ A893m\99xX"o_5nxHb  jz:z)<#qVkZ~rJ`}Ewg b4Ld|>#-mq&(/w̧awQ2b?=CvĔ9L,`}m~;p= @'C5A?1jYfjv2Cxb9ǥ^_)*˷}W-C?ZbmA=cA^URXC,3U h VecKBv ;w r׶`3LUQbd🮹aZ?6x4FگR6&T @3&bE$IJ3M֤XB"R4Ñ:_/?c k|E-24$o9r+5e`2~PAQ'?lX5V8~^v:5aO()!Xg$bV0X@;*QhI x N["LlEVKŢh?rɦl3g cc{ͪ`iʛ:OIz dO/;{Gֹ" i}E/UP8Jk0ĴF#5H oI>%dM$ oc 8PCC``< O)bRf |PН1yy2Y [ 0- Eŧ.4 f {4(1n zbSQ٘8+ŝt7tL1dH[LBНy2qs.w$.M^ cW 6^vta) ?Gzpk{85fL״lPNc#w.(11}-EYñm]ë8 MS83K}bHVAV&j?K~rR>S!^ Ró$+J#Cx:uü!sg(F L/@Y ka..UTMc%}rCvj(;9ٟǩ"t8yOPaA(Y ~jpQq7Qgr*H@wrFHad)bD.͝te=(%摲g Eo2[ oPfܥG˱a(it՛䊶f{:X88#6?zAAz^{N\S`^{'e厒i,p:wkm<Cdud,-Du>Ƿ. jPQp c/k y+aPGULEA :dq\y'$ 7/axKٴ'5X{ r.r4FY5Fq~ r=8n>ե7 MDIDATy ;rwL23>w4 58_Odbi?}vTG)vQ +ǃ~7]v-,,GC,us=-)"M8UiY>8'"y_8ʂ!lV~$h߾y"wT Yp_֘6; 34WǍb71|YET*L_C|#yol wؖ}HB8tvp5XR6>3)B5,پ.8q%;7+@L3pPMggSxMe}BPM?5SIv[#r?8qpq@.EEL>e-VbHi,oAJW~xng,t\Bwhoh 1?׎I !:|f#Je+1>4TAr=gm4 O |O3~D2e6sW7w4n(QMtK#=1(~|Ld*oɿǷI(uLyz{30Ií^0Huy$M"iz0C@)i?V|JML~3SIv%$%OC!c?I{%>cOg .2E{I 5,y)T++ C`L'b-? .t7Y]qG@ɉRs.@њϋW(@x2Ľ= jQrn_2nru֮Deh0& oY2 .=Y%#ʧmmp BwtUd`2 ѧ_[n(,o'$AɅhM"U'-Uo)Q nf$&;VM1j;m~$ BqCnVM[9 c$"o=(Jv SPg{<-u~%cLmI0SO_VQ -v[S[6])b͛xmIZ 7+LʳZ5Mn}n.a7tXse nEC3?1r~ҙ3j(%%=7 2&qUG^;"'#0/7=b %9_LY­P| "Fgstɧ[HE]  S-q+:'P@pHha.l_Vbn5 n޼/o9q_[ºK).f&VEWO@[{AZ/ 4/_w2 {u\WN& };AF'T0 çc~ r@hN@=SkrϜg@j4[|c5#HUIVG5'HMͦ+c4jTyڵ wVm4444444444rjdIIENDB`pysiogame-1.30.811/images/memory/v_img10a.png0000644000175000017500000000503312201770072017635 0ustar tigertigerPNG  IHDR_v-PLTE%&GGE3}\ZRƑк#bKGDH pHYs B(xtIME  1^ tIDATxkU1%]7 B$̃ЈּG]x{aR1XD;M:Ƹ) ?f{g+tI,tGo8 rAndܔ!̥  B~4! -ҁxq7j9E5CV wP924 $:T;p%EQ_;=(9@ڌyMAlJϩS-tYcWTM+ ؃P)|FYɼ 2o%ȼHb_ڿaibh/5hzHݸC@GўO2m{IC%sA#7iHAXtBZ!FKjHv5zêR~G jKް'ڡra\ !d(,1+]c\Nµxz;#3.{@ldO8m?[ ȇҁL0৽T @ۨ N/:-]UzҁtHCa4FՄ/\)! Sp<'Y;R($p]sһ/ q # ȯP?zN#ȷ).Adbib{BDzm({Rk. b!^d_wN-d,'ߛl}5VCjaXwgv^L'Ҁ0AKJNbk@hIܡ7RHv*RHf*SB2lfeV+d<^ZZl_ _u1䆙`u("pU 2CO0|.zKwiHB lB.7L a.lT!B!n4Yؘ{?9 eWr`5wf1DH0#?%(C烹ѿ.Ҁ*r Q>!@.CޢYDRK>M9OR3Rf>a[Q)eQ!@p6#3h=W!@ A&}!&%a(PA"%~py22HaA>}嫨ͅ)zB.B(%ڏ.-w+_"6B) $L6 C77&& Q6V< 80jT&1kMw:QW5˄qq3-4(eYbf4"DNƙ\Z"^É2>#~{mA@B 0z8iC0r/B 2ayxÔPsre䰖 !'(%oiN+I %;mKsz_i0谢j(B L9 !r, 押Dl#r_~[1BW1B90!SV5 !%0eATݒA踇7!S,ʜDawMДVt?3(RTɺq4OLR%tv1;N4#ŭoʦ(.hƜJM K\Q DtXrK⋂q %'tx#(2 Ddۗ^DGC/Z*PxS_F@[HX ƔxS_*P0Β8UTD5 83]J3K R gJ6&QQyJ"KR>&\!V@.tϏrUs>t-HD#sa׹:252eeK@yY lqhAE %4'=@(r[jz^H)e}^ۮFY vXn[ ~=CjB.VTfЇ $jiBd1 _҄%Ǽ.# /@MSwb*~t!8o(҅0>(  هDiM![H+QEDYRDD)N\rJ)BCH&\AxYJ }/94 D-c#ʽ{N]DSA2rCzP+BxT39ydД4d<~&)H$EA.%A B.$% B< ~dxb\ Q˂FrS=^=9ER92oHyyXЬYj!G"bq!g⎋PΞbbt W}/H\WIENDB`pysiogame-1.30.811/images/memory/f_img3a.png0000644000175000017500000001711612201770072017544 0ustar tigertigerPNG  IHDR^PLTEB%V#S$!R)_)`+%U3k0d2k2*r1*CA>s8 y9.s8*l<z8-7/:{<& ;.:*?>,0tEBA>2uF>TQN`Q2C1?5A4~MG/JJ 977 BJE4G3?8K2C0SA4Q+TJS`_[G;K5PT9VI7R4Q5O4K3YKW3N6Q4{h=T9_V3S7kkh_\1U3wkWe#X8XR[5\Af ^8b4\#^1lca9bAh5m&k$g)c3bZelKj_m5rWl?m2t-ten,u(q@tMs5rMn-5q.wDu0v<{.xOwe{3ɀ/~H|.PVzs؁6Ɓoۂ1Ѕ5ք>ބ+ׅ8͆O׃R҈?̆e߆4ɉZdžۈ4̊O18ϋGŒexފ/zҍBՎ>B೷C\~=.^mk2 mm,.(ƺ8/CY4W@leey9C*ց0gQ Ǐ~gW_}%?Pe5KwS: HámKL~͚5s欔))'o tu֯_fͪU+r%R,\$Y(Rp H 3t&΂Y]ñ~(X(0(# OF+3Č? UrB1KLL&K4r |$Sq-k=2/(!r.Ѩ:Q>:V+iHJjj HݐƳ!ǐˡ"e W@\ycF%!%q[\Vȑa[.8Rg I| r`;ŀx t8$fZgIteXz$V@:IҁMĆy D>^ag+nqPCԆv¸ͽ)Aш]HرO\jHB DZY#.Lڟ${Jݻ=1ZBz[4ؘ922V tډe$mX*+^u[b]h;%/* Oq Ӈ؁%j/@4_el-غk9V^v+K!:RoK9fvgeaþmG* bs%R<;3QXZ@|ceY!녴]>{xӛV%vkj1@vk^EK3ǍK\u߬(z]]Cxw^l|/qS7~(j_fʸe9Fyb#R6mp'77I\:ĄP` * .Ε-ļ_ݩ}WR؎f 74k=Def*UwJ!iJRwJyU#Ux|mV=#˓:,1Fz(S`bqi$e_/2ѣG$qlB$tB+R$ҸٔBx/b{MB䒊XtR`WCF$ynV*. ; pH!ucG{a[#/SY,dἴ)OǝQH A-g&KF,=wQg Cb1NK)CMM(I''*lk^rM}\‌ mrbZJehbJ"iťa{}bey (8rs'`o1v2A,*6ҁSB[T0Iٽd)a!;+䒰 `Eo H"XW:d@46!RhEQ1Q63;zPirqm2F=@̠CFs햤1D@QR8eXv:!"ă.=nr'` +8WQʥEG*hw\:nѣاN#T"$%,r!%E\~;|\Y)$yt>BґZ`Ȝc/^[11sN}1/mp\BNɹxIJ$QZ\v%שuڬSV IKK۱mldd -TӫI | q,ēsb4!b jH9I6mII$BSU̞TYNܿx(^$)z>59-ZkEGmZ90dı#PIQKI4ۊ!X5Mo Qpg&uj/8G iI7L|ؤOD 5p}S_4xG- ':.juԒ v_&g0[Z$%MIvߥZYx{'d"W':ڤ$f,? &]x"`4#bFB$V(UVdzdqamZ*8M̵l٠MyX1'J)c\2ć6Q Ae{>^U,i[Sb _ӦYQb"8'LW}>͇9S !ݏ)q<|仝}:B& uzP1%Bm:ڮjK }&Bӎ;pW$ϒYzlL8ť4peI@d)C]RY'Lm^ t%ܒ# ,&`Icf@0\V/%e lH!n4{kqccSzg}2rvQx/6iW6D7LzW 5$DgD=VRvM =ez|X$aOj!)ȡ96d!e„ b1AQ2FR\fIq:NA;J[%g1hb2HEP>sHtH"B"ߩŵ,E3F:lꢢz9 zjp=HyաC-cjuAVH@וgHp$H<9uxIaԨQP(*A A,!"&ޒ&pl0KErdf{..Ws0fw$h2ԇEbio Uc0|!zhy&6Dk*ˬ#'Hi *ۙʲKgCLWc ˢzr4)y BLL(Eѿ~EHE yg+]Yȱp .up!ÆL*-ih`G{Ϳ z}!8E W͝-P\h 1̣v !ZCbd2bRh )R/fOH<>.hƐ~{$inNz $ͤ7XQE7vD A'=4VKuxfoHʐd>Yh4IηҚF =m$c^ r[VNgDR[-G5 -aO Q4~ӧ!CB F~@Hq?_A;L Q:BH6S`IٔcRB/5v`F~jKLIW/$DR - CBtz=Z:.!'7~1>K8ĭ!wc"OIsKW13K_^tQQ|3֎^_IR/+d6Ym]x <&1_/I'/^pL1HƸKG~}Q Hz8p! ~8 2vZ,̊Gʪ^*.x/YY 4pADU *&F;8Vqcp]lm7=}EGmܯዋHZrHR4Ēn1F;=Ć|>rݱg.4)F  }%#'imDĉߚ?RN]hiVܟ|$%!ᡄ>8 yrz©I.i@҃_q,}k4{:p;,L`[)jWIs-!aw8з7DXQJ\"\Š!kV.@(,7FNq-<Ƽ">(~G3=Tc55*d/ҎJ[pc 샀Mj$Qx_m׺ilAk)Ǟ3olPp8t?Xj}w $-7U{1ћiawyIjJV>>Um ï=c܅b̘'5GEoy6a'WNP~a G.z_| bqI`*?]h} \SDˁ",P^)Q|_|_Py6 V i9k$.H)msvº(tb_#.|n$DpI7 $eI $u=W,yU |irNwŔ^R~Ǫ>_ZIN(~~Z#\7oYGk*tRE`I\xI=Īlb(Q~URiW\o tF|%J C!i-HRZ/[;n}A[^!-_}\RR#y hmI57*1Ă0r%8*:l*v}usY_m}!+NJMYo~}ׅӜnp ~89e|MMDEEii^O_w'ϺoN(Cڕ'/y(<7WxÛW!O8QAd߉ӧP_E0Y|"k7(Z[q]:f1UX7auxH- B $Qd~$}? l $ B $ B $ B $ B $ B%dKdsIENDB`pysiogame-1.30.811/images/memory/n_img1a.png0000644000175000017500000001165112201770072017550 0ustar tigertigerPNG  IHDR^PLTE+ ISix# --+)45<;896874DD;7:;==>CPO?>CDHEFCGHKGKMRRYYKKPOONeeRQRUa`WU^_Z]hhhj`^lkcfwvih||xxqqvry{~}ߋӒ栟᧦鰱^\bKGDH pHYs B(xtIME .02oIDATx{[HYPIhhb`֢sf& s}gkWǹϜi'''''!f6];NOQz,V9Jpήٴ;f&ull&:NXƫd3)1Yq7 jU2@IaAL۴j(clQгLf\w HӱJQlÁl~V&껌E/0k@fq=??K@H Y>a7 @tVzdXaP}A0y=Uɚe$` 7 =]"jdL.x?L=r<܃xQAo񁛺ɹW2׊򤳟r@"k%\tkV -L\Z d#4Ad5kǀPhcIUB1y *DD]Ub N}EYqͺOh֭/.4j) f)~g 3(KSG IJlӶmkN_t$:/q#z h(bHSdqc";_!$a]ue$}ߧAvD8Ǔf[/;A I4rBcIu6m%%z;7$QP( u3G#,uniCJȌ57"M <&ȆH2m}fe; ^|۞9 vE2Q1*8ꗗ}}.ٍA8z3߂b#]! ?cL5rGOY[V5llS3N9e17~'}C2RFlNJ\Lٳ#8$ZHɮO/Hd`騠^L*WI k:vz6Er+ SAE@6a\ AáVAz1CXYRQ=R>'!t9`BBqx2 #OX!vNGgZj܁ H-RB "c@ѕ22Xı$/4HWK]̡˭ĦzN ͽ[)ۉU4KM/2Z오]'VdzDLW!"4~_$`ƂbJ2FBvH3:7Ey`PB"%QU+l]r CI'n5() # c"_-dǝUBZI#ASD +9#I&o(0)jVYw@S 3 7DcUAMB<P@(yk0QTA1Vt Xhم:y%fnUBmTgܖ&A^Ѝ$RY( ڹ9ݒw[ ҪuNkg%r[4C9"Wu?}3\=-vW$<\Yk7m pc߷QuQVuA6J,JnɃ V=m?V=l`n_42{heyT>)DMW+ lD_DLsX $ku$N[{Z : [E5=ޟOFvŻ۹9(ٖ]$DAHXՄFDKv'QdBR-DC;lm xh Ɗ<D#'zH,NJQfxDcX{kӨ_ꑤd%RFVqsn+ "˃,RR,:H@ IyX|]F$RDQx')7弖"\B{wBZK+pnDQAXhxsvD Tˍ2sGG9v-Cݯ5?E'2 G?fy,ju:tz3moQk9ߍkdWhi쐬}񏻮WI RhQ~$wJ",־C"6%c Cp'uIFʶcc[!wwtڱ#YxHnǟУ/uYd)vq:G!R N{cW7Xn]˂,eKȠM}G'6SBͲ;G|Xγ슜wvr*8|^n0?=Ad_JJ,օ)lYK8%7 /Uz*b.I 1{^" 2oQq @f0y0W4K!M&;pTGWmtCF/`_|su2f}Zao6Aɛ`Taޡ.ْ %7/WL$" u033 #eH%nK܈מɁ?8a (iZͦ^u݀ݪw&cMtHkQ ߱~eVd=ЀY/Hn[G=k6w4_91[KE7gHiB{7Kc\PXABL8rr;idgJvkq_;~@\H7#ӺÆl`}8yo.Z\}|H'Atu TkID\0orP, #goʥ^-ka^]Mg\[D|1UzʡNZiTvL-H7 E;RH $I䬮fie1 y쓎IMe|Pp(dHn&w`{HW6 XiMq!8E$/Ztj N+AZ55 d> ɷvkFzBMMAL=}_ Hfw%i0/'@.Vz 7=Ւag{48\C#ݎIʨE@eNng=# jJ>s;Xq@p_hҋ[zYxi㘽py'N|!f7``@&x$/8&8IfMw{\'*8''''''Ȼ[nz-ڣIENDB`pysiogame-1.30.811/images/memory/f_img21a.png0000644000175000017500000001704212201770072017622 0ustar tigertigerPNG  IHDR^PLTE!1;K[241a"yj*EHESB[w2q90Y0;TVS@@>LE*y+MJcebkbuYIuJPǪOδK۰OqtqgdӂzsbhKMu䑓JK79ȅ.13)"'(ooȱۯ©רbKGDH pHYs B(xtIME 3}YIDATx wZs,(`-hI4jh1j_}3 *^ҞuYɍ3\?Y  $ [e]|x\LwY'?_OIݗׂ@Dw0y-D O'$yIo ]o&HI \V7d> yp79es%o&s _?y6ב9}@`u~>/&^G"i4z/xܽGG]Ɏrgh4ߵQw͏`u tak$,J=[@@`d=uVF+9`WȏWy )j^O@q_b LRD'OO{=#@xm+Zݙ7jCi^O?7h JA馀w]c|{le!]$y?{E<($ɭ8C:JE<yݿEHt@ϣߛET޾]4,G$oX?L^,Yr_aC.~_b~ ˳N~cmd_[7|W7HT4d B"~3,lfCp8J=2 "@ E@%23_](1%:xE+Mj&xHZ$wgE:V4Gz+IjN /.b @G}r ~s5yQ`h@wA ̋bq~NxGx 1@ ޾ O_ ﬢ ?p`&,XŽ&q{ DH^.¬^ s+ ٓi /[@XcV>H-Դc'~=A ^@l}RYݯ|g)/rYך%OǗxz['-hW˖; \$"Ѡ61i\c仹 B ۶ 7W^▋HE@irB-Ӳ I 1cIomа$@J.k{<4&*C0AQžݫplg|1vAt΁ 7aVc:ja;fnt%jI`-c$h"aKp\<i3ȏrQ<$9!ie(-D 7H~OnNAdp{UxgI@$D.q @[*@OA;th0uHjIje5:E,I^+;<5^FEw`_qNՐ$qxM؁h(Aaf.6 |{qto/X^I Uq@q qH+ anb2&?'Q)l@ kC~Fmvq2nDZ)dL ,z)Os;M(ic 1 vcX,fQXAZ۠ Oz_xGQzd4,BK=lApaE}z`&}Z9{K3Wh3Z g[aíߧި R { ihip~fYM"2!.:tLC,c=V͟:ȏC(!sSѯN28/5vՂ3PSUH DD-AAbWytl5LPpXZ/WD7Y^@ ) }Z7 5uxBkNE%/VQGJ.2r(;L?A~e뎪,!KBV`C5{ZP:5q/]gYZTR /<9urGi"'(gpwb٬iq >wtZ?S"I}wQ@L+eaX ;Ay~ :A|ME"A6;^'S  I8;P+ʥX{T T2$BUĈhZI {hsXZ]ef \Ky |1Ng#彣Gcцԩ [ɲeUNc* \ )lWR6u]f#~X,YFgʥi֘88wu\B*x} 9f 剥%x`/8ﳺFGZ+>rݠcϽ)WM|Whcp>!q-UƮq#9͵!(M)͟JXb A4 h0Z}e›;vkH69V WG*.G~*MQOE.j)T .yvÇT׽⥤gXNs@CnFʗsa0=uXͻmp6;d=:QG "a)\<m{B @@puZ\,|3BfZMK<qbmZhb/6^?Zxn@8!S㶲pfCi[J2׬U27GYTE7Sh{|VVcZGx V~ n\`&Vb5ھ,rY >B47+q4aH3 <90\Ǎb{AD4كL=jiΈ?Kdd];]T p<[ n$)m(lTf4:4K3`DWMe7h+ȅ0qCQh<7vڥ*)fٓ~2[UJr :BtyX͑y>q\f3DuCEתrphP*aw_= g]fc:E/󼜁S}=>h^ϒG ]XFfڑ'6 գ~=qs:n QwTS ABeA6!5Lj>*d$Mshd2(atݪeCqW ۸)PL<ȏ~jM&,KOk̠lJN[JlqSfiJ_;7"yq&OVW65f޼Y{;,=@yW<_t]ܪEgxqöVhC2+qXr7,NxUR^+}U,~jü*m8(`Rg6e3 -O`?5 Z\Yz;lx mv7+>x5,+j_gt4|}q@Uծڸ{ `$D5~jQPTX}(W@pb9 $YָA+SvY*ᮦzL3XSqc{%~U|x*H^!7I<%b|B<&!-nq]mANfNiWd~*H[a:a:fʒ^+=}²,9$ze r"nÏ˟cVr=n|'U4J^*GrQ*`D]> @›Np yMYb)|(}|+Az> 8`c=N'xaVuwjQ S4bg(:j NIfDi=EqYd㎦~Xd4Uv>ȼ,ܝ' s8uZ ZlD״}c>\\$ې4S#%!W"gNx-꼩 \5ia4R{ "պVkYsI qeǒ'ia[@cAEn9\/YBPH{N.@Z¦+[r:w}򔻑Yb|>3XbtcoPƚUg+ubz>H~(>rWC,9,-CvՉb> kPWN̆5Fx R=OռuSҎSpg|ʉ Iʂ*ިl.x:RhPMm+Ѻ^_Ȯ4R͂(bh`܎-G[ZPƁ'6D>tYZ@BǑ iXaA6+YSzzeM]L4//HoZ^ݶ/)|(3ACC rf"ӐY8fò)bdY{xUxX4O7U!޶6vI͎pԳ6xv[1d@UPظTWb:ryyU} Ec\^>,k<dm#u&?wʩJ•JOJh؅yX4z7 L a<SG'DnF_;eי%|? 42ʗ|76(Vr, @]6ϗ\3#~vNUQԱ2't Zux8`oAșSϸ'P ^Ǎdd(WPzR9qe0r\*1Hַ׵6T g@ :_[ZpIS2=eOb[߳mlu%@LDXabEѤ =K98^ $if.AA{Zr^|soԩr Ȳ|i懝0߳ڜ!:xd-F+r={ $yPee/T+;+m3gQS+ ń-rGsT2}YǂC{HJ3 +rg1 h x`%L ݇vZ߂p"_&aTȯ*QfpE$([|6hig6+bd4Yu^J{FF N2 0j˾VT9(v Z,oHqu H_D.\8tQN_aZGmYc#ym+Ij<( p${hNQ|o!Ϗg!AYO'''''''P!IENDB`pysiogame-1.30.811/images/memory/m_img6b.png0000644000175000017500000000202012201770072017543 0ustar tigertigerPNG  IHDR6F PLTEwMbKGDH pHYs B(xtIME  6:\}lIDATh=@籖 p#P>7> = W@`Mn@^{'7e]lRd~|B,g8!DH _B|CBZ4A$M#nD(]Y ȷq {ȫ eF-z|xqD8û%τx/Ũ GI!P_p\VI?ǣ_yO#d #EH&!I&,DaQ0LҹIMʩFFr?d̓42x?}G2/H%#xC:?=d'~=MK\W=d ;dNH$ FVNR`02̄ 3!zL4>'fB&R|2`&d`cY|mHg &ޒVc`՘31QceЫ&eЧ֔SMb@2SSAIJ / o*ƂN ƂIi႔I u B\dF%p$ ՋuRŐ^eO!!XbCHI4t X~6TDl5}S5&}we|}v5iu6AX&G' K> &N{2&;|䛍#di)4I*|pE1ymx0#N#r4IA)/kL٧pRY&?9-ips8ި7}(,d!ap&$UIENDB`pysiogame-1.30.811/images/memory/v_img1a.png0000644000175000017500000002307012201770072017556 0ustar tigertigerPNG  IHDR^PLTEi lmonqqq&tr tr2wx!w!x+y$y6{+|$}((~1~80*E+3@:5.<66†?D9AU;Č<ÌCŒI>QK‘EȒOƕIɓVƖPȔ_™W˙MəZśSʚTǛoǝcǞ\ΝWˠYР`ͣạhФ\ѣoҧeϧqҦwѨl˪rѧիhլpϭ{խwѰwدr۱u۲|ٲ״uֵ|յԵյ߶ڸݺܻຏۼ߽߼߿ƪƙǟɦ˝ˣ͟ϧҵѯԪֱ۶۽bKGDH pHYs B(xtIME 6Ont IDATx흍_Rт #rx Q0 -i|L!׿>`Y3Mӷ^;=[xk֙|dt@: Ht@: Ht@: HZemo9[:&ѵ'ȚBN~M&di+WKZs*=K׈p:dU4]4M}NN 8ٿdEUTMpnxܴ\.p F'BSUO (Cw}ao$Odh%!"Q>ȞFFHdr٩xΠ| r>>EX$kl"*+L"u(&yApML")t67WN Œ ǺN&T:=d6N`:dvA]9 .pFFD\>d zeAAb \Y38p1rbX*r srR.PGN]vwo]Q0ct4x;KrmVrPxĥغW$_!|T[ZTJB.\Zm^IđbX__o4*rx(]ywM dMp;G$Gm06^_d$<$J9uhJ7iZR9>3PUU9j =Xb8W6vRy>Mҵl2R \jc݃Ãͭ͝]&0gG#~JMȱʙ?:(ŎEQ{xtthIVk|@$C}]UHH[a0/cy8^:#;}~Y5ZzK$*-)PVE$L$y-Ja*GpmuJ dwtbd.'9'.4`u^JSx "Aaͮ* Mw!'l~WK٢K\Hpsi @ADX TojǂLѧQ4I }_Rϋm!Fnio% $R[?AЈdI:牠0St9Baμ,ZU A?p7X$?D")$ ŒTj2M+H"1r+vĹ*71\o:*ȇ 6a(Bk" ã#>>f[NCR`"=`dtE{m ;g? C>b`lp>x@@O΅[^PZJ4/[,abAma G!Oׅ7Qp $ʼn'.}e.IC7JƳ?t&\>*|?Mss&}. 2*:@X!}N=Ė(ѴP|h1*+\ZN!2%[9%x.CCLՇ/Ahax>k"j/u!6ȫ>*28ݞ!Kbýt-PLҽZH$U {"ORRWh5>%cq#rV P%q,NhYKTij|횹9y<~7+<OX2.WYbd]qꆕ$kmiua[lv cVY&CB@" UQy+m!^GuŤ:'Y&T6e"pjaЇZ Pl0?iVIAU[Z5PX:B/2f.F)( V2`!l~wL&E%ً -O@+.wpph~{TY1.9k~0ZdG|0qF~HU70%W8=؇=zxx0@;8tp1@zQS $ #-Q̖aK bIӿ r0S!!bd Пb^ 9>} ya%^KRy\"\.G$ M?99Zg0&,,H`EBمݥH8j%^JT,DJ޿ Ε; "rbwGK,5 )X"t Dq}9B@A C\%j!X#)'`LmAΰulg)?݇$ &rSb4[*7PyyUgC(Dda Do~-ހ֣&.oVßrX?aE [07Wģ0JD|3|  BE* @XL һ:w&6WT][:!i#6E.oÇ9&m`ERVfI`Lb|yfe|U,PܱrP\F@y-Q?^{_rADڮ[9>~Ov*,-?/!- cʕJ}eRxtwСgF}b5 ;Vs)`:ǸG#TU>!#a2۳W_E/ͳD17յ*ΠClhvw^$p,@D+6HYM2ݧπ4&;:>b{<10Pc\.8b(<* R}:;G ,B5Ⱦ9 d^lmf888X^n\ !>J:/@֌CxḠQo$HHV" RŚ%LTIE!&祧OA0l򪱱-IsMDS?ãj#7sYsd'>L ”zub43]0 _5+=ÅFcyylm-xQ⦳SZ#6_Ni"SvlPTf!Z5TsO_=(:dO4{x J--Wv!/ ׈σ lO[JV•syQC~ʼndVZ 1Q<'&ȳ<w|3x_gNYb!͵MKEҹ%$[,$H z*\.7n%T%6h,mB-_/Q8JK6T8R)!;؄$-.2HchSm˵ ~Z( !\DU5AӋ $^V 6?6dp A/Y"ș@y| 8zER*c$6xV(8t\& O7[ H=aJVROt 'AF7F+_IpV$xq0YE\yjyAH&y>?x4 ~7x=FSp1"-"1䀬HA ! }^f)o}͗jʐ;˿2 R K{o5w ͛A^como AF^'弅z4-A ==XT~?Ofw. !__-op\V!Pmu"f"5g o,D±zP($D$Gg g*{,PE"qJX幊|_,Krb$I|K"Dȍp+"g]9 Ьmm ||Ao]T,Hn\fbp 39J:&B67ZH}$08:BoEvuY v $7OeV]A;9, .ϲ;W@T;~dj2M[!j* dG|sG"[0p'PZ%HMȣ eim{ \_@*F/ρ M!X(Mȳ(8 [;0}m l{~qL+dZ/B O5"Iv7Wbdxrb#R]9wƒ )8FI#A栓h1M!E =i\,]@LiI~)J'r\MNK HL{AnY 2=N~%6}|oFryB [+[w8ZO+k¡.. [sы ́)ׇ[!1dXD숦 uFwW3TѻJBZ@&WowF9FTs>`@GAa/#K+x[ߩvXG֚gG @PЕt OffϹvu @k(9dr rO_݁g>`Hs慨L᷅fEb}M*[B{$~ Jn/P˵d@ Ѩ7;vc?$2I($Ra)/b~$%HT˝H#H#9~a.]H@zQyY5@AN"}k.)F3xL k7^ XCj|S.S!F) nn`w^nyFDDArz\^vOXM^ȿɷ`$Ee 'v>Z1"dҲ>bR.x-$C^]2 8(,X&/r#\h== Dh#q[T~ qbkTra'2@}]&#~w 79R>r *L Qү˥C;w"[T5FG:wJwvhǧ;b Y2"#tBHcg;Z|V) H{aW>]0}qY[8T.i{B?C{l*„l SΈaq2d/(&p^tFYV;C/%IfGaP2l!"r0$cYk%hw{0*Qtx:DwZeD8;~CF$·$e%6wPш-Un s8Hdat)vrC!rovP1q]n A =qJ[r' \ X.8بp}f_FpyfGeH:/u+%B~[ܕ v\PHT9NMqapEfgIDx&l6I &].amﶻO`%ʓ( -'FdpQ$E L$] {卋&pcQ hO<}*ꛗwv:4WGvN\ r>4Z+y@AEZ!L N=

";H,"Y62 4d^v!h{efM#OK% nx|g`'tyI%ϸn29"__ȐJi0Q,Oq$%upSN~ݘ4>&U.Bdg"HM"G_N1G4JKwN9F`ܻ&"lM( SS9I:FXRV3GMok4iGdh$LnȞp}A-߄CT %Z|+G(,ׄ6Zl1M}eD>x)=ITpB(xq/߳pcr(/I65dH4J!gZ15d1\3U S` uNIǼpXL.DOy '4cbTNP.ӺsOvD1Ň^Mh (52:L~x E!0*b1}MJ+?!auy8Ϡx>/D`j-j t25fD4BlH%zs"5S˻W 2IDAT4 %l`  +|AHsnI=xm{f&pGx69ξ8(l"u|m)FaHkn^m)V,[)\8T\ [A(_e/=9[ݎ/ Nm+Bn/h 1>4Ծ>Bee1hU1a$7(Gb##NV=<"ƣ^&C>O?:Zbtǀͦ]hXEοF.H󪬽xL!FՌ& 2 9a`@J rz3߹|v"XqƣȪNፆm1vq>mL mhxxI`983۫_h:Gxu4I%%X"hGw1q'7z?W<'5λEr\*dgդTa1w(c~h?50Lޯ}ȩCp`"gZOAz]07eqٚsʧ{VOUկla3 - E"HbrK~뚣5x/"a|7`wFqls~FV95 ZSvm]YlNkZ?g_rZ1yZfߕ$25ͭrq$r@+ѭ3_?n{> VZDFaPz?VT苒o mOh xNBw|܇bƣѕLWߚtVV#:Ht@: Ht@: Ht@: _DۙmIENDB`pysiogame-1.30.811/images/memory/f_img18a.png0000644000175000017500000001731012201770072017626 0ustar tigertigerPNG  IHDR^PLTE! # s0!% u0(! $ # !0'&$  $ ,/! )'#& $&.).)|@:,{D)+2!1|F?8%22#F=7"zLF8*E;7~O?<)9(@-B='=-C2TNB!Z6H9{](|[DD.~\MD3H4F6TKPEO>L,G;Kg Urfo^rUsIw+krfznx`~69}'Dzlpxiނ1{k*DY$כq>zѝ5-))摯tRGBFo^%T%kdp(Bml~@P!$Alp'i~ ]CP4`H*D!I/C%UF)/ĒF"ypMoi gQCaHCd# 44!,dlHV6gFBިf53%%hP Fsw 7URV%7f"΢e7WYXH;8x׆x @IO7VK ˠW&ڏ񻌧$?+}czƟWs <6ߐ."ȰRܝmm7V9^A]w񿎾>vfDzBk%&2|BA֟2$m) :~7hQF&5=k)<!_޽^1dggю3\H# \dgy4|Ъ@tfB,0$d#o?m퀣K0<.d8aWFwFTը~u do@6rtǥ(Dkϯ~1Zl=o--m-m): ·|E~q7B(B#}Iџ9γF )9u } FQfcRHA~<=P aP`?|=C4W`ES : ?ɪU ^u+A<-4^UVVVQI(2 _:cAn0~/fܔTAH;_}0叕A`L2q2r0T%eSU\ˣʬ)J~|M)])=iN=ή.d\pŒDU-* YpKK?|獜˻AsIh'89+pz R6v>I3/~6e9\!YhoKi`dff>x3[)gB!:C.Y2,N FgKLT Ze8 $bmQ~)ǎQaar 4k Δ)^<Ђb⧟KKHHx.P%5aքW>8^n&GB052zY>$eX0c-< KV+֯]|…nя/ƒT*2$t4ߴ:$7^X\e`Ā9{qfB9&2/$s1U9uZ_ _}[ejwn ҥKC={lfj+#ϑO?H%RTG*GBhC}> kR03{Hno}7t)Ge_I״@^ZMV 7ADa3|oYDd’7@%|wvH((AŒ̑իWʭ.nwgs7{/_1@_4< I~[1#'%e'%)m= X@L|/Wе}{NHFFOo8? %[~4kHp0)aˮ@ANTX9O Uh4=$ s 5, ~=)IfWիU*! GfNh4{S-I5E BdT&ESAa$dPHO?1V;=RĬ'Y>h(-<>dIvcɋ.vPr>|a%;+d0r ;T!\YÃ̧)1ɋ%Rj4 A>!48KDF!TE( Jr]Seb$wJ*#'5`;rFw =##BS`>KSTNГ;([ N}ܚĜH;ӌ/fX8< N{R؟!S/0P\u,m,:t4m[ o0s"}ï'I=!;i^!"be=@QaĖkυKq$N#VՀj vx-2CUBS`^HDZbd1CH e=~$O(+d=)JI`ni Bjma8ߎC{A!<8^a Gî]rܖC"ڴxg ~lķ@u@6'HN~(ɨޥ9d;XW~^6%0$եq:C%IllB2lǨi 6yY nCnS'$x4X,'Ѿ j0HILQ$QoNjrhr B<3K dafT̤Gή"Q(@j>!]LJ 2@T*>=?[ΑӤ4_`^В%KP2O]"7vj l-b[$\X g<;$="ВꢦS4\&Q \rh. b_6%j0.,m.rXH9QfێfO؝++#ȼBE D}-RKdPd+`_S +$Ԛ II>$4W쀗[c#Thc/$,)DI8 j 5ZE쀰P5)6RFꏖ:$c$'ao?HO[bB, ;BVh۔胙3g2ZOяA+u=-$!$F.ixA<ۍM!3gZQʾ}2$(&EQL𴥻׭{OVq̙6$2rK@fڂ&-!m"< _,4i%ZI\ O$dP+g c!_!Qxoł lÖd|E̿pk B3̲VNnه,X 9me#j$:E9/,{Rb g E$ @iPAm#;,%tnIB$b yl]PRҎQs2/, "C"I^JV庤g;uE5#Xw9B3ɫuj[wzXd kZ Y62|a.%/[:G\ TB{7E2rhPc5w51*0$\! +ZT;hоoLHw"aʤӎ셒M=3U| @oX=$},n*{i $!FAp{Bz7tx]#d}Uhp ڎ'\!L9"Sc~lcu3^!LcB¥!bH=RA((xYvxyIf^@\?X!:C(^Bd|@0CA?D.{2l?xFgK|MRl3-Ry ϭ7_&T"|RVsrԬ`^0,$hK'T̎ID\[c1{ңtbm:5sp2!.({߼9͌,nB9ɅmpDNX$!`I|9R%{*[m tT_|͒.MMHLt$cJ $$e˗DcI $2B&#bړ`.f$8qֿ ߍ'QBm{_ROLa_Po׷AIH4DRT- R+CU T vvwl S $5At6+!H%Ҙc v@Ѻ7uޯ `P $8 H쫼MYk)!IL=1 Hr/[}Ouc/I0OEܿO-oW\׈) A9:$E ǖ?qyB_$8bJH<6bCPP|~oL!31! (wܹ ɌV Y1 (w %r%wr!jݸ3BLEs07bo|~cŮqWnsZCsrܹsdA}ÑI= j+O9IENDB`pysiogame-1.30.811/images/memory/f_img22a.png0000644000175000017500000003407312201770072017626 0ustar tigertigerPNG  IHDR^qPLTErkvbKGDH pHYs B(xtIME ;3}^ IDATx[غs}ٳg1ȶ$XrB0T2lzOf_׾7k ]k-Icq;?s86 /o]Ћn|ӎ?z}H O|cߏOo]kOn.[wsgO9;cchw߃#qױcb||N}OxmϽXCw~ru; v;>ccx}uw {׏z=vwܫdžnh_%8?Wxto}:{7~uC];|+.s?(m}~1>Jd=L87:vs}>r鵜svFt#}}쯿n؍Ͻ*]ۍDqW9~nԿ~p~ֹhGg> /_ @~yfO!%g?x$~>wh]7}q~>wA}޿݃7_{=7}k=5SSuGoSu'OO8O?=gc7o߾mp2 ٿC ϟ>8?p (^[XUUE%It$+麦*^wp } }dq wN}HRNDkɅ嬉`]xNxKx/v|.}tcZnS%eE{[5pv׳^BQǃ9r&^4ZY [u EP,f6?ܯrB1hpCw~cNn%}eYQr$r/']TIQw*_{>@l$Z GZ?9=\NҲ'\ɽPZ.fH5*5e=7;g-XˁǣX4VH'p/Pb(HZ4QIOzj5S1TNTW^mh:+p*QF Yw]ciw{묇&=*W@=0gr*£hou:uCvQՊ%dJ.o?(bP @tv]c[S1I297A D i4m?l#P6tهٷ!&)<e8E {{@O6fR!EEkU{0I0NȖi.]P&|߿~4?(HL̒Xu-=z{@Dﬤ"ПKq 4qMe$n`x"mds`e8mrr(D`bŸeʔ9 : EpX n$+I,RWG ;@q,K!FSD,R8WH y ''*YBv1HR  vH3 k~2@  ogh* G fs8r6;=b 7 8ǛK7YJ$YʴK¸g-8\cP&IK@ pX Dcy>;f1w9oLN|Ny=t;k`J@A@Dx•)zD @fýP)D4x AA(ONJ %A\H2.1@sz]_)<w1q=U,jy:G #sX& q/^12o/hCd5rgyÉ+鐻XkQY"%00NغAFNd28׵#PF*i<" yv/b.K"ψܡY q(LQU~x! L"Oc\}Q-%y%^\|k- 2pڊ\#$6ɞKz/KwOF1)dG nHr)uJ-ɝ#v~=e2h"dbk݃s,+K_U*z9Mz18"(ILk-R`)uTN7ZP׫l`FEK?FExH0 %Heq]3 V" RB6LƣL: \,nF I cc7ֻAw]M 9& (Bh@xGAIE7Y\\EɆ&޲ͤxNᱲb$]Q=čGǮwm;Sm5|.[ %T:́@/<$8E0 +X(YckE%T19FǬ<`Y $5jqk݇sZhl]@e]ro?8Tj?^$ XH&m yɆ*4Wʫ6ԭ R-bmXOsCuk{?6_k5ZsZg1jtQ YT 5!\:{90"N*\/$uFmbt˶EbiN*4b1*3 T&wAGڏ]~^VMfue(*$^AP~Eqtzri9.YS"i‚•DDW>oS#nnON ݘdɂMJű\UPZ?}&ٷ/_|eє +LB"ɫmD(^7q .KCk ʼP;uoi)mVYjXV[ (Fk=;2}?:xߖmnJɛbP0[pE{vI ZVMZ%ڞi͚dL)jBBX͕j ʈoOǯ;I+ns@dsϒWr/2Q(Y F@YiWT CMMIt2TE^:޳@62V00I]òz?n^ 1E8g"*j}3לz͂Cwè#eH^kk2dD_ٚQRB"te(|KL0 hB0O 0JӮOW+lkLnN?NT09)3*8 v<> r;s$O bc Tu2D#z{ IUF XiN˧EVj[:Z&DUmzQ[mէ`B2A, 7.hy]{neM}/Ǒ/'nIO=VcD1YDּ,j* d ﷻVV`t]kH*D8*V(ß9x{߿}_22$' Dl,=U޴wD" R9:*k bޜ./Ǜ7V> &hs2dJI.qusl$~^C"sP}/ p9Ƈ+>D"%I$UāH4w:aٝ7S<.%ɔ$pP$K̲B^;쾝5$%&&DFEp]h2 xťJ$ܾrZ:6_~mgXX__b(`(D\;*h}7_d6 COZp6* IXB>/i$lkwsiv0fm"~7*fMVQ0C +"q~]wX8E"ɼ[(ȱB @\̝"T]svt;VLz_Ko84ݚ͆^*MpBƍ8-b~Ͼ4*"] d%D xeDN$897 K$=3[GbB΁tgjcV?րb}mu\4Zݶ*Nˬ6hnǨ nG_{$kME {P@KN V,1(OYTw%2#0OQJܳL87u~~~nffplj{_Fd}fVfd | h E<=['@*<\%KiNp7ɞeHYwgTIK( 4PjVײG *]-:[*tŮA>C}bu+QauZU餪Dt^-VCDKI$q]K$%>ӚnN ܸ H0reA&ZmTo}e8ISMUUIbz OG U ˠPd$Q I̭Z؛"PBD`LEl,#%5MkHE@ggfwT³߭:3 /`.^]{{p{;5M|T)[V835Uin4 alFP5u]hu 4]o5W@f Z4Ӽv^~\CX9w߯-N i(R6yNؒ2`N]u-2J2 %2e<"C Vov.AJq rVˠ]4/?-,ߜgpgkBuxrr\_*t"َipU3fK:lf.EWkx(/Bt&'v=H\f> 1r ę6+1T6Giđx4W䴄ʭy{[ yCz)@H<ħgkӭjw&pU% %0%KBDIDAT$0$5ۍ;ӎ.qe"A D4 ҉tڝ{SGws\>l7L p,S[fS5[ xSl%fsX2 ^%qMRQ!qPS:f@rtHe" GY,1WP{BhA.=o^"AtN6Z6Ngzkfzƻչ͝#R@,E:8-vPG@z=Kd2D$xX<Ŋ|z_|.?ddSӜ: h\6;i8V4Jڛb ʥcP(?,m#%v(ST4Ñx2Dr6_=q~A|U!J"ۖjvs $IPR5T6 C4ruW.vlcZ@^ YDC{H1@ҝR2Á  gR^^>{8Wn| J]k.BUntL Zw ( 8McAa2`ҨqL"2 "i=#ľۡdreñ`8T<(0I|O~]ʛb5ÙnBtVI)U6꛹8 3'K4hH"B=D 5x0rth* I8J Ԃ\*7i\T$Ҁ ,h̊ݘtF11K45hYYyкnf)J_54nT+F"D cp*'řy57@ū4:N]Nb # E)DuV y ruebH*/@?8=(5ꎮ?58 f=ER24)w{.Aʌ6^ 2>JG %BS>?%g / >Q@TU t*(U5D:ȐЕ_Vu$E0,~Fz!O24h/ǧ"H"8e C)|-@V&Ń?M:x %|zՁB.>fo[$;64ޗN )jk|P98"b.0КH#&caO MzJpmgVmF#y fZ(QPkug1$l>*X #4o[Io7D^P%/ ڱTM/Nd$<-h75>9&24奫"C"p~r ܰ1 |ILU܊Q 4Gb;bͭM"7MP!t"!f3yѪ:GƥSThj/T$0&'St %w\ȅ-}[72 g͐$0bFb9%cHs 2t:&vW 'p3ᗞ $^o^6JKЈlno?o6|w$|8.۶ZJEGiVp,[6C7T:Jd(*[^+2Q gb|I&S| <7@,qYgEb]kfz*4"膐j4\|d&b ~gW7v %LW 瘊M)hJ(շkK@"_ )&L>BVڐR@R ő;^~W$ʣ <d<ŢH<-Bז7zՕ%+_ kad[^Z\&Dt)E #2XJn$EG"hs|{AqoY%#),MDHn] Qj|Hs%nM?4)|k}쬽Y[{ӖE(Nvm^ϭ[ZYW"m2"L 2jٟpu7B/eiW)@ I2 -$' V>[}RbUښ_|מo6,ڿ^Pz%ﺞ)۵eRp_;雂rDFCE{ɪ|t.AfiEQ-ZۇGA`cT.E( gڭn1R.C"kos=w9f:r ] x<^G$peiMdXb,d~n1]Z卹ãۍaowY &KQhUo6w5I,B>e.l.o}Qdn-%K>' EۨlZPNS(`"*~ {f,Y#\mZ}4؞mȧ>פbJsG>RH]`8Wxḇe(P9+{@;6Pr.H((']DJF^ YRjgVٕy?9nѾ 1^ w$WehK{#[PcDZ=v,PƋ& )r7{2"|9~eA9j+ 7tAW RͶAujm\-udslR1)J!4ȦRFgx-֑l&Œ,J WQ[,E@x7(w3RY]y>c=8xuUXE!aY4 CnZw E~luK- 5VOjɥТ-Yp$ڒ <FvDf=~f{a60ZM^UZ%2 dUdtET"1A؋۽9Vv9 nV |njWss38 } !bIV_Ѩ70GE? 'ywpw7Zf:#8UCsW-ѐ*2n(7P› N?g݁yp5pTHd5ϹM&]B"ų$#j#7Vzof rEzC,4ë)CP><>V҃f7x^'l| yT2ȹyQsVlpý}4  %,IYNThlɖXV~gg_?oJihA]3,:aكFSSVF](\FkX̦79be&Y>dg߾|]k!/*DaDgʏ'>g~t3Z'D~߱j=ϟ=}T~ﱇs5ɏj{=ϟ9$}T~ϱhz_ @t3$IENDB`pysiogame-1.30.811/images/memory/m_img17b.png0000644000175000017500000000173212201770072017636 0ustar tigertigerPNG  IHDR6F PLTE1_X"bKGDH pHYs B(xtIME 3a TIDATh;n@,عH it)49B A<!idn#pXP,Ԋ33\̮!t܈%~O5i=5$$I& Ԥ\KrZIPIZ`$5TX)I')VHr 7zcOIv}+I}(I K![GX Fb+yzx'' !/͉'!S2e%1f!$E*YH" = G7H*dw"/WdWe.֎+fF8\Ӹ~ Hfq1I"ĤtxӑHOX\ŒfTO2BIJr4BOJ*_Z, }4AiVTBT&TR/&%4IߋULd$$-ϐTDz=rȐҽ$`W}yD.IE9"/I,iW*#R9ʘ: re UxJ몰1AJnjDb &dB&ZcŘ,,a?A֔9^"9|<~75׵zҐcR"A?~#' u9m#[d;wс1ޥFD7I)jذ{c&!t<9A@ S'|E oNE".c$Pvj'k}4pf&vZ<2CIENDB`pysiogame-1.30.811/images/memory/m_img22a.png0000644000175000017500000002037312201770072017633 0ustar tigertigerPNG  IHDR^PLTEjvbKGDH pHYs B(xtIME ;,~uIDATxgc⺶ލPB1fgOIkIgs{3"KzT+2cabH5}|\ںq'''H:zO? {.nY?k=l*>Uz9)]?{28#Z.M l~8DŽq"{p~1Oo[k{>n~qۄrq kvIqu(f{m{6=\N(xv IqDnqo<|.!.1rq"a ~1.Ev8 n}>rCq~,X~a럗 .F]dLyAcяø_Oh\c%4&b"iy|9Lw}{{$G-)w V R2Qw?C'\XT>?dݝFI&/f?c>ُkw^ۘ?ޡ9~RcB޼CǮ=Z=>Oߣ֏{>OߣSԏ{>OߣSԏ{>Oߥ֏}VwGAzyϤ:Z ݨL{YoG+sy$\dG?dXʔӽt!OtռW+n7frX%uٍ٬ {K(:T= OK}۾GM\O"{lI2U-B^E7f;nK0(?ٓtwNF9x="ɹ^0#y*u(,K#[Z|>GvwT$e  ha]k l#IdzwGt<zizKWؘRWWټ( u1 ΏAI 2wI:Kӷ6P޺?A8 T4E((%4ۗͨn/cKEބ/$ Q}dA%}'j214MePh`? 6,k\UKPsӽMp/Inss0H@x)qGлC.yJݑk u%[n!ȽDA:Hwlp$B "đ?Qdۢ+*Z_C:A>@:1Mn}[f$&j[0|RQ0!o/nK0޲uZؾb e)rVCtv``$(0* ,O,[W{6h $I2\l` c !aFQHA.%ݰ ҠV@%%@1tE6<^>F)-w|6²m]D9)@,ƁF;t3>B|%h9MAds X80 @ zV @ &RBE)̅ą am:djQ4)O|0 W>` 0Eni f eP,6 6kp Itaz\EٞP3/lDFaSt]ׂV@bљA 2uMw];148ʮSģN*d8K>&.8z`" H!_L8aؗpRdaY>~$xޭ1lnJnEChhs P5Q@JgA<3/'Ŕd62d2(b2@sϻ ptلPt(4b!bP%}Axhy r d \Ë> ϼUt+Q.A:;x@H أ`o # Fd:)C=`Cx.!a-\"a.b9 .D9g\xIIrtM.h(yZ:B-[tW0PŻ^{.Ra*p5|[ıۥA a H,6&†puyyU_hP`5Fɲm K*3tآC\|/OS-:̃t6bnwHsR9L%y m6P sd9ߞ ,?GaLbK*jx =Sз l&o1S!OO\Ή\UZ2 y9alW`uⶫD&J֡&/nsI{ *.L J_! @D8z~4=~Aq$9dIvzёBN &On7LU"1Oq_>!Tasl6UA¯#E@LY˵%b^j,XdEB?_I{=7<ٮ !O2sWWYq`$2 5j1ab2iNFҚMȦXYU}A A*KT*kN7Q7޹ϋ4[<C^} 9 mZPֽ6(Wk A1a  C?q]݆X/e C@DWu=ȡ߮jU-~Q [[EER;G@d4TtΉ>nwMH$Zk,nQ|c@?bB宥SţAƓ+:j5sE&FM< }9<eew~ Ȥ } \ <`4=<Ƥ7^t7=JᇞZDKPvi#֊#c QpFk___V6?~dx^b 2=hN #Vݢ"% Hǹ(0Ћ $|Ug*ֈx$p4 ǣvTu461}N&#@qχk.Wc D(āth=:Y`Q沇 I]nAA#Zs;psb!bv*0d$6QHصGu G?#$:59w\D- 3P!#-ݳD]5k*}m8/9!i! }g2qi·k_\^Us&Ь#a@M2 ٨%'^k7^i MkM?y`(] Y)ιR%{Ju1%0t[7^1dAKfƻm8*a8 b~Q[$Cێ9w\:!|3_'Ж[۰R0'Ed"$U7fӉ."/z!IyӨ:ZADŸ.Οsǥ85یa;u1<{gZlr9LЪMx?ɴ{Ӂ!/2BBȞs=f2ܗnAˣpveBA =QÎZCH4u[#I-h}0=s.f_]=3%6l2K75pv4Q!U>Ejvmr2YN9HP崔^;-;|^;2Q!J]i4ˎoMƻf*ܲV aOGq#'@Vmv#@.ViXh/0f l+7`?nS ɍ$Zu@GM nz}/lf@}`tUՑZ4 阽S{, t|:y,Y Ÿv@ɸPqz MOm 6P+ 6=(GҽA%qAesPhr~0ȓ@0 ,tzHU$xV,> r9t_pr<\j/do,/IP=>6Aրk89w>ASOA(%V`adNo7ڧ(wu;2`Ӈ7sǥ=n 2YP$%1lԂpL42@U%fAX~s=ιҞd|kn,1:leKb]v :c)pfQh??|9w\l}{rQӠ ?#bguq._π,ݸI$>^G)i^S `mo8K{>\* 羕'nhAxh y^Jk4/+_ιҞ׾,Є82QM7G+ k QꙫίҞ׿np[1JD:;:Cyeo8K{>ܽptre89\ԅKi٨'GӍWϢ#2G.]Rp~|e)^?lаIhɵFtEyHӹ`H`\A?[ίR׸urx`*`u*8D,P;>iܟ-qY۸ -&٤tݛМq_&n엷Ó⧻mYO*S ^-_3 ݧ ]epdS ↔k; 8ĝ.O%-6$K@c 2*.󨪷ܧO,%<2, t)̗A\p =~_J =:GuGAƕd*U<]CPJ[o<"$c =ȽdXoA&jcBr۰:AC@7w|Q6 RA<}zY*/sy;8$9wgǝ9o.ܷp7Eˁbׯ_@·s*,n1 zm74ܝwgnZoBS3ɦMhNLϜ7I?7N>n] -}ݾn4q],/ȤֹS|w.V'ӕoS1qΝs<7N>K%[,{3?S}w.\?:8< gb; #gGRc 11ӆ+o7vnwW.+mP4J'Ç?#щxG_7mٞvnOlǿC*ns~jo;W?wf~joKQ?F}߸o6)ᅤ5{[k?oq;W;]k?o}~|-ڏ[f'''''')4:9>y7幤o>?>U~i4yVwk"'4cɽO}7幤o[oR~=g_穵;ϞRKjcqg4ѸOُƝoGRHI};ݑ->A>A)C0t/f0u;<:$a/2k=9d eh(meB wBs*v0j x<<#B+gQ?K+@J3UGkO:vQH'm(\Zn q/E!r)M,R;v3M5U5{-u']JYDf\>bSjiZ@Ѐ:EQ,ƂV]Z}4};X7߁B;e]?bG r6m An}睞 ]Cg`?ʟV9zojLGPM7@Fz{k`ir<#joK8D6g=~k-Rivѯ=& nkwv; -Zwv[P*y4M=IwU︍wS"/WR߉?h7?64@z9'.YT5#Q`w*ǡTv>t .הߘciʯ?PH1:`6;ථޚ^C~r OqʂY*T4C:ZUN{MH" [h~OJۋNФh f 7;AZ-2l)kWI0>wwgJJ'"ֆԀYVI1U0:"!ymԠV_MQ#|򭮁Q k(:딸D(-#```( tfάu|K澬׼mzȪ^{~z[55 R;nKAmC}v'KAp TZ)sņ"~nl{EPLIŵٺ4hud~KaHS}9&KbvhW&9RH(>aFen(,;ڭڭYM̠ux<]A% ouqVCLRRMi9QEFJ)Jh>H1*p{24GblN9?|hKW8tn|n/ȩ4h֠1+TJ' gfKWlsTꋩ+e5r,U^LGX8WMh ^ͯUvt7zAmݣguW2_wMZ-+~ ZkcqAk>[uZrr4+fh-TB!#ZS\Vim5g^nnVRxKKO4< ZxXPh9R JFƨ%$h-]}Hekf>{[hj)'P-aJ vVПsȊչ:(e7YB$~&hJ*b+(8)1R/ah*ZgFS3.awڼ.WMa`wǙ[9mnEPƤ6b)mqwOhk6jL=CMH8T" Yi tiTBI3|wKr}\FBb;ŵG;YB]?2H_ߘ~!oz$A2!&KFbr\F)M 0$h=MYi&۲Ei:LKe R% e)ZdMZs] zJ[m UxoW'ҵ2,$0fb#aQ:@zY(1(xQ3Tø[Ntט8樲[2) F^]k(ml[X*YؕEQ*Eh* *E` 1@P$Q) H 24Bfֿا]8 ES1A%^ SYmO_NCI&"Cys.m匬e@2!0H)܀^h8Tf5Zġ BjWw΂A vCQF Ee K&šސd)Hu4䗗:Mȵ^].4tZCf6Cda~I".Hhd*C'4~W`F϶g|UѦ$Uss:Z34FApUI[dA0tT'wf0*K ^ bQőEeCApRhT m(BH\J.PE)O1/p6C5d4a ~Hs{9;`U  [%' ZVr\L23Gp=jɶV4`\9U RTxɰZz3duM =_Nud) gZB)3iHHY$HnQrP"zƌi0, fzyCIjW*C3F  h+I:r%qi 5ޞ;66<'rZ+(R iڠ "EDk^EvcX7A0P I+IelB\N?X.Im0 E09q%顟ո6MĠ$(5Br}w˖zeM&rmQKCRrGcǥQCY-s%Z;gՁexE,J^YRךLMRƘR*AZA@G V 6Zs*QST)")2dƆdp *,*יFiKP<J4 Psf`zL%Ƒs0Z@8iMvMF]nI wũY82,2 K%TFz+ORAS(pW@PqyJt*UX=.-Í 6X'Lb,QgCVj2TPKeL ]$L b1&!*rI 5x %dT%]_ǂfe8\B>`$@%FK%U'(;fӡ$ԔfRH 1Li#adpXs .^3iQQj`2h~ cde:d!AQgːK/)  7{"wёOx=lݒS.Sc^`1a-QS,HH8IFXq! 3(R#1R)O@߬*? E-A\'XdL~AA:SR[ \Z$c:A C!T:gϑ3FaU)]Ql"1(2 ODjr4(L(KNrȞ @NT5zxW}<4U0qZLã`(g-9o2"Ix(zʠѳ:J8"KY k Pj0d8/EPUrIؕJFe1Yl]HöGDڪ1BOz&" I1Lv9Ŕ&Vc&c2,@ fK\aٴ;qfu0]oiv "@LƋ'M|!ǖdT"lU4lc-h˜9#5av1JGH.\< 3E?e1fw">4a:rUaW%b򸸃ppuʪ֫aeq6ty޾} xhakb\ffT2묣ޖ0Q MU2ZaH 3f$qR O|桩 y``0d{2y}c0Yʏp}3OCe'nU cc*: rL244?Ж]cr.AAxWX.̌\?0z|x!en.Gg;&*u7 :=GծD CbaR)z$,/O2Όn)=?09dF&$ `XZod8䎬_kmLk+nѓ=Gv7޽Ew}:a[RsJ`<(saPU\ߢ7'(kr3ŹbTqٕhV0 ,%PcT5հr=OUp}R#ڝ=iUcadH"#R494zʶ|}E9Uq9 1J#!!* i-7 [򽣷Y)~Z̪ꆏ\  Z;Z”Q2YԴNoI+&rH O.a|d.4e-}g-GgC㑐>`K0)|MCM/^;:slΔ3Y0;EVE6[p!߭}:腔c#g^NY:dnuLݑmpb&5+/_rGvK)[&x;Pòb3Ejs~(n+>vks=x3!/U1ira';ѽ-a&2IHl2¦&`u}o-կl~!$̙;wY;Ws`OSqIdbHj'LFEIWKO}𼳤V?x&/OϿ=S_0nt0йO 1%OdJ)vP,{?ߣ>|ւ~f3Pۻ2gh+kkh(G I~U%7JR WrF^f/Na躵$:f:E;խ48{}*zu!TrO[^u]*t<4x[Z>zQy^ =}|A-:$dQibNgʋYWQlF*jʞkGo-'D!̽w=Mm1RCn_(L-5Bftw /? O~a=SuϜ_u@ bCl&|+]2?wA|#nG`уgqT9wcˣ/z Sn2CDG[R=ҙVιյʯr~n'_,|@Lu'!+C8SMH9)_"m0ndw<{&ӟQyW_\PϨ՞54;wf}w2} )_< D?pK9nYn02Y__? d{{Hl@䈎T]:->P? ?ERNY%rpd% ŏ?_ SƢs^}Bߙ?~_'=_W禼)˯reꗿ[7yn%LNѯ rW;޷OYBo 'm{** > (?>ݹ)rqcaŞ>/o;0V@ g Wo;/$ۇ=O2m[Ěog+?T0z+}Ǟ}?zw ? +d~lTMAǭyb#r.3럿=r2u]Ent`2%"?B 3Mg6@*l۰6~ېI z≕c->{V>%w =&rlDe=dON2{@p@QAf̌xL((G.],p@z=DʕF?O*ȰpP2{vhSNB!ܿވPH8BXx𾇗+ĚT7 oXX 5r먱"Bg_TXLǣ+%ɏ&J:LqA/ѲG(GȬw"W+̙5&}ۄ`P3,xb:2\Ykjcȁ:$@#%@Ab-^0'Xh_rhB~m<}//p̸#& BAk-K,ȥ}AQ K2#4"cu9-p<>Vxepš~-h0Wp 6s/՝b_=JgD8ߘDYe-P_zg ~g ᝅu.gW' Zֲ Pc},[ wСq8bKÛ ]+ }df-8BD9~ FXw/'Ozc}{L"HeBJp}{g@cCNRBhA?Ɓ 4oIc )Pcod#fw3O蜗lA-/xB#L?< pDBA3"Tp!iXxIOD4x*$P^(HcClݳ'"3BW#^ <#'=;֌T BD톮CCg**vl#UI_&dXA~_l!QQ&5b_ ~5;軏]'=[E, *Blq-ppOnNVER.E$ Y3^!?mF_[?c 9($B5խ! y||vs^ԅڙ OgA&%2vIDAT!΂ YVU\nA u*[f3`~':q+c§W^3z\Q&RK7x~ @g=RTڛ`xl'V®xC>#U $SֱK'_V^2QANn[>WL ߕm['5,_/#^A]dzc3kCxOψ87ݱ&8A=1<iH9?[96C ٳm݅. IsmЄ]6)RV.^igndw!BqlucyӁؼG,;KW6 6RtdLcBٳn,'.^0q* W7>5(oaVt5e_QtECrukaP!`;hlɒ՟ k yrqǦ}{M H+q KO!6>z ((TvG+Ukֈ``[1񫁼y{qa3A gP_~*|3>X;)/g KF >P<wFAsӦ.[\ε7zɼc|XA!  7=xO17 >BA{ w3O1ⅡIyоM6 Ƕ?]LJ7 Hݰ ޠ@96)ru㲥Kϛ 2 nj"Xݛ6Ǽ?y)~g?Nƍ˃q"ܘ Mk+twG6C W7E 4aCF̾9cG=b9>ҕ˃B׹ Ag~Ϳoc9!mc֌7 rru</}%)qE諱WP*H`GBA7iJ1uqCNꁮ>~g gƯ]*k#bv1|aZAK}8%Aחq[?uy A} ) r/]\D E wV5?eAϯGp<l,*Xz; r]\fsX!\ r<>O]+Y3o=hDkŮC}:k M@ CO]3v%GʶV:WcMGj̩V0SAݱ 2|w1 V>*<oLՍ>~!w?4:B ?X:H)t?rD;X}$)rN_ C@ }k1p;SxvԩgfE̻zو ޿ol# ?P_{%?$MЁ y O<ǟ}PgWS3 P\!L$,>!. '^!$B{"(H!D狷ϡ۸SYuz_@~&̽ }r,D_ D74yY~a$7lΧt9>rkJa,??@K_?vtߋ^HY8{/ڀZ ux`Rw/F ". ,dž.oҧ@^Z!ru-( e^T_ o|lZ`y r{+% g`8ce?O;^ѣdxս %(˲,[? A` 40Ϣz ^xiٳB E\l}.h(l{{g="W_pe>5\5݌Gc] vנ G~Gk%ȣ~;^'\{v]78VM8nGA{#.>KxL#|ly75+q].:~_2ac]#?Cɻ㘃_*vq6=xũ8w vܳ{7N={GqjNhBoz[ @;1>ď\ǃ.AGۛnG>|4άhv} mDx-1cImG>|ˌ~uh} VWCCOU<W~<C;w M=8Aa/2@ "4LhA Ec=  xbkkݸg.|,`@еxu_g>x<\dܹ,{w(A6S77>7Gރ5@ SUh6hMUF+D1!0 3q7oW7243C0``@`D`>I/ijB< ܾNKƍ o᣷)Wv/ F_ZPFD z4ij D/ [on]]%عt@0XP10ϳ~cE C`z P<+7OxU.*_R0>q{n0Pj@3PDiZ,T(Wf|U;ѽ"ނ{NOqYq3+DU1fa19`ff+@*XV}/zWˮ/'1GUK&OuC?;؛OQHMpBJ޶#E+RPWI7)/@vJSk\cYp_5!AD"$Ly0Uc`3c&CxwxG^ ˯K }#.;t6 x獿yǿSu3`਒b34!U0Zªou jŋefo, f- ?|+g]|G|zH gU<zJ"ND/\/G,@N2ǩPA%D"IH}ýP@Xe1 gER" c$hW{,xˇEx^c)( [ 3!fϘ5c>Xj&Dc%.˾⫞q=`Hk9~#w4߃AM_E$q\U+EF"JBNM543 V!`  YTX>`3W~O >;|𶁿}_F*8x $ CA2cͻ{c0J6~GC'_pRa$>c̦u`V }h^@hPHM%11dD{؟w?bfX$xnP _xPlZ <^˾M^IݤF5D ~jqL JY\ST'@E5fb*\5xnW݊_y]vdc/'g2;Z#0'L@BGf`LU z}̼jFc7U.?|u{T}~gG'f*puJݺݾuwU5-&Q Sqf]U?sM)UzUMq݊'\1xqK5= 0'YzC657 m9'[cj+uL{y3?y"C3qF'P1 "Bgge/_,c~>u绖 @a oT%\"ALVT#xdP@bjRMbcc.lPۮjGmSG;>5Nh&u@a"V dD+ TvL'zD+2X{؝Oc=B0 6[-qt ̓Z??L5ߊ_|?z'P.5jZHxZo'd^0H L005⪛C>p\)xg ¸'{ec :&B^NhNySfļI#O׈x|e`=b>|Cfg2tKz k`^ ^;^^|IAix0x[~o+at)B,"1jK {<-ܯ?IzrCѩ&w4~9  {" ̗SonCAv3¦1C.ˆt041 kȕG8vkVgzWpnxNhMm! {!5 YƄ 0zBoO,=X ojgi;B]NM;5S-gKIgWD& 5 k1o -=on{;.z$J.GijAbU`dv\ qTonkJ]fY3GZc5nw8vgӪ:akᒫ&\z*(ɃBTP ޳ZF&4^mct]*t](E21v@l[,U4f`F> Ne3COvYfV;dgi/392̃5RJܨ,jn{N|9_;5D "M^:Ԙc]ɤOq/N+ж Oݎo=w`͠ȸf l))(qhQś*Vט@`=}{2KaҤcƬREag`.'h̩'4s@Ms7hz:`PnHcIۦEu~r IY~$RlI7"@Jư^v/8z.|+[1د'wKoye\rH'Y:_8fe9YA4ܭ S"Θ`pǙ]RtP @e 1I2 J?5 'n_IWav; WUKzpGj/*9nkVՍtkòJnc4$\K)杭T!",׾Wq]Sˁ WW8yNtR ;lbd03c+@ڄV-അ޷1MXmL]66V}iɻѦNPe;)$`N(b̆_&2ֻ3;5Ў.ӌ3qȌ3<p697+w(?'S#a)΅.2fB&}{צ1K 3~Xl>5LaZ5V:7>~W=?ta 3k>81 "nQ@Ҍ-94ցbPGG=n 5 iop.դ[S׶hm5VKgN8;pjCr%c^3}Ƽ'ofϨJ2mn4h@I*КjW&IU2)&G9rt]@l)6ѡz&сnc avwXo|o>e Ah9@D?߉nL"5[$:RGep@F]sONE(Xc3t+:4+݁'8u|r] a_"ؑހZ>%`\qtvP0\^v:V[{Isg=2UJba':;}: jPwsk*A}~w~O~ͽ?rSc PRżH zH>uf,HEo?ҭ e׹k7>f^c͵8|СUgN8}k8T jCՇ& (\aDrM^q'l轡M8x ;4kkp(2?)A9VXq!` RQAm6H l`=M`9~[k=q7WЛLLi9E`QT/#"L}al_$^u.RɛzUƌ yh~rg{{݁33Nݱ8y3˟vW~m5<ر酁PF"`H|fWdoMI*-$q ʏ0͂X[㘁94~ߌK=tu2v#_z)dՠ,.W PY c{u;[`g4D pTs3T2< q`Ȭ`.zitby@,7}(CO^Ey T@AﱑԳr=%^*ꘫ" !b`q@8p\0`p"AM`Md2 UB53@s8 Jԛf*A'< 2MH۳oig`oZl jз䕯>;y3d>r5fCr1M+I*/ua ګ Pm*VCF-5w Ɲ%] u2^RmO:&AKE'5By514VlhAAn9ݘ\?00DʠjyRF-^ D"M x o?v{%Ȼ?;ћj>p,Sr b% ]ܿ{sؚ`k: VA7 SH+_;S`@Q h6s hlYBxUVm![咯TXU}i[(GjsLZ.1ュ]8sPr'?rr[d%Tq"SS io@!`kt doEu)R'qoz8 kX*@#tx2`Ly-58W I4`4 pP$Ml$N f{?z"5\ղkۺ3afjMBhNA6y@!~ Rsw,ig=3!=-L}GQz"SHVXU e_@<mV;Yt z/KMPc \RȺ-7m;3QyxXpf-=ՠɖjXchLZQƴok;ph i>Q=`pCzt"ʮ? .D^ҊǺTq[׍@meٷZdY@U^OPլXm\E@dq *mᡲYg8T)Z<0lb0dž}!~ױ:ؑ ><6⥃J\7T]6,c^xW9H~O1&Q0W Mび@gvR Jz͍c&7ܵ_":lVxFDU#Q(BR8jTLbTZ4[6ZdDjK:ܰ/#"~R91!d [L4A=$očOKc܊lw(5҄2Oԉ J)Rg|{6߇%;fTKdРDRLyE]&T7nxƷ!nJ?CWqƺ`AQ IDAT;Q}FUϒF>ݐ"slysٶZS,'l XPV6͵^t 6ȁBp+x% ^QƠF10ZqК>Hk]YJV=N*w:HL{򸻄꼏A>I~*XNo&di80߰ W@ô4ΌS>z?@ xGpRh Vᬤ:dbY>AI "[IW2G6 Z7X 9q^* Yl!tv2WXZ SW#yBWj/x,l/Cx 5m]bVY"-OPnm% Rql!ʅbjOlu=:-છ>yy@ ϒ j<,fQQMuR"! k^ P|N n*d+6GߚNJ%|㷾 `6UPND'R`8A U.Y`$8%lcHJ! i vҵ䡘 3Я_ZĉY6HพaPk U*WAS;]H<@"bqTT0"35uHT-?¯ț7- ;wu,4 ո(<(VMӃo@r>_GH:ǕR~{v& "`@?}bL"sEz-5Y6 ە3vs cTKKKb(+>g:Fpݡ1VجDˆ>#oo|~qIKc~sLN\*~uA.x>K5bd<-`%Nsɺ_"X?5@x(rEHI؂v0JV"&Sz Lh$cֵ͊,Lğ,٥K,1~_0"*s*. V{\/= *1x P!ZL-1e@Iq2Ǜ8T4?^D| u!~ q!QW=C|w:q=f_hXg$Q 2 -;n5"$!2ARl>,5dzIԮ3hߢSypq8 `gR )&n?rnx5Og>k ^Wń "K9+P84\]ZNW`UYr7KpNibIɭ.-<*VLdP€1WVR*B~JH*D:/~ ĥRJ(󅈥!:/5'h5@gu_#Җ?-h rVZ]zvЉ UxrTi݊Ezo'4uٺZPEkFU8ر,>NF-ˈvJowYmB=쀮ҬVH_m(3!6]Lq`[; YK WU/RAW?#~YX,3^?UopW3$\tPP 0ZE^ oM*qZ*Lz_kųZSdcՀd}^C2ţu7Mp';ud!!*-^#`4M bB'"¶ހm^$?ŋZ> X`/ YRD1xACc.Cބ/{ٴ 7q#N>tʑ:1*6MnI@Vcio(%4Ie1bM Dv~(! @纁i.yr9HHkg^Z`5HaABbV3 I?C|G7}YN n*vv}@ G2d6{1.ʛ%$OZcOwdy)@H?k5Jp𲤷Ego '|z<`Q]ΫB nHHF$qPl #0B!Hp"E.ArScHd{i(;܊k|&waxjLhi! [ V"A(kppBNb2MkczX䝂b<2 Xyv۸0P"z2﹜+Ϋa6bD Vfmf x tyĜM HcyZT[D6HTZ$_?#oIxhOSOgSy]p}S?oxBd,R⁌{lmb-B ct]·qTH "1PAqL@S@ -7d ɩ2peXV6ym3X0д-Ū!ĝ'v")5(U!`_题`F}WW|z~m7cRG͇ "Wm*0w2rPX`^P@Toȗįf9OKZ8 ^Є}џ(DSN9W$D:DTRN؞4ط30dG04aŻ׳}}6-*8=W$+"SbpC ܺSN>ގ,>v"?ynjPz L!BZ}_'yn=ms )a+nQs9r0ɍjr(nJ42)T6wjHp,a(1 '|:gVZ1{D (؛4tpU\w{v"`(1.=[ޏp3RpIB Oco{$T]Ip0/{#l I;u1(gKRJ&-R L^n*߿N5^!mtsඡ\LiըEVo6WknO^r%T'D 'Ih&RvZKCha nyNX["{3F!)$J*J®RI%q@H"3SF ^ԥXBzG%<?3yYciaH{vp4aWJ"I4JyqnDK#&Lٷ}yiЩNp+R%ZOXza8Z\ZU}(8IgC}3dW6ɺj%9'sߔ`ʘ?z[m\h_y O#$rUO OG](%B׬jӯ52;vcTKX 42⭕~PSeKX\=c޷iNMIE#ӡhBj)l,n'<' &-oҟ;VF> Fn S~鈡=sv1IB.v[Hh$`|³|\h`17}PzuJIߞƵGk9S[Fj":I:XA!kt,~I5Mrx%-(&רcis$Wyr!bjdy#$t*d@sto>sǠ*a4H1"XKæw˷CP}Vِ6eRy̦jDaD u_.\*%n4E'u5? ut;-LmӴiY@;&}>mU'QR@C=h k&Ut;vhDJeғKxTS'tĐOsWLyT&@<ش3wry4e$0j6\].Jl>+[g'C8s51P.0 ?7]@` ?^<ɗCZqhnz} 4 PTɤŴ'5o.5z{ CĂ(q\<(/qxLk-lŽm<ܹjҐ&C|1S3bEBUٓ;Tf2.\"u.FjH%).\*{xEpm?U{`-}G3E[F!_vQM؄ݥHFh}:zoU/RCEjF̮u[6wY %Tkzy=Ҿ`j=]2=-? wFh\MB!xr7~3ĈirKUu\ `[~'Z  9NZf IǫHǵ@e% l@R9U/(ԙ8udH\-{KPoLD f%ޘ8@ДkyDZ CkCDrgEu.i B0^66: O~5 w^*\5UʡgٌkpȖT"r$ϳ÷yP䓷܈!c9`'B(DL^gW K n<s bݻqb'Tbz hi)+eNUp8+nD IJ)pJ;Q{tYl|"!گ{aU)6H8-܉O5j({p0}3TԸQիg. éʠ}b\1EpC֪c[$`Nͮl%='g7؀D, [1* Uiaѝ BZM9\BQ- K2}Tdk ˜"Ly$*YI ?|v_A1%2%5-FD5fKHI9SF[?qh <̧l9Pb#4!l7F5m B%rLC\Y Wq6.%PޘhcP&CJ3jQtwFTPx r'"!APGHѥR49" ֱPkJ2ⶌZAJNޘC5 21iJ9ْ i=I&{R`$W_yuGq!rI5q)sÑ}teɧ'WLt25mzE5H@nxe[7Pf)tyG>frQ+pFViGyX*"isHQݚ`0<tNxg)D G@`2el.w@e|qVK)L`*2)cnh?zV۔3G;on` 0X݂^;IX5Ib#m@JR5הQXHss6F HB0.hоx~d90}!Gtqq9o/zx&݈|ؒ D]@r;Gf^1"b &?hA{sCĂ@1P+ G@ FaZ KTl0!ډRR}B$RTʐWCN. s@%V&ˮTcNT U8I {gU^r6cc4nO26ʐ|VL1n1$Kd؏9q772^ Ğ'ܬwΔf 0a&q I"@Ggu̳&(*Sz~WEc#Ċ%dڞ$$SɄIB>tTxcj.]Nzp$8zdwt 4yQsFeI'R|%۽Kovc1N>PAmjS3{= -K.d5E7׈=փV${-GWi" IDAT; dhu#FDws}w{6KJK92b^+:-0-CH`85TPW:}} B0.R$Ȯ#\YU*"=  pWF: pfAvJŧIŎ"^?g:kX,@ȴ;FzC< W+Ĵo"Y!{! yAd JNet0{qt{f !+wDd}kRRAN"IP0q(aU}g!?8G,Y_b{ L1FdRSKYCLb` 2 }fKw}puLٟg;os8BtGa>9@ WOhs*D 9l#RzUzCrB BM+D8ՙ(3XVxBf\zsÀ4YcA{5\!Z@!RRg'ʵ1 *M`?Z̡%HBϣXKCiمTH8 [Di” :H>`HS'm SxK<<`rpTc:yV"~tXMCx iPSrq-H4KMY;;؀D&UqLANv ( tKعB,%IpuGҺf ڔs,&C1 ;ZZPsO1R#&93-H:{6bVlgRhww3{0U[} Q*֝rtVljGt2BA`bbVd/vat؄@/žڼ-B9 î%{nv ȀF}{0?t%? I4gwAroSYa2&C 2>Ii$ǜ@P&g]R5!qFk# ޼޼[̖̹~}Jaw× r?q)2}:'>wUb%I3oGRwYZ xOH[f.7AfoCu[Rּ,59Vaa4Ґdl~:~1Ĥث<9\UI\=6+ H[ǐ 5Jq$ 6< 1uh fX<[gvЁK> u4~Cz~n!':h_mA=͝"* >c8Zr q!LY^`I(1"ɊUi E&2pIJg.5s'G `P-  U PښNJJ> 8U!@Bk &LSH.@'3}g:"*PL'3r_$0Y) !|ѡ*EtM7[HomJ?ͼlWw7ChV/:dųS |po}^[QRNPs33F_%]b[GJ9&3aM&\9ΐ܅eyx C c9^p(0.]v7v6ޟaEϜl@wFByXb j,]8"24͖ B;aHlSg K@&곩VVYݾ,`ᷳNjsA#/jAZ0+aqi$ŏXK?%735v@!F9l2Q& V0g a6!AlUƄy&/ȁCZ D jXMNuH`_;WrEt̨!dQ/O>yJ%B5Kz"cpQa>w@NZyz$6SYl R+*I&v#U!ea"*xlUȪ,A磅*U m6$:M8+rg@Y"5ސyp-)Fіb1ig'_]Pl"?ϤUAD|Hj@c1w wrf-X{I1WÕ)Dl4`3  ' r8Roq^\ w3si <9H/ٌy "/K۸^+~8xڳqrK5CRyXJrx3R* VPیHʃk 8j7HW ߺhYk=G$R}$: .V Bs>@B8$ObYh:~;ciױ/rbhpb5ny#dл#;d(4[v('Z$ dZddˮ]m +/[N=pX<["g ٸ ;D3#%6k?ETWnf+E=)*gYh#UZS$b1*EW!" p*Q''n3įF @%ḘI .Z W\R)r uk[,27~;鞓u\Jc?+1{o %g 66$蝠elŔ7@zLElcw2LY'}zd=q0+H<j  **8s%e#Ydqul7=j{[ &M9,#N*,ll/Ͽ@UHBڈ1;{^]BMz$[< p!7Lsrx^LFtzY{Y Ir4# Lo70rs.Sa2;q̃]BwJ*tm|mץ?:g'vo0⽅ ")̊ \"w,0&tAQ\OZoiQg{Zki\ԍ .8!4U@Ssc2M5'ۈs5]ι`$@wNJt,n=lj؍! k<9Jǔ Kpr{L߁qͳESV7̡-`mO]P㹠@W )ă>7ys_lM.Oy3VXm[K; 5Іp<3]\$ hM""3-*m6^,SN3ĞIE'jdg46Ԁ{D֢/Q88u/SjI{C/XR$q@!T@,k0۰7,MڨI ꕰF b yhY^ _z^t^ [6:8Ti_fC_x#9Tb&ly7!lJy)ҾyQgAAY4jLLKZWq-k Ǒ+2 h FBZⶠ$B{*˪籥eKHVR 8hHߊ$RTE_![}?(|L cg;܎9 s|^po}r͕N M'Uńic!=XP[@Pp S8M W,K> =yoc]ui(8|"%Vq@p S! D%ưYV[dsmi-:u @cٌ2}>. W]v nQܥgʾsŤ|U/x?µ @*W@bjrxiSe(4=TX;wLAxb\rRo`jϾլ\)>'(j_ awDԧCU B>yVSkw~N<&%6iD^9As/۰5Tu #qŦ-r -$K)6AK+.Bp(߂)`Hǂ9Lb>H!Yj00g'-RʇJ.N%T#@bϾ(ɛXW/} b&#K ->VX$e ʹ=aU[~slyʿ•sa?? IqrGb.wϺ(7 %]Kx.vF࿻-1s&FLxhq6j 9wS% ŹK/ pӾ#CF9qd溧 `מNYYN9BzJ@vF~vkc8 J-xY3)i,εg,C$>7%؛(dgb %t.I_URCk2i6A͞Q٦f%l^+UwS2zo>| ?p<w 1fRC#曥q>9 Yl!&,v:eH 4į,$T4`8g؋%pAx2v9 VN:; (h޴ 1Vatǩg,H i. \/G=jy30AQ+JDʈDъ"JU.o(KjMӒjBhKWRk$IjZ-+"0#`P`q. w~sܾo=9=g~?;Ig ) 1KeEa -P0`rH(ыbiޚ{@8 FD ڨJ)| PUJDRʦ_ (GtV(~^p(qmτ,-m9^ GNH=_6e dTL\s_ x6x#.K>#Gfk|Ќ(!@C3e et$ 'Xǔm=ӊ;覃A7:ĎFqgd_ER w/JgdO5D[봓CNF%l LǶp`%9ePzB-^ ͏C/_w>uc%~fX|@2LZ19om 1fe`Z-1+vY7לnv{ I瑍aiwg<(Ot/~c>-zvQVm-3$s{ū9rސ9 p axrvyំBPS3GΙ"kYiǠ1<'!IE|&-.ReKӸޟ}$/8[}1ˁd:8u\GPTlx֒L?؁Bi[w݄鈡]epaZpi]B@w]r*{asd'ʅЦ)jɬ r-+ 1TրLQԿ>{[dz ^ T〣 YhH% s( ``@b\'q ͒ qq94F E 83j+ %L)'cFnjζTZUD ʘU*"iu%v(1K7}JDNgܜ/!ﹹ'= \yO#\o{蘶*^|**>@%%8/[N>t|5CkGs]m߁u$ MRgv|i4NaKl<w8I="81vܶ+c:C|+RyqfA)5uP гǖRc7ʹ!Y8s̻Z kV= G~( 3q ,ӧ@, 5IKBؤhAⰂcxM@`p\0b@v~7 8BUb]pqwgP z?+Í)h)J }0jkpޫ.쟮3M󮘤Yx_\[}}Le9vwi~/-7ђըTLJ;jެ\68\ _G":G 4]C A[(oV5e"4gwLm{/xi/{5\X\z\gq qXafө37 K@TnAdS8~ՌgǬ`"65מ!!\9 g\oRv:'ҿIx]8>q;\˱dɡǜ2Rr A2r3fgfS5FfX%unl~_w)|NM q15naRO=zzǑgY2{sއ8$e]p};4B)馚RϏ7=Yyqp*eGk$wOYZ,W&Wv_H엿kW5'X0j?>!Bc|g0XT'=Uu6 ܀f)KP!.H(RJUَe33asYT[ƻT: Ԉ$A*ߧ z̓8eBM {Phl̓@&X1 u?wfk^&,[l_I<d#HxH(3⚭#Nt\D(xVj@DbMQ"uN1]=hpȬf:aqsHu̓d Ϊ3aj0{]d:4qCJ' >Դ| *[ ɭ 0D7^dme=X|^U>T(p%MioMK}-:#`exmE^Ī#Tyw1W)Wm!y~ۦHcc^Պ[8X8p<>sS`݃#;$ 9Lb--ix|5}Tҵ:Y}4l\'ˉнcby'3)Β>S3yޖ0[:K7X-Q%g,QjYggld lBYD';Gkru<[~z V]Zser*] ]#ݻiMKᱏe^8H'xٗ"& qSΒxB$%[@*n!D|V0}ByJl%c-\2Ɍ%}Pv׽h%Kn ȷ2&VkNYN]NTEyvBP>H[^|ysꛦDX*'IDATpkǮs}$0}G&}^bwb$j/2v@ ]N?yptwUw8":_=g(Lxn{=ǞY={ߣXd<ƬQ 9JgD4/\ZƓY/9"i#W+םpEf"3fgU|Ui\xpp9PPPOh_}s9kVES'0FdF53Q ;xiAd3mӈ9>K"olDhN5ȹy2YMn Bp|uv?9'2ߤ `E,-ĭ܌M?~nR Iu"G0'Hf !fg{ HF8}#>CsA~Hv E,sFO CA\B ^v6ב<9"`KT wOdm^BD F?rKPٿONY#p?@)8"c ]_z- 8oliEY dtFH}@(; (2$R]WH/K IUa;@(A80.5T}̻@Y<pEҋ TGKd-akAJhp,:(X-9ڻS @^;&#Hc,+(pŊt փ*v ڙ{=OU(^Y$V\BSPuLTaw2鈼GÔqRS+=)m }^hJbPd'L%eƠēbRB"`kl.|`k@4ϕ[kz7]Y9Sl+bny˻`)@)k|'DcG&Zy8B]Ls4c<WZ:=/[a2틃'y V $98P ;TzTA &=KT.1ԫo=q2̀)pjXn@rDJKM dL eYa&RuBLbT}&YѶ9Ȗzs/Ou-u! zv!G0d`5{tMR J%K٬wG(JHvb[Z-3%+K4]c:8>Ѷ/7B[C5[ms [U T(tI`.Ooe҆A'~?x, f9K}Ct$`$$$N3' t@L1Z/D^cr 0r. s LKw7/"]\a א@1 \E).E耹s |2dmZy×> qĚ=ѽ+#×63@iYiLZGfוxKYl=(ipdٳS~-s N$f3\;\ԫVLY]OH) ֋pX+B lg59p$F88isSF-pOO8A/߿BY icC@(]9'wH1bb'VOTC@pAGvu\[BGgw,?JTʉ,J"96 AgxB'֠Db%f#'JfR#A0mD8q˵-4YFI+)xi⓿{FL\@OOYnDU,bf"jf()~@ )9C"Xf{A ͐L"wT`iIvFu T"w*IhfD7QD>81OJ!'TbaaoªUw[yڔt_B⒫?o2fgg Qz@&66xe wE@@D+BbV;uTVߊm0 zH|^(܅'b2۾V -U].V9DوxN[QIv\D3!P⨠F F\{'vp hv\ŷ)@-"MvQ"s67qRx ƙ݆7ΠEFڨ >0) @R*:~E ,ȋ`b,Tr,2 تkhO^.g*rU ;pB( u\Ƿ}bS] wtL]" ] ]u#Aň.d: X* E S{1ˮO!zJ~ Y"* EwC5Xά%opQ<,^y*  e\[n@/d HQB3y7Lxii&N"s؉88ĺD9lCd(:q"pnXt$k7,4EOO&]/mx#BL $F8 ?=ERE,Y]ֻ}6QN4JPp9R@B~_?`,H-Ot;1g+^W`-\&?Y}"TR"@RWa1e7QʪM`RZe(NJa"Q^D!Ȳ$nKk\D@QI9JWJ[ik|o8) ؼ |wcwcE@^f(ZӌMR9 bIq[^ 9'& #Nƍ'57,uL&i;r QP!N TW 0?b&q»ΦIAIC 1E\p[Wv$hY۶⣿s F,,jZ.LmF 2BDt $[35ޟS^Ұ/N5$ ~)ij­}V̓CQ^c,:G'wc3yJ__| 0;;_|?cE,@-hۇBojP(<1HhRm'VyI̫N5y1P~٭DX_uI_1<v\v◯  ? l޺Axi PG>xUw^f-HM㨂KXH}V [^s*WvpDNM{oQi Typ)Vrl}^q I쁧w)~B+@q7 ?|a> AiK8?̊ 5Q:CQ86f 2iI"6۔Alw)6 s0SݧѥS H3I-t$='/ǿG<8 G߾6Ĥ@`RvBE=B~$[.$w#HfEtNPog3]*è›ΰlGB j \j#0q M2'<Dz–QR`"x/pǟ?_mlݾl MT6YqK%s0jz9 eˆƈ WsA8!'gsXË4jӻ90wƋjLmL6hѩ@͸5'! 岃A-ua۰s|қ %cW (n}ʹ 4hQUot'\DFgf7 F0wDn@'/|G3Nx:lS)lٺ 9jp8sPd.Cpl;C@|w5!'bI>Zֱ޿ZKZ"~.*ܢ9Ww |W (|dO3 Z~}7}6*`3\=Uspn&},IPI !ˌov6`^4+`4^!9Pq 0uḭ<假|_ې3ܚw@}NdH|e5`J2^W43xSb!-gɚJ,|Y=؊O ,yr_hy}'t ?3 Z>əg<@<}7|/yAiF1N"p TѻqS ϔjw4[}+W;]s^|ahw[o߰e&i̒#R4Gn>''ܿpF ap0N9yiB+?q{yqqw'!<ɨn SPsG/N$l`qs ֎!ܳ._AﺁqH[oz `}wɝ;r'dBrcl޲ <۷Dp*s2VɻFC"@BӽU)8[ܜ؍FmC{-Džo ?w8jiY<3zI<أ;q]o݌=Q|'HB` >6PSgbp<f(Wr*ڷsފp2ge 84l '^xQ`KNi'u/9/!, ,i.۶m­:np3lیAϠO=ffgCÖceXt-]˖%`-%tqɒ%t8N0L0,e+񜣟9(\';NYbY,sc,9"@b,d,9"@b,d,9"@b,d,9VƬIENDB`pysiogame-1.30.811/images/memory/v_img16a.png0000644000175000017500000001233412201770073017646 0ustar tigertigerPNG  IHDR^}PLTEO=KUAIQCJ[FOVHO_KS]NU_OQdOXhPUbUQmVZgZVj[as[_x`dpdYdcuj\silwnskj|p`qlu_po{cuq{ytf|xlqouvxz™ šƤɥʨΪͱ̽ξвѵӵԸ׻4FbKGDH pHYs B(xtIME   RKIDATx흋WW1MI̮M eChCjр(ayrΉR=w_g"KKKKKKK.d93Y,?tHiA!G$ؖvKiA8Mmك {h[Dt" URh 5= ϣr~U&Kh{ ҏ&'5KF3T; [Z~(ApKd["vt1"'86~술 ޑoR "I8¯de(/NHr IJ¤MY>NQ(dY.d##J>)(pPVdS2b/wp&$r.P77ɷB<94HA:)MHF5,{E=\|rل +%Z߳΄f@qOmkԳΧ YQr>\R X󩂔LQKUDX cQb|&JNfK=NsPȦX"\JgB\E%*X" _lz),7U, AWG#G,Bi8= 2*}*,wk7+XzO qdW#Gc1EJ ADU=GTP^.H.djyye&pwVK{Ez{0Y,88u+\_CK$T*͕dt@sѰ'"d3c?{~*/ (ZTQi\婭hzyv&WE'\JؾGM-Y%Yi~9'`hf6!}BHNn+@lևnS}Y8v,#ZJ*JFb/̚ÎE1HysI? C(ZƒȘdi=3D/TRςI[Y~8DQ4s0Q^_õ[8m*ϭEp8T^ARb4A- @IkLcP@7r#[ xfpEe/yI+ 3K_qfz*QFAPEeD+S)q R/g1kr ,]@$m9L((@S} xa;c Z`:]ؕZqA"AKFX(R `Dϵp/E// H֒rtwya!9N"t$nָALy8n*u5q4 ݒn`-K4q0u2{ K^@X' F&g7/ЬO'B $qQjÞy ˕W% H!fs6a2;t ]8mRk `qxxD%)_ =DqxI/E#PDBS"8%{!X}Tqy9'SUrdϴ`=5|)'zFC/B$gxyh4 *H LK:.p2ϼSw4x܁k`itm "&z9V[tmzоƼd=G),%} 2y2Kt8uָz)#l+F]GV D[@2Ѣ=c~H@ȔlHuM[S % ҕ9xu ٗ{d+H@ackԈw2 Gnc[wzfZ$" 15W;ޣVd$ aW+g*.=(}KВXؖ&-9@͕\k-C*G~;㑒yďmr Cpߢ M}9.Iއim_n Duv0n]˩?9v9^(QS%H߱+`uȀZ"$!2ݮ:m&] upl[8wZ0rЀ[ut}m r0$g=SOKF*S knF8@~"wįJ,`bc/JUB"dO;,+qhԈo/ UG Zв8 cڸmU+,ZdZ VZIL"d\xsdCUP{sJ7k8X E"C ZDhDI2i;R~֢ů%UKp[[b dFAؕ;Vv*tE8@pvc@U F%JppS $k5cVI#/Q4I3H0s"b˲8@LCT%JZ'$l,$jQ!-y &\XD@%]z>LYFkO+$!j ծFY#>D48lv)Zb%`2)R⦉{O cx<Ͽ?l fC% /CXdtXgŴ3+"w樄!lI.}T W"Q qK"w2m!\yV$eX/ 7現 Y0ב U ggnc**6R=o>X 2 p1~S\ߏ$͊-J#>B79Dv[-Dzb`rL@~q=B#+Ro'պڐaX:AH\~#) ruҨugF{\εnq"pkj dC7CM@beSV*dVEuͯP~U3t- O |jy wSj΂!5DNҭz␿ dfU3Н3Q@ jKzTioF[)s=S4@1]8ܤ{E *c:w*LJE۾搟7?zvkwkׯIa: f,4Sxit qzy:6r۷zm AvI++5G Q48^X U# Ar@r@b *H (+d 62gLÏq fYnAHgi2-bX?7 A>H_a#VoXo(/}G#Wuw ?L > GǞPjXGZ4: F DG قfXЮ^VL* &ƌ':zOuK1<)?q@F1ILۍ! kuu|d1ͩ%ڇ?u$94[M<$Xk$[[rmٯ-|"SѬԕx8j.O ΢.̔+xpf5m<2ȇ&Pȼsp}ʟ cx[6;[+h r#\3Ȩ6]tfeHBnbjzQ kbO_,@J%Mfw  KI=`n%o7-%UmEˣO$k,|6ԭ >䬔Ip)b1S:]F.Zd\#I,˝ ={|f)Kl~ԹQCD.A.A.A.A.A.A.AK'Rq(!{9]1E!]|u(d$y5!K&޻!%Aua^~ȱ-V\;h~'{N'-7qJAv\K:W/Q̺]B1 yXm`Q7J oub l@R!8si 0$̥u  g?,'PAsuʌBJ㌳iD+%$ ׈bVZɡq$ VFkF\H-7A^}Vsjフ3fZdchNDkq=2 ftǝwPx  ,F>˿>>{1RN%I2:'K/kL.F):.Ϟf;; ,t4`lrr3+H;a85W#W@vOU>?f:^ NrG>fv.d_V{uOF?Q(6u_8M\c&#v; kxJa4)k; gHNX3ct$]9cǻ}֍hNа%a;~;T:P(3 _J_S% `y!m9^CuCKCAM7v1_]O*Ʊ : b%@n!_ 21?#p7v]dȚL01סfR!T5cmGW ˆBdDrː-qnA'/;*fo!OD!!~7/ !sP?!I*'!4 щIi;;f^*q(0 e`l %YBs/]#}J^3{9Ba ƶ{l)h*4 6ld ]Ͼoػ]_z 1QtJ| uli7V"CeM$ܫJVtP7 D5Pp!qR~!fBb+#ܩ%A|vv\߸3"dl ABwUFU@is`AkȾlW4+a 'C|hkPE~e"3En9bbV` Wv,F4%_\!kQ sZjuhT7j`kr i>bf'줕 C+IL/[m^Zkh .yB3i|1e^f~4ұ"[CM.Dѱ" & :cH KĭtR,j$W!똆⇈_ҕ,{>ݟādOh, \ZY.9- m]%'qp^*<&Vꬤw8׹]EL82"J w#m')d UR9=BR n5/.W_s&BehZʿVBzk8#WogPx 8vZJdoS`dQZ_J봎Qky1J!ў/|)L34j>x9>fa{5'\j@66F)H"&[2=2[ldmE "50sg4!uXɍ9E@63B$SV0Zê9Zqvva{q5,f:w2{rnOڙ,%EK[_>^ּ :Dیq'ڏyq0w?~naD\A|@KnJӑfk@=)h dEc wLSU#˂3W5  llXeWqOCs2]_9n3QXG#qZf̍ư"^K՞l*itn,aXC-w| rH(VI^ y6'gvSGe_x$~)Cq48:wrrmX)UWe/zmr0rȗ1$L|;dth zl#*Hx l1dj17@ҽ@י}宆J[)4g*Wŵ'ݕ*T[cVi3R0bY԰0Րkfi-+8~+(Gק3 e6|mXociͧ-vYМоua)Ņ =b@{Re/?Lpaw''h_oqLPґ!& eG [ gM'/ox5Ƿ >_]5w;J#IENDB`pysiogame-1.30.811/images/memory/v_img11a.png0000644000175000017500000003062312201770073017642 0ustar tigertigerPNG  IHDR^}PLTE     #& ),- /14 4"7$8:";;"?&?$?)B'B&C )F#/F-F,G,J,I&/L.L3L.N.M/0M*2M%0O2O,3Q9P4Q.9S$8S*8V!:U,>V">X)<[1A[,>]'=]-E](C`$H_$Ka&Fc'Fe.He)Ee5Jf*Nj.Nl5Io7Qn1Mq3Jr?Pt6Pv=Tx9X|=\{CVEU?YC`DXKd@^PaKhLgG[SoUnW`YmMrTgUiYvMr[oVx\|WwXa~VUSeUupU`|uj͕ЏԧآޱGbKGDH pHYs B(xtIME  -܇ IDATx}_ֶv$Pᖘ0⯡ձ8:SGNũZۿv@m=fSJu?YYkdƎK@7|<ýfMsӧvec@w>n7,ہ7z_zigwq38UsYYjxpagW oՆ=]fŪVZI5[86,7B0Wi<UlâQ4-Ln}@u)B\%zC5^j9^y ;9 -Hl,5=QԌWǩ܌;t`[.6*F!p_i ulթ3,i W֬99}\44sYqcC__ FJWZgc)hT@$!m0 bNMZ uwjyfF!Uhˌ Y !T0 n_*߿@~Ք lѶ\CͅnB'd( +ckX_ȳ7 jdZcj5cZBLkR $OZ*VEM yppŀ<[l:*D ZD?* " FJ01#kz偼h.;M+hP4٦)j@@D0/IPLZ@*M(pftcx"D: 40c/'ߘOژk~ oVER0)S)hUrtqZ.pB!MBo 7ZaI @^kLj ǀ1|n*yϚkBL!cbcP tApUoX~]K'-Wȫ{K'$ jD3 6\'i-M/0B")d *'@YqT谘 L@Cm!qp3B+\B60 @h ?~[#ILfI@4U@D% Rk#QU&D.d8&MS{g=;y k>WS Vd5)4H5u`\$C%eFТ$^U"Vf)~wpatTU!k8IdDH*)LMqdvMs5*[^Ł{ܜV*fiH0DHL@"I* R| Dw1>bڶ0-lOyuoa.]+)b1I!HH>hA7dWQ)d ^+XvJzݲ T29:g'@_[_n8N՜ś D: C9тlCPxif:htfW ʮv G/'[kNMDsfr-IK!$E3!2^%%@܄ #>xrxC)8tJU{T-R1#Ἑ"I\B' -šAfH¾i_1`X" dw{&9pr9YUH5 c8!#j404y#JZ:ZЪ8#!Pn; V@0VQYӒl,$*IYIk@{ij~N<b)IzDŀp|P1kԂ& @0;RB$Զ ].Ü?hL)x5DR%' cc1Hs I=$Q u^gBJƼY_y)$Zͩ6Wj)l2(ǡɶN$x$[J$r>E?zCfTB6 bRbiwG$IuA5S:?} ˠsZӵR7,ہߖ'qM:V @ R@3@..@:z#|,G99 q a ?d9 f}fY: g^MJ2ӌ()ܠ_פpzt@ ƜAK2RTPQUm'Vω1WUMD0s [} 2+Ɠ4 5A ~!M5HTVu ,4'1oP$jVlZAuӁsV]s7 STXri2:_FYZnX R@艉!1/O:O0Ik گi)ݔ ܼj  ḿͨa&HQfe*d0nPyp5b%;EV26HrEhFݴff@MpPb B$Wa]CU1sڳ7~ GX9ւ6팖! P䅣 @T^NK*)(MgکTPBI֗N%&r>!D PI:ji o.d'p]1&Z4G,ԃ1Ij*Haj-TQ bT'gLl#UHNYPNvLBѵ/AM[Vʥ B'q/72NQ7?WyS(Ѩ%|il4K$΃ =_e׍”c)1i{ݥX/+uUN6 :\ %2pYTVSʔRs~NTm: am'ATy\RJs`3ЧevXQm9fNUM0;_^2kuӢH@U Oȸ )AG} aM%L=wt>la72ȗtDș8V iRݘ,o^ ȫ,Y&M $Ջ'@+GΘSl%%5ˉ촞PkEJZ6HCxXmUlkjP]tLz 9zŊ{u,C4€%^\R) uR S˓M*jh OeDd:cI{"?K,8}@M maB5%ԋ`yl0 f!"9|JF)i*Ad6 ,ֲ7qpp+ OyZ7봞MѬA.i9v{i@~}Ȱ8c:?),-@ IrnJQd| F˖̺T, 깄+U0d<U#D+љ OW1HpZqg/#b/(8pSة%`5Ԥ#ڨA-jJQ-F) DU62c۠V0YkUWmVX[mK}{! /w0BAE[%pyxRDwR"\l=F)&jT@ DHyH')V3TZdgQXmĔ̤t1o\1 04z8# 2|T"CM(˓r)/'6L1zjc~X kR\kjy3N5I.fqcޱn: ٻtJ9wƀș`n*4ʒBP87Y1Υ\L1ժfP3L`Fcj94N9SrOΒd5 @~jkM70rM4ݴ&wpn OA/*|_S(i uhfI92)AMFq|+FtZ&TOE'k+?cn#Mx.Gw}VTn7vyZ%; n5{F7xּn:| gb [mכi>(y0y1O~܂ӮƂf̼!B[Rt$;@*?LRk*Y5^%Hkh@^3%g>'jdHA I|5sR OӊTdX҅DƸ}۬8YMM>=7/7Hݻ'@c &:^w _/rB@maNNM>gz\3 j_dz۶t9D+P昅p$VK*5mf}GhS1 If2b8JQLj@_zUc˝.p\/p$ ZCUI:mHCٻ5``lX[-JaCE$vZd=jڨmyLDVߊH P +U>eg34q'GA$,t&gpF'%-MRYxADțfC4\ ʲP{~)sQev$XaC1Wf ȇXCM: >ɛ4aWg4.en] \Fr1vݿ;:c@v;"@8-āL39vNAhhhheŪMԘ tjDRXVjx< @5Mwq 4Ly̪ܰbr+z3.QJ׿9՜r4u-SN%K\rr 9 _uT:@mcXdb7`_tכ |G 5 ']Ez߻0fg 5T* 6Mz ~ak$i5H ) FR Y8xHSgKj.W0kH5t,aV)ijiEΛ zX+vRd}R<{Jqsm'J*T,WX5Txr95ydNEoxrtq ovi@XVo1 Z,g8no݁m9z olU}ɢ "' o oq%F~eb i)5V2A`ZV@2 r֕)5Lj.c{9j)tU Wu ֲHW"ntjƮbw)te^*iݮXnH4R[i+suMj-ig $邖}}q !SJb8,"(rmʌB;L-:SU3@3NAG[jN!aM%lq vYedA/I:'h>>4HeGӁ]n|L~HU՜*%̲:jyq~8o>)˃ˣW;K+HzGe:blev'%r9ךo;u݆Os(P-S i{ CyҀPo#4LvvHA6rW~A YuYvn,otٷJjkI6" @2P3/EMYH" rwD8U8#k\n:ȠC9Vf,xw:u4*im7*)0c`2AW (xic<Ʃ[l"p?ttLy?#űavqanMximE^Id2!݌*a G1Foˆ·$0hvYmЯ":_.7L*r]WQHi&!͌ 1Igw}w߿#vvYfW&r a/[,ۨ[ä nmmklU$)-EDDg QAǧ@ނl!+.pV`Fi( oV^IDATK2g݊%!^zKvX'FMIr7 O |9@ 7](VQ]v1dsQ# ,VV\p35T$$E!1 47ƹ]rRٹmf2Ȥb8w(Aoc71]X~Ϙ',@9k yw\=f6L<&^/Gl)\WG,qwזU疏#1iQ>&URz@@ ۋwo}96 5D ɫ1Jqvȃ`-&!`x<~" S i'S3jے?/7,WV;* qpp&np&RYs.x%|Hc,w.|@eڇ]<1]&\KՕ.Xj˝R#A$1H%lnhH2h! X@z<,;\&<[”[9w6GZwT/n`S#ҝ!jw`؀,g'J:NAdc.b:ؼv}-X^w['4c9Imڽu}"Uog0b(iC- s7ǣ0 F*JP_t1 y:_egl#Tn-m|v#F_Aݵ8DR4O&'#3#! c&B;1,$i s_+304{m+}`?wx!U|.pΙ=8Sgy`0,' 7eEp^, B7KED҉cK e=Lf.m3OdMj+YNGQlk:Uŀj^ HyPx *#`׶P&F([Q+K/,-yZMVÞ,Z7Yƥ9%" iGfD93_tWFT,9Cg{vިw0jteYt>XOC9q Os B\;%?'&DN=tX%p"]vcm'Yg 6uY\xXCv1Ar2Bs״ OIbAFqؘiwwC6;)<\9&o {W+ŏK tG>[[^t!TJ4'9L*~ :, Ғ+2 3vpgvdmWo-n1S7OD0%-$b bF 9 }97AvΈ ߖ؝26cKvX]mq޽έ7fgg1ѤTtfJip'2C:MA(xwv?o 2(뫷oø&o}l޻Ãw> c wrIx9$3/͟puؗo:Rƺ=$ީZYgAmT'Ɲ7<{=[MDq{cCpXL+|.[ u5]5WcYípG98ŵGk֭[Oq8 hAAu2y иfͭB tCWSm":u]%u%gA:\`nzB{݋Th:)`d~psl mݠGy@kqR`8rx"T)#͝ c#c~ң+A_RU{HkckL @&ư<@]nDIg{}OEx zpzҮ h%\\?AK H:\4:عvTD[UExr)&#I$N?JU ;@+6(vvq;MWg ?zUO#ަIZq:1TJv'56yĺ\g >.dp!.jI1ĉZ,};?.!춫M֛^bM.8/8A6E K)U5 R%>K/io( `4DzgZ e΋w_a4{sg|S? W_@lwVH?RC=c]_]ٌZd So@RH^:<~}Xq~~i Ntzo@lAS#r gΣ:`Nq 3MTsb@>Z/޼ꮻ-gbf[ Y:}y!>qf_1 o_ >6{OJY _izJ vo<:J@>38^_% _6Dg?к2a~p_5 // )w 9I_M {WȨF8,};;ƛW^s8>@n>+qxՁz~ux|&yqt| 9~%rvxyp99il~t9+mO4pFyw|9>|<@<xZr[+Ձ@amm[;`kwgksj_r_o @_ dI_ IENDB`pysiogame-1.30.811/images/memory/n_img20a.png0000644000175000017500000000613612201770073017634 0ustar tigertigerPNG  IHDR^PLTE,5Maqsy׿/".j$^BWUYtaaԽ˃L72C`:O8pȴduybq!ehËDd FޞP|];>ɿ (u)ֈc8\:bIb(8Ed$<% d]ݴ..Z7o/(+~Ĵ$?dlSg,MJoYY(u$N3}JM%d1Ď(%>yP3~_q]qCd*e* 3MM:Ѻߗ7IV nE0&nGc Ln B(6Vi:ߺ]ϻoveJ7@}௿|n5l"䧩HwQLsyD32y`n;`Ҁ{h 93uz)+ ndmAo:cUV&} ly%x0tjgw=㖂 FtmQL"MҤ߫wzduݗ*$PzAnn ɧ2O@$0 &fX/?؀߉LX;p $%$Q _We!גP@[P7]]{Ovd)(Дۯ~nنĀ[ÊA  *":h^%nVݴ][s? ^s pMvu$xqz.8Bt0jwOXU[(Uer#{ H}UAcUtOY!UMϣ{CecM5;ML"3'@ؑUI14 z8N0K*ݜd!GpoYi_/N(F9yIL H(>GCg!mLbeX֣~t_xGg=0_nQOaF}+xCmҭ$#+Ard}GDYBOf|ؽh#jgaA( aBd/V<\~Db@=_pJRHA(B)HXFAzDl̃? wSVt*^xR >[@/}8t*3xY U+:C0& i$T@" ǀ8 HTZbys}ẹ'WLDuҭTG3xN_GK$$[BA~D"dtF;eW @@+_f\Py3 w H$>7Rp`8y e|KQi Gq>١A4 Dh A4 Dh A4 Dh A4 Dh A4H]?ģ7-xIENDB`pysiogame-1.30.811/images/memory/f_img11a.png0000644000175000017500000000437012201770073017622 0ustar tigertigerPNG  IHDR_v-PLTE 2 $ MfXZW}|6>pvbKGDH pHYs B(xtIME  7/ QIDATxKkXOEu m鲠aB)&+L~@6W0%xUL!+`0^I~I^a(-uU6gې`ːpː! 1ҹ|HFA od|eIFA~V U&DVq~v yξCC&'~8-&㯲gROqG`A/&ƱMM g_Y'q:}bL _}侎%C2/@?٣P *Q!~{ezn:?%tVWk.-\b-_`NWXu*[`w2_df,vCg>SZg5TY &“#L1W".b0Q|"DEY8id3Pۣ>%H=+Dӗ K>VytB"H>Չ=PFezWVQqB-(k]A]WgNPC'C'K 5g!K t)!ӅIAS"G L_IlBzv5_'O{ڜ.a(MX)n Rv~ 0,F ] {a)i6, @{J/'s[uxaFAbWFy2`BX;4e@z12Bx ҴKi#'A.p@#&72c$VXBAeW+ wZh"R(bC;l+ r9o?5WPN!w/4Vs†,d/{;/W&x)]k?wI( !½ H.iLO2j;WH=v񴜻 :"@{: ̽ClBMOWFi(@qRW.|,w{$S rezAD:"*azd]@(6#s@ڋJ;VW iDx!M_AMEÁ"Dp.1#@X1S2K/S~}60#Gll RZ$ yLvy?jS-DG_WlXH2VZQ?!";Hµ]M[1yc=ٙ#\Ax`%{\얁ߎ o(Z DJ}:$V*n2T!dmqQn!ArJ@x+MVvXtR ][t}Aİ*HVP t m$B4:ĔX]8ѵ)M/10'AIHM "מO~@Cb3xIENDB`pysiogame-1.30.811/images/memory/v_img14a.png0000644000175000017500000001237412201770073017650 0ustar tigertigerPNG  IHDR_v-PLTER8)mXK{m: ]8hɽՏ߫bKGDH pHYs B(xtIME  UIDATxK#ٛ+F .BK"BbOQ۾"$( ʆDX$n!? +$7̌7-M73ۗNOb9>|3èSɏ0z;:yΉ'| A?B իBN618dxSWH9`~E ɡqmr"WEF:2Г? 9_s߾ r\Xx/J߅bbW*^VBbwx'16˳PP.<¦i!{d@KnjJAϯB>#'O m G^&nC"BϾ ~c3#gyn,{\x7CNovщp|EK<ݼ fDsKkY}cػWֻ+ .5Slm21{#CE۾y8*@;C8@kxec _nK/^@h>"&s'd&d^rΫZx3pu򴓇S&ɸü=BѰ 1Aaf6gb= tX2?-@\痚a k99xOQd4OgNҼ{ [}7qEŘ1n!]@F3$oqr3SVhRe#Mώuzɡo@}+1Kpf]RI+/.a2~ITXBܬk!X!^X ;LqLiht#RTt$@brma'ty&]uy5wg4bh=7Gh ʅLV<͘IE>; ՞kJeC,X&ւ~-q14oc+ >:-H9@E=+^wB@tɉ LO9O g # S1lK3ʒg̝Y(Qx` 8&KTr) +gG Bs )]. lm7Fk>g_pDdGGzaf^7O緈K ͻU8/b=?/!7ǚg_{BXƦJ4xёT 1`q\J;^cJT T@3K,p+Z}ޠ&b2Gud+314u F,<#XKeM%#c\v 怕>`9WXx́R FH荩M{"ytҲ9O?hX0 O fAϠUX;g@&c~;!&yj(^OC ynYy;lxpKPmi=DUeY( u0}z!Gcpg>3]ƯS5y830+u-3A$nDČﹳ>;>--=m=R >t3azCbk<xR^pm3,{}0SH,{roz`u@Œa#z>r6òs0L7 zݦh/\9c~r~AMlR2p:H ^.#XϙGBrL6.s2Ar_,N#;Ţy^@#Ho`sorO p:6 Y#a0#X ;3]ݓKzNۛ P-A7r :g]< t.sso9"Vd9++O5siO$m6AJ|z~~ /sV]" Uo{[LG0?vb}Ud 靻ǐR55S0WA/o [L֞@zsUJ쐰؞ǛV6^VaA5޿ qlY7!kHx: {B ӹU^x'jʅWֽ)*e_8uf{n\w>Vgo*$m>Zߺ{nomν/ǹI\VV:)N֍ 8\uwu~6GG>B~wAJY$ mB/!-Hf0ڈ-dm?U>1`dv7*kU2 {Ue|9KO%C|j&-UjbF/R^\1OF+*lmh!yfoJjX5ĻJDHQӠe9lOlL iU5z;ofR:dڮQ3cلTHVҪWA(.u w'*R4^ObԣݶW_QjvWC8ӥhR)ncȵm&۳vɐKQm7wp+Iɐ7>d.䂪Y2d6=A5x^^4QaɐM}2g_2˅x]^>A=CF#+UA7vUZ65U \ Z|5RH!u34 ٩c@%FLIZe&󵭒.")9OpVۤYGU>PWiEkPRIrUȃћRi$ Fb:QkBy()I\~LU/$Al_ i`&`$[g@^E 1i![S'iX3ƧAݧ*5B:pE2a260!ae'Gr_HU˱?Sv  XM$g&4z^\+HsBd8Z,!4~fBx빼wAېClAJ CʉJ_`k<Pg)R~hB8hI*)*" ZrǙI0Wg¶\[H EH v<Ꮣ(k)+ d=>ǃ~X>Kɚ@qZ`J/+4Y;ě,jtj1/P-d&H]=k#AM튝$〿M%d2-C]WwPdCF)]8YHsz2&`_$i1 j r]R55͸,d&IhAߎzjPOf1J <.kb.73zH5WX EX揩vbZ@q,ej3 +mC1%lUh & YHɆSE=ȣH~>{5_!SA9!ݮlL]#@jY'۩gZZ-5G} i3TgK ǣj啑?;h$ f#>nYVvY{˸qG3h#nӵR$8f Se- NOz Jr?֩N1m;{ԑC`pl '3 )@xLlddǫ3ɪLB+1~ +xfUN!b? ][˚GZ1FJ֚z:0t&TMʟ[_yAڏc\_7Hw仒u`?#S:B1&:C2u 6,:B&/qZGJ;.hL̕#$ UD)r3^g*@p\OsM.O 42Azp|yrUq:B/_}Jh IENDB`pysiogame-1.30.811/images/memory/m_img21b.png0000644000175000017500000000157512201770073017637 0ustar tigertigerPNG  IHDR6F PLTEʁa`bKGDH pHYs B(xtIME  FWIDATh;@d:G)oK8Aˇ2`6% \JzzGWLw3 w%MNFz+%5~_oCwڹLfJR1SBMfFzK &؄qH${GDྈpI5#Y_[t)yR$IE%Tf-tmڤ%IjHRrGгgIɐ-I _+#IƑ$+"'W dKa)9ԘzI'+^#t,JZH_"+Yt ܨ~*F)+{I I#ŏV2[clbN!+C|uIC|{SCZ?=ѓO2=YyOR$ Xh֒AR-d t2~:HeHNLHβHœTO=A 2rb^$#HD!I xF<#H\fxYfG~VyG>Sd|汧˙籽,_d:ϖ\,9yܙ?%jԿs9տ#g%!D{b\gh'{ҌNنo?AfdTaBM."iA2"++-MZm'qAҹT;l"[%l猐옜 KhŜ OV ~ucMDz 92 {M9V ;zԔXwQXpG3Gn}?O 5Y4mIENDB`pysiogame-1.30.811/languages/gr.py0000664000175000017500000006640012201770056015710 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Ισόπλευρο Τρίγωνο", "Ισοσκελές Τρίγωνο", "Αμβλυγώνιο Τρίγωνο", "Ορθογώνιο Τρίγωνο", "Οξυγώνιο Τρίγωνο", "Τετράγωνο", "Ορθογώνιο Παραλληλόγραμμο", "Ορθογώνιο Τραπέζιο", "Ισοσκελές Τραπέζιο", "Ρόμβος", "Παραλληλόγραμμο", "Πεντάγωνο", "Εξάγωνο", "Κύκλος", "Έλλειψη"] #shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Κύβος", "Παραλληλεπίπεδο", "Tριγωνικό Πρίσμα", "Τετραγωνική Πυραμίδα", "Τριγωνική Πυραμίδα", "Σφαίρα", "Κύλινδρος", "Κώνος", "Τόρος"] numbers = ['ένα', 'δύο', 'τρία', 'τέσσερα', 'πέντε', 'έξι', 'επτά', 'οκτώ', 'εννέα', 'δέκα', 'έντεκα', 'δώδεκα', 'δεκατρία', 'δεκατέσσερα', 'δεκαπέντε', 'δεκαέξι', 'δεκαεπτά', 'δεκαοκτώ', 'δεκαεννέα', 'είκοσι', 'είκοσι ένα', 'είκοσι δύο', 'είκοσι τρία', 'είκοσι τέσσερα', 'είκοσι πέντε', 'είκοσι έξι', 'είκοσι επτά', 'είκοσι οκτώ', 'είκοσι εννέα'] numbers2090 = ['είκοσι','τριάντα','σαράντα','πενήντα','εξήντα','εβδομήντα','ογδόντα','ενενήντα'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens, ones] else: return tens + " " + ones return "" d['abc_flashcards_word_sequence'] = ['Άλογο', 'Βάρκα', 'Γάτα', 'Δέντρο', 'Ελέφαντας', 'Ζέβρα', 'Ήλιος', 'Θάμνος', 'Ιπποπόταμος', 'Καμηλοπάρδαλη', 'Λουλούδια', 'Μήλο', 'Ντομάτα', 'Ξυλόφωνο', 'Ομπρέλα', 'Πάπια', 'Ρούχα', 'Σπίτι', 'Τσαγιέρα', 'Ύπνος', 'Φορτηγό', 'Χιμπατζής', 'Ψάρι', 'Ώρα'] d['abc_flashcards_frame_sequence'] = [45,1,2,31,4,25,18,46,47,30,36,42,33,23,20,3,48,7,19,49,50,37,5,51] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. #d["hours_a"] = ['ένα', 'δύο', 'τρία', 'τέσσερα', 'πέντε', 'έξι', 'επτά', 'οκτώ', 'εννέα', 'δέκα', 'έντεκα', 'δώδεκα'] d["hours_a"] = ['μία', 'δύο', 'τρεις', 'τέσσερις', 'πέντε', 'έξι', 'επτά', 'οκτώ', 'εννέα', 'δέκα', 'έντεκα', 'δώδεκα'] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "%s παρά ένα λεπτό" d["time_string_one_past"] = "%s και ένα λεπτό" d["time_string_to_mh"] = "" #ie. five to four d["time_string_past_mh"] = "" #ie. five past four d["time_string_to_hm"] = "%s παρά %s" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "%s και %s" #ie. 4:05 = four and five minutes d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "%s και μισή" #ie. half past three #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_q_to"] = "%s παρά τέταρτο" d["time_string_q_past"] = "%s και τέταρτο" d["time_string_full"] = "%s ακριβώς" fruit = ["πράσινο μήλο", "κόκκινο μήλο", "φράουλα", "αχλάδι", "πορτοκάλι", "κρεμμύδι", "ντομάτα", "λεμόνι", "κεράσι", "πιπεριά", "καρότο", "μπανάνα", "καρπούζι"] fruits_1 = ["πράσινα μήλα", "κόκκινα μήλα", "φράουλες", "αχλάδια", "πορτοκάλια", "κρεμμύδια", "ντομάτες", "λεμόνια", "κεράσια", "πιπεριές", "καρότα", "μπανάνες", "καρπούζια"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet gr alphabet_lc = ['α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'] alphabet_uc = ['Α', 'Β', 'Γ', 'Δ', 'Ε', 'Ζ', 'Η', 'Θ', 'Ι', 'Κ', 'Λ', 'Μ', 'Ν', 'Ξ', 'Ο', 'Π', 'Ρ', 'Σ', 'Τ', 'Υ', 'Φ', 'Χ', 'Ψ', 'Ω'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['-','ς','ά', 'έ', 'ή', 'ί','ϊ', 'ό', 'ύ', 'ώ'] accents_uc = ['Ά', 'Έ', 'Ή', 'Ί', 'Ϊ', 'Ό', 'Ύ', 'Ώ'] #game start d["Hello"] = "Χαίρετε" #"Καλωσήλθατε" d["Welcome back."] = "Καλωσήλθατε πάλι στο παιχνίδι." #settings d["Preferences"] = "Επιλογές" d["Language"] = "Γλώσσα" d["Reader"] = "Ηλεκτρονικός Αναγνώστης" d["Read Instructions"] = "Διαβάστε τις οδηγίες στην έναρξη του παιχνιδιού" #menu categories d["Info Category"] = "Πληροφορίες και Ρυθμίσεις" d["Keyboard & Mouse"] = "Πληκτρολόγιο και Ποντίκι" d["Discover Letters"] = "Ανακαλύψτε τα Γράμματα" d["Learn Words"] = "Μάθετε νέες λέξεις" #d["Arithmetic"] = "Αριθμητική" d["Maths"] = "Μαθηματικά" d["Numbers & Basic Operations"] = "Αριθμοί και Βασικές Πράξεις" d["Basic Operations - exercises"] = "Βασικές Πράξεις" d["Sorting and Comparing"] = "Συλλογή και Σύγκριση" #d["Geometry"] = "Γεωμετρία και την αναγνώριση σχήμα" d["Geometry"] = "Γεωμετρία και αναγνώριση σχημάτων" d["Art"] = "Καλλιτεχνία και χρώμα" d["Memory"] = "Μνήμη" d["Games & Mazes"] = "Παιχνίδια και Λαβύρινθοι" d["Multiplayer"] = "Multi-Player Παιχνίδια" #games d["About."] = "Σχετικά με" d["Game info..."] = "Πληροφορίες Παιχνιδιού" d["Credits"] = "Πνευματικά δικαιώματα & Συντελεστές" d["Hit the Mole"] = "Χτύπα τον τυφλοπόντικα" d["Letters"] = "Γράμματα" d["Letter Flashcards"] = "Μάθε γράμματα με καρτέλες" d["Learn to Write"] = "Μάθε να γράφεις" d["Trace Letters"] = "Σχεδίασε γράμματα και αριθμούς" d["Complete the ABC"] = "Συμπλήρωσε την Αλφαβήτα" d["English"] = "Αγγλικά" d["in your language"] = "Ελληνικά" d["Sorting Letters"] = "Ταξινόμησε τα γράμματα" d["Lowercase Letters"] = "Πεζά γράμματα" d["Uppercase Letters"] = "Κεφαλαία γράμματα" d["Word Builder"] = "Χτίσιμο λέξεων" d["Word Maze"] = "Λαβύρινθος με γράμματα" d["Collect all"] = "Βάλε τα γράμματα στη σωστή σειρά" d["Word Maze + 4"] = "Λαβύρινθος με γράμματα + 4" d["Numbers"] = "Αριθμοί" d["Number Flashcards"] = "Μάθε να μετράς με καρτέλες" d["Learn to Count"] = "Μάθε να μετράς" #d["Basic A n S"] = "Πρόσθεση και Αφαίρεση" d["Basic Addition"] = "Πρόσθεση" d["Basic Subtraction"] = "Αφαίρεση" d["Shopping List"] = "Λίστα αγορών" d["Plus or Minus"] = "Συν ή Μείον" d["Basic Operations"] = "Βασικές πράξεις" d["Multiplication Table"] = "Προπαίδεια" d["Find the product"] = "Βρες το αποτέλεσμα" d["Find the multiplier"] = "Βρες τον πολλαπλασιαστή" d["Division"] = "Διαίρεση" d["Sorting Numbers"] = "Ταξινόμησε τους αριθμούς" d["Number Comparison"] = "Σύγκρινε τους αριθμούς" d["Addition & Subtraction"] = "Πρόσθεση και αφαίρεση" d["Comparison"] = "Σύγκριση" d["Fractions"] = "Κλάσματα" d["Decimal Fractions"] = "Δεκαδικά κλάσματα" d["Even or Odd"] = "Ζυγοί ή μονοί αριθμοί" d["Shapes"] = "Σχήματα" d["Shape Flashcards"] = "Μάθε σχήματα με καρτέλες" d["Solids"] = "Σχήματα" d["Solid Flashcards"] = "Γεωμετρικά σχήματα με κάρτες" d["Shape Matching"] = "Ταίριαξε τα σχήματα" d["help me find my shadow"] = "Βοήθησε με να βρω την σκιά μου" d["Paint"] = "Χρωμάτισε" d["Colour Matching"] = "Ταίριαξε τα χρώματα" d["label the colours"] = "Βάλε ετικέτα στα χρώματα" d["Follow the Arrows"] = "Ακολούθησε τα βέλη" d["remember the directions"] = "Να θυμάσαι τις οδηγίες" d["Photographic Memory"] = "Φωτογραφική μνήμη" d["Training"] = "Προπόνηση" d["Photographic Memory"] = "Φωτογραφική μνήμη" d["Automatic Levels"] = "Αυτόματα επίπεδα" d["Mouse Maze"] = "Λαβύρινθος με ποντίκι" d["Let's have some cheese"] = "Ας πάρουμε λίγο τυρί" d["Sheep Maze"] = "Λαβύρινθος με πρόβατο" d["Find the rest"] = "Βρες το υπόλοιπο της αγέλης" d["Connect"] = "Σύνδεση" d["Balloons with threads"] = "Μπαλόνια με νήματα" d["Fifteen"] = "Δεκαπέντε" d["With a Twist"] = "Με μια στροφή" #game instructions d["Drag the slider"] = ["Σύρτε την στήλη πάνω ή κάτω","μέχρι το σωστό σύμβολο να βρεθεί στο κόκκινο τετράγωνο"] d["Take your sheep"] = "Οδήγησε το πρόβατό σου πίσω στο κοπάδι." d["Check the shopping list"] = "Συμπλήρωσε την λίστα με τα ψώνια και τοποθέτησέ τα μέσα στο καλάθι." d["Drag lt"] = "Σύρε ένα από τα <, > ή = (μικρότερο, μεγαλύτερο ή ίσο) στο κόκκινο τετράγωνο." d["Drag lt2"] = "Σύρε ένα από τα μικρότερο, μεγαλύτερο ή ίσο στο κόκκινο τετράγωνο." d["Re-arrange right"] = "Βάλε τους παραπάνω αριθμούς στη σωστή σειρά." d["Complete abc"] = "Συμπλήρωσε την αλφάβητο με τα παραπάνω γράμματα." d["Write a word:"] = "Γράψε μια λέξη:" d["Find and separate"] = "Βρες και χώρισε τους ζυγούς από τους περιττούς αριθμούς στην παραπάνω σειρά." d["Re-arrange alphabetical"] = "Βάλε με αλφαβητική σειρά τα παραπάνω γράμματα." d["Re-arrange ascending"] = ["Βάλε τους παραπάνω αριθμούς στην σειρά,", "από τον μικρότερο προς τον μεγαλύτερο."] #game dialogs d["Please try again."] = "Παρακαλώ ξαναπροσπάθησε." d["Sorry! It is wrong."] = "Λυπάμαι! Είναι Λάθος" d["Perfect! Task solved!"] = "Τέλεια! Το έλυσες!" d["work harder"] = "Χρειάζεται να προσπαθήσεις περισσότερο την επόμενη φορά." #level_controller d["Game Over!"] = "Τέλος του Παιχνιδιού!" d["Congratulations! Game Completed."] = "Συγχαρητήρια! Ολοκλήρωσες με επιτυχία το παιχνίδι." d["Great job!"] = ["Πολύ καλα!", "Τέλεια!", "σούπερ!", "Μπράβο!"] #d["Great job!"] = ["Great job!","Perfect!","Awesome!","Well done!"] d["Perfect! Level completed!"] = "Τέλεια! Το στάδιο αυτό ολοκληρώθηκε!" #game specific labels: d["area:"] = "επιφάνεια:" d["perimeter:"] = "περιφέρεια:" d["surface area:"] = "εμβαδόν επιφάνειας:" d["volume:"] = "όγκος:" d["Perfect!"] = "Τέλεια!" d["divided by"] = "διαιρούμενο με" d["multiplied by"] = "φορές" d["equals"] = "ισούται" d["Shopping List"] = "Λίστα για ψώνια" d["Even"] = "Ζυγά" d["Odd"] = "Μονά" d["white"]="λευκό" d["black"]="μαύρο" d["grey"]="γκρι" d["red"]="κόκκινο" d["orange"]="πορτοκαλί" d["yellow"]="κίτρινο" d["olive"]="λαδί" d["green"]="πράσινο" d["sea green"]="σμαραγδί" #"θαλασσί" d["teal"]="γαλαζοπράσινο" #["πράσινο", "τσαγιού"] #d["blue"]="γαλάζιο" #d["navy"]="μπλε" d["blue"]="μπλε" d["navy"]="σκούρο μπλε" d["purple"]="μωβ" d["violet"]="βιολετί" d["magenta"]="πορφυρό" d["indigo"]="λουλάκι" d["pink"]="ρόζ" d["maroon"] = "καστανό" d["brown"] = "καφέ" d["aqua"] = "κυανό" d["lime"] = "πρασινολέμονο" #"λεμονί" #new d["Keyboard Skills"] = "Πλκτρολόγιο Ουράνιο Τόξο" d["Touch Typing"] = "Εκμάθηση δακτυλογράφησης με τυφλό σύστημα" d["Translators"] = "Μεταφραστές" #Μεταφράσεις d["English Alphabet"] = "Αγγλικό αλφάβητο" d["Your Alphabet"] = "Ελληνικό αλφάβητο" #new in 0.3.0 #d["Paint Mixer"] = "Mixing Colours for Painting" d["Paint Mixer"] = "Μίξη χρωμάτων για ζωγραφική" #d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Mixing RYB"] = "Μίξη κόκκινης, κίτρινης, μπλε, μαύρης και άσπρης μπογιάς" #add black #d["Light Mixer"] = "Additive Colour Mixing - Light" d["Light Mixer"] = "Μίξη με ρύθμιση της έντασης των βασικών χρωμάτων" #here again the "- Light" is just to clarify that additive mixing is used when mixing light emitted by screens #d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Mixing RGB"] = "Ρύθμιση έντασης κόκκινου, πράσινου και μπλε για δημιουργία άλλων χρωμάτων" #this needs changing + add green to it :) #d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Ink Mixer"] = "Μίξη με αφαίρεση χρωμάτων - Μπογιές, βαφές και μελάνια" #d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Mixing CMY"] = "Μίξη κυανής, ματζέντα και κίτρινης μπογιάς για δημιουργία άλλων χρωμάτων" #d["Find the colour of the circle"] = "Find the colour of the circle" d["Find the colour of the circle"] = "Βρες το χρώμα του κύκλου" #d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust CMY"] = "Προσαρμογή της ποσότητας της κυανής, ματζέντα και κίτρινης μπογιάς" #d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" d["Adjust RGB"] = "Προσαρμογή της έντασης του κόκκινου, πράσινου και μπλε φωτός" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "περισσότερο" d["less color"] = "λιγότερο" d["color is ok"] = "είναι εντάξει" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second one with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["κόκκινο","το κόκκινο"] d["of green"] = ["πράσινο","το πράσινο"] d["of blue"] = ["μπλε","το μπλε"] d["of cyan"] = ["κυανό","το κυανό"] d["of magenta"] = ["ματζέντα","το ματζέντα"] d["of yellow"] = ["κίτρινο","το κίτρινο"] #new in 0.3.1 d["brush size"] = "Μέγεθος πινέλου" #new in 0.3.2 d["TicTacToe2"] = "Τρίλιζα 2" d["TicTacToe3"] = "Τρίλιζα 3" d["multiline-tictactoe"] = "Κάνε όσες πιο πολλές τρίλιζες μπορείς για να κερδίσεις" d["Player"] = "Ο παίκτης" d["Won"] = "Κέρδισε" d["Game Draw"] = "Ισοπαλία" d["UserName"] = "Όνομα χρήστη" d["Match Animals Memory"] = "Ταίριαξε τα ζώα" d["Match Fruits"] = "Ταίριαξε τα φρούτα" d["Match Vegetables"] = "Ταίριαξε τα λαχανικά" d["Match Numbers"] = "Ταίριαξε τους αριθμούς" d["Find pairs"] = "Βρες τα ζευγάρια της ίδιας φωτογραφίας" d["Sliced Images"] = "Κομμένες Εικόνες" d["Sliced Animals"] = "Ζώα" d["Sliced Fruits"] = "Φρούτα" d["Sliced Numbers"] = "Αριθμοί" d["Fraction Groups"] = "Ομάδες κλασμάτων" d["Percentages"] = "Ποσοστά" #d["Ratios"] = "Αναλογίες" d["Ratios"] = "Λόγος" d["Fract instr0"] = "Ταίριαξε τους πίνακες κλασμάτων στα δεξιά με εκείνους στα αριστερά" d["Fract instr1"] = ["Ταίριαξε τους πίνακες κλασμάτων και τα κλάσματα στα δεξιά","με τους πίνακες κλασμάτων στα αριστερά"] d["Fract instr2"] = "Ταίριαξε τους πίνακες κλασμάτων με τα κλάσματα στα αριστερά" d["Fract instr3"] = ["Ταίριαξε τους πίνακες κλασμάτων, κλάσματα και δεκαδικά κλάσματα στα δεξιά","με την παράστασή τους ως ποσοστά"] d["Fract instr4"] = ["Ταίριαξε τους χάρτες με τις αναλογίες στα αριστερά","Οι αναλογίες παρουσιάζονται ως τα χρωματιστά κομμάτια","σε σχέση με τα λευκά"] d["Maths Matching Game"] = "Παιχνίδι με μαθηματικές πράξεις" d["Addition"] = "Πρόσθεση" d["Subtraction"] = "Αφαίρεση" d["Multiplication"] = "Πολλαπλασιασμός" d["Division"] = "Διαίρεση" d["Check for newer version..."] = ["Έλεγχος για καινούργιες εκδόσεις, αναφορά σφαλμάτων, συζήτηση,","μετάφραση και επισκόπηση του προγράμματος στη διεύθυνση:"] d["Match numbers to their spelling"] = "Ταίριαξε τους αριθμούς με την γραφή τους σαν λέξεις" d["Number Spelling"] = "Γραφή αριθμών ως λέξεις" d["Match Animals"] = "Ταίριαξε τα ζώα" d["Find all matching animals"] = "Βρες τα όμοια ζώα" d["Match animals to their shadows"] = "Ταίριαξε τα ζώα με τις σκιές τους" d["ShapeMaker"] = "Δημιουργία Σχημάτων" d["draw_instr1"] = "Σχεδίασε το σχήμα: %s" d["draw_instr2"] = "Σχεδίασε το σχήμα: %s, τέτοιο ώστε το μήκος" d["size_instr_0"] = "των βάσεων του να είναι ίσο με %d και %d, και το ύψος του %d" #for trapeziums d["size_instr_1"] = "των πλευρών του να είναι ίσο με %d" #square d["size_instr_2"] = "των πλευρών του να είναι ίσο με %d και %d" #rectangle d["size_instr_3"] = "των 2 παράλληλων πλευρών του να είναι ίσο με %d και το ύψος του με %d" #for parallelogram d["size_instr_4"] = "της βάσης του να είναι ίσο με %d και το ύψος του με %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "των καθέτων πλευρών να είναι ίσο με %d και %d" #for right triangles d["size_instr_6"] = "και των δύο καθέτων πλευρών να είναι ίσο με %d" #for right isosceles triangles d["size_instr_7"] = "της υποτοίνουσας να είναι ίσο με %d" #for right isosceles triangles d["size_instr_8"] = "μιας από τις πλευρές του να είναι ισο με %d και το ύψος του με %d" #for obtuse triangles d["size_instr_9"] = "της ακτίνας να είναι ίσο με %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["circle"] = shape_names[13] d["quadrilateral"] = "Τετράπλευρο" d["trapezium"] = "Τραπέζιο" d["u_trapezium"] = "Τραπέζιο" d["triangle"] = "Τρίγωνο" #d["squished_quadi"] = ""#"ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line #d["squished_quadi"] = "Ωχ... ένα συμπιεσμένο τετράπλευρο" d["squished_quadi"] = "Ωχ... ένα στραπατσαρισμένο τετράπλευρο" d["right_iso_tria"] = "Ορθογώνιο ισοσκελές τρίγωνο" d["obtuse_iso_tria"] = "Αμβλυγώνιο ισοσκελές τρίγωνο" d["acute_iso_tria"] = "Οξυγώνιο ισοσκελές τρίγωνο" #d["squished_tria"] = ""#"Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line #d["squished_tria"] = "Ωχ... ένα συμπιεσμένο τρίγωνο" d["squished_tria"] = "Ωχ... ένα στραπατσαρισμένο τρίγωνο" d["triangle_not_really"] = "Τρίγωνο; Λοιπόν, δεν είναι..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Δοκίμασε τον εαυτό σου" d["Clock1"] = "Ωρολόι" d["Read time"] = "Μάθε να διαβάζεις την ώρα" d["Clock2"] = "Ωρολόι" d["Set time"] = "Μάθε πως να βάζεις την ώρα" d["Set_clock"] = "Ρύθμισε την ώρα σε:" d["Set_clock_instr"] = ["Μετακίνησε τους δείκτες","του ωρολογιού","για να βάλεις την ώρα"] d["What time"] = "Τι ώρα είναι;" d["close_confirm"] = "Κάνε κλικ ξανά για να βγεις από το παιχνίδι" d["answer_enter"] = "Πληκτρολόγισε την απάντηση σου και πάτα enter" d["enable_untranslated"] = "FAO: Μεταφραστές - ενεργοποιήστε το για να δείτε τις μη μεταφρασμένες γλώσσες (για δοκιμή):" d["Fullscreen:"] = "Πλήρης Οθόνη:" d["Time"] = "Ώρα" d["Play_w_clock"] = "Γύρνα τους δείκτες του ωρολογιού και δες τι θα γίνει." d["lets_see_what_you_draw"] = "Ας δούμε τι σχήματα μπορείς να σχεδιάσεις" d["txt_only"] = "Ώρα σε μορφή κειμένου μόνο" d["Clock0"] = "Πως δουλεύει η ώρα;" """ d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" #or abbreviation if possible d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" #in integer division 5 / 2 = 2 remainder 1 d["demo_result"] = "result" """ d["Columnar addition"] = "Κάθετη πρόσθεση" d["Columnar subtraction"] = "Κάθετη αφαίρεση" d["Long multiplication"] = "Κάθετος πολλαπλασιασμός" d["Long division"] = "Κάθετη διαίρεση" d["borrow 10"] = "πάρε δανεικό 10 (δανείσου μια δεκάδα)" d["carry"] = "κρατούμενο" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Ξεκίνα >>" d["demo next eg"] = "Επόμενο παράδειγμα >>" d["demo next step"] = "Επόμενο βήμα >>" d["demo write"] = "γράψε " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Επίδειξη" d["DIY"] = "Κάνε το μόνος σου" #d["Ratio"] = "Αναλογία" #or abbreviation if possible d["Ratio"] = "Λόγος" d["Working with large numbers"] = "Πράξεις με μεγάλους αριθμούς" d["demo rewrite"] = "κατέβασε το " d["remainder"] = "υπόλοιπο" #in integer division 5 / 2 = 2 remainder 1 d["demo_result"] = "αποτέλεσμα" d["TimeMatching"] = "Ταίριαξε τα ωρολόγια"pysiogame-1.30.811/languages/pl.py0000644000175000017500000004521012201770056015705 0ustar tigertiger# -*- coding: utf-8 -*- #Translated by Kamila Roszak-Imiolek and Ireneusz Imiolek #Część zdań skrócona, lub zmieniona ze wzgędów estetycznych bądź też braku miejsca na długie zdania. #jeśli myślisz że coś mogłoby być lepiej - skontaktuj się ze mną - zmienimy... d=dict() shape_names = ["Trójkąt równoboczny", "Trójkąt równoramienny", "Trójkąt rozwartokątny", "Trójkąt prostokątny", "Trójkąt ostrokątny", "Kwadrat", "Prostokąt", "Trapez prostokątny", "Trapez równoramienny", "Romb", "Równoległobok "," Pięciokąt "," Sześciokąt "," Koło "," Elipsa "] solid_names = ["Sześcian", "Prostopadłościan", "Graniastosłup prawidłowy trójkątny", "Ostrosłup prawidłowy czworokątny", "Ostrosłup prawidłowy trójkątny", "Kula", "Cylinder", "Stożek", "Torus"] numbers = ['jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć', 'dziesięć', 'jedenaście', 'dwanaście' , 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dziewiętnaście', 'dwadzieścia', 'dwadzieścia jeden', 'dwadzieścia dwa', 'dwadzieścia trzy', 'dwadzieścia cztery', 'dwadzieścia pięć', 'dwadzieścia sześć', 'dwadzieścia siedem', 'dwadzieścia osiem', 'dwadzieścia dziewięć'] numbers2090 = ['dwadzieścia','trzydzieści','czterdzieści','pięćdziesiąt','sześćdziesiąt','siedemdziesiąt','osiemdziesiąt','dziewięćdziesiąt'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens, ones] else: return tens + " " + ones return "" d['abc_flashcards_word_sequence'] = ['Arbuz', 'Pociąg','Buty', 'Cymbałki','Ćma', 'Dom', 'Ekran', 'Ciężarówka','Fortepian', 'Gitara', 'Hamak','Iglo', 'Jabłko', 'Kwiatki', 'Lew', 'Łódka', 'Mrówka', 'Noc','Koń', 'Okno','Królik', 'Pomidor', 'Ryba', 'Sowa', 'Ślimak','Tygrys','Ulica', 'Winogron','Mysz', 'Zebra', 'Źrebak','Żyrafa'] d['abc_flashcards_frame_sequence'] = [26, 63, 60, 23, 44, 7, 40, 50, 34, 28, 56, 8, 42, 36, 11, 1, 0, 54, 45, 22, 17, 33, 5, 14, 61, 65,53, 6, 12, 25, 62,30] #used in telling time activity d["minute_numbers_1to29"] = ['jeden','dwie'] d["minute_numbers_1to29"].extend(numbers[2:]) #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = ["pierwsza","druga","trzecia","czwarta","piąta","szósta","siódma","ósma","dziewiąta","dziesiąta","jedenasta","dwunasta"] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = ["pierwszej","drugiej","trzeciej","czwartej","piątej","szóstej","siódmej","ósmej","dziewiątej","dziesiątej","jedenastej","dwunastej"] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "za minute %s" d["time_string_one_past"] = "minuta po %s" d["time_string_to_mh"] = "za %s %s" #ie. za pięć dziesiąta d["time_string_past_mh"] = "%s po %s" #ie. pięć po drugiej d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_half_to"] = "wpół do %s" #ie. wpół do dziewiątej d["time_string_half_past"] = "" #ie. wpół do dziewiątej d["time_string_q_to"] = "za kwadrans %s" d["time_string_q_past"] = "kwadrans po %s" d["time_string_full"] = "%s godzina" fruit = ["zielone jabłko", "czerwone jabłko", "truskawka", "gruszka", "pomarańcza", "cebula", "pomidor", "cytryna", "wiśnia", "papryka", "marchewka", "banan","arbuz"] #2,3,4 fruits_1 = ["zielone jabłka", "czerwone jabłka", "truskawki", "gruszki", "pomarańcze", "cebule", "pomidory", "cytryny", "wiśnie", "papryki", "marchewki", "banany","arbuzy"] #5,6,7 fruits_2 = ["zielonych jabłek", "czerwonych jabłek", "truskawek", "gruszek", "pomarańczy", "cebul", "pomidorów", "cytryn", "wiśni", "papryk", "marchewek", "bananów","arbuzów"] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4],[5,6,7]] #alphabet - pl alphabet_lc = ['a', 'ą', 'b', 'c', 'ć', 'd', 'e', 'ę', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'ł', 'm', 'n', 'ń', 'o', 'ó', 'p', 'r', 's', 'ś', 't', 'u', 'w', 'y', 'z', 'ź', 'ż'] alphabet_uc = ['A', 'Ą', 'B', 'C', 'Ć', 'D', 'E', 'Ę', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'Ł', 'M', 'N', 'Ń', 'O', 'Ó', 'P', 'R', 'S', 'Ś', 'T', 'U', 'W', 'Y', 'Z', 'Ź', 'Ż'] #correction of eSpeak pronounciation of single letters if needed letter_names = ['a', 'ą', 'be', 'ce', 'će', 'de', 'e', 'ę', 'ef', 'gje', 'ha', 'i', 'jot', 'ka', 'el', 'eł', 'em', 'en', 'eń', 'o', 'u kreskowane', 'pe', 'er', 'es', 'eś', 'te', 'u', 'wu', 'igrek', 'zet', 'ziet', 'żet' ] accents_lc = ['-','q','v','x'] accents_uc = ['Q','V','X'] #game start d["Hello"] ="Cześć" d["Welcome back."] ="Fajnie, że już jesteś spowrotem. A teraz w co zagramy?" #menu categories d["Info Category"] = "Ustawienia" d["Keyboard & Mouse"] = "Klawiatura i Mysz" d["Discover Letters"] = "Poznaj alfabet" d["Learn Words"] = "Poznaj nowe słowa" d["Maths"] ="Matematyka" d["Numbers & Basic Operations"] ="Liczby i podstawowe działania" d["Basic Operations - exercises"] = "Podstawowe działania" d["Sorting and Comparing"] ="Sortowanie i porównywanie liczb" d["Geometry"] ="Geometria i rozpoznawanie kształtów" d["Art"] ="Twórcze" d["Memory"] ="Trening pamięci" d["Games & Mazes"] ="Łamigłówki" d["Multiplayer"] = "Gry Multiplayer" #settings d["Preferences"] = "Ustawienia" d["Language"] = "Język" d["Reader"] = "Lektor (eSpeak)" d["Read Instructions"] = "Czytaj Instrukcje przy starcie gier" #games d["About."] ="Info." d["Game info..."] ="Informacje o grze..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] ="Złap Krecika" d["Letters"] ="Litery" d["Letter Flashcards"] ="Poznaj litery" d["Learn to Write"] ="Nauka kaligrafii" d["Trace Letters"] ="Przepisz litery i cyfry" d["Complete the ABC"] ="Uzupełnij alfabet" d["English"] = "angielski" d["in your language"] = "polski" d["Sorting Letters"] ="Sortowanie liter" d["Lowercase Letters"] ="Małe litery" d["Uppercase Letters"] ="Wielkie litery" d["Word Builder"] ="Ułóż słowo" d["Word Maze"] ="Labirynt nowych słówek" d["Collect all"] ="Zbierz wszystkie litery" d["Word Maze + 4"] ="Labirynt słów + 4" d["Numbers"] ="Liczby" d["Number Flashcards"] ="Poznaj cyfry" d["Learn to Count"] ="Naucz się liczyć" d["Basic Addition"] = "Dodawanie" d["Basic Subtraction"] = "Odejmowanie" d["Shopping List"] ="Na zakupach" d["Plus or Minus"] ="Plus czy minus?" d["Basic Operations"] ="Podstawowe zadania" d["Multiplication Table"] ="Tabliczka mnożenia" d["Find the product"] ="Znajdź iloczyn" d["Find the multiplier"] ="Znajdź mnożnik" d["Division"] ="Dzielenie" d["Sorting Numbers"] ="Sortowanie liczb" d["Number Comparison"] ="Porównanie liczb" d["Addition & Subtraction"] ="Dodawanie i odejmowanie" d["Comparison"] ="Porównanie" d["Fractions"] ="Ułamki" d["Decimal Fractions"] ="Ułamki dziesiętne" d["Even or Odd"] ="Parzyste i nieparzyste" d["Shapes"] ="Kształty" d["Shape Flashcards"] ="Poznaj kształty" d["Solids"] ="Bryły" d["Solid Flashcards"] ="Geometria przestrzenna" d["Shape Matching"] ="Przeciągnij zwierzaki do ich cieni" d["help me find my shadow"] ="Przeciągnij zwierzaki do ich cieni" d["Paint"] ="Artystycznie" d["Colour Matching"] ="Kolory" d["label the colours"] ="Przyporządkuj nazwy do kolorów" d["Follow the Arrows"] ="Podążaj za strzałkami" d["remember the directions"] ="zapamiętaj drogę" d["Photographic Memory"] ="Ćwiczenie pamięci" d["Training"] ="fotograficznej" d["Photographic Memory"] ="Ćwiczenie pamięci" d["Automatic Levels"] ="automatyczne poziomy" d["Mouse Maze"] ="Mysi Labirynt" d["Let's have some cheese"] ="Mam ochotę na serek" d["Sheep Maze"] ="Owieczka w labiryncie" d["Find the rest"] ="Znajdź moją rodzinkę" d["Connect"] ="Połącz" d["Balloons with threads"] ="balony z nitkami" d["Fifteen"] ="Piętnaście" d["With a Twist"] ="mniej więcej" #game instructions d["Drag the slider"] ="Przeciągnij suwak tak by właściwy znak był w czerwonym kwadracie." d["Take your sheep"] ="Doprowadź owce do reszty stada." d["Check the shopping list"] ="Sprawdź listę zakupów i przeciągnij potrzebne owoce do koszyka." d["Drag lt"] =["Przeciągnij jeden z <, > lub = (mniejsze, większe lub równe)", "do czerwonego kwadratu w środku."] d["Drag lt2"] ="Przeciągnij większy, mniejszy lub równy do czerwonego kwadratu." d["Re-arrange right"] ="Ułóż powyższe liczby we właściwej kolejności" d["Complete abc"] ="Uzupełnij alfabet." d["Write a word:"] ="Ułóż słowo:" d["Find and separate"] ="Znajdź i oddziel liczby parzyste od nieparzystych." d["Re-arrange alphabetical"] ="Ułóż powyższe litery w kolejności alfabetycznej." d["Re-arrange ascending"] ="Ułóż powyższe liczby w porządku rosnącym." #game dialogs d["Please try again."] ="Spróbuj ponownie." d["Sorry! It is wrong."] ="Niestety! Coś jeszcze nie jest dobrze." d["Perfect! Task solved!"] ="Świetnie! Zadanie rozwiązane!" d["work harder"] ="Musisz popracować trochę ciężej następnym razem." #level_controller d["Game Over!"] = "Koniec Gry!" d["Congratulations! Game Completed."] = "Gratulacje! Wszystkie zadania wykonane." d["Great job!"] = ["Świetnie!","Idealnie!","Wspaniale!","Super!"] d["Perfect! Level completed!"] = "Rewelacja! Poziom ukończony!" #game specific labels: d["area:"] ="powierzchnia:" d["perimeter:"] ="obwód:" d["surface area:"] ="powierzchnia:" d["volume:"] ="objętość:" d["Perfect!"] ="Super!" d["divided by"] ="podzielone przez" d["multiplied by"] ="razy" d["equals"] ="równa się" d["Shopping List"] ="Lista zakupów" d["Even"] ="Parzyste" d["Odd"] ="Nieparzyste" d["white"]="biały" d["black"]="czarny" d["grey"]="szary" d["red"]="czerwony" d["orange"]="pomarańczowy" d["yellow"]="żółty" d["olive"]="oliwkowy" d["green"]="zielony" d["sea green"]="morska zieleń" d["teal"]="morski" d["blue"]="niebieski" d["navy"]="granatowy" d["purple"]="purpurowy" d["violet"]="fioletowy" d["magenta"]="fuksja" d["indigo"]="indygo" d["pink"]="różowy" d["maroon"] = "bordowy" d["brown"] = "brązowy" d["aqua"] = "aqua" d["lime"] = "limetkowy" #new d["Keyboard Skills"] = "Tęczowa Klawiatura" d["Touch Typing"] = "Nauka szybkiego pisania na klawiaturze" d["Translators"] = "Tłumaczenia" d["English Alphabet"] = "Angielski alfabet" d["Your Alphabet"] = "Polski alfabet" #new in 0.3.0 d["Paint Mixer"] = "Mieszamy Kolory - Farba" d["Mixing RYB"] = "Czerwony, żółty, niebieski, czarny i biały" d["Light Mixer"] = "Mieszamy Kolory - Światło" d["Mixing RGB"] = "Uzyskaj inne kolory z czerwonego, zielonego i niebieskiego" d["Ink Mixer"] = "Mieszamy Kolory - Farba, Tusz" d["Mixing CMY"] = "Uzyskaj inne kolory z kolorów: cyjan, magenta i żółty" d["Find the colour of the circle"] = "Znajdź Kolor Koła" d["Adjust CMY"] = "Dopasuj ilość koloru cyjan, magenta i żółtego" d["Adjust RGB"] = "Dopasuj intensywność czerowego, zielonego i niebieskiego światła" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "więcej" d["less color"] = "mniej" d["color is ok"] = "jest o-kej" #o-kej bo "ok" jest czyt. jako około, a w okej akcent pada na "e" i nie brzmi to dobrze :) #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["czerwonego","czerwony"] d["of green"] = ["zielonego","zielony"] d["of blue"] = ["niebieskiego","niebieski"] d["of cyan"] = ["koloru cyjan","cyjan"] d["of magenta"] = ["koloru magenta","magenta"] d["of yellow"] = ["żółtego","żółty"] #new in 0.3.1 d["brush size"] = "rozmiar pędzla" #new in 0.3.2 d["TicTacToe2"] = "Kółko i krzyżyk 2" d["TicTacToe3"] = "Kółko i krzyżyk 3" d["multiline-tictactoe"] = "Ułóż jak najwięcej potrójnych linii by wygrać" d["Player"] = "Gracz" d["Won"] = "Wygrał" d["Game Draw"] = "Remis" d["UserName"] = "Imię" d["Match Animals"] = "Dopasuj zwierzaki" d["Match Fruits"] = "Dopasuj owoce" d["Match Vegetables"] = "Dopasuj warzywa" d["Match Numbers"] = "Dopasuj numerki" d["Find pairs"] = "Znajdź pary takich samych obrazków" d["Match Animals Memory"] = "Zapamiętaj położenie zwierzaków" d["Match Fruits"] = "Zapamiętaj położenie owoców" d["Match Vegetables"] = "Zapamiętaj położenie warzyw" d["Match Numbers"] = "Zapamiętaj położenie numerków" d["Find pairs"] = "Znajdź pary takich samych obrazków" d["Sliced Images"] = "Przesówanka" d["Sliced Animals"] = "Zwierzaki" d["Sliced Fruits"] = "Owoce" d["Sliced Numbers"] = "Numerki" d["Fraction Groups"] = "Ułamki" d["Percentages"] = "Procenty" d["Ratios"] = "Stosunki" d["Fract instr0"] = ["Dopasuj graficzne reprezentacje ułamków po prawej", "do tych po lewej"] #Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Dopasuj ułamki zwykłe i ich graficzne reprezentacje po prawej", "to tych po lewej"]# Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = ["Dopasuj graficzne reprezentacje ułamków po prawej", "do ułamków zwykłych po lewej"]#"Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Dopasuj graficzne reprezentacje ułamków, ułamki zwykłe i dziesiętne", " do procentów po lewej"]#["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Dopasuj graficzne reprezentacje stosunku kolorowych części do białych","do ich liczbowego zapisu po lewej"]#["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Matematyczna dopasowanka" d["Addition"] = "Dodawanie" d["Subtraction"] = "Odejmowanie" d["Multiplication"] = "Mnożenie" d["Division"] = "Dzielenie" #d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Check for newer version..."] = ["","Sprawdź najnowszą wersję, zgłaszaj błędy i pomysły, przetłumacz lub oceń ten projekt na:"] d["Match numbers to their spelling"] = "Dopasuj liczby do ich słownego zapisu" d["Number Spelling"] = "Zapis słowny liczb" d["Match Animals"] = "Zwierzakowa dopasowanka" d["Find all matching animals"] = "Znajdź takie same zwierzaki" d["Match animals to their shadows"] = "Dopasuj zwierzaki do ich cieni" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Figura do narysowania: %s" d["draw_instr2"] = "Figura do narysowania: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "o długości podstaw równej %d i %d, i wysokości równej %d" #for trapeziums d["size_instr_1"] = "o długości ścian równej %d" #square d["size_instr_2"] = "o długości ścian równej %d i %d" #rectangle d["size_instr_3"] = "o długości jednej z podstaw równej %d i wysokości równej %d" #for parallelogram d["size_instr_4"] = "o długości podstawy równej %d i wysokości równej %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "o długości przyprostokątnych równej %d i %d" #for right triangles d["size_instr_6"] = "o długości obu przyprostokątnych równej %d" #for right isosceles triangles d["size_instr_7"] = "o długości przeciwprostokątnej równej %d" #for right isosceles triangles d["size_instr_8"] = "o długości jednej ze ścian równej %d i wysokości spadającej na nią równej %d" #for obtuse triangles d["size_instr_9"] = "o promieniu o długości %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Czworokąt" d["trapezium"] = "Trapez" d["u_trapezium"] = "Trapez" d["triangle"] = "Trójkąt" d["squished_quadi"] = "Nieco przymiażdżony czworokąt" d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Trójkąt prostokątny równoramienny" d["obtuse_iso_tria"] = "Trójkąt rozwartokątny równoramienny" d["acute_iso_tria"] = "Trójkąt ostrokątny równoramienny" d["squished_tria"] = "Nieco przymieżdżony trójkąt" d["circle"] = shape_names[13] d["triangle_not_really"] = "Trójkąt? Niezupełnie..." d["test_yourself"] = "Sprawdź się" d["Clock1"] = "Zegar" d["Read time"] = "odczytaj czas" d["Clock2"] = "Zegar" d["Set time"] = "ustaw właściwy czas na zegarze" d["Set_clock"] = "Ustaw zegar na godzinę:" d["Set_clock_instr"] = ["","Przeciągnij wskazówki","by ustawić czas"] d["What time"] = "Która godzina?" d["close_confirm"] = "Przyciśnij jeszcze raz by wyjść z gry" d["answer_enter"] = "Wpisz odpowiedź i wciśnij enter" d["enable_untranslated"] = "Do Tłumaczy - włącz tę opcje by wyświetlić dodatkowe języki (do testowania):" d["Fullscreen:"] = "Pełny ekran:" d["Time"] = "Czas" d["Play_w_clock"] = "Pokręć wskazówkami i sprawdź co się stanie." d["lets_see_what_you_draw"] = "Zobaczmy jakie kształty umiesz narysować" d["txt_only"] = "Tym razem tylko zapis słowny." d["Clock0"] = "Jak działa zegar?" d["Columnar addition"] = "Dodawanie pisemne" d["Columnar subtraction"] = "Odejmowanie pisemne" d["Long multiplication"] = "Mnożenie pisemne" d["Long division"] = "Dzielenie pisemne" d["borrow 10"] = "pożyczamy 10" d["carry"] = "przenosimy" d["demo start"] = "Zacznij >>" d["demo next eg"] = "Następny przykład >>" d["demo next step"] = "Następny krok >>" d["demo write"] = "wpisujemy " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Samouczek" d["DIY"] = "Zrób to sam" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Działania na dużych liczbach" d["demo rewrite"] = "przepisujemy " d["remainder"] = "remainder" d["demo_result"] = "wynik" d["TimeMatching"] = "Zegarkowa dopasowanka"pysiogame-1.30.811/languages/pt.py0000664000175000017500000005704712201770056015732 0ustar tigertiger# -*- coding: utf-8 -*- # traduzido para português da europa por Américo Monteiro (a_monteiro@gmx.com) #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists #shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] shape_names = ["Triângulo Equilátero", "Triângulo Isósceles", "Triângulo Obtuso", "Triângulo Rectângulo", "Triângulo Agudo", "Quadrado", "Rectângulo", "Trapézio Rectângulo", "Trapézio Isósceles", "Losango", "Paralelograma", "Pentágono", "Hexágono", "Círculo", "Elipse"] #solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] solid_names = ["Cubo", "Prisma Quadrado", "Prisma Triangular", "Pirâmide Quadrada", "Pirâmide Triangular", "Esfera", "Cilindro", "Cone", "Toro"] #numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'] #numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] numbers = ['um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove', 'dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezasseis', 'dezassete', 'dezoito', 'dezanove', 'vinte', 'vinte e um', 'vinte e dois', 'vinte e três', 'vinte e quatro', 'vinte e cinco', 'vinte e seis', 'vinte e sete', 'vinte e oito', 'vinte e nove'] numbers2090 = ['vinte','trinta','quarenta','cinquenta','sessenta','setenta','oitenta','noventa'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens + " e ", ones] else: return tens + " e " + ones return "" d['abc_flashcards_word_sequence'] = ['Abeto', 'Barco', 'Casa', 'Dormir','Elefante', 'Formiga', 'Girafa', 'Hipopótamo','Iglu', 'Janela','Koala', 'Leão', 'Maçã', 'Narciso-amarelo', 'Ouriço', 'Peixe', 'Queijo', 'Rainha', 'Sol', 'Tomate', 'Uvas', 'Violino', 'Windsurf', 'Xilofone', 'Y', 'Zebra'] d['abc_flashcards_frame_sequence'] = [31,1,7, 49,4,0,30, 47,8,22, 72,11,42, 69,29,5, 57,16,18,33,6,21, 66,23, 43,25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. #d["hours_a"] = numbers[0:12] d["hours_a"] = ['uma hora', 'duas horas', 'três horas', 'quatro horas', 'cinco horas', 'seis horas', 'sete horas', 'oito horas', 'nove horas', 'dez horas', 'onze horas', 'doze horas'] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "um minuto para %s" d["time_string_one_past"] = "%s e um minuto" #d["time_string_to_mh"] = "%s para %s" #ie. five to four #d["time_string_past_mh"] = "%s depois das %s" #ie. five past four #d["time_string_to_hm"] = "%s menos %s" #ie. 3:55 = four o'clock in five #d["time_string_past_hm"] = "%s e %s" #ie. 4:05 = four and five minutes d["time_string_to_mh"] = "%s minutos para %s" #ie. five to four d["time_string_past_mh"] = "" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "%s e %s minutos" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "%s e meia" #ie. half past three d["time_string_q_to"] = "um quarto para %s" d["time_string_q_past"] = "%s e um quarto" d["time_string_full"] = "%s em ponto" fruit = ["maçã verde", "maçã vermelha", "morango", "pêra", "laranja", "cebola", "tomate", "limão", "cereja", "pimentão", "cenoura", "banana", "melancia"] fruits_1 = ["maçãs verdes", "maçãs vermelhas", "morangos", "pêras", "laranjas", "cebolas", "tomates", "limões", "cerejas", "pimentões", "cenouras", "bananas", "melancias"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet - pt - "abcdefghijlmnopqrstuvxz" alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['á','â','ã','à','ç','é','ê','í','ó','ô','õ','ú','-'] accents_uc = ['Á','Â','Ã','À','Ç','É','Ê','Í','Ó','Ô','Õ','Ú'] #game start d["Hello"] = "Olá" d["Welcome back."] = "Bem vindo de volta ao jogo." #settings d["Preferences"] = "Preferências" d["Language"] = "Linguagem" d["Reader"] = "Utilizar programa eSpeak" d["Read Instructions"] = "Ler as Instruções no inicio dos jogos" #menu categories d["Info Category"] = "Informação & Definições" d["Keyboard & Mouse"] = "Teclado & Rato" d["Discover Letters"] = "Descobrir Letras" d["Learn Words"] = "Aprender Palavras Novas" d["Maths"] = "Matemáticas" d["Numbers & Basic Operations"] = "Números & Operações Básicas" d["Basic Operations - exercises"] = "Operações Básicas - Exercícios" d["Sorting and Comparing"] = "Organizar e Comparar" d["Geometry"] = "Geometria e Reconhecimento de Formas" d["Art"] = "Arte e Cor" d["Memory"] = "Memória" d["Games & Mazes"] = "Jogos & Labirintos" d["Multiplayer"] = "Jogos de Vários Jogadores" #games d["About."] = "Sobre." d["Game info..."] = "Informação do Jogo..." d["Credits"] = "Copyright & Créditos" d["Hit the Mole"] = "Acerta na Toupeira" d["Letters"] = "Letras" d["Letter Flashcards"] = "Aprende Letras com Figuras" d["Learn to Write"] = "Aprende a Escrever" d["Trace Letters"] = "Traça Letras e Números" d["Complete the ABC"] = "Completa o ABC" d["English"] = "Inglês" d["in your language"] = "Português" d["Sorting Letters"] = "Ordenar Letras" d["Lowercase Letters"] = "Letras Minúsculas" d["Uppercase Letters"] = "Letras Maiúsculas" d["Word Builder"] = "Compositor de Palavras" d["Word Maze"] = "Labirinto de Palavras" d["Collect all"] = "Recolhe todas as letras na ordem certa" d["Word Maze + 4"] = "Labirinto de Palavras + 4" d["Numbers"] = "Números" d["Number Flashcards"] = "Aprende Números com Figuras" d["Learn to Count"] = "Aprende a Contar" d["Basic Addition"] = "Adição Básica" d["Basic Subtraction"] = "Subtração Básica" d["Shopping List"] = "lista de Compras" d["Plus or Minus"] = "Mais ou Menos" d["Basic Operations"] = "Operações Básicas" d["Multiplication Table"] = "Tabela de Multiplicação" d["Find the product"] = "Encontra o produto" d["Find the multiplier"] = "Encontra o multiplicador" d["Division"] = "Divisão" d["Sorting Numbers"] = "Ordenar Números" d["Number Comparison"] = "Comparação de Números" d["Addition & Subtraction"] = "Adição & Subtração" d["Comparison"] = "Comparação" d["Fractions"] = "Frações" d["Decimal Fractions"] = "Frações Decimais" d["Even or Odd"] = "Par ou Ímpar" d["Shapes"] = "Formas" d["Shape Flashcards"] = "Aprende Formas com Figuras" d["Solids"] = "Sólidos" d["Solid Flashcards"] = "Aprende Geometrias Sólidas com Figuras" d["Shape Matching"] = "Correspondência de Formas" d["help me find my shadow"] = "ajuda-me a encontrar a minha sombra" d["Paint"] = "Pintura" d["Colour Matching"] = "Correspondência de Cores" d["label the colours"] = "nomeia as cores" d["Follow the Arrows"] = "Segue as Setas" d["remember the directions"] = "lembra as direções" d["Photographic Memory"] = "Memória Fotográfica" d["Training"] = "Treinar" d["Photographic Memory"] = "Memória Fotográfica" d["Automatic Levels"] = "Níveis Automáticos" d["Mouse Maze"] = "Labirinto do Rato" d["Let's have some cheese"] = "Vamos apanhar o queijo" d["Sheep Maze"] = "Labirinto da Ovelha" d["Find the rest"] = "Encontra o resto do rebanho" d["Connect"] = "Liga" d["Balloons with threads"] = "Balões com rolos de fio" d["Fifteen"] = "Jogo Puzzle dos Quinze" d["With a Twist"] = "Troca as Posições das Peças" #game instructions d["Drag the slider"] = ["Arrasta os sinais para cima ou para baixo","para que o sinal certo fique no quadrado certo"] #"Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Leva a tua ovelha para o resto do rebanho." #"Take your sheep to the rest of the herd." d["Check the shopping list"] = "Consulta a lista de compras e arrasta todas as coisas que precisas para o cesto" #"Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Arrasta um dos <, > ou = (menor, maior ou igual) para o quadrado vermelho." #"Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Arrasta um dos menor, maior ou igual para o quadrado vermelho." #"Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Organiza os números em cima para que fiquem na ordem certa." #"Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Completa o abecedário usando as letras em cima." #"Complete the abc using the letters above." d["Write a word:"] = "Escreve uma palavra." #"Write a word:" d["Find and separate"] = "Encontra e separa os Números Pares dos Ímpares nas séries em cima." #"Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Organiza as letras em cima para que fiquem em ordem alfabética" #"Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Organiza os números em cima para que fiquem em ordem crescente." #"Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Por favor tenta outra vez." #"Please try again." d["Sorry! It is wrong."] = "Desculpa mas está errado." #"Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfeito! Tarefa resolvida!" #"Perfect! Task solved!" d["work harder"] = "Precisas de te esforçar um pouco mais na próxima vez." #"You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Fim de Jogo!" #"Game Over!" d["Congratulations! Game Completed."] = "Parabéns! Conseguiste completar todas as tarefas deste jogo." #"Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Bom trabalho!","Perfeito!","Maravilhoso!","Super!","Muito Bem!"] #["Great job!","Perfect!","Awesome!","Super!","Well done!"] d["Perfect! Level completed!"] = "Perfeito! Nível completo!" #"Perfect! Level completed!" #game specific labels: d["area:"] = "área:" d["perimeter:"] = "perímetro:" d["surface area:"] = "área de superfície:" d["volume:"] = "volume:" d["Perfect!"] = "Perfeito!" d["divided by"] = "a dividir por" d["multiplied by"] = "vezes" d["equals"] = "igual" d["Shopping List"] = "Lista de Compras" d["Even"] = "Par" d["Odd"] = "Ímpar" d["white"]="branco" d["black"]="preto" d["grey"]="cinzento" d["red"]="vermelho" d["orange"]="laranja" d["yellow"]="amarelo" d["olive"]="verde azeitona" d["green"]="verde" d["sea green"]="verde mar" d["teal"]="azul petróleo" d["blue"]="azul" d["navy"]="azul marinha" d["purple"]="púrpura" d["violet"]="violeta" d["magenta"]="magenta" d["indigo"]="índigo" d["pink"]="rosa" d["maroon"] = ["castanho-","avermelhado"] d["brown"] = "castanho" d["aqua"] = "azul ciano" d["lime"] = "lima" #new d["Keyboard Skills"] = "Teclado Colorido" #"Rainbow Keyboard" d["Touch Typing"] = "Instrutor de Escrita em Teclado" #"Touch Typing Tutor" d["Translators"] = "Tradutores" #"Translators" d["English Alphabet"] = "Alfabeto Inglês" #"English Alphabet" d["Your Alphabet"] = "Alfabeto Português" #"Portuguese Alphabet" #new in 0.3.0 d["Paint Mixer"] = "Misturar Cores para Pintar" #"Mixing Colours for Painting" d["Mixing RYB"] = "Mistura tintas vermelha, amarela, azul, preta e branca" #"Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Mistura de Cores Aditiva - Luz Colorida" #"Additive Colour Mixing - Light" d["Mixing RGB"] = "Mistura as cores da luz vermelha, verde e azul para obter outras cores" #"Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Mistura de Cores Subtractiva - Bases e Corantes" #"Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mistura ciano, magenta e amarelo para obter outras cores" #"Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Encontra a cor do círculo" #"Find the colour of the circle" d["Adjust CMY"] = "Ajusta a quantidade das tintas ciano, magenta e amarelo" #"Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Ajusta a intencidade das luzes vermelha, verde e azul" #"Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "mais" d["less color"] = "menos" d["color is ok"] = "está certo" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["vermelho","vermelho"] d["of green"] = ["verde","verde"] d["of blue"] = ["azul","azul"] d["of cyan"] = ["ciano","ciano"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["amarelo","amarelo"] #new in 0.3.1 d["brush size"] = "tamanho do pincel" #new in 0.3.2 d["TicTacToe2"] = "Jogo do Galo para 2 Jogadores" #"Tic Tac Toe 2" d["TicTacToe3"] = "Jogo do Galo para 3 Jogadores" #"Tic Tac Toe 3" d["multiline-tictactoe"] = "Ganha quem fizer mais linhas de 3 seguidos" #"Get as many lines of 3 as possible to win" d["Player"] = "Jogador" d["Won"] = "Venceu" d["Game Draw"] = "Empate" d["UserName"] = "Nome de Utilizador" d["Match Animals Memory"] = "Animais que Correspondem" d["Match Fruits"] = "Frutas que Correspondem" d["Match Vegetables"] = "Vegetais que Correspondem" d["Match Numbers"] = "Números que Correspondem" d["Find pairs"] = "Encontra pares correspondentes da mesma imagem" #"Find matching pairs of the same image" d["Sliced Images"] = "Imagens Baralhadas" #"Sliced Images" d["Sliced Animals"] = "Animais" d["Sliced Fruits"] = "Frutas" d["Sliced Numbers"] = "Números" d["Fraction Groups"] = "Grupos de Frações" d["Percentages"] = "Percentagens" d["Ratios"] = "Relações" d["Fract instr0"] = "Corresponde os mapas de frações da direita com os da esquerda" #"Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Corresponde os mapas de frações e as frações da direita","com os mapas de frações da esquerda"] #["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Corresponde os mapas de frações com as frações da esquera" #"Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Corresponde os mapas de frações, frações e frações decimais da direita","com as suas representações de percentagem"] #["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Corresponde os mapas com as relações da esquerda","As relações são expressadas na diferença entre peças coloridas e peças brancas"] #["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Jogo de Correspondências Matemáticas" #"Maths Matching Game" d["Addition"] = "Adição" d["Subtraction"] = "Subtração" d["Multiplication"] = "Multiplicação" d["Division"] = "Divisão" d["Check for newer version..."] = ["Verifique novas versões, reporte erros, discuta, traduza ou reveja este projecto em:"] #["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Corresponder números com a sua ortografia" #"Match numbers to their spelling" d["Number Spelling"] = "Ortografia de Números" #"Number Spelling" d["Match Animals"] = "Correspondência de Animais" #"Match Animals" d["Find all matching animals"] = "Encontra todos os animais correspondentes" #"Find all matching animals" d["Match animals to their shadows"] = "Corresponde os animais com as suas sombras" #"Match animals to their shadows" d["ShapeMaker"] = "Criador de Formas" #"Shape Maker" d["draw_instr1"] = "Forma a desenhar: %s" d["draw_instr2"] = "Forma a desenhar: %s de modo que " #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "os comprimentos das suas bases sejam iguais a %d e %d e a altura a %d" #"such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "os comprimentos dos seus lados sejam iguais a %d" #"such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "os comprimentos dos seus lados sejam iguais a %d e %d" #"such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "os comprimentos das suas 2 bases paralelas sejam iguais a %d e a altura igual a %d" #"such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "o comprimento seja igual a %d e a altura a %d" #"such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "os comprimentos dos catetos sejam iguais a %d e %d" #"such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "os comprimentos de ambos catetos sejam iguai a %d" #"such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "o comprimento da hipotenusa seja igual a %d" #"such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "o comprimento de um dos lados seja igual a %d e a altura igual a %d" #"such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "o comprimento do seu raio seja igual a %d" #"such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Quadrilátero" d["trapezium"] = "Trapézio" d["u_trapezium"] = "Trapézio" d["triangle"] = "Triângulo" d["squished_quadi"] = "Auuu... um quadrilátero esmagado" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Triângulo isósceles rectângulo" d["obtuse_iso_tria"] = "Triângulo isósceles obtuso" d["acute_iso_tria"] = "Triângulo isósceles agudo" d["squished_tria"] = "Auuu... triângulo esmagado" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triângulo? Bem, nem por isso..." #"Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Agora faz tu" d["Clock1"] = "Relógio" d["Read time"] = "aprende a ler as horas" d["Clock2"] = "Relógio" d["Set time"] = "aprende a acertar o relógio" d["Set_clock"] = "Acerta o relógio para:" d["Set_clock_instr"] = ["","Arrasta os ponteiros do relógio","para acertar as horas"] d["What time"] = "Que horas são?" d["close_confirm"] = "Clica outra vez para sair" d["answer_enter"] = "Escreve a tua resposta e carrega no enter" d["enable_untranslated"] = "FAO: Tradutores - activar para mostrar linguagens não traduzidas (para testes):" #enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Écran completo:" d["Time"] = "Horas" d["Play_w_clock"] = "Roda os ponteiros do relógio para veres o que acontece." d["lets_see_what_you_draw"] = "Vamos ver que formas consegues desenhar" #"Let's see what shapes you can draw" d["txt_only"] = "Com as horas apenas em texto" #"Time in text version only" d["Clock0"] = "Como é que funciona o relógio?" #"How clock works?" d["Columnar addition"] = "Adição em colunas" #"Columnar addition" d["Columnar subtraction"] = "Subtração em colunas" #"Columnar subtraction" d["Long multiplication"] = "Multiplicação longa" #"Long multiplication" d["Long division"] = "Divisão longa" #"Long division" d["borrow 10"] = "pede 10 emprestado" #"borrow 10" d["carry"] = "e vai " #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Começar >>" d["demo next eg"] = "Próximo exemplo >>" d["demo next step"] = "Próximo passo >>" d["demo write"] = "escreve " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstração" d["DIY"] = "Agora faz tu" d["Ratio"] = "Relação" d["Working with large numbers"] = "Trabalhar com números grandes" #"Working with large numbers" d["demo rewrite"] = "escreve" d["remainder"] = "resto" d["demo_result"] = "resultado" d["TimeMatching"] = "Correspondência de Relógios"pysiogame-1.30.811/languages/es.py0000664000175000017500000004537712201770056015721 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Triángulo equilátero", "Triángulo isósceles", "Triángulo obtuso", "Triángulo rectángulo", "Triángulo agudo", "Cuadrado", "Rectángulo", "Trapecio rectángulo", "Trapecio isósceles", "Rombo", "Paralelogramo", "Pentágono", "Hexágono", "Círculo", "Elipse"] solid_names = ["Cubo", "Prisma cuadrado", "Prisma triangular", "Pirámide de base cuadrada", "Pirámide de base triangular", "Esfera", "Cilindro", "Cono", "Toro"] numbers = ['uno', 'dos', 'tres', 'cuatro', 'cinco', 'seis', 'siete', 'ocho', 'nueve', 'diez', 'once', 'doce' , 'trece', 'catorce', 'quince', 'dieciséis', 'diecisiete', 'dieciocho', 'diecinueve', 'veinte', 'veintiuno','veintidós','veintitrés','veinticuatro','veinticinco','veintiséis','veintisiete','veintiocho','veintinueve'] numbers2090 = ['veinte','treinta','cuarenta','cincuenta','sesenta','setenta','ochenta','noventa'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens + " y ", ones] else: return tens + " y " + ones return "" d['abc_flashcards_word_sequence'] = ['Abeto', 'Búho', 'Casa', 'Dormir','Elefante', 'Fortepiano', 'Gato','Hormiga', 'Iglú', 'Jirafa', 'Koala', 'Loro', 'Manzana', 'Narciso','Ñu','Océano','Pescado', 'Queso','Ratón', 'Sol', 'Tomate', 'Uvas', 'Violín','Wagon', 'Xilófono', 'Yoga','Zapatos'] d['abc_flashcards_frame_sequence'] = [31, 14, 7, 49,4,34, 2,0, 8, 30, 72,15, 42, 69, 70,52,5, 57,12,18, 33,6, 22, 58,23,32,60] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = ['La una', 'Las dos', 'Las tres', 'Las cuatro', 'Las cinco', 'Las seis', 'Las siete', 'Las ocho', 'Las nueve', 'Las diez', 'Las once', 'Las doce'] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "%s menos un minuto" d["time_string_one_past"] = "%s y un minuto" d["time_string_to_mh"] = "" #ie. five to four d["time_string_past_mh"] = "" #ie. five past four d["time_string_to_hm"] = "%s menos %s" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "%s y %s" #ie. 4:05 = four and five minutes d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "%s y media" #ie. half past three #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_q_to"] = "%s menos cuarto" d["time_string_q_past"] = "%s y cuarto" d["time_string_full"] = "%s en punto" fruit = ["manzana verde","manzana roja","fresa","pera","naranja","cebolla","tomate","limón","cereza","pimiento","zanahoria","plátano","sandía"] fruits_1 = ["manzanas verdes","manzanas rojas","fresas","peras","naranjas","cebollas","tomates","limones","cerezas","pimientos","zanahorias","plátanos","sandías"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['á','é','í','ó','ú','ü','-'] accents_uc = ['Á','É','Í','Ó','Ú','Ü'] #game start d["Hello"] = "Hola" d["Welcome back."] = "Te damos nuevamente la bienvenida a pysiogame." #settings d["Preferences"] = "Preferencias" d["Language"] = "Idioma" d["Reader"] = "eSpeak" d["Read Instructions"] = "Lea las instrucciones en el inicio de los juegos" #menu categories d["Info Category"] = "Información y Ajustes" d["Keyboard & Mouse"] = "Teclado y Ratón" d["Discover Letters"] = "Descubre las letras" d["Learn Words"] = "Aprende nuevas palabras" d["Maths"] = "Matemáticas" d["Numbers & Basic Operations"] = "Números y operaciones básicas" d["Basic Operations - exercises"] = "Operaciones básicas - Ejercicios" d["Sorting and Comparing"] = "Ordena y Compara" d["Geometry"] = "Geometría y Formas" d["Art"] = "Arte y Color" d["Memory"] = "Memoria" d["Games & Mazes"] = "Juegos y Laberintos" d["Multiplayer"] = "Juegos multijugador" #games d["About."] = "Sobre pySioGame" d["Game info..."] = "Información sobre el juego" d["Credits"] = "Autoría y Créditos" d["Hit the Mole"] = "Golpea al topo" d["Letters"] = "Letras" d["Letter Flashcards"] = "Aprende las letras con tarjetas didácticas" d["Learn to Write"] = "Aprende a escribir" d["Trace Letters"] = "Dibuja las letras y los números" d["Complete the ABC"] = "Completa el abecedario" d["English"] = "Inglés" d["in your language"] = "Español" d["Sorting Letters"] = "Ordenar letras" d["Lowercase Letters"] = "Letras minúsculas" d["Uppercase Letters"] = "Letras mayúsculas" d["Word Builder"] = "Construye las palabras" d["Word Maze"] = "Laberinto de palabras" d["Collect all"] = "Recoge todas las letras en el orden correcto" d["Word Maze + 4"] = "Laberinto de palabras + 4" d["Numbers"] = "Números" d["Number Flashcards"] = "Aprende los números con tarjetas didácticas" d["Learn to Count"] = "Aprende a contar" d["Basic Addition"] = "Suma básica" d["Basic Subtraction"] = "Resta básica" d["Shopping List"] = "Lista de la compra" d["Plus or Minus"] = "Más o menos" d["Basic Operations"] = "Operaciones básicas" d["Multiplication Table"] = "Tabla de multiplicar" d["Find the product"] = "Encuentra el producto" d["Find the multiplier"] = "Encuentra el multiplicador" d["Division"] = "División" d["Sorting Numbers"] = "Ordena los números" d["Number Comparison"] = "Compara los números" d["Addition & Subtraction"] = "Suma y Resta" d["Comparison"] = "Comparación" d["Fractions"] = "Fracciones" d["Decimal Fractions"] = "Fracciones decimales" d["Even or Odd"] = "Par or Impar" d["Shapes"] = "Formas" d["Shape Flashcards"] = "Aprende las formas con tarjetas didácticas" d["Solids"] = "Sólidos" d["Solid Flashcards"] = "Aprende geometría de los sólidos con tarjetas didácticas" d["Shape Matching"] = "Empareja las formas" d["help me find my shadow"] = "ayúdame a encontrar mi sombra" d["Paint"] = "Pinta" d["Colour Matching"] = "Empareja los colores" d["label the colours"] = "Etiqueta los colores" d["Follow the Arrows"] = "Sigue las flechas" d["remember the directions"] = "recuerda las direcciones" d["Photographic Memory"] = "Memoria fotográfica" d["Training"] = "Entrenamiento" d["Photographic Memory"] = "Memoria fotográfica" d["Automatic Levels"] = "Niveles automáticos" d["Mouse Maze"] = "Laberinto del ratón" d["Let's have some cheese"] = "Tomemos algo de queso" d["Sheep Maze"] = "Laberinto de la oveja" d["Find the rest"] = "Encuentra al resto del rebaño" d["Connect"] = "Conecta" d["Balloons with threads"] = "Globos con hilos" d["Fifteen"] = "Quince" d["With a Twist"] = "Con un giro" #game instructions d["Drag the slider"] = "Mueve arriba o abajo y pon el símbolo adecuado en el cuadrado rojo." d["Take your sheep"] = "Lleva tu oveja hasta donde está el resto del rebaño." d["Check the shopping list"] = "Comprueba la lista de la compra y arrastra dentro de la cesta todas las cosas necesarias." d["Drag lt"] = "Arrastra hasta el cuadrado rojo: <, > ó = (menor, mayor, o igual que)." d["Drag lt2"] = "Arrastra hasta el cuadrado rojo uno de los símbolos de menor que, mayor que, o igual." d["Re-arrange right"] = "Reordena los números de arriba para que estén en el orden correcto" d["Complete abc"] = "Completa el abecedario utilizando las letras de arriba." d["Write a word:"] = "Escribe una palabra:" d["Find and separate"] = "Encuentra y separa los números pares de los números impares en la serie de arriba." d["Re-arrange alphabetical"] = "Reordena las letras de arriba para que estén en orden alfabético." d["Re-arrange ascending"] = "Reordena los números de arriba para que estén en orden ascendente." #game dialogs d["Please try again."] = "Por favor, inténtalo de nuevo." d["Sorry! It is wrong."] = "Lo siento, está mal." d["Perfect! Task solved!"] = "¡Perfecto! ¡Tarea solucionada!" #d["work harder"] = "You need to work a little bit harder next time." d["work harder"] = "Tienes que esforzarte un poco más la próxima vez." #level_controller d["Game Over!"] = "¡Fin del juego!" d["Congratulations! Game Completed."] = "¡Enhorabuena! Has terminado todas las actividades en este juego." d["Great job!"] = ["¡Buen trabajo!","¡Perfecto!","¡Maravilloso!","¡Genial!","¡Bien hecho!"] d["Perfect! Level completed!"] = "¡Perfecto! ¡Nivel terminado!" #game specific labels: d["area:"] = "área:" d["perimeter:"] = "perímetro:" d["surface area:"] = "área de la superficie:" d["volume:"] = "volumen:" d["Perfect!"] = "¡Perfecto!" d["divided by"] = "dividido entre" d["multiplied by"] = "multiplicado por" d["equals"] = "es igual a" d["Shopping List"] = "Lista de la compra" d["Even"] = "Par" d["Odd"] = "Impar" d["white"]="blanco" d["black"]="negro" d["grey"]="gris" d["red"]="rojo" d["orange"]="naranja" d["yellow"]="amarillo" d["olive"]="verde oliva" d["green"]="verde" d["sea green"]="verde mar" d["teal"]="verde azulado" d["blue"]="azul" d["navy"]="azul marino" d["purple"]="púrpura" d["violet"]="violeta" d["magenta"]="magenta" d["indigo"]="añil" d["pink"]="rosa" d["maroon"] = "granate" d["brown"] = "marrón" d["aqua"] = "ciano" d["lime"] = "lima" #new d["Keyboard Skills"] = "Habilidad con el teclado" #Not available for this language d["Touch Typing"] = "Mecanografía" d["Translators"] = "Traducción" d["English Alphabet"] = "Alfabeto inglés" d["Your Alphabet"] = "Alfabeto español" #new in 0.3.0 d["Paint Mixer"] = "Mezcla de colores para pintar" d["Mixing RYB"] = "Mezcla pintura roja, amarilla, azul, negra y blanca" d["Light Mixer"] = "Mezcla aditiva de colores: Luz" d["Mixing RGB"] = "Mezcla luz roja, verde y azul para obtener otros colores" d["Ink Mixer"] = "Mezcla sustractiva de colores: Pinturas, Tintes" d["Mixing CMY"] = "Mezcla pintura ciano, magenta y amarilla para obtener otros colores" d["Find the colour of the circle"] = "Encuentra el color del círculo" d["Adjust CMY"] = "Ajusta la cantidad de pintura ciano, magenta y amarilla" d["Adjust RGB"] = "Ajusta la intensidad de la luz roja, verde y azul" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "más" d["less color"] = "menos" d["color is ok"] = "está bien" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["rojo","el rojo"] d["of green"] = ["verde","el verde"] d["of blue"] = ["azul","el azul"] d["of cyan"] = ["ciano","el ciano"] d["of magenta"] = ["magenta","el magenta"] d["of yellow"] = ["amarillo","el amarillo"] #new in 0.3.1 d["brush size"] = "tamaño de la brocha" #new in 0.3.2 #d["TicTacToe"] = "Tres en raya" d["TicTacToe2"] = "Tres en raya 2 - Consigue la mayor..." d["TicTacToe3"] = "Tres en raya 3 - Consigue la mayor..." #d["multiline-tictactoe"] = "Consigue la mayor cantidad posible de líneas de 3 para ganar" d["multiline-tictactoe"] = "cantidad posible de líneas de 3 para ganar" d["Player"] = "Participante" d["Won"] = "Ha ganado" d["Game Draw"] = "Empate" d["UserName"] = "Tu nombre" d["Match Animals Memory"] = "Empareja los animales" d["Match Fruits"] = "Empareja las frutas" d["Match Vegetables"] = "Empareja los vegetales" d["Match Numbers"] = "Empareja los números" d["Find pairs"] = "Encuentra las parejas de la misma imagen" d["Sliced Images"] = "Imágenes troceadas" d["Sliced Animals"] = "Animales" d["Sliced Fruits"] = "Frutas" d["Sliced Numbers"] = "Números" d["Fraction Groups"] = "Grupos de fracciones" d["Percentages"] = "Porcentajes" d["Ratios"] = "Relaciones" d["Fract instr0"] = "Empareja las imágenes de la derecha con las de la izquierda" d["Fract instr1"] = ["Empareja las imágenes y las fracciones de la derecha","con las imágenes de la izquierda"] d["Fract instr2"] = "Empareja las imágenes con las fracciones de la izquierda" d["Fract instr3"] = ["Empareja las imágenes, fracciones y números decimales de la derecha","con sus representaciones en forma de porcentaje"] d["Fract instr4"] = ["Empareja las gráficas con las relaciones de la izquierda","expresadas como una proporción entre partes coloreadas y partes blancas"] d["Ratio"] = "Relac." d["Maths Matching Game"] = "Empareja los números" d["Addition"] = "Suma" d["Subtraction"] = "Resta" d["Multiplication"] = "Multiplicación" d["Division"] = "División" d["Check for newer version..."] = ["","Busca una versión más actualizada, reporta fallos, debate, traduce o revisa este proyecto en:"] d["Match numbers to their spelling"] = "Relaciona los números con su forma escrita" d["Number Spelling"] = "Escritura de números" d["Match Animals"] = "Empareja los animales" d["Find all matching animals"] = "Encuentra todos los animales que coinciden" d["Match animals to their shadows"] = "Empareja los animales con sus sombras" d["ShapeMaker"] = "Creador de figuras" d["draw_instr1"] = "Figura a dibujar: %s" d["draw_instr2"] = "Figura a dibujar: %s de forma que " #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "las longitudes de sus bases sean iguales a %d y a %d y que su altura sea igual a %d" #for trapeziums d["size_instr_1"] = "la longitud de sus lados sea igual a %d" #square d["size_instr_2"] = "las longitudes de sus lados sean iguales a %d y %d" #rectangle d["size_instr_3"] = "la longitud de sus dos bases paralelas sea igual a %d y que su altura sea igual a %d" #for parallelogram d["size_instr_4"] = "la longitud de su base sea igual a %d y que su altura sea igual a %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "las longitudes de sus catetos sean iguales a %d y %d" #for right triangles d["size_instr_6"] = "la longitud de sus dos catetos sea igual a %d" #for right isosceles triangles d["size_instr_7"] = "la longitud de su hipotenusa sea igual a %d" #for right isosceles triangles d["size_instr_8"] = "la longitud de uno de sus lados sea igual a %d y que su altura sea igual a %d" #for obtuse triangles d["size_instr_9"] = "la longitud de su radio sea igual a %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Cuadrilátero" d["trapezium"] = "Trapecio" d["u_trapezium"] = "Trapecio" d["triangle"] = "Triángulo" d["squished_quadi"] = "cuadrilátero 'aplastado'" d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Triángulo isósceles rectángulo" d["obtuse_iso_tria"] = "Triángulo isósceles obtuso" d["acute_iso_tria"] = "Triángulo isósceles agudo" d["squished_tria"] = "Vaya... Triángulo 'aplastado'" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "¿Triángulo? Bueno, realmente no..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Ponte a prueba" d["Clock1"] = "Reloj" d["Read time"] = "Aprende a leer el reloj" d["Clock2"] = "Reloj" d["Set time"] = "Aprende a ajustar el reloj" d["Set_clock"] = "Ajustar el reloj a:" d["Set_clock_instr"] = ["","Arrastra las manecillas","para ajustar el reloj"] d["What time"] = "¿Qué hora es?" d["close_confirm"] = "Pulsa clic de nuevo para salir" d["answer_enter"] = "Escribe tu respuesta y pulsa intro" d["enable_untranslated"] = "Mostrar los lenguajes todavía sin traducción (para pruebas):" d["Fullscreen:"] = "Pantalla completa:" d["Time"] = "Tiempo" d["Play_w_clock"] = "Gira las manecillas del reloj y observa qué ocurre." d["lets_see_what_you_draw"] = "Veamos qué figuras puedes dibujar" d["txt_only"] = "Tiempo solo en versión de texto" d["Clock0"] = "¿Cómo funciona un reloj?" d["Columnar addition"] = "Suma de la columna" d["Columnar subtraction"] = "Resta de la columna" d["Long multiplication"] = "Multiplicación larga" d["Long division"] = "División larga" d["borrow 10"] = "tomo 10" d["carry"] = "me llevo" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Comenzar >>" d["demo next eg"] = "Siguiente ejemplo >>" d["demo next step"] = "Siguiente paso >>" d["demo write"] = "escribe " #used to show which digit of the result should be entered in a box, ie. "write 5" d["Demonstration"] = "Demostración" d["DIY"] = "Hazlo tú" d["Working with large numbers"] = "Trabajando con números grandes" d["demo rewrite"] = "reescribir " d["remainder"] = "resto" d["demo_result"] = "resultado" d["TimeMatching"] = "Empareja los relojes"pysiogame-1.30.811/languages/it_prev.py0000644000175000017500000004201312201770056016740 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] numbers = ['uno', 'due', 'tre', 'quattro', 'cinque', 'sei', 'sette', 'otto', 'nove', 'dieci', 'undici', 'dodici' , 'tredici', 'quattordici', 'quindici', 'sedici', 'diciassette', 'diciotto', 'diciannove', 'venti', 'venti uno', 'venti due', 'venti tre', 'venti quattro', 'venti cinque', 'venti sei', 'venti sette', 'venti otto', 'venti nove'] numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] d['abc_flashcards_word_sequence'] = ['Anguria', 'Barca', 'Casa', 'Dormire', 'Elefante', 'Fiori', 'Giraffa', 'Hockey','Iglù', 'Koala','Leone', 'Mela', 'Narciso','Ombrello', 'Pomodoro', 'Quaderno', 'Riccio','Sole', 'Teiera', 'Uva', 'Violino', 'Xilofono', 'Yoga', 'Zebra'] d['abc_flashcards_frame_sequence'] = [26,1,7, 49,4,36,30, 68,8, 72,11,42, 69,20,33, 13,29,18,19,6,21,23,32,25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" d["time_string_one_past"] = "one minute past %s" d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_full"] = "%s o'clock" #fruit = ["green apple", "red apple", "strawberry", "pear", "orange", "onion", "tomato", "lemon", "cherry", "pepper", "carrot", "banana", "watermelon"] #fruits = ["green apples", "red apples", "strawberries", "pears", "oranges", "onions", "tomatoes", "lemons", "cherries", "peppers", "carrots", "bananas", "watermelons"] #google translated fruits - are they ok? fruit = ["mela verde", "mela rossa", "fragola", "pera", "arancia", "cipolla", "pomodoro", "limone", "ciliegia", "pepeone", "carota", "banana ","anguria"] fruits_1 = ["mele verdi", "mele rosse", "fragole", "pere", "arance", "cipolle", "pomodori", "limoni", "ciliegie", "peperoni", "carote", "banane ","angurie"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet - it alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['à','è','é','ì','í','î','ò','ó','ù','ú','-'] accents_uc = ['À','È','É','Ì','Í','Î','Ò','Ó','Ù','Ú'] #game start d["Hello"] = "Hello" d["Welcome back."] = "Welcome back in the game." #settings d["Preferences"] = "Preferences" d["Language"] = "Language" d["Reader"] = "eSpeak" d["Read Instructions"] = "Read Instructions at the start of games" #menu categories d["Info Category"] = "Info & Settings" d["Keyboard & Mouse"] = "Keyboard & Mouse" d["Discover Letters"] = "Discover Letters" d["Learn Words"] = "Learn New Words" d["Maths"] = "Mathematics" d["Numbers & Basic Operations"] = "Numbers & Basic Operations" d["Basic Operations - exercises"] = "Basic Operations - Exercises" d["Sorting and Comparing"] = "Sorting and Comparing" d["Geometry"] = "Geometry and Shape Recognition" d["Art"] = "Art and Colour" d["Memory"] = "Memory" d["Games & Mazes"] = "Games & Mazes" d["Multiplayer"] = "Multiplayer Games" #games d["About."] = "About." d["Game info..."] = "Game info..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] = "Hit the Mole" d["Letters"] = "Letters" d["Letter Flashcards"] = "Learn Letters with Flashcards" d["Learn to Write"] = "Learn to Write" d["Trace Letters"] = "Trace Letters and Numbers" d["Complete the ABC"] = "Complete the ABC" d["English"] = "English" d["in your language"] = "Italian" d["Sorting Letters"] = "Sorting Letters" d["Lowercase Letters"] = "Lowercase Letters" d["Uppercase Letters"] = "Uppercase Letters" d["Word Builder"] = "Word Builder" d["Word Maze"] = "Word Maze" d["Collect all"] = "Collect all letters in the right order" d["Word Maze + 4"] = "Word Maze + 4" d["Numbers"] = "Numbers" d["Number Flashcards"] = "Learn Numbers with Flashcards" d["Learn to Count"] = "Learn to Count" d["Basic Addition"] = "Basic Addition" d["Basic Subtraction"] = "Basic Subtraction" d["Shopping List"] = "Shopping List" d["Plus or Minus"] = "Plus or Minus" d["Basic Operations"] = "Basic Operations" d["Multiplication Table"] = "Multiplication Table" d["Find the product"] = "Find the product" d["Find the multiplier"] = "Find the multiplier" d["Division"] = "Division" d["Sorting Numbers"] = "Sorting Numbers" d["Number Comparison"] = "Number Comparison" d["Addition & Subtraction"] = "Addition & Subtraction" d["Comparison"] = "Comparison" d["Fractions"] = "Fractions" d["Decimal Fractions"] = "Decimal Fractions" d["Even or Odd"] = "Even or Odd" d["Shapes"] = "Shapes" d["Shape Flashcards"] = "Learn Shapes with Flashcards" d["Solids"] = "Solids" d["Solid Flashcards"] = "Solid Geometry with Flashcards" d["Shape Matching"] = "Shape Matching" d["help me find my shadow"] = "help me find my shadow" d["Paint"] = "Paint" d["Colour Matching"] = "Colour Matching" d["label the colours"] = "label the colours" d["Follow the Arrows"] = "Follow the Arrows" d["remember the directions"] = "remember the directions" d["Photographic Memory"] = "Photographic Memory" d["Training"] = "Training" d["Photographic Memory"] = "Photographic Memory" d["Automatic Levels"] = "Automatic Levels" d["Mouse Maze"] = "Mouse Maze" d["Let's have some cheese"] = "Let's have some cheese" d["Sheep Maze"] = "Sheep Maze" d["Find the rest"] = "Find the rest of the herd" d["Connect"] = "Connect" d["Balloons with threads"] = "Balloons with threads" d["Fifteen"] = "Fifteen" d["With a Twist"] = "With a Twist" #game instructions d["Drag the slider"] = "Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Take your sheep to the rest of the herd." d["Check the shopping list"] = "Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Complete the abc using the letters above." d["Write a word:"] = "Write a word:" d["Find and separate"] = "Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Please try again." d["Sorry! It is wrong."] = "Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfect! Task solved!" d["work harder"] = "You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Game Over!" d["Congratulations! Game Completed."] = "Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Great job!","Perfect!","Awesome!","Super!","Well done!"] d["Perfect! Level completed!"] = "Perfect! Level completed!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimeter:" d["surface area:"] = "surface area:" d["volume:"] = "volume:" d["Perfect!"] = "Perfect!" d["divided by"] = "divided by" d["multiplied by"] = "times" d["equals"] = "equals" d["Shopping List"] = "Shopping List" d["Even"] = "Even" d["Odd"] = "Odd" d["white"]="white" d["black"]="black" d["grey"]="grey" d["red"]="red" d["orange"]="orange" d["yellow"]="yellow" d["olive"]="olive" d["green"]="green" d["sea green"]="sea green" d["teal"]="teal" d["blue"]="blue" d["navy"]="navy" d["purple"]="purple" d["violet"]="violet" d["magenta"]="magenta" d["indigo"]="indigo" d["pink"]="pink" d["maroon"] = "maroon" d["brown"] = "brown" d["aqua"] = "aqua" d["lime"] = "lime" #new d["Keyboard Skills"] = "Rainbow Keyboard" d["Touch Typing"] = "Touch Typing Tutor" d["Translators"] = "Translators" d["English Alphabet"] = "English Alphabet" d["Your Alphabet"] = "Italian Alphabet" #new in 0.3.0 d["Paint Mixer"] = "Mixing Colours for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Colour Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Find the colour of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "quadrilateral" d["trapezium"] = "Trapezium" d["u_trapezium"] = "Trapezium" d["triangle"] = "Triangle" d["squished_quadi"] = "Ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Right isosceles triangle" d["obtuse_iso_tria"] = "Obtuse isosceles triangle" d["acute_iso_tria"] = "Acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Click again to exit" d["answer_enter"] = "Type your answer and hit enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result"pysiogame-1.30.811/languages/__init__.py0000644000175000017500000000003012201770057017021 0ustar tigertiger# -*- coding: utf-8 -*- pysiogame-1.30.811/languages/verifykeys.py0000775000175000017500000000151312201770057017476 0ustar tigertiger""" A helper program to add new keys to all language files at once. """ import os, sys import inspect def where_am_I(): pass a = os.path.split(os.path.abspath(inspect.getsourcefile(where_am_I)))[0] os.chdir(a) #list of language files langs = ["en_gb.py", "en_us.py", "pl.py", "gr.py", "es.py","pt.py","fr.py","it.py","de.py","ru.py","fi.py"] argv = sys.argv if len(argv) == 3: l1 = argv[1] l2 = argv[1] else: print("Enter first module name:") l1 = raw_input() l1m = __import__(l1) print("Enter second module name:") l2 = raw_input() l2m = __import__(l2) if len(l1) > 1 and len(l2) > 1 and l1 not in ["exit", "exit()", "cancel", "cancel()"]: d1 = l1m.d d2 = l2m.d for each in d1: if each not in d2: print each print("Completed...") else: print("Aborting...") pysiogame-1.30.811/languages/pt_prev2.py0000664000175000017500000005545512201770057017052 0ustar tigertiger# -*- coding: utf-8 -*- # traduzido para português da europa por Américo Monteiro (a_monteiro@gmx.com) #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists #shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] shape_names = ["Triângulo Equilátero", "Triângulo Isósceles", "Triângulo Obtuso", "Triângulo Rectângulo", "Triângulo Agudo", "Quadrado", "Rectângulo", "Trapézio Rectângulo", "Trapézio Isósceles", "Losango", "Paralelograma", "Pentágono", "Hexágono", "Círculo", "Elipse"] #solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] solid_names = ["Cubo", "Prisma Quadrado", "Prisma Triangular", "Pirâmide Quadrada", "Pirâmide Triangular", "Esfera", "Cilindro", "Cone", "Toro"] #numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'] #numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] numbers = ['um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove', 'dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezasseis', 'dezassete', 'dezoito', 'dezanove', 'vinte', 'vinte e um', 'vinte e dois', 'vinte e três', 'vinte e quatro', 'vinte e cinco', 'vinte e seis', 'vinte e sete', 'vinte e oito', 'vinte e nove'] numbers2090 = ['vinte','trinta','quarenta','cinquenta','sessenta','setenta','oitenta','noventa'] d['abc_flashcards_word_sequence'] = ['Abeto', 'Barco', 'Casa', 'Dormir','Elefante', 'Formiga', 'Girafa', 'Hipopótamo','Iglu', 'Janela','Koala', 'Leão', 'Maçã', 'Narciso-amarelo', 'Ouriço', 'Peixe', 'Queijo', 'Rainha', 'Sol', 'Tomate', 'Uvas', 'Violino', 'Windsurf', 'Xilofone', 'Y', 'Zebra'] d['abc_flashcards_frame_sequence'] = [31,1,7, 49,4,0,30, 47,8,22, 72,11,42, 69,29,5, 57,16,18,33,6,21, 66,23, 43,25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. #d["hours_a"] = numbers[0:12] d["hours_a"] = ['uma hora', 'duas horas', 'três horas', 'quatro horas', 'cinco horas', 'seis horas', 'sete horas', 'oito horas', 'nove horas', 'dez horas', 'onze horas', 'doze horas'] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "um minuto para %s" d["time_string_one_past"] = "%s e um minuto" #d["time_string_to_mh"] = "%s para %s" #ie. five to four #d["time_string_past_mh"] = "%s depois das %s" #ie. five past four #d["time_string_to_hm"] = "%s menos %s" #ie. 3:55 = four o'clock in five #d["time_string_past_hm"] = "%s e %s" #ie. 4:05 = four and five minutes d["time_string_to_mh"] = "%s para %s" #ie. five to four d["time_string_past_mh"] = "" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "%s e %s" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "%s e meia" #ie. half past three d["time_string_q_to"] = "um quarto para %s" d["time_string_q_past"] = "%s e um quarto" d["time_string_full"] = "%s em ponto" fruit = ["maçã verde", "maçã vermelha", "morango", "pêra", "laranja", "cebola", "tomate", "limão", "cereja", "pimentão", "cenoura", "banana", "melancia"] fruits_1 = ["maçãs verdes", "maçãs vermelhas", "morangos", "pêras", "laranjas", "cebolas", "tomates", "limões", "cerejas", "pimentões", "cenouras", "bananas", "melancias"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet - pt - "abcdefghijlmnopqrstuvxz" alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['á','â','ã','à','ç','é','ê','í','ó','ô','õ','ú','-'] accents_uc = ['Á','Â','Ã','À','Ç','É','Ê','Í','Ó','Ô','Õ','Ú'] #game start d["Hello"] = "Olá" d["Welcome back."] = "Bem vindo de volta ao jogo." #settings d["Preferences"] = "Preferências" d["Language"] = "Linguagem" d["Reader"] = "eSpeak" d["Read Instructions"] = "Ler as Instruções no inicio dos jogos" #menu categories d["Info Category"] = "Informação & Definições" d["Keyboard & Mouse"] = "Teclado & Rato" d["Discover Letters"] = "Descobrir Letras" d["Learn Words"] = "Aprender Palavras Novas" d["Maths"] = "Matemáticas" d["Numbers & Basic Operations"] = "Números & Operações Básicas" d["Basic Operations - exercises"] = "Operações Básicas - Exercícios" d["Sorting and Comparing"] = "Organizar e Comparar" d["Geometry"] = "Geometria e Reconhecimento de Formas" d["Art"] = "Arte e Cor" d["Memory"] = "Memória" d["Games & Mazes"] = "Jogos & Labirintos" d["Multiplayer"] = "Jogos de Vários Jogadores" #games d["About."] = "Sobre." d["Game info..."] = "Informação do Jogo..." d["Credits"] = "Copyright & Créditos" d["Hit the Mole"] = "Acerta no Alvo" d["Letters"] = "Letras" d["Letter Flashcards"] = "Aprende Letras com Cartas" d["Learn to Write"] = "Aprende a Escrever" d["Trace Letters"] = "Traça Letras e Números" d["Complete the ABC"] = "Completa o ABC" d["English"] = "Inglês" d["in your language"] = "Português" d["Sorting Letters"] = "Ordenar Letras" d["Lowercase Letters"] = "Letras Minúsculas" d["Uppercase Letters"] = "Letras Maiúsculas" d["Word Builder"] = "Compositor de Palavras" d["Word Maze"] = "Labirinto de Palavras" d["Collect all"] = "Recolhe todas as letras na ordem certa" d["Word Maze + 4"] = "Labirinto de Palavras + 4" d["Numbers"] = "Números" d["Number Flashcards"] = "Aprende Números com Cartas" d["Learn to Count"] = "Aprende a Contar" d["Basic Addition"] = "Adição Básica" d["Basic Subtraction"] = "Subtração Básica" d["Shopping List"] = "lista de Compras" d["Plus or Minus"] = "Mais ou Menos" d["Basic Operations"] = "Operações Básicas" d["Multiplication Table"] = "Tabela de Multiplicação" d["Find the product"] = "Encontra o produto" d["Find the multiplier"] = "Encontra o multiplicador" d["Division"] = "Divisão" d["Sorting Numbers"] = "Ordenar Números" d["Number Comparison"] = "Comparação de Números" d["Addition & Subtraction"] = "Adição & Subtração" d["Comparison"] = "Comparação" d["Fractions"] = "Frações" d["Decimal Fractions"] = "Frações Decimais" d["Even or Odd"] = "Par ou Ímpar" d["Shapes"] = "Formas" d["Shape Flashcards"] = "Aprende Formas com Cartas" d["Solids"] = "Sólidos" d["Solid Flashcards"] = "Geometrias Sólidas com Cartas" d["Shape Matching"] = "Correspondência de Formas" d["help me find my shadow"] = "ajuda-me a encontrar a minha sombra" d["Paint"] = "Pintura" d["Colour Matching"] = "Correspondência de Cores" d["label the colours"] = "nomeia as cores" d["Follow the Arrows"] = "Segue as Setas" d["remember the directions"] = "lembra as direções" d["Photographic Memory"] = "Memória Fotográfica" d["Training"] = "Treinar" d["Photographic Memory"] = "Memória Fotográfica" d["Automatic Levels"] = "Níveis Automáticos" d["Mouse Maze"] = "Labirinto do Rato" d["Let's have some cheese"] = "Vamos apanhar o queijo" d["Sheep Maze"] = "Labirinto da Ovelha" d["Find the rest"] = "Encontra o resto do rebanho" d["Connect"] = "Liga" d["Balloons with threads"] = "Balões com tópicos" d["Fifteen"] = "Quinze" d["With a Twist"] = "Com um Torcer" #game instructions d["Drag the slider"] = ["Arrasta o botão para cima ou para baixo","para que o sinal certo fique no quadrado vermelho"] #"Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Leva a tua ovelha para o resto do rebanho." #"Take your sheep to the rest of the herd." d["Check the shopping list"] = "Consulta a lista de compras e arrasta todas as coisas que precisas para o cesto" #"Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Arrasta um dos <, > ou = (menor, maior ou igual) para o quadrado vermelho." #"Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Arrasta um dos menor, maior ou igual para o quadrado vermelho." #"Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Organiza os números em cima para que fiquem na ordem certa." #"Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Completa o abecedário usando as letras em cima." #"Complete the abc using the letters above." d["Write a word:"] = "Escreve uma palavra." #"Write a word:" d["Find and separate"] = "Encontra e separa os Números Pares dos Ímpares nas séries em cima." #"Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Organiza as letras em cima para que fiquem em ordem alfabética" #"Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Organiza os números em cima para que fiquem em ordem crescente." #"Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Por favor tenta outra vez." #"Please try again." d["Sorry! It is wrong."] = "Desculpa mas está errado." #"Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfeito! Tarefa resolvida!" #"Perfect! Task solved!" d["work harder"] = "Precisas de te esforçar um pouco mais na próxima vez." #"You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Fim de Jogo!" #"Game Over!" d["Congratulations! Game Completed."] = "Parabéns! Conseguiste completar todas as tarefas deste jogo." #"Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Bom trabalho!","Perfeito!","Maravilhoso!","Super!","Muito Bem!"] #["Great job!","Perfect!","Awesome!","Super!","Well done!"] d["Perfect! Level completed!"] = "Perfeito! Nível completo!" #"Perfect! Level completed!" #game specific labels: d["area:"] = "área:" d["perimeter:"] = "perímetro:" d["surface area:"] = "área de superfície:" d["volume:"] = "volume:" d["Perfect!"] = "Perfeito!" d["divided by"] = "a dividir por" d["multiplied by"] = "vezes" d["equals"] = "igual" d["Shopping List"] = "Lista de Compras" d["Even"] = "Par" d["Odd"] = "Ímpar" d["white"]="branco" d["black"]="preto" d["grey"]="cinzento" d["red"]="vermelho" d["orange"]="laranja" d["yellow"]="amarelo" d["olive"]="verde azeitona" d["green"]="verde" d["sea green"]="verde mar" d["teal"]="azul petróleo" d["blue"]="azul" d["navy"]="azul marinha" d["purple"]="púrpura" d["violet"]="violeta" d["magenta"]="magenta" d["indigo"]="índigo" d["pink"]="rosa" d["maroon"] = ["castanho-","avermelhado"] d["brown"] = "castanho" d["aqua"] = "azul ciano" d["lime"] = "lima" #new d["Keyboard Skills"] = "Teclado Arco-Iris" #"Rainbow Keyboard" d["Touch Typing"] = "Instrutor de Escrita em Teclado" #"Touch Typing Tutor" d["Translators"] = "Tradutores" #"Translators" d["English Alphabet"] = "Alfabeto Inglês" #"English Alphabet" d["Your Alphabet"] = "Alfabeto Português" #"Portuguese Alphabet" #new in 0.3.0 d["Paint Mixer"] = "Misturar Cores para Pintar" #"Mixing Colours for Painting" d["Mixing RYB"] = "Mistura tintas vermelha, amarela, azul, preta e branca" #"Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Mistura de Cores Aditiva - Cores Claras" #"Additive Colour Mixing - Light" d["Mixing RGB"] = "Mistura cores vermelha, verde e azul claras para obter outras cores" #"Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Mistura de Cores Subtractiva - Bases e Corantes" #"Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mistura ciano, magenta e amarelo para obter outras cores" #"Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Encontra a cor do círculo" #"Find the colour of the circle" d["Adjust CMY"] = "Ajusta a quantidade de tinta ciano, magenta e amarelo" #"Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Ajusta a intencidade do vermelho, verde e azul claros" #"Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "mais" d["less color"] = "menos" d["color is ok"] = "está certo" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["vermelho","vermelho"] d["of green"] = ["verde","verde"] d["of blue"] = ["azul","azul"] d["of cyan"] = ["ciano","ciano"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["amarelo","amarelo"] #new in 0.3.1 d["brush size"] = "tamanho do pincel" #new in 0.3.2 d["TicTacToe2"] = "Jogo do Galo 2" #"Tic Tac Toe 2" d["TicTacToe3"] = "Jogo do Galo 3" #"Tic Tac Toe 3" d["multiline-tictactoe"] = "Obtém o máximo possível de 3 linhas para vencer" #"Get as many lines of 3 as possible to win" d["Player"] = "Jogador" d["Won"] = "Venceu" d["Game Draw"] = "Empate" d["UserName"] = "Nome de Utilizador" d["Match Animals Memory"] = "Animais que Correspondem" d["Match Fruits"] = "Frutas que Correspondem" d["Match Vegetables"] = "Vegetais que Correspondem" d["Match Numbers"] = "Números que Correspondem" d["Find pairs"] = "Encontra pares correspondentes da mesma imagem" #"Find matching pairs of the same image" d["Sliced Images"] = "Imagems Fatiadas" #"Sliced Images" d["Sliced Animals"] = "Animais" d["Sliced Fruits"] = "Frutas" d["Sliced Numbers"] = "Números" d["Fraction Groups"] = "Grupos de Frações" d["Percentages"] = "Percentagens" d["Ratios"] = "Rácios" d["Fract instr0"] = "Corresponde os mapas de frações da direita com os da esquerda" #"Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Corresponde os mapas de frações e as frações da direita","com os mapas de frações da esquerda"] #["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Corresponde os mapas de frações com as frações da esquera" #"Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Corresponde os mapas de frações, frações e frações decimais da direita","com as suas representações de percentagem"] #["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Corresponde os mapas com os rácios da esquerda","Os rácios são expressados como relação das peças coloridas para as peças brancas"] #["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Jogo de Correspondências Matemáticas" #"Maths Matching Game" d["Addition"] = "Adição" d["Subtraction"] = "Subtração" d["Multiplication"] = "Multiplicação" d["Division"] = "Divisão" d["Check for newer version..."] = ["Verifique novas versões, reporte erros, discuta, traduza ou reveja este projecto em:"] #["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Corresponder números com a sua ortografia" #"Match numbers to their spelling" d["Number Spelling"] = "Ortografia de Números" #"Number Spelling" d["Match Animals"] = "Correspondência de Animais" #"Match Animals" d["Find all matching animals"] = "Encontra todos os animais correspondentes" #"Find all matching animals" d["Match animals to their shadows"] = "Corresponde os animais com as suas sombras" #"Match animals to their shadows" d["ShapeMaker"] = "Gerador de Formas" #"Shape Maker" d["draw_instr1"] = "Forma a desenhar: %s" d["draw_instr2"] = "Forma a desenhar: %s de modo que " #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "os comprimentos das suas bases sejam iguais a %d e %d e a altura a %d" #"such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "os comprimentos dos seus lados sejam iguais a %d" #"such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "os comprimentos dos seus lados sejam iguais a %d e %d" #"such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "os comprimentos das suas 2 bases paralelas sejam iguais a %d e a altura igual a %d" #"such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "o comprimento seja igual a %d e a altura a %d" #"such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "os comprimentos dos catetos sejam iguais a %d e %d" #"such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "os comprimentos de ambos catetos sejam iguai a %d" #"such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "o comprimento da hipotenusa seja igual a %d" #"such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "o comprimento de um dos lados seja igual a %d e a altura igual a %d" #"such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "o comprimento do seu raio seja igual a %d" #"such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Quadrilátero" d["trapezium"] = "Trapézio" d["u_trapezium"] = "Trapézio" d["triangle"] = "Triângulo" d["squished_quadi"] = "Auuu... um quadrilátero esmagado" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Triângulo isósceles rectângulo" d["obtuse_iso_tria"] = "Triângulo isósceles obtuso" d["acute_iso_tria"] = "Triângulo isósceles agudo" d["squished_tria"] = "Auuu... triângulo esmagado" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triângulo? Bem, nem por isso..." #"Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Testa tu mesmo" d["Clock1"] = "Relógio" d["Read time"] = "aprende a ler as horas" d["Clock2"] = "Relógio" d["Set time"] = "aprende a acertar o relógio" d["Set_clock"] = "Acerta o relógio para:" d["Set_clock_instr"] = ["","Arrasta as mãos do relógio","para acertar as horas"] d["What time"] = "Que horas são?" d["close_confirm"] = "Clica outra vez para sair" d["answer_enter"] = "Escreve a tua resposta e carrega no enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Écran completo:" d["Time"] = "Horas" d["Play_w_clock"] = "Roda as mãos do relógio para veres o que acontece." d["lets_see_what_you_draw"] = "Vamos ver que formas consegues desenhar" #"Let's see what shapes you can draw" d["txt_only"] = "Horas apenas na versão de texto" #"Time in text version only" d["Clock0"] = "Como é que funciona o relógio?" #"How clock works?" d["Columnar addition"] = "Adição colunar" #"Columnar addition" d["Columnar subtraction"] = "Subtração colunar" #"Columnar subtraction" d["Long multiplication"] = "Multiplicação longa" #"Long multiplication" d["Long division"] = "Divisão longa" #"Long division" d["borrow 10"] = "pede 10" #"borrow 10" d["carry"] = "transporta" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Começar >>" d["demo next eg"] = "Próximo exemplo >>" d["demo next step"] = "Próximo passo >>" d["demo write"] = "escreve " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstração" d["DIY"] = "Faz tu mesmo" d["Ratio"] = "Rácio" d["Working with large numbers"] = "Trabalhar com números grandes" #"Working with large numbers" d["demo rewrite"] = "re-escrever " d["remainder"] = "restante" d["demo_result"] = "resultado"pysiogame-1.30.811/languages/pt_prev.py0000644000175000017500000004056212201770057016757 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'] numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" d["time_string_one_past"] = "one minute past %s" d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_full"] = "%s o'clock" fruit = ["green apple", "red apple", "strawberry", "pear", "orange", "onion", "tomato", "lemon", "cherry", "pepper", "carrot", "banana", "watermelon"] fruits_1 = ["green apples", "red apples", "strawberries", "pears", "oranges", "onions", "tomatoes", "lemons", "cherries", "peppers", "carrots", "bananas", "watermelons"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet - pt - "abcdefghijlmnopqrstuvxz" alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['á','â','ã','à','ç','é','ê','í','ó','ô','õ','ú','-'] accents_uc = ['Á','Â','Ã','À','Ç','É','Ê','Í','Ó','Ô','Õ','Ú'] #game start d["Hello"] = "Hello" d["Welcome back."] = "Welcome back in the game." #settings d["Preferences"] = "Preferences" d["Language"] = "Language" d["Reader"] = "eSpeak" d["Read Instructions"] = "Read Instructions at the start of games" #menu categories d["Info Category"] = "Info & Settings" d["Keyboard & Mouse"] = "Keyboard & Mouse" d["Discover Letters"] = "Discover Letters" d["Learn Words"] = "Learn New Words" d["Maths"] = "Mathematics" d["Numbers & Basic Operations"] = "Numbers & Basic Operations" d["Basic Operations - exercises"] = "Basic Operations - Exercises" d["Sorting and Comparing"] = "Sorting and Comparing" d["Geometry"] = "Geometry and Shape Recognition" d["Art"] = "Art and Colour" d["Memory"] = "Memory" d["Games & Mazes"] = "Games & Mazes" d["Multiplayer"] = "Multiplayer Games" #games d["About."] = "About." d["Game info..."] = "Game info..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] = "Hit the Mole" d["Letters"] = "Letters" d["Letter Flashcards"] = "Learn Letters with Flashcards" d["Learn to Write"] = "Learn to Write" d["Trace Letters"] = "Trace Letters and Numbers" d["Complete the ABC"] = "Complete the ABC" d["English"] = "English" d["in your language"] = "Portuguese" d["Sorting Letters"] = "Sorting Letters" d["Lowercase Letters"] = "Lowercase Letters" d["Uppercase Letters"] = "Uppercase Letters" d["Word Builder"] = "Word Builder" d["Word Maze"] = "Word Maze" d["Collect all"] = "Collect all letters in the right order" d["Word Maze + 4"] = "Word Maze + 4" d["Numbers"] = "Numbers" d["Number Flashcards"] = "Learn Numbers with Flashcards" d["Learn to Count"] = "Learn to Count" d["Basic Addition"] = "Basic Addition" d["Basic Subtraction"] = "Basic Subtraction" d["Shopping List"] = "Shopping List" d["Plus or Minus"] = "Plus or Minus" d["Basic Operations"] = "Basic Operations" d["Multiplication Table"] = "Multiplication Table" d["Find the product"] = "Find the product" d["Find the multiplier"] = "Find the multiplier" d["Division"] = "Division" d["Sorting Numbers"] = "Sorting Numbers" d["Number Comparison"] = "Number Comparison" d["Addition & Subtraction"] = "Addition & Subtraction" d["Comparison"] = "Comparison" d["Fractions"] = "Fractions" d["Decimal Fractions"] = "Decimal Fractions" d["Even or Odd"] = "Even or Odd" d["Shapes"] = "Shapes" d["Shape Flashcards"] = "Learn Shapes with Flashcards" d["Solids"] = "Solids" d["Solid Flashcards"] = "Solid Geometry with Flashcards" d["Shape Matching"] = "Shape Matching" d["help me find my shadow"] = "help me find my shadow" d["Paint"] = "Paint" d["Colour Matching"] = "Colour Matching" d["label the colours"] = "label the colours" d["Follow the Arrows"] = "Follow the Arrows" d["remember the directions"] = "remember the directions" d["Photographic Memory"] = "Photographic Memory" d["Training"] = "Training" d["Photographic Memory"] = "Photographic Memory" d["Automatic Levels"] = "Automatic Levels" d["Mouse Maze"] = "Mouse Maze" d["Let's have some cheese"] = "Let's have some cheese" d["Sheep Maze"] = "Sheep Maze" d["Find the rest"] = "Find the rest of the herd" d["Connect"] = "Connect" d["Balloons with threads"] = "Balloons with threads" d["Fifteen"] = "Fifteen" d["With a Twist"] = "With a Twist" #game instructions d["Drag the slider"] = "Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Take your sheep to the rest of the herd." d["Check the shopping list"] = "Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Complete the abc using the letters above." d["Write a word:"] = "Write a word:" d["Find and separate"] = "Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Please try again." d["Sorry! It is wrong."] = "Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfect! Task solved!" d["work harder"] = "You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Game Over!" d["Congratulations! Game Completed."] = "Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Great job!","Perfect!","Awesome!","Super!","Well done!"] d["Perfect! Level completed!"] = "Perfect! Level completed!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimeter:" d["surface area:"] = "surface area:" d["volume:"] = "volume:" d["Perfect!"] = "Perfect!" d["divided by"] = "divided by" d["multiplied by"] = "times" d["equals"] = "equals" d["Shopping List"] = "Shopping List" d["Even"] = "Even" d["Odd"] = "Odd" d["white"]="white" d["black"]="black" d["grey"]="grey" d["red"]="red" d["orange"]="orange" d["yellow"]="yellow" d["olive"]="olive" d["green"]="green" d["sea green"]="sea green" d["teal"]="teal" d["blue"]="blue" d["navy"]="navy" d["purple"]="purple" d["violet"]="violet" d["magenta"]="magenta" d["indigo"]="indigo" d["pink"]="pink" d["maroon"] = "maroon" d["brown"] = "brown" d["aqua"] = "aqua" d["lime"] = "lime" #new d["Keyboard Skills"] = "Rainbow Keyboard" d["Touch Typing"] = "Touch Typing Tutor" d["Translators"] = "Translators" d["English Alphabet"] = "English Alphabet" d["Your Alphabet"] = "Portuguese Alphabet" #new in 0.3.0 d["Paint Mixer"] = "Mixing Colours for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Colour Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Find the colour of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Quadrilateral" d["trapezium"] = "Trapezium" d["u_trapezium"] = "Trapezium" d["triangle"] = "Triangle" d["squished_quadi"] = "Ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Right isosceles triangle" d["obtuse_iso_tria"] = "Obtuse isosceles triangle" d["acute_iso_tria"] = "Acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Click again to exit" d["answer_enter"] = "Type your answer and hit enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result"pysiogame-1.30.811/languages/fr.py0000644000175000017500000004404712201770057015711 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'] numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens, ones] else: return tens + " " + ones return "" d['abc_flashcards_word_sequence'] = ['Arbre','Bateau', 'Canard','Dormir', 'Éléphant', 'Fleurs', 'Girafe', 'Hibou', 'Iglou', 'Jonquille','Koala','Lion', 'Maison', 'Nuitée','Océan','Pomme', 'Quille', 'Raisin', 'Soleil', 'Tomate', 'Univers', 'Violon', 'Wagon', 'Xylophone', 'Yoga', 'Zèbre'] d['abc_flashcards_frame_sequence'] = [31,1,3, 49,4,36,30,14,8, 69,72,11,7, 54,52,42, 64,6,18,33, 55,21, 58,23,32,25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" #if you never use the to the hour form leave this blank d["time_string_one_past"] = "one minute past %s" #pick either mh or hm version, or leave these 4 blank if you don't use to the hour form: mh means that number of minutes will appear first in the sentence followed by the number of hours, the hm is the opposite. d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three or "thirty past %s" if that sounds better d["time_string_full"] = "%s o'clock" fruit = ["green apple", "red apple", "strawberry", "pear", "orange", "onion", "tomato", "lemon", "cherry", "pepper", "carrot", "banana", "watermelon"] fruits_1 = ["green apples", "red apples", "strawberries", "pears", "oranges", "onions", "tomatoes", "lemons", "cherries", "peppers", "carrots", "bananas", "watermelons"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet - fr - "aàâæbcçdeéèêëfghiîïjklmnoôœpqrstuùûüvwxyÿz" alphabet_lc = ['a', 'à', 'â', 'æ', 'b', 'c', 'ç', 'd', 'e', 'é', 'è', 'ê', 'ë', 'f', 'g', 'h', 'i', 'î', 'ï', 'j', 'k', 'l', 'm', 'n', 'o', 'ô', 'œ', 'p', 'q', 'r', 's', 't', 'u', 'ù', 'û', 'ü', 'v', 'w', 'x', 'y', 'ÿ', 'z'] alphabet_uc = ['A', 'À', 'Â', 'Æ', 'B', 'C', 'Ç', 'D', 'E', 'É', 'È', 'Ê', 'Ë', 'F', 'G', 'H', 'I', 'Î', 'Ï', 'J', 'K', 'L', 'M', 'N', 'O', 'Ô', 'Œ', 'P', 'Q', 'R', 'S', 'T', 'U', 'Ù', 'Û', 'Ü', 'V', 'W', 'X', 'Y', 'Ÿ', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['-'] accents_uc = [] #game start d["Hello"] = "Hello" d["Welcome back."] = "Welcome back in the game." #settings d["Preferences"] = "Preferences" d["Language"] = "Language" d["Reader"] = "eSpeak" d["Read Instructions"] = "Read Instructions at the start of games" #menu categories d["Info Category"] = "Info & Settings" d["Keyboard & Mouse"] = "Keyboard & Mouse" d["Discover Letters"] = "Discover Letters" d["Learn Words"] = "Learn New Words" d["Maths"] = "Mathematics" d["Numbers & Basic Operations"] = "Numbers & Basic Operations" d["Basic Operations - exercises"] = "Basic Operations - Exercises" d["Sorting and Comparing"] = "Sorting and Comparing" d["Geometry"] = "Geometry and Shape Recognition" d["Art"] = "Art and Colour" d["Memory"] = "Memory" d["Games & Mazes"] = "Games & Mazes" d["Multiplayer"] = "Multiplayer Games" #games d["About."] = "About." d["Game info..."] = "Game info..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] = "Hit the Mole" d["Letters"] = "Letters" d["Letter Flashcards"] = "Learn Letters with Flashcards" d["Learn to Write"] = "Learn to Write" d["Trace Letters"] = "Trace Letters and Numbers" d["Complete the ABC"] = "Complete the ABC" d["English"] = "English" d["in your language"] = "French" d["Sorting Letters"] = "Sorting Letters" d["Lowercase Letters"] = "Lowercase Letters" d["Uppercase Letters"] = "Uppercase Letters" d["Word Builder"] = "Word Builder" d["Word Maze"] = "Word Maze" d["Collect all"] = "Collect all letters in the right order" d["Word Maze + 4"] = "Word Maze + 4" d["Numbers"] = "Numbers" d["Number Flashcards"] = "Learn Numbers with Flashcards" d["Learn to Count"] = "Learn to Count" d["Basic Addition"] = "Basic Addition" d["Basic Subtraction"] = "Basic Subtraction" d["Shopping List"] = "Shopping List" d["Plus or Minus"] = "Plus or Minus" d["Basic Operations"] = "Basic Operations" d["Multiplication Table"] = "Multiplication Table" d["Find the product"] = "Find the product" d["Find the multiplier"] = "Find the multiplier" d["Division"] = "Division" d["Sorting Numbers"] = "Sorting Numbers" d["Number Comparison"] = "Number Comparison" d["Addition & Subtraction"] = "Addition & Subtraction" d["Comparison"] = "Comparison" d["Fractions"] = "Fractions" d["Decimal Fractions"] = "Decimal Fractions" d["Even or Odd"] = "Even or Odd" d["Shapes"] = "Shapes" d["Shape Flashcards"] = "Learn Shapes with Flashcards" d["Solids"] = "Solids" d["Solid Flashcards"] = "Solid Geometry with Flashcards" d["Shape Matching"] = "Shape Matching" d["help me find my shadow"] = "help me find my shadow" d["Paint"] = "Paint" d["Colour Matching"] = "Colour Matching" d["label the colours"] = "label the colours" d["Follow the Arrows"] = "Follow the Arrows" d["remember the directions"] = "remember the directions" d["Photographic Memory"] = "Photographic Memory" d["Training"] = "Training" d["Photographic Memory"] = "Photographic Memory" d["Automatic Levels"] = "Automatic Levels" d["Mouse Maze"] = "Mouse Maze" d["Let's have some cheese"] = "Let's have some cheese" d["Sheep Maze"] = "Sheep Maze" d["Find the rest"] = "Find the rest of the herd" d["Connect"] = "Connect" d["Balloons with threads"] = "Balloons with threads" d["Fifteen"] = "Fifteen" d["With a Twist"] = "With a Twist" #game instructions d["Drag the slider"] = "Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Take your sheep to the rest of the herd." d["Check the shopping list"] = "Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Complete the abc using the letters above." d["Write a word:"] = "Write a word:" d["Find and separate"] = "Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Please try again." d["Sorry! It is wrong."] = "Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfect! Task solved!" d["work harder"] = "You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Game Over!" d["Congratulations! Game Completed."] = "Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Great job!","Perfect!","Awesome!","Super!","Well done!"] d["Perfect! Level completed!"] = "Perfect! Level completed!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimeter:" d["surface area:"] = "surface area:" d["volume:"] = "volume:" d["Perfect!"] = "Perfect!" d["divided by"] = "divided by" d["multiplied by"] = "times" d["equals"] = "equals" d["Shopping List"] = "Shopping List" d["Even"] = "Even" d["Odd"] = "Odd" d["white"]="white" d["black"]="black" d["grey"]="grey" d["red"]="red" d["orange"]="orange" d["yellow"]="yellow" d["olive"]="olive" d["green"]="green" d["sea green"]="sea green" d["teal"]="teal" d["blue"]="blue" d["navy"]="navy" d["purple"]="purple" d["violet"]="violet" d["magenta"]="magenta" d["indigo"]="indigo" d["pink"]="pink" d["maroon"] = "maroon" d["brown"] = "brown" d["aqua"] = "aqua" d["lime"] = "lime" #new d["Keyboard Skills"] = "Rainbow Keyboard" d["Touch Typing"] = "Touch Typing Tutor" d["Translators"] = "Translators" d["English Alphabet"] = "English Alphabet" d["Your Alphabet"] = "French Alphabet" #new in 0.3.0 d["Paint Mixer"] = "Mixing Colours for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Colour Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Find the colour of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "quadrilateral" d["trapezium"] = "trapezium" d["u_trapezium"] = "trapezium" d["triangle"] = "triangle" d["squished_quadi"] = "Ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "right isosceles triangle" d["obtuse_iso_tria"] = "obtuse isosceles triangle" d["acute_iso_tria"] = "acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Click again to exit" d["answer_enter"] = "Type your answer and hit enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result" d["TimeMatching"] = "Time Matching"pysiogame-1.30.811/languages/en_us.py0000644000175000017500000004444012201770057016410 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The color names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezoid", "Isosceles Trapezoid", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'] numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens, ones] else: return tens + " " + ones return "" #The following 2 lines are not to be translated but replaced with a sequence of words starting in each of the letters of your alphabet in order, best if these words have a corresponding picture in images/flashcard_images.jpg. The second line has the number of the image that the word describes. #The images are numbered from left to bottom such that the top left is numbered 0, the last image is 73, if none of the available things have names that start with any of the letters we can add new pictures. d['abc_flashcards_word_sequence'] = ['Apple', 'Butterfly', 'Cat', 'Dolphin', 'Elephant', 'Fortepiano', 'Guitar', 'Hedgehog', 'Igloo', 'Jar', 'Koala', 'Lion', 'Monitor', 'Notebook', 'Ocean', 'Parrot', 'Queen', 'Rabbit', 'Street', 'Tomato', 'Umbrella', 'Violin', 'Watermelon', 'Xylophone', 'Yarn', 'Zebra'] d['abc_flashcards_frame_sequence'] = [42, 27, 2, 59, 4, 34, 28, 29, 8, 9, 72, 11, 40, 13, 52, 15, 16, 17, 53, 33, 20, 21, 26, 23, 24, 25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" #if you never use the to the hour form leave this blank d["time_string_one_past"] = "one minute past %s" #pick either mh or hm version, or leave these 4 blank if you don't use to the hour form: mh means that number of minutes will appear first in the sentence followed by the number of hours, the hm is the opposite. d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three or "thirty past %s" if that sounds better d["time_string_full"] = "%s o'clock" fruit = ["green apple", "red apple", "strawberry", "pear", "orange", "onion", "tomato", "lemon", "cherry", "pepper", "carrot", "banana", "watermelon"] fruits_1 = ["green apples", "red apples", "strawberries", "pears", "oranges", "onions", "tomatoes", "lemons", "cherries", "peppers", "carrots", "bananas", "watermelons"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet en alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['-'] accents_uc = [] #game start d["Hello"] = "Hello" d["Welcome back."] = "Welcome back in the game." #settings d["Preferences"] = "Preferences" d["Language"] = "Language" d["Reader"] = "eSpeak" d["Read Instructions"] = "Read Instructions at the start of games" #menu categories d["Info Category"] = "Info & Settings" d["Keyboard & Mouse"] = "Keyboard & Mouse" d["Discover Letters"] = "Discover Letters" d["Learn Words"] = "Learn New Words" d["Maths"] = "Mathematics" d["Numbers & Basic Operations"] = "Numbers & Basic Operations" d["Basic Operations - exercises"] = "Basic Operations - Exercises" d["Sorting and Comparing"] = "Sorting and Comparing" d["Geometry"] = "Geometry and Shape Recognition" d["Art"] = "Art and Color" d["Memory"] = "Memory" d["Games & Mazes"] = "Games & Mazes" d["Multiplayer"] = "Multiplayer Games" #games d["About."] = "About." d["Game info..."] = "Game info..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] = "Hit the Mole" d["Letters"] = "Letters" d["Letter Flashcards"] = "Learn Letters with Flashcards" d["Learn to Write"] = "Learn to Write" d["Trace Letters"] = "Trace Letters and Numbers" d["Complete the ABC"] = "Complete the ABC" d["English"] = "English" d["in your language"] = "English 2" d["Sorting Letters"] = "Sorting Letters" d["Lowercase Letters"] = "Lowercase Letters" d["Uppercase Letters"] = "Uppercase Letters" d["Word Builder"] = "Word Builder" d["Word Maze"] = "Word Maze" d["Collect all"] = "Collect all letters in the right order" d["Word Maze + 4"] = "Word Maze + 4" d["Numbers"] = "Numbers" d["Number Flashcards"] = "Learn Numbers with Flashcards" d["Learn to Count"] = "Learn to Count" d["Basic Addition"] = "Basic Addition" d["Basic Subtraction"] = "Basic Subtraction" d["Shopping List"] = "Shopping List" d["Plus or Minus"] = "Plus or Minus" d["Basic Operations"] = "Basic Operations" d["Multiplication Table"] = "Multiplication Table" d["Find the product"] = "Find the product" d["Find the multiplier"] = "Find the multiplier" d["Division"] = "Division" d["Sorting Numbers"] = "Sorting Numbers" d["Number Comparison"] = "Number Comparison" d["Addition & Subtraction"] = "Addition & Subtraction" d["Comparison"] = "Comparison" d["Fractions"] = "Fractions" d["Decimal Fractions"] = "Decimal Fractions" d["Even or Odd"] = "Even or Odd" d["Shapes"] = "Shapes" d["Shape Flashcards"] = "Learn Shapes with Flashcards" d["Solids"] = "Solids" d["Solid Flashcards"] = "Solid Geometry with Flashcards" d["Shape Matching"] = "Shape Matching" d["help me find my shadow"] = "help me find my shadow" d["Paint"] = "Paint" d["Colour Matching"] = "Color Matching" d["label the colours"] = "label the colors" d["Follow the Arrows"] = "Follow the Arrows" d["remember the directions"] = "remember the directions" d["Photographic Memory"] = "Photographic Memory" d["Training"] = "Training" d["Photographic Memory"] = "Photographic Memory" d["Automatic Levels"] = "Automatic Levels" d["Mouse Maze"] = "Mouse Maze" d["Let's have some cheese"] = "Let's have some cheese" d["Sheep Maze"] = "Sheep Maze" d["Find the rest"] = "Find the rest of the herd" d["Connect"] = "Connect" d["Balloons with threads"] = "Balloons with threads" d["Fifteen"] = "Fifteen" d["With a Twist"] = "With a Twist" #game instructions d["Drag the slider"] = "Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Take your sheep to the rest of the herd." d["Check the shopping list"] = "Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Complete the abc using the letters above." d["Write a word:"] = "Write a word:" d["Find and separate"] = "Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Please try again." d["Sorry! It is wrong."] = "Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfect! Task solved!" d["work harder"] = "You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Game Over!" d["Congratulations! Game Completed."] = "Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Great job!","Perfect!","Awesome!","Super!","Fantastic job!","Well done!"] d["Perfect! Level completed!"] = "Perfect! Level completed!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimeter:" d["surface area:"] = "surface area:" d["volume:"] = "volume:" d["Perfect!"] = "Perfect!" d["divided by"] = "divided by" d["multiplied by"] = "times" d["equals"] = "equals" d["Shopping List"] = "Shopping List" d["Even"] = "Even" d["Odd"] = "Odd" d["white"]="white" d["black"]="black" d["grey"]="gray" d["red"]="red" d["orange"]="orange" d["yellow"]="yellow" d["olive"]="olive" d["green"]="green" d["sea green"]="sea green" d["teal"]="teal" d["blue"]="blue" d["navy"]="navy" d["purple"]="purple" d["violet"]="violet" d["magenta"]="magenta" d["indigo"]="indigo" d["pink"]="pink" d["maroon"] = "maroon" d["brown"] = "brown" d["aqua"] = "aqua" d["lime"] = "lime" #new d["Keyboard Skills"] = "Rainbow Keyboard" d["Touch Typing"] = "Touch Typing Tutor" d["Translators"] = "Translators" d["English Alphabet"] = "English Alphabet" d["Your Alphabet"] = "English Alphabet 2" #new in 0.3.0 d["Paint Mixer"] = "Mixing Colors for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Color Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colors" d["Ink Mixer"] = "Subtractive Color Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colors" d["Find the colour of the circle"] = "Find the color of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Quadrilateral" d["trapezium"] = "Trapezoid" d["u_trapezium"] = "Trapezoid" d["triangle"] = "Triangle" d["squished_quadi"] = "Ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Right isosceles triangle" d["obtuse_iso_tria"] = "Obtuse isosceles triangle" d["acute_iso_tria"] = "Acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Click again to exit" d["answer_enter"] = "Type your answer and hit enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result" d["TimeMatching"] = "Time Matching"pysiogame-1.30.811/languages/ru.py0000644000175000017500000006233412201770057015727 0ustar tigertiger# -*- coding: utf-8 -*- #Translated by Anton Kayukov (Антон Каюков) #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists #shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] shape_names = ["Равносторонний треугольник", "Равнобедренный треугольник", "Тупоугольный треугольник", "Прямоугольный треугольник", "Остроугольный треугольник", "Квадрат", "Прямоугольник", "Правильная трапеция", "Равнобедренная трапеция", "Ромб", "Параллелограмм", "Пятиугольник", "Шестиугольник", "Круг", "Эллипс"] #solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] solid_names = ["Куб", "Квадратная Призма", "Треугольная призма", "Квадратная пирамида", "Треугольная Пирамида", "Сфера", "Цилиндр", "Конус", "Тор"] numbers = ["один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать", "двадцать", "двадцать один", "двадцать два", "двадцать три", "двадцать четыре", "двадцать пять", "двадцать шесть", "двадцать семь", "двадцать восемь", "двадцать девять"] numbers2090 = ['двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens, ones] else: return tens + " " + ones return "" d['abc_flashcards_word_sequence'] = ['Арбуз', 'Бабочка', 'Виноград', 'Гитара','Дом','Еж', 'Ёлка', 'Жираф', 'Зебра', 'Иглу', 'Йога', 'Кошка','Лодка', 'Муравей', 'Нить', 'Окно', 'Попугай', 'Рыба', 'Сова', 'Томат','Утка','Фортепиано', 'Хлеб', 'Цветы', 'Чайник', 'Шимпанзе', 'Щука', 'Съёмка', 'Мышь', 'Нить', 'Экран', 'Юбка', 'Яблоко'] d['abc_flashcards_frame_sequence'] = [26, 27, 6, 28, 7, 29, 31, 30, 25, 8, 32, 43, 1, 0, 24, 22, 15, 5, 14, 33, 3, 34, 35, 36, 19, 37, 38, 39, 12, 24, 40, 41, 42] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" #if you never use the to the hour form leave this blank d["time_string_one_past"] = "one minute past %s" #pick either mh or hm version, or leave these 4 blank if you don't use to the hour form: mh means that number of minutes will appear first in the sentence followed by the number of hours, the hm is the opposite. d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three or "thirty past %s" if that sounds better d["time_string_full"] = "%s o'clock" fruit = ["зеленое яблоко", "красное яблоко", "клубника", "груша", "апельсин", "луковица", "томат", "лимон", "вишня", "перец", "морковь", "банан","арбуз"] #2,3,4 fruits_1 = ["зеленых яблока", "красных яблока", "клубники", "груши", "апельсина", "луковицы", "помидора", "лимонов", "вишни", "перца", "моркови", "банана", "арбуза"] #5,6,7 fruits_2 = ["зеленых яблок", "красных яблок", "клубник", "груш", "апельсинов", "луковиц", "помидоров", "лимонов", "вишен", "перцев", "морковей", "бананов", "арбузов"] plural_rules = [[2,3,4],[5,6,7]] #alphabet ru: - 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' & 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ' alphabet_lc = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'] alphabet_uc = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['-'] accents_uc = [] #game start d["Hello"] = "Привет" #Hello d["Welcome back."] = "Добро пожаловать в игру." #Welcome back in the game. #settings d["Preferences"] = "Предпочтения" #Preferences d["Language"] = "Язык" #Language d["Reader"] = "Озвучки" #eSpeak d["Read Instructions"] = "Читайте инструкции в начале игры" #Read Instructions at the start of games #menu categories d["Info Category"] = "Информация и параметры" #Info & Settings d["Keyboard & Mouse"] = "Клавиатура и мышь" #Keyboard & Mouse d["Discover Letters"] = "Изучение букв" #Discover Letters d["Learn Words"] = "Учите новые слова" #Learn New Words #d["Arithmetic"] = "Арифметика" #Arithmetic d["Maths"] = "Математика" #Arithmetic d["Numbers & Basic Operations"] = "Числа и основные операции" #Numbers & Basic Operations d["Basic Operations - exercises"] = "Основные операции" d["Sorting and Comparing"] = "Сортировка и Сравнение" #Sorting and Comparing d["Geometry"] = "Геометрия, сравнение форм" #Geometry d["Art"] = "Художество" #Art d["Memory"] = "Память" #Memory d["Games & Mazes"] = "Игры и Лабиринты" #Games & Mazes d["Multiplayer"] = "Многопользовательские Игры" #games d["About."] = "О программе." #About. d["Game info..."] = "Информация об игре ..." #Game info... d["Credits"] = "Авторские права и Титры" #Copyright & Credits d["Hit the Mole"] = "Ударь крота" #Hit the Mole d["Letters"] = "Буквы" #Letters d["Letter Flashcards"] = "Учусь буквам по карточкам" #Learn Letters with Flashcards d["Learn to Write"] = "Учись писать" #Учусь писать d["Trace Letters"] = "Обвести Букв и Цифр" #Trace Letters and Numbers d["Complete the ABC"] = "Заполните алфавит" #Complete the ABC d["English"] = "Английский" #English d["in your language"] = "Русский" #Русский d["Sorting Letters"] = "Сортировка букв" #Sorting Letters d["Lowercase Letters"] = "Строчные буквы" #Lowercase Letters d["Uppercase Letters"] = "Прописные буквы" #Uppercase Letters d["Word Builder"] = "Словопостроитель" #Word Builder d["Word Maze"] = "Словесный лабиринт" #Word Maze d["Collect all"] = "Соберите все буквы в правильном порядке" #Collect all letters in the right order d["Word Maze + 4"] = "Словесный лабиринт + 4" #Word Maze + 4 d["Numbers"] = "Числа" #Numbers d["Number Flashcards"] = "Учусь числам по карточкам" #Learn Numbers with Flashcards d["Learn to Count"] = "Учись считать" #Learn to Count #d["Basic A n S"] = "Основы сложения и вычитания" #Basic Addition & Subtraction d["Basic Addition"] = "Сложения" d["Basic Subtraction"] = "Вычитания" d["Shopping List"] = "Список покупок" #Shopping List d["Plus or Minus"] = "Плюс или минус" #Plus or Minus d["Basic Operations"] = "Основные операции" #Basic Operations d["Multiplication Table"] = "Таблица умножения" #Multiplication Table d["Find the product"] = "Найти произведение" #Find the product d["Find the multiplier"] = "Найти множитель" #Find the multiplier d["Division"] = "Деление" #Division d["Sorting Numbers"] = "Сортировка чисел" #Sorting Numbers d["Number Comparison"] = "Сравнение чисел" #Number Comparison d["Addition & Subtraction"] = "Сложение и вычитание" #Addition & Subtraction d["Comparison"] = "Сравнение" #Comparison d["Fractions"] = "Обыкновенные дроби" #"Фракции" #Fractions d["Decimal Fractions"] = "Десятичные дроби" #Decimal Fractions d["Even or Odd"] = "Четные или Нечетные числа"#"Чет или нечет" #Even or Odd d["Shapes"] = "Формы" #Shapes d["Shape Flashcards"] = "Учусь геометрическим фигурам" #Learn Shapes with Flashcards d["Solids"] = "геометрическое телa"#"Твердые" #Solids d["Solid Flashcards"] = "пространственная геометрия" #Solid Geometry with Flashcards d["Shape Matching"] = "Сравнение форм" #Shape Matching d["help me find my shadow"] = "помогите мне найти мою тень" #help me find my shadow d["Paint"] = "Красить" #Paint d["Colour Matching"] = "Соответствие цветов" #Colour Matching d["label the colours"] = "Названия цветов" #label the colours d["Follow the Arrows"] = "Следуйте стрелки" #Follow the Arrows d["remember the directions"] = "запоминайте направления" #remember the directions d["Photographic Memory"] = "Фотографическая память" #Photographic Memory d["Training"] = "Обучение" #Training d["Photographic Memory"] = "Фотографическая память" #Photographic Memory d["Automatic Levels"] = "Автоматические уровни" #Automatic Levels d["Mouse Maze"] = "Мышиный лабиринт" #Mouse Maze d["Let's have some cheese"] = "Давайте немного сыра" #Let's have some cheese d["Sheep Maze"] = "Овечий лабиринт" #Sheep Maze d["Find the rest"] = "Найти остальное стадо" #Find the rest of the herd d["Connect"] = "Соединиться" #Connect d["Balloons with threads"] = "Воздушные шары с потоками" #Balloons with threads d["Fifteen"] = "Пятнадцать" #Fifteen d["With a Twist"] = "С Завихрением" #With a Twist #game instructions d["Drag the slider"] = ["Перетащите ползунок вверх или вниз так,","чтобы правильный знак оказался в красном квадрате."] #Drag the slider up or down so that the right sign is in the red square. d["Take your sheep"] = "Приведите овцу к остальному стаду." #Take your sheep to the rest of the herd. d["Check the shopping list"] = "Проверьте Список покупок и перетащите все необходимые предметы в корзину." #Check the shopping list and drag all needed items into the basket. d["Drag lt"] = ["Перетащите один из <,> или = (меньше, больше или равно)","на красный квадрат."] #Drag one of the <, > or = (greater, lesser or equal) to the red square. d["Drag lt2"] = "Перетащите один из меньше, больше или равно в красный квадрат." #Drag one of the greater, lesser or equal to the red square. d["Re-arrange right"] = "Переставьте выше цифры, чтобы они были в правильном порядке" #Re-arrange the above numbers so they are in the right order d["Complete abc"] = "Заполните алфавит с помощью букв выше." #Complete the abc using the letters above. d["Write a word:"] = "Напишите слово:" #Write a word: d["Find and separate"] = "Найдите и отделите четные числа от нечетных чисел в указанной последовательности." #Find and separate the Even Numbers form the Odd Numbers in the above series. d["Re-arrange alphabetical"] = "Переставьте буквами, чтобы они были в алфавитном порядке." #Re-arrange the above letters so they are in the alphabetical order. d["Re-arrange ascending"] = "Переставьте цифры, чтобы они были в порядке возрастания." #Re-arrange the above numbers so they are in the ascending order. #game dialogs d["Please try again."] = "Пожалуйста, попробуйте еще раз." #Please try again. d["Sorry! It is wrong."] = "Извините! Это неправильно." #Sorry! It is wrong. d["Perfect! Task solved!"] = "Великолепно! Задача решена!" #Perfect! Task solved! d["work harder"] = "Вы должны работать немного усерднее в следующий раз." #You need to work a little bit harder next time. #level_controller d["Game Over!"] = "Игра проиграна!" #Game Over! d["Congratulations! Game Completed."] = "Поздравляем! Вы выполнили все задачи в этой игре." #Congratulations! You have completed all tasks in this game. d["Great job!"] = ["Отличная работа!"] #["Great job!","Perfect!","Awesome!","Fantastic job!","Well done!"] d["Perfect! Level completed!"] = "Великолепно! Уровень завершен!" #Perfect! Level completed! #game specific labels: d["area:"] = "площадь:" #area: d["circumference:"] = "окружности:" #circumference: d["perimeter:"] ="окружности:" d["surface area:"] = "площадь поверхности" #surface area: d["volume:"] = "объем" #volume: d["Perfect!"] = "Великолепно!" #Perfect! d["divided by"] = "деленное на"#"деленный(ая) на" #divided by d["multiplied by"] = "умноженное на" #"умноженный(ая) раз" #times d["equals"] = "равно" #equals d["Shopping List"] = "Список покупок" #Shopping List d["Even"] = "Четные"# числа" #"Чет" #Even d["Odd"] = "Нечетные"# числа" #"Нечет" #Odd d["white"] = "Белый" #"white" d["black"] = "Черный" #"black" d["grey"] = "Серый" #"grey" d["red"] = "Красный" #"red" d["orange"] = "Оранжевый" #"orange" d["yellow"] = "Желтый" #"yellow" d["olive"] = "Оливковый" #"olive" d["green"] = "Зеленые" #"green" d["sea green"] = "Цвета морской волны" #"sea green" d["teal"] = "Чирок" #"teal" d["blue"] = "Синий" #"blue" d["navy"] = "Темно-синий" #"navy" d["purple"] = "сиреневый" #"purple" d["violet"] = "Фиолетовый" #"violet" d["magenta"] = "пурпурный" #"magenta" d["indigo"] = "Индиго" #"indigo" d["pink"] = "Розовый" #"pink" d["maroon"] = "темно-бордовый" #maroon d["brown"] = "коричневый" #brown d["aqua"] = "голубой" #aqua d["lime"] = "лайм" #lime #new d["Keyboard Skills"] = "Радужная клавиатура" #Rainbow Keyboard d["Touch Typing"] = "Обучение слепой печати" #Touch Typing Training d["Translators"] = "Переводчики" #Translators d["English Alphabet"] = "Английский алфавит" #English Alphabet d["Your Alphabet"] = "Русский алфавит" #Russian Alphabet #new in 0.3.0 d["Paint Mixer"] = "Mixing Colours for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Colour Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Find the colour of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Четырёхугольник" d["trapezium"] = "Трапеция" d["u_trapezium"] = "Трапеция" d["triangle"] = "Треугольник" d["squished_quadi"] = "Сплющенные четырехугольник" d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Right isosceles triangle" d["obtuse_iso_tria"] = "Obtuse isosceles triangle" d["acute_iso_tria"] = "Acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Нажмите еще раз для выхода" d["answer_enter"] = "Type your answer and hit enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result" d["TimeMatching"] = "Time Matching"pysiogame-1.30.811/languages/append.py0000775000175000017500000000137512201770057016553 0ustar tigertiger""" A helper program to add new keys to all language files at once. """ import os, sys import inspect def where_am_I(): pass a = os.path.split(os.path.abspath(inspect.getsourcefile(where_am_I)))[0] os.chdir(a) #list of language files langs = ["en_gb.py", "en_us.py", "pl.py", "gr.py", "es.py","pt.py","fr.py","it.py","de.py","ru.py","fi.py"] argv = sys.argv if len(argv) == 2: line = argv[1] else: print("Enter the line to be added to all files (or press ENTER to exit):") line = raw_input() if len(line) > 2 and line not in ["exit", "exit()", "cancel", "cancel()"]: for i in range(len(langs)): FILE = langs[i] with open(FILE,"a") as f: f.write("\n"+line) print("Completed...") else: print("Aborting...") pysiogame-1.30.811/languages/fi.py0000644000175000017500000004402512201770057015674 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'] numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens, ones] else: return tens + " " + ones return "" d['abc_flashcards_word_sequence'] = [ 'Aurinko','Banaani', 'C', 'Delfiini', 'Elefantti', 'Fortepiano', 'Gnuu','Hiiri', 'Ikkuna', 'Jooga', 'Kirahvi','Leipä', 'Muurahainen', 'Näppäin', 'Omena', 'Papukaija', 'Q', 'Riippumatto', 'Seepra', 'Talo', 'Uuni', 'Vene','Xylofoni', 'Yö', 'Z', 'Å', 'Näyttö', 'Pöllö'] d['abc_flashcards_frame_sequence'] = [18, 71,43, 59,4,34, 70,12,22,32,30,35,0,10,42,15, 43,56,25,7, 67,1, 23,54, 43,43,40,14] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" #if you never use the to the hour form leave this blank d["time_string_one_past"] = "one minute past %s" #pick either mh or hm version, or leave these 4 blank if you don't use to the hour form: mh means that number of minutes will appear first in the sentence followed by the number of hours, the hm is the opposite. d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three or "thirty past %s" if that sounds better d["time_string_full"] = "%s o'clock" fruit = ["green apple", "red apple", "strawberry", "pear", "orange", "onion", "tomato", "lemon", "cherry", "pepper", "carrot", "banana", "watermelon"] fruits_1 = ["green apples", "red apples", "strawberries", "pears", "oranges", "onions", "tomatoes", "lemons", "cherries", "peppers", "carrots", "bananas", "watermelons"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet en alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z', 'å', 'ä', 'ö'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'Å', 'Ä', 'Ö'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] #letters that may exist in words but are not part of the officail alphabet accents_lc = ['w','š','ž','-'] accents_uc = ['W','Š','Ž'] #game start d["Hello"] = "Hello" d["Welcome back."] = "Welcome back in the game." #settings d["Preferences"] = "Preferences" d["Language"] = "Language" d["Reader"] = "eSpeak" d["Read Instructions"] = "Read Instructions at the start of games" #menu categories d["Info Category"] = "Info & Settings" d["Keyboard & Mouse"] = "Keyboard & Mouse" d["Discover Letters"] = "Discover Letters" d["Learn Words"] = "Learn New Words" d["Maths"] = "Mathematics" d["Numbers & Basic Operations"] = "Numbers & Basic Operations" d["Basic Operations - exercises"] = "Basic Operations - Exercises" d["Sorting and Comparing"] = "Sorting and Comparing" d["Geometry"] = "Geometry and Shape Recognition" d["Art"] = "Art and Colour" d["Memory"] = "Memory" d["Games & Mazes"] = "Games & Mazes" d["Multiplayer"] = "Multiplayer Games" #games d["About."] = "About." d["Game info..."] = "Game info..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] = "Hit the Mole" d["Letters"] = "Letters" d["Letter Flashcards"] = "Learn Letters with Flashcards" d["Learn to Write"] = "Learn to Write" d["Trace Letters"] = "Trace Letters and Numbers" d["Complete the ABC"] = "Complete the ABC" d["English"] = "English" d["in your language"] = "Finnish" d["Sorting Letters"] = "Sorting Letters" d["Lowercase Letters"] = "Lowercase Letters" d["Uppercase Letters"] = "Uppercase Letters" d["Word Builder"] = "Word Builder" d["Word Maze"] = "Word Maze" d["Collect all"] = "Collect all letters in the right order" d["Word Maze + 4"] = "Word Maze + 4" d["Numbers"] = "Numbers" d["Number Flashcards"] = "Learn Numbers with Flashcards" d["Learn to Count"] = "Learn to Count" d["Basic Addition"] = "Basic Addition" d["Basic Subtraction"] = "Basic Subtraction" d["Shopping List"] = "Shopping List" d["Plus or Minus"] = "Plus or Minus" d["Basic Operations"] = "Basic Operations" d["Multiplication Table"] = "Multiplication Table" d["Find the product"] = "Find the product" d["Find the multiplier"] = "Find the multiplier" d["Division"] = "Division" d["Sorting Numbers"] = "Sorting Numbers" d["Number Comparison"] = "Number Comparison" d["Addition & Subtraction"] = "Addition & Subtraction" d["Comparison"] = "Comparison" d["Fractions"] = "Fractions" d["Decimal Fractions"] = "Decimal Fractions" d["Even or Odd"] = "Even or Odd" d["Shapes"] = "Shapes" d["Shape Flashcards"] = "Learn Shapes with Flashcards" d["Solids"] = "Solids" d["Solid Flashcards"] = "Solid Geometry with Flashcards" d["Shape Matching"] = "Shape Matching" d["help me find my shadow"] = "help me find my shadow" d["Paint"] = "Paint" d["Colour Matching"] = "Colour Matching" d["label the colours"] = "label the colours" d["Follow the Arrows"] = "Follow the Arrows" d["remember the directions"] = "remember the directions" d["Photographic Memory"] = "Photographic Memory" d["Training"] = "Training" d["Photographic Memory"] = "Photographic Memory" d["Automatic Levels"] = "Automatic Levels" d["Mouse Maze"] = "Mouse Maze" d["Let's have some cheese"] = "Let's have some cheese" d["Sheep Maze"] = "Sheep Maze" d["Find the rest"] = "Find the rest of the herd" d["Connect"] = "Connect" d["Balloons with threads"] = "Balloons with threads" d["Fifteen"] = "Fifteen" d["With a Twist"] = "With a Twist" #game instructions d["Drag the slider"] = "Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Take your sheep to the rest of the herd." d["Check the shopping list"] = "Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Complete the abc using the letters above." d["Write a word:"] = "Write a word:" d["Find and separate"] = "Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Please try again." d["Sorry! It is wrong."] = "Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfect! Task solved!" d["work harder"] = "You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Game Over!" d["Congratulations! Game Completed."] = "Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Great job!","Perfect!","Awesome!","Super!","Well done!"] d["Perfect! Level completed!"] = "Perfect! Level completed!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimeter:" d["surface area:"] = "surface area:" d["volume:"] = "volume:" d["Perfect!"] = "Perfect!" d["divided by"] = "divided by" d["multiplied by"] = "times" d["equals"] = "equals" d["Shopping List"] = "Shopping List" d["Even"] = "Even" d["Odd"] = "Odd" d["white"]="white" d["black"]="black" d["grey"]="grey" d["red"]="red" d["orange"]="orange" d["yellow"]="yellow" d["olive"]="olive" d["green"]="green" d["sea green"]="sea green" d["teal"]="teal" d["blue"]="blue" d["navy"]="navy" d["purple"]="purple" d["violet"]="violet" d["magenta"]="magenta" d["indigo"]="indigo" d["pink"]="pink" d["maroon"] = "maroon" d["brown"] = "brown" d["aqua"] = "aqua" d["lime"] = "lime" #new d["Keyboard Skills"] = "Rainbow Keyboard" d["Touch Typing"] = "Touch Typing Tutor" d["Translators"] = "Translators" d["English Alphabet"] = "English Alphabet" d["Your Alphabet"] = "Finnish Alphabet" #new in 0.3.0 d["Paint Mixer"] = "Mixing Colours for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Colour Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Find the colour of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Quadrilateral" d["trapezium"] = "Trapezium" d["u_trapezium"] = "Trapezium" d["triangle"] = "Triangle" d["squished_quadi"] = "Ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Right isosceles triangle" d["obtuse_iso_tria"] = "Obtuse isosceles triangle" d["acute_iso_tria"] = "Acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Click again to exit" d["answer_enter"] = "Type your answer and hit enter" d["test_yourself"] = "Test yourself" d["close_confirm"] = "Click again to exit" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result" d["TimeMatching"] = "Time Matching"pysiogame-1.30.811/languages/en_gb.py0000644000175000017500000004701612201770057016353 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Right Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] numbers = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty', 'twenty one', 'twenty two', 'twenty three', 'twenty four', 'twenty five', 'twenty six', 'twenty seven', 'twenty eight', 'twenty nine'] numbers2090 = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [tens, ones] else: return tens + " " + ones return "" #The following 2 lines are not to be translated but replaced with a sequence of words starting in each of the letters of your alphabet in order, best if these words have a corresponding picture in images/flashcard_images.jpg. The second line has the number of the image that the word describes. #The images are numbered from left to bottom such that the top left is numbered 0, the last image is 73, if none of the available things have names that start with any of the letters we can add new pictures. d['abc_flashcards_word_sequence'] = ['Apple', 'Butterfly', 'Cat', 'Dolphin', 'Elephant', 'Fortepiano', 'Guitar', 'Hedgehog', 'Igloo', 'Jar', 'Koala', 'Lion', 'Monitor', 'Notebook', 'Ocean', 'Parrot', 'Queen', 'Rabbit', 'Street', 'Tomato', 'Umbrella', 'Violin', 'Watermelon', 'Xylophone', 'Yarn', 'Zebra'] d['abc_flashcards_frame_sequence'] = [42, 27, 2, 59, 4, 34, 28, 29, 8, 9, 72, 11, 40, 13, 52, 15, 16, 17, 53, 33, 20, 21, 26, 23, 24, 25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" #if you never use the to the hour form leave this blank d["time_string_one_past"] = "one minute past %s" #pick either mh or hm version, or leave these 4 blank if you don't use to the hour form: mh means that number of minutes will appear first in the sentence followed by the number of hours, the hm is the opposite. d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "" d["time_string_3q_past"] = "" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past - and leave the "quarter to" field blanck d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three or "thirty past %s" if that sounds better d["time_string_full"] = "%s o'clock" """ d["time_string_one_to"] = "" d["time_string_one_past"] = "one minute past %s" d["time_string_to_mh"] = "" #ie. five to four d["time_string_past_mh"] = "" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes d["time_string_1_59_past_mh"] = "" #if you never use the to the hour form leave the above fields blank and only fill this one (or th hm version) d["time_string_1_59_past_hm"] = "%s and %s" #if you never use the to the hour form leave the above fields blank and only fill this one (or th mh version) d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three d["time_string_q_to"] = "" d["time_string_3q_past"] = "3 quarters past %s" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past d["time_string_q_past"] = "quarter past %s" d["time_string_full"] = "%s o'clock" """ fruit = ["green apple", "red apple", "strawberry", "pear", "orange", "onion", "tomato", "lemon", "cherry", "pepper", "carrot", "banana", "watermelon"] fruits_1 = ["green apples", "red apples", "strawberries", "pears", "oranges", "onions", "tomatoes", "lemons", "cherries", "peppers", "carrots", "bananas", "watermelons"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet en alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['-'] accents_uc = [] #game start d["Hello"] = "Hello" d["Welcome back."] = "Welcome back in the game." #settings d["Preferences"] = "Preferences" d["Language"] = "Language" d["Reader"] = "eSpeak" d["Read Instructions"] = "Read Instructions at the start of games" #menu categories d["Info Category"] = "Info & Settings" d["Keyboard & Mouse"] = "Keyboard & Mouse" d["Discover Letters"] = "Discover Letters" d["Learn Words"] = "Learn New Words" d["Maths"] = "Mathematics" d["Numbers & Basic Operations"] = "Numbers & Basic Operations" d["Basic Operations - exercises"] = "Basic Operations - Exercises" d["Sorting and Comparing"] = "Sorting and Comparing" d["Geometry"] = "Geometry and Shape Recognition" d["Art"] = "Art and Colour" d["Memory"] = "Memory" d["Games & Mazes"] = "Games & Mazes" d["Multiplayer"] = "Multiplayer Games" #games d["About."] = "About." d["Game info..."] = "Game info..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] = "Hit the Mole" d["Letters"] = "Letters" d["Letter Flashcards"] = "Learn Letters with Flashcards" d["Learn to Write"] = "Learn to Write" d["Trace Letters"] = "Trace Letters and Numbers" d["Complete the ABC"] = "Complete the ABC" d["English"] = "English" d["in your language"] = "English 2" d["Sorting Letters"] = "Sorting Letters" d["Lowercase Letters"] = "Lowercase Letters" d["Uppercase Letters"] = "Uppercase Letters" d["Word Builder"] = "Word Builder" d["Word Maze"] = "Word Maze" d["Collect all"] = "Collect all letters in the right order" d["Word Maze + 4"] = "Word Maze + 4" d["Numbers"] = "Numbers" d["Number Flashcards"] = "Learn Numbers with Flashcards" d["Learn to Count"] = "Learn to Count" d["Basic Addition"] = "Basic Addition" d["Basic Subtraction"] = "Basic Subtraction" d["Shopping List"] = "Shopping List" d["Plus or Minus"] = "Plus or Minus" d["Basic Operations"] = "Basic Operations" d["Multiplication Table"] = "Multiplication Table" d["Find the product"] = "Find the product" d["Find the multiplier"] = "Find the multiplier" d["Division"] = "Division" d["Sorting Numbers"] = "Sorting Numbers" d["Number Comparison"] = "Number Comparison" d["Addition & Subtraction"] = "Addition & Subtraction" d["Comparison"] = "Comparison" d["Fractions"] = "Fractions" d["Decimal Fractions"] = "Decimal Fractions" d["Even or Odd"] = "Even or Odd" d["Shapes"] = "Shapes" d["Shape Flashcards"] = "Learn Shapes with Flashcards" d["Solids"] = "Solids" d["Solid Flashcards"] = "Solid Geometry with Flashcards" d["Shape Matching"] = "Shape Matching" d["help me find my shadow"] = "help me find my shadow" d["Paint"] = "Paint" d["Colour Matching"] = "Colour Matching" d["label the colours"] = "label the colours" d["Follow the Arrows"] = "Follow the Arrows" d["remember the directions"] = "remember the directions" d["Photographic Memory"] = "Photographic Memory" d["Training"] = "Training" d["Photographic Memory"] = "Photographic Memory" d["Automatic Levels"] = "Automatic Levels" d["Mouse Maze"] = "Mouse Maze" d["Let's have some cheese"] = "Let's have some cheese" d["Sheep Maze"] = "Sheep Maze" d["Find the rest"] = "Find the rest of the herd" d["Connect"] = "Connect" d["Balloons with threads"] = "Balloons with threads" d["Fifteen"] = "Fifteen" d["With a Twist"] = "With a Twist" #game instructions d["Drag the slider"] = "Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Take your sheep to the rest of the herd." d["Check the shopping list"] = "Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Complete the abc using the letters above." d["Write a word:"] = "Write a word:" d["Find and separate"] = "Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Please try again." d["Sorry! It is wrong."] = "Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfect! Task solved!" d["work harder"] = "You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Game Over!" d["Congratulations! Game Completed."] = "Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Great job!","Perfect!","Awesome!","Fantastic job!","Well done!"] d["Perfect! Level completed!"] = "Perfect! Level completed!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimeter:" d["surface area:"] = "surface area:" d["volume:"] = "volume:" d["Perfect!"] = "Perfect!" d["divided by"] = "divided by" d["multiplied by"] = "times" d["equals"] = "equals" d["Shopping List"] = "Shopping List" d["Even"] = "Even" d["Odd"] = "Odd" d["white"]="white" d["black"]="black" d["grey"]="grey" d["red"]="red" d["orange"]="orange" d["yellow"]="yellow" d["olive"]="olive" d["green"]="green" d["sea green"]="sea green" d["teal"]="teal" d["blue"]="blue" d["navy"]="navy" d["purple"]="purple" d["violet"]="violet" d["magenta"]="magenta" d["indigo"]="indigo" d["pink"]="pink" d["maroon"] = "maroon" d["brown"] = "brown" d["aqua"] = "aqua" d["lime"] = "lime" #new d["Keyboard Skills"] = "Rainbow Keyboard" d["Touch Typing"] = "Touch Typing Tutor" d["Translators"] = "Translators" d["English Alphabet"] = "English Alphabet" d["Your Alphabet"] = "English Alphabet 2" #new in 0.3.0 d["Paint Mixer"] = "Mixing Colours for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Colour Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Find the colour of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Noughts and Crosses 2" d["TicTacToe3"] = "Noughts and Crosses 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles """ d["hypotenuse"] = "hypotenuse" #przeciwprostokątna d["cathetus"] = "cathetus" #przyprostokątna #leg / periphrasis d["catheti"] = "catheti" #przyprostokątne #plular """ d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Quadrilateral" d["trapezium"] = "Trapezium" d["u_trapezium"] = "tTapezium" d["triangle"] = "Triangle" d["squished_quadi"] = "Ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Right isosceles triangle" d["obtuse_iso_tria"] = "Obtuse isosceles triangle" d["acute_iso_tria"] = "Acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Click again to exit" d["answer_enter"] = "Type your answer and hit enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself"# -*- coding: utf-8 -*- d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result" d["TimeMatching"] = "Time Matching"pysiogame-1.30.811/languages/de.py0000644000175000017500000004306312201770057015667 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Obtuse Triangle", "Right Triangle", "Acute Triangle", "Square", "Rectangle", "Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] solid_names = ["Cube", "Square Prism", "Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] numbers = ['eins', 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun', 'zehn', 'elf', 'zwölf' , 'dreizehn', 'vierzehn', 'fünfzehn', 'sechzehn', 'siebzehn', 'achtzehn', 'neunzehn', 'zwanzig', 'eins und zwanzig', 'zweieins und zwanzig', 'dreieins und zwanzig', 'viereins und zwanzig', 'fünfeins und zwanzig', 'sechseins und zwanzig', 'siebeneins und zwanzig', 'achteins und zwanzig', 'neuneins und zwanzig'] numbers2090 = ['zwanzig','dreißig','vierzig','fünfzig','sechzig','siebzig','achtzig','neunzig'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m == 0: return tens elif m > 0: ones = numbers[m-1] if twoliner: return [ones + " und ", tens] else: return ones + " und " + tens return "" d['abc_flashcards_word_sequence'] = ['Apfel', 'Hängematte', 'Blumen', 'C', 'Ducken', 'Eule', 'Fisch', 'Giraffe', 'Haus','Iglu', 'Joghurt', 'Kaninchen', 'Löwe', 'Maus', 'Notizbuch', 'Ozean', 'Königin', 'Papagei', 'Q', 'Regenschirm','Sonne', 'Straße', 'Tomate', 'Umgehen', 'Schlüssel','Violine', 'Wassermelone', 'Xylophon', 'Yoga', 'Zebra'] d['abc_flashcards_frame_sequence'] = [42, 56,36, 43,3,14,5,30,7,8, 73,17,11,12,13, 52,16,15, 43,20,18, 53,33,41,10,21,26,23,32,25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "one minute to %s" d["time_string_one_past"] = "one minute past %s" d["time_string_to_mh"] = "%s to %s" #ie. five to four d["time_string_past_mh"] = "%s past %s" #ie. five past four d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes d["time_string_half_to"] = "" #ie. in languages using this form, ie. half to four d["time_string_half_past"] = "half past %s" #ie. half past three d["time_string_q_to"] = "quarter to %s" d["time_string_q_past"] = "quarter past %s" d["time_string_full"] = "%s o'clock" #fruit = ["green apple", "red apple", "strawberry", "pear", "orange", "onion", "tomato", "lemon", "cherry", "pepper", "carrot", "banana", "watermelon"] #fruits = ["green apples", "red apples", "strawberries", "pears", "oranges", "onions", "tomatoes", "lemons", "cherries", "peppers", "carrots", "bananas", "watermelons"] #google translated fruit names, are they ok? fruit = ["grüner Apfel", "roten Apfel", "Erdbeere", "Birne", "Orange", "Zwiebel", "Tomate", "Zitrone", "Kirsche", "Pfeffer", "Karotte", "Banane","Wassermelone"] fruits_1 = ["grünen Äpfeln", "rote Äpfeln", "Erdbeeren", "Birnen", "Orangen", "Zwiebeln", "Tomaten", "Zitronen", "Kirschen", "Paprika", "Karotten", "Bananen","Wassermelonen"] fruits_2 = [] plural_rules = [[2,3,4,5,6,7],[]] #alphabet - de alphabet_lc = ['a', 'ä', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'ö', 'p', 'q', 'r', 's', 'ß', 't', 'u', 'ü', 'v', 'w', 'x', 'y', 'z'] alphabet_uc = ['A', 'Ä', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'Ö', 'P', 'Q', 'R', 'S', 'ß', 'T', 'U', 'Ü', 'V', 'W', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['-'] accents_uc = [] #game start d["Hello"] = "Hallo" d["Welcome back."] = "Willkommen zurück im Spiel." #settings d["Preferences"] = "Preferences" d["Language"] = "Language" d["Reader"] = "eSpeak" d["Read Instructions"] = "Read Instructions at the start of games" #menu categories d["Info Category"] = "Info & Settings" d["Keyboard & Mouse"] = "Keyboard & Mouse" d["Discover Letters"] = "Discover Letters" d["Learn Words"] = "Learn New Words" d["Maths"] = "Mathematics" d["Numbers & Basic Operations"] = "Numbers & Basic Operations" d["Basic Operations - exercises"] = "Basic Operations - Exercises" d["Sorting and Comparing"] = "Sorting and Comparing" d["Geometry"] = "Geometry and Shape Recognition" d["Art"] = "Art and Colour" d["Memory"] = "Memory" d["Games & Mazes"] = "Games & Mazes" d["Multiplayer"] = "Multiplayer Games" #games d["About."] = "About." d["Game info..."] = "Game info..." d["Credits"] = "Copyright & Credits" d["Hit the Mole"] = "Hit the Mole" d["Letters"] = "Letters" d["Letter Flashcards"] = "Learn Letters with Flashcards" d["Learn to Write"] = "Learn to Write" d["Trace Letters"] = "Trace Letters and Numbers" d["Complete the ABC"] = "Complete the ABC" d["English"] = "English" d["in your language"] = "German" d["Sorting Letters"] = "Sorting Letters" d["Lowercase Letters"] = "Lowercase Letters" d["Uppercase Letters"] = "Uppercase Letters" d["Word Builder"] = "Word Builder" d["Word Maze"] = "Word Maze" d["Collect all"] = "Collect all letters in the right order" d["Word Maze + 4"] = "Word Maze + 4" d["Numbers"] = "Numbers" d["Number Flashcards"] = "Learn Numbers with Flashcards" d["Learn to Count"] = "Learn to Count" d["Basic Addition"] = "Basic Addition" d["Basic Subtraction"] = "Basic Subtraction" d["Shopping List"] = "Shopping List" d["Plus or Minus"] = "Plus or Minus" d["Basic Operations"] = "Basic Operations" d["Multiplication Table"] = "Multiplication Table" d["Find the product"] = "Find the product" d["Find the multiplier"] = "Find the multiplier" d["Division"] = "Division" d["Sorting Numbers"] = "Sorting Numbers" d["Number Comparison"] = "Number Comparison" d["Addition & Subtraction"] = "Addition & Subtraction" d["Comparison"] = "Comparison" d["Fractions"] = "Fractions" d["Decimal Fractions"] = "Decimal Fractions" d["Even or Odd"] = "Even or Odd" d["Shapes"] = "Shapes" d["Shape Flashcards"] = "Learn Shapes with Flashcards" d["Solids"] = "Solids" d["Solid Flashcards"] = "Solid Geometry with Flashcards" d["Shape Matching"] = "Shape Matching" d["help me find my shadow"] = "help me find my shadow" d["Paint"] = "Paint" d["Colour Matching"] = "Colour Matching" d["label the colours"] = "label the colours" d["Follow the Arrows"] = "Follow the Arrows" d["remember the directions"] = "remember the directions" d["Photographic Memory"] = "Photographic Memory" d["Training"] = "Training" d["Photographic Memory"] = "Photographic Memory" d["Automatic Levels"] = "Automatic Levels" d["Mouse Maze"] = "Mouse Maze" d["Let's have some cheese"] = "Let's have some cheese" d["Sheep Maze"] = "Sheep Maze" d["Find the rest"] = "Find the rest of the herd" d["Connect"] = "Connect" d["Balloons with threads"] = "Balloons with threads" d["Fifteen"] = "Fifteen" d["With a Twist"] = "With a Twist" #game instructions d["Drag the slider"] = "Drag the slider up or down so that the right sign is in the red square." d["Take your sheep"] = "Take your sheep to the rest of the herd." d["Check the shopping list"] = "Check the shopping list and drag all needed items into the basket." d["Drag lt"] = "Drag one of the <, > or = (lesser, greater or equal) to the red square." d["Drag lt2"] = "Drag one of the lesser, greater or equal to the red square." d["Re-arrange right"] = "Re-arrange the above numbers so they are in the right order" d["Complete abc"] = "Complete the abc using the letters above." d["Write a word:"] = "Write a word:" d["Find and separate"] = "Find and separate the Even Numbers form the Odd Numbers in the above series." d["Re-arrange alphabetical"] = "Re-arrange the above letters so they are in the alphabetical order." d["Re-arrange ascending"] = "Re-arrange the above numbers so they are in the ascending order." #game dialogs d["Please try again."] = "Please try again." d["Sorry! It is wrong."] = "Sorry! It is wrong." d["Perfect! Task solved!"] = "Perfect! Task solved!" d["work harder"] = "You need to work a little bit harder next time." #level_controller d["Game Over!"] = "Game Over!" d["Congratulations! Game Completed."] = "Congratulations! You have completed all tasks in this game." d["Great job!"] = ["Great job!","Perfect!","Awesome!","Fantastic job!","Super!","Well done!"] d["Perfect! Level completed!"] = "Perfect! Level completed!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimeter:" d["surface area:"] = "surface area:" d["volume:"] = "volume:" d["Perfect!"] = "Perfect!" d["divided by"] = "divided by" d["multiplied by"] = "times" d["equals"] = "equals" d["Shopping List"] = "Shopping List" d["Even"] = "Even" d["Odd"] = "Odd" d["white"]="white" d["black"]="black" d["grey"]="grey" d["red"]="red" d["orange"]="orange" d["yellow"]="yellow" d["olive"]="olive" d["green"]="green" d["sea green"]="sea green" d["teal"]="teal" d["blue"]="blue" d["navy"]="navy" d["purple"]="purple" d["violet"]="violet" d["magenta"]="magenta" d["indigo"]="indigo" d["pink"]="pink" d["maroon"] = "maroon" d["brown"] = "brown" d["aqua"] = "aqua" d["lime"] = "lime" #new d["Keyboard Skills"] = "Rainbow Keyboard" d["Touch Typing"] = "Touch Typing Tutor" d["Translators"] = "Translators" d["English Alphabet"] = "English Alphabet" d["Your Alphabet"] = "German Alphabet" #new in 0.3.0 d["Paint Mixer"] = "Mixing Colours for Painting" d["Mixing RYB"] = "Mix red, yellow, blue, black and white paint" d["Light Mixer"] = "Additive Colour Mixing - Light" d["Mixing RGB"] = "Mix red, green and blue light to get other colours" d["Ink Mixer"] = "Subtractive Colour Mixing - Paints, Dyes, Inks" d["Mixing CMY"] = "Mix cyan, magenta and yellow paint to get other colours" d["Find the colour of the circle"] = "Find the colour of the circle" d["Adjust CMY"] = "Adjust the amount of cyan, magenta and yellow paint" d["Adjust RGB"] = "Adjust the intensity of red, green and blue light" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "more" d["less color"] = "less" d["color is ok"] = "is ok" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["red","red"] d["of green"] = ["green","green"] d["of blue"] = ["blue","blue"] d["of cyan"] = ["cyan","cyan"] d["of magenta"] = ["magenta","magenta"] d["of yellow"] = ["yellow","yellow"] #new in 0.3.1 d["brush size"] = "brush size" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Get as many lines of 3 as possible to win" d["Player"] = "Player" d["Won"] = "Won" d["Game Draw"] = "Draw" d["UserName"] = "User Name" d["Match Animals Memory"] = "Match Animals" d["Match Fruits"] = "Match Fruits" d["Match Vegetables"] = "Match Vegetables" d["Match Numbers"] = "Match Numbers" d["Find pairs"] = "Find matching pairs of the same image" d["Sliced Images"] = "Sliced Images" d["Sliced Animals"] = "Animals" d["Sliced Fruits"] = "Fruits" d["Sliced Numbers"] = "Numbers" d["Fraction Groups"] = "Fraction Groups" d["Percentages"] = "Percentages" d["Ratios"] = "Ratios" d["Fract instr0"] = "Match fraction charts on the right to the ones on the left" d["Fract instr1"] = ["Match fraction charts and fractions on the right","to the fraction charts on the left"] d["Fract instr2"] = "Match fraction charts to the fractions on the left" d["Fract instr3"] = ["Match fraction charts, fractions and decimal fractions on the right","to their percentage representations"] d["Fract instr4"] = ["Match charts to the ratios on the left","Ratios are expressed as ratio of coloured pieces to white pieces"] d["Maths Matching Game"] = "Maths Matching Game" d["Addition"] = "Addition" d["Subtraction"] = "Subtraction" d["Multiplication"] = "Multiplication" d["Division"] = "Division" d["Check for newer version..."] = ["","Check for newer version, report bugs, discuss, translate or review this project at:"] d["Match numbers to their spelling"] = "Match numbers to their spelling" d["Number Spelling"] = "Number Spelling" d["Match Animals"] = "Match Animals" d["Find all matching animals"] = "Find all matching animals" d["Match animals to their shadows"] = "Match animals to their shadows" d["ShapeMaker"] = "Shape Maker" d["draw_instr1"] = "Shape to draw: %s" d["draw_instr2"] = "Shape to draw: %s" #if the following size_instr turn out to be too long the beginning can be moved here, ie. d["draw_instr2"] = "Shape to draw: %s, such that" d["size_instr_0"] = "such that lengths of its bases are equal to %d and %d and height to %d" #for trapeziums d["size_instr_1"] = "such that lengths of its sides are equal to %d" #square d["size_instr_2"] = "such that lengths of its sides are equal to %d and %d" #rectangle d["size_instr_3"] = "such that lengths of its 2 parallel bases are equal to %d and height to %d" #for parallelogram d["size_instr_4"] = "such that length of its base is equal to %d and height to %d" #for triangles incl. isosceles triangles d["size_instr_5"] = "such that lengths of its catheti are equal to %d and %d" #for right triangles d["size_instr_6"] = "such that lengths of both of its catheti are equal to %d" #for right isosceles triangles d["size_instr_7"] = "such that length of its hypotenuse is equal to %d" #for right isosceles triangles d["size_instr_8"] = "such that length of one of its sides is equal to %d and height to %d" #for obtuse triangles d["size_instr_9"] = "such that length of its radius is equal to %d" #for circles d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "Quadrilateral" d["trapezium"] = "Trapezium" d["u_trapezium"] = "Trapezium" d["triangle"] = "Triangle" d["squished_quadi"] = "Ouch... squished quadrilateral" #used to label a drawn "quadrilateral" with angles: 0º, 180º, 0º, 180º - all points on one line d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Right isosceles triangle" d["obtuse_iso_tria"] = "Obtuse isosceles triangle" d["acute_iso_tria"] = "Acute isosceles triangle" d["squished_tria"] = "Ouch... squished triangle" #used to label a drawn "triangle" with angles: 0º, 180º, 0º - all points on one line d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangle? Well, not really..." #used to label a drawn "quadrilateral" with one of its angles equal to 180º - in effect making it look like triangle d["test_yourself"] = "Test yourself" d["Clock1"] = "Clock" d["Read time"] = "learn to read the time" d["Clock2"] = "Clock" d["Set time"] = "learn to set the clock" d["Set_clock"] = "Set the clock to:" d["Set_clock_instr"] = ["","Drag the clock hands","to set the time"] d["What time"] = "What time is it?" d["close_confirm"] = "Click again to exit" d["answer_enter"] = "Type your answer and hit enter" d["enable_untranslated"] = "FAO: Translators - enable this to show untranslated languages (for testing):" d["Fullscreen:"] = "Fullscreen:" d["Time"] = "Time" d["Play_w_clock"] = "Turn the clock hands and see what happens." d["lets_see_what_you_draw"] = "Let's see what shapes you can draw" d["txt_only"] = "Time in text version only" d["Clock0"] = "How clock works?" d["Columnar addition"] = "Columnar addition" d["Columnar subtraction"] = "Columnar subtraction" d["Long multiplication"] = "Long multiplication" d["Long division"] = "Long division" d["borrow 10"] = "borrow 10" d["carry"] = "carry" #in columnar addition, ie. in case of 4 + 8 you write 2 under the column and carry 1 d["demo start"] = "Start >>" d["demo next eg"] = "Next example >>" d["demo next step"] = "Next step >>" d["demo write"] = "write " #used to show which digit of the result should be entered in a box, ie. "enter 5" d["Demonstration"] = "Demonstration" d["DIY"] = "Do it yourself" d["Ratio"] = "Ratio" d["Working with large numbers"] = "Working with large numbers" d["demo rewrite"] = "rewrite " d["remainder"] = "remainder" d["demo_result"] = "result" d["TimeMatching"] = "Time Matching"pysiogame-1.30.811/languages/it.py0000644000175000017500000004461112201770057015713 0ustar tigertiger# -*- coding: utf-8 -*- #FAO Translators: #First of all thank you for your interest in translating this game, #I will be grateful if you could share it with the community - #if possible please send it back to my email, and I'll add it to the next version. #The translation does not have to be exact as long as it makes sense and fits in its location #(if it doesn't I'll try to either make the font smaller or make the area wider - where possible). #The colour names in other languages than English are already in smaller font. #when translating the "d" dictionary please translate the values #and leave keys as they are (the keys are sometimes shortened to save on space) #Example in German: # - d["Welcome back."] = "Welcome back in the game." # + d["Welcome back."] = "Willkommen zurück im Spiel." d=dict() #word lists shape_names = ["Triangolo equilatero", "Triangolo isoscele", "Triangolo ottuso", "Triangolo rettangolo", "Triangolo acuto", "Quadrato", "Rettangolo", "Trapezio rettangolo", "Trapezio isoscele", "Rombo", "Parallelogramma", "Pentagono", "Esagono", "Cerchio", "Ellisse"] solid_names = ["Cubo", "Prisma a base quadrata", "Prisma a base triangolare", "Piramide", "Piramide a base triangolare", "Sfera", "Cilindro", "Cono", "Toro"] numbers = ['uno', 'due','tre','quattro','cinque','sei','sette','otto','nove','dieci','undici','dodici' ,'tredici','quattordici','quindici','sedici','diciassette','diciotto','diciannove','venti','ventuno', 'ventidue', 'ventitré', 'ventiquattro', 'venticinque', 'ventisei', 'ventisette', 'ventotto', 'ventinove' ] #'ventuno', 'ventidue', 'ventitre', 'ventiquattro', 'venticinque', 'ventisei', 'ventisette', 'ventotto', 'ventinove' numbers2090 = ['venti', 'trenta', 'quaranta', 'cinquanta', 'sessanta', 'settanta', 'ottanta', 'novanta'] def n2txt(n, twoliner = False): "takes a number from 1 - 99 and returns it back in a word form, ie: 63 returns 'sixty three'." if 0 < n < 30: return numbers[n-1] elif 30 <= n < 100: m = n % 10 tens = numbers2090[(n//10)-2] if m > 0: ones = numbers[m-1] else: ones = "" if m in [1,8]: return tens[0:-1] + ones elif m == 3: return tens + "tré" else: if twoliner: return [tens +"-", ones] else: return tens + ones else: return "" d['abc_flashcards_word_sequence'] = ['Anguria', 'Barca', 'Casa', 'Dormire', 'Elefante', 'Fiori', 'Giraffa', 'Hockey','Iglù', 'Koala','Leone', 'Mela', 'Narciso','Ombrello', 'Pomodoro', 'Quaderno', 'Riccio','Sole', 'Teiera', 'Uva', 'Violino', 'Xilofono', 'Yoga', 'Zebra'] d['abc_flashcards_frame_sequence'] = [26,1,7, 49,4,36,30, 68,8, 72,11,42, 69,20,33, 13,29,18,19,6,21,23,32,25] #used in telling time activity #the number lists below are for languages with a bit more complex forms, ie. different suffixes depending on context - if your language is like that check Polish translation to see how to use them d["minute_numbers_1to29"] = numbers[:] #last digit when joining numbers of minutes #hours case 0: full hour, ie. one o'clock, two o'clock, etc. d["hours_a"] = ["l'una",'le due','le tre','le quattro','le cinque','le sei','le sette','le otto','le nove','le dieci','le undici','le dodici']#numbers[0:12] #hours case 1: ie. ten past one, 22 past three, etc. d["hours_b"] = d["hours_a"][:] #hours case 2: ie. ten to one, 22 to three, etc. d["hours_c"] = d["hours_a"][:] d["time_string_one_to"] = "" #if you never use the "to the hour" form leave this blank d["time_string_one_past"] = "%s e un minuto" #pick either mh or hm version, or leave these 4 blank if you don't use to the hour form: mh means that number of minutes will appear first in the sentence followed by the number of hours, the hm is the opposite. d["time_string_to_mh"] = "" #not applicable in Italian d["time_string_past_mh"] = "" #not applicable in Italian d["time_string_to_hm"] = "" #ie. 3:55 = four o'clock in five d["time_string_past_hm"] = "" #ie. 4:05 = four and five minutes #if you never use the "to the hour" form leave the above fields blank and only fill one of the following two d["time_string_1_59_past_mh"] = "" d["time_string_1_59_past_hm"] = "%s e %s" d["time_string_3q_past"] = "%s e quarantacinque" #if you don't use quarter to but rather past use this one to either say it's 3 quarters past or 45 past d["time_string_q_to"] = "" d["time_string_q_past"] = "%s e quindici"#un quarto d["time_string_half_to"] = "" #not applicable in Italian d["time_string_half_past"] = "%s e trenta"#mezzo d["time_string_full"] = "%s in punto" #google translated fruits - are they ok? {was quite ok!} fruit = ["mela verde", "mela rossa", "fragola", "pera", "arancia","cipolla", "pomodoro", "limone", "ciliegia", "pepeone", "carota","banana ","anguria"] fruits_1 = ["mele verdi", "mele rosse", "fragole", "pere", "arance","cipolle", "pomodori", "limoni", "ciliegie", "peperoni", "carote","banane ","angurie"] fruits_2 = [] #[[for this number of fruits (in range of 2-7) use names from fruits_1],[and for those from fruits_2]] plural_rules = [[2,3,4,5,6,7],[]] #used for some languages where there are more than one form for plurals depending on number #alphabet - it alphabet_lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y', 'z'] alphabet_uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z'] #correction of eSpeak pronounciation of single letters if needed letter_names = [] accents_lc = ['à','è','é','ì','í','î','ò','ó','ù','ú','-'] accents_uc = ['À','È','É','Ì','Í','Î','Ò','Ó','Ù','Ú'] #game start d["Hello"] = "Ciao" d["Welcome back."] = "Bentornato nel gioco." #settings d["Preferences"] = "Preferenze" d["Language"] = "Lingua" d["Reader"] = "eSpeak" #d["Reader"] = "Italiano" d["Read Instructions"] = "Leggere le istruzioni all'inizio del gioco" #menu categories d["Info Category"] = "Informazioni e impostazioni" d["Keyboard & Mouse"] = "Tastiera e mouse" d["Discover Letters"] = "Scoprire le lettere" d["Learn Words"] = "Imparare nuove parole" d["Maths"] = "Matematica" d["Numbers & Basic Operations"] = "Numeri e principali operazioni" d["Basic Operations - exercises"] = "Principali operazioni - Esercizi" d["Sorting and Comparing"] = "Ordinamento e confronto" d["Geometry"] = "Geometria e riconoscimento della forma" d["Art"] = "Arte e colori" d["Memory"] = "Memoria" d["Games & Mazes"] = "Giochi e labirinti" d["Multiplayer"] = "Giochi per più giocatori" #games d["About."] = "Caratteristiche." d["Game info..."] = "Informazioni sul gioco..." d["Credits"] = "Diritti e riconoscimenti" d["Hit the Mole"] = "Colpisci la talpa" d["Letters"] = "Lettere" d["Letter Flashcards"] = "Impara le lettere con le schede" d["Learn to Write"] = "Impara a scrivere" d["Trace Letters"] = "Riconosci lettere e numeri" d["Complete the ABC"] = "Completa l'alfabeto" d["English"] = "Inglese" d["in your language"] = "Italiano" d["Sorting Letters"] = "Riordina le lettere" #(could be also "Metti le lettere in ordine alfabetico") d["Lowercase Letters"] = "Lettere minuscole" d["Uppercase Letters"] = "Lettere maiuscole" d["Word Builder"] = "Il costruttore di parole" d["Word Maze"] = "Labirinto di parole" d["Collect all"] = "Raggruppa le lettere nel giusto ordine" d["Word Maze + 4"] = "Labirinto di parole +4" d["Numbers"] = "Numeri" d["Number Flashcards"] = "Impara i numeri con le schede" d["Learn to Count"] = "Impara a contare" d["Basic Addition"] = "Addizione di base" d["Basic Subtraction"] = "Sottrazione di base" d["Shopping List"] = "Lista della spesa" d["Plus or Minus"] = "Più o meno" d["Basic Operations"] = "Operazioni di base" d["Multiplication Table"] = "Tabella di moltiplicazione" d["Find the product"] = "Trova il prodotto" d["Find the multiplier"] = "Trova il moltiplicatore" d["Division"] = "Divisione" d["Sorting Numbers"] = "Ordinare i numeri" d["Number Comparison"] = "Confronto di numeri" d["Addition & Subtraction"] = "Addizione e sottrazione" d["Comparison"] = "Confronto" #(also "Comparazione") d["Fractions"] = "Frazioni" d["Decimal Fractions"] = "Frazioni decimali" d["Even or Odd"] = "Pari o dispari" d["Shapes"] = "Forme" d["Shape Flashcards"] = "Impara le forme con le schede" d["Solids"] = "Solidi" d["Solid Flashcards"] = "Geometria solida con le schede" d["Shape Matching"] = "Forme che corrispondono" d["help me find my shadow"] = "aiutami a trovare la mia ombra" d["Paint"] = "Colora" d["Colour Matching"] = "Colori che corrispondono" d["label the colours"] = "etichetta i colori" d["Follow the Arrows"] = "Segui le frecce" d["remember the directions"] = "ricorda le direzioni" d["Photographic Memory"] = "Memoria fotografica" d["Training"] = "Allenamento" d["Photographic Memory"] = "Memoria fotografica" d["Automatic Levels"] = "Livelli automatici" d["Mouse Maze"] = "Labirinto con il mouse" d["Let's have some cheese"] = "Diamo un po 'di formaggio" d["Sheep Maze"] = "Labirinto con le pecore" d["Find the rest"] = "Trova il resto della mandria" d["Connect"] = "Connettiti" d["Balloons with threads"] = "Palloncini col filo" d["Fifteen"] = "Quindici" d["With a Twist"] = "Con una torsione" #game instructions d["Drag the slider"] = ["Trascina il dispositivo di scorrimento verso l'alto o verso il basso in modo", "che il segno giusto si trovi nel quadrato rosso"] d["Take your sheep"] = "Unisci la tua pecora al resto del gregge" d["Check the shopping list"] = "Controlla la lista della spesa e metti nel cesto tutti gli oggetti che servono." d["Drag lt"] = "Trascina uno tra <, > o = (minore, maggiore o uguale) dentro il riquadro rosso." d["Drag lt2"] = "Trascina uno dei minore, maggiore o uguale dentro il riquadro rosso." d["Re-arrange right"] = "Riporta i numeri sovrastanti nell'ordine giusto" d["Complete abc"] = "Completa l'alfabeto usando le lettere sovrastanti" d["Write a word:"] = "Scrivi una parola:" d["Find and separate"] = "Trova e separa i numeri pari da quelli dispari nelle serie sovrastanti." d["Re-arrange alphabetical"] = "Riposiziona le lettere sovrastanti in ordine alfabetico." d["Re-arrange ascending"] = "Riposiziona i numeri sovrastanti in ordine ascendente." #game dialogs d["Please try again."] = "Ritenta." d["Sorry! It is wrong."] = "Mi spiace! E' sbagliato." d["Perfect! Task solved!"] = "Perfetto! Compito eseguito!" d["work harder"] = "La prossima volta impegnati di più." #level_controller d["Game Over!"] = "Fine del gioco!" d["Congratulations! Game Completed."] = "Congratulazioni! Hai completato tutte le prove di questo gioco." d["Great job!"] = ["Grandioso!","Perfetto!","Imponente!","Super!","Ben fatto!"] d["Perfect! Level completed!"] = "Perfetto! Livello completato!" #game specific labels: d["area:"] = "area:" d["perimeter:"] = "perimetro:" d["surface area:"] = "area di superficie:" d["volume:"] = "volume:" d["Perfect!"] = "Perfetto!" d["divided by"] = "diviso da" d["multiplied by"] = "volte" d["equals"] = "uguale" d["Shopping List"] = "Lista della spesa" d["Even"] = "Pari" d["Odd"] = "Dispari" d["white"]="bianco" d["black"]="nero" d["grey"]="grigio" d["red"]="rosso" d["orange"]="arancione" d["yellow"]="giallo" d["olive"]="oliva" d["green"]="verde" d["sea green"]="verde mare" d["teal"]="verde blu" d["blue"]="blu" d["navy"]="blu scuro" d["purple"]="porpora" d["violet"]="violetto" d["magenta"]="magenta" d["indigo"]="indaco" d["pink"]="rosa" d["maroon"] = "marroncino" d["brown"] = "marrone" d["aqua"] = "verde blu" d["lime"] = "giallo verde" #new d["Keyboard Skills"] = "Tastiera arcobaleno" d["Touch Typing"] = "Insegnante a scrivere con il tocco" d["Translators"] = "Traduttori" d["English Alphabet"] = "Alfabeto inglese" d["Your Alphabet"] = "Alfabeto italiano" #new in 0.3.0 d["Paint Mixer"] = "Miscelare i colori per dipingere" d["Mixing RYB"] = "Miscelare pittura rossa, gialla, blu, nera e bianca" d["Light Mixer"] = "Miscelare un colore aggiuntivo - Leggero" d["Mixing RGB"] = "Miscelare rosso, verde e blu chiaro per ottenere altri colori" d["Ink Mixer"] = "Miscela sottrattiva di colori - Pitture, tinte, inchiostri" d["Mixing CMY"] = "Miscelare pitture ciano, magenta e gialla per ottenere altri colori" d["Find the colour of the circle"] = "Scopri il colore del cerchio" d["Adjust CMY"] = "Correggi il dosaggio della pittura ciano, magenta e gialla" d["Adjust RGB"] = "Correggi l'intensità del rosso, verde e blu chiaro" #the following is used by colour matching games in spoken hints #ie. "more red, less green, blue is ok" d["more color"] = "di più" d["less color"] = "di meno" d["color is ok"] = "va bene" #in some languages to keep the colours gramaticaly correct #the ie. red will be a different word in "more red" and "red is ok" #ie. in Polish "więcej czerwonego" and "czerwony jest ok" #and in the following 2 element lists first element is used with more, less, #and the second with the "is ok" - in most languages those will be the same, but not in Polish or Russian d["of red"] = ["rosso", "rosso"] d["of green"] = ["verde", "verde"] d["of blue"] = ["blu", "blu"] d["of cyan"] = ["ciano", "ciano"] d["of magenta"] = ["magenta", "magenta"] d["of yellow"] = ["giallo", "giallo"] #new in 0.3.1 #d["brush size"] = "dimensioni del pennello" d["brush size"] = "dimensioni" #new in 0.3.2 d["TicTacToe2"] = "Tic Tac Toe 2" d["TicTacToe3"] = "Tic Tac Toe 3" d["multiline-tictactoe"] = "Ottieni più linee di 3 che sia possibile per vincere" d["Player"] = "Giocatore" d["Won"] = "Vinto" d["Game Draw"] = "Disegno" d["UserName"] = "Nome dell'utente" d["Match Animals Memory"] = "Fai corrispondere gli animali" d["Match Fruits"] = "Fai corrispondere i frutti" d["Match Vegetables"] = "Fai corrispondere le verdure" d["Match Numbers"] = "Fai corrispondere i numeri" d["Find pairs"] = "Scopri le immagini uguali" d["Sliced Images"] = "Immagini affettate" d["Sliced Animals"] = "Animali" d["Sliced Fruits"] = "Frutti" d["Sliced Numbers"] = "Numeri" d["Fraction Groups"] = "Gruppi di frazioni" d["Percentages"] = "Percentuali" d["Ratios"] = "Rapporti" d["Fract instr0"] = "Confronta le carte delle frazioni sulla destra con quelle sulla sinistra" d["Fract instr1"] = ["Confronta le carte e le frazioni sulla destra","con le carte delle frazioni sulla sinistra"] d["Fract instr2"] = "Confronta le carte delle frazioni con le frazioni sulla sinistra" d["Fract instr3"] = ["Confronta le carte delle frazioni, le frazioni e le frazioni decimali sulla destra","con le loro rappresentazioni in percentuale"] d["Fract instr4"] = ["Confronta le carte con i rapporti sulla sinistra","I rapporti sono espressi come rapporto di pezzi colorati con pezzi bianchi"] d["Maths Matching Game"] = "Gioco di confronto matematico" d["Addition"] = "Addizione" d["Subtraction"] = "Sottrazione" d["Multiplication"] = "Moltiplicazione" d["Division"] = "Divisione" d["Check for newer version..."] = ["Controlla la presenza di versioni più nuove, riferisci sui bug, discuti, traduci","o revisiona questo progetto su:"] d["Match numbers to their spelling"] = "Confronta i numeri con la loro pronuncia" d["Number Spelling"] = "Pronuncia dei numeri" d["Match Animals"] = "Confronta gli animali" d["Find all matching animals"] = "Trova gli animali corrispondenti" d["Match animals to their shadows"] = "Confronta gli animali con le loro ombre" d["ShapeMaker"] = "Creatore di forme" d["draw_instr1"] = "Forma da disegnare: %s " d["draw_instr2"] = "Forma da disegnare: %s" d["size_instr_0"] = "così che le lunghezze delle loro basi siano uguali a %d e %d e l'altezza a %d" d["size_instr_1"] = "così che le lunghezze dei loro lati siano uguali a %d" d["size_instr_2"] = "così che le lunghezze dei loro lati siano uguali a %d e %d" d["size_instr_3"] = "così che le lunghezze delle loro 2 basi parallele siano uguali a %d e l'altezza a %d" d["size_instr_4"] = "così che la lunghezza della sua base sia uguale a %d e l'altezza a %d" d["size_instr_5"] = "così che le lunghezze dei suoi catati siano uguali a %d e %d" d["size_instr_6"] = "così che le lunghezze di entrambi i suoi cateti siano uguali a %d" d["size_instr_7"] = "così che la lunghezza della sua ipotenusa sia uguale a %d" d["size_instr_8"] = "così che la lunghezza di uno dei suoi lati sia uguale a %d e l'altezza a %d" d["size_instr_9"] = "così che la lunghezza del suo raggio sia uguale a %d" d["square"] = shape_names[5] d["rectangle"] = shape_names[6] d["right_trapezium"] = shape_names[7] d["iso_trapezium"] = shape_names[8] d["rhombus"] = shape_names[9] d["parallelogram"] = shape_names[10] d["quadrilateral"] = "quadrilatero" d["trapezium"] = "Trapezio" d["u_trapezium"] = "Trapezio" d["triangle"] = "Triangolo" d["squished_quadi"] = "Ouch... quadrilatero schiacciato" d["equi_tria"] = shape_names[0] d["iso_tria"] = shape_names[1] d["obtuse_tria"] = shape_names[2] d["right_tria"] = shape_names[3] d["acute_tria"] = shape_names[4] d["right_iso_tria"] = "Triangolo isoscele rettangolo" d["obtuse_iso_tria"] = "Triangolo isoscele ottuso" d["acute_iso_tria"] = "Triangolo isoscele acuto" d["squished_tria"] = "Ouch... triangolo schiacciato" d["circle"] = shape_names[13] d["triangle_not_really"] = "Triangolo? Beh, no davvero..." d["test_yourself"] = "Provaci tu stesso" d["Clock1"] = "Orologio" d["Read time"] = "impare a leggere l'ora" d["Clock2"] = "Orologio" d["Set time"] = "impara a regolare l'orologio" d["Set_clock"] = "Imposta l'ora a:" d["Set_clock_instr"] = ["","Trascina le lancette dell'orologio","per regolare l'orario"] d["What time"] = "Che ora è?" d["close_confirm"] = "Clicca ancora per uscire" d["answer_enter"] = "Scrivi la tua risposta e premi invio" d["enable_untranslated"] = "FAO: Traduttori - abilitate questo per mostrare le lingue non ancora tradotte (per prova):" d["Fullscreen:"] = "A pieno schermo" d["Time"] = "Ora" d["Play_w_clock"] = "Gira le lancette dell'orologio e guarda cosa succede." d["lets_see_what_you_draw"] = "Vediamo quali forme puoi disegnare" d["txt_only"] = "Orario soltanto nella versione testuale" d["Clock0"] = "Come funziona l'orologio?" d["Columnar addition"] = "Addizione in colonna" d["Columnar subtraction"] = "Sottrazione in colonna" d["Long multiplication"] = "Moltiplicazione lunga" d["Long division"] = "Divisione lunga" d["borrow 10"] = "prendere in prestito 10" d["carry"] = "riporto" d["demo start"] = "Partenza >>" d["demo next eg"] = "Prossimo esempio >>" d["demo next step"] = "Prossimo passo >>" d["demo write"] = "scrivi" d["Demonstration"] = "Dimostrazione" d["DIY"] = "Fallo da te" d["Ratio"] = "Rapporto" d["Working with large numbers"] = "Lavorare con numeri grandi" d["demo rewrite"] = "riscrivere " d["remainder"] = "resto" d["demo_result"] = "risultato" d["TimeMatching"] = "Orologi che corrispondono"pysiogame-1.30.811/pysiogame_icon/pysiogame_icon_100.png0000644000175000017500000002131712201770060022047 0ustar tigertigerPNG  IHDRddpTsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxyUkWO!Nw$$H "xA ʃ8N^E TfP"2@ $!cgNzNjG9twB~׿g9ջ^Z{]/}i%&@Wo$[ov 1 daq B&g daq B&g daq B&gwsD<yȩ"R}"d{+01"W\#[eGH1H{1soHqY沰\zs&E%4)*QX|6h5?=bIJG"lD754Ӏ!`k2i W¯J˝IѮX*#bXi`EIQԆ/G,>lm1~k c}=x,0n^<XHӦ/bqIp+ei ֙Y!G,G,VF,'̋Me [ ŵZK6bq1ی1?7}Hlpm<19&+r'k"W%WţE7h[)gF,^XQEDɈI\"R*"Ed:a\k |7bqFbWXqADvF<8R0/-XQX]Z#7G-XD"D,D,~FXX'F,nH%hRTUXH!E\`/gEyˆˇX=![qayKq%,,œN%|5bV  4;%p]c(56~)|_~0Rnr4#lJiPJQxVEz1[1 "[8RD]!ّacL4 Bd+n>[%%|B 7(aD'Żmbx RKؠ4JomGh)1q5iǮ6ZQ / 7#W,/w8|?0_`JdiXdHQʑᗐOSeGU L%B( yB[- =Ku%44_8YMcV7٘lrab1Vgx 2B}Hiu5EBCNpJ]WIM"ŠB!EkHQRTZuHA D@::1=g鶒~;Ƙn(QJ.c=SKS1G$:; d 1nNs*y=Ȋ )=d-7e̬w߱rؒuI|Rarh] p5b92$hxO`h*\u".n_][WǗq~M|G)BN1{RUAH򈟨'ŗƚ5b å'񣮴yaKV<Ϙ{sfU lEsؗ>dy !GJޡ@mCfX.1y}Wr^yXPgJ JsڠaaX"RAk`ɓStQfsZy3 6%vXg/dԆwbR~xbC7&=8\ #CI?^.g5W TDDM%|he=gE-B['¶&/1^;B׃, (, 2ɼU| *B#'5!y9T] DSIs$1t;\6l3|%ב7x頬㕌Nt!|G3m c3!{̿m'n sd!5{5 iwa(H)&صvL!nww^G*m ۱-EFYL.6p9WOo0Ml8ඖ> h>IænCw_*҉:?mf6q>&!;i]'_ib_^1à?҃20oIhʨVM!f9kF~d2Ok+`Ktty9w }Թr2\>s,ys\0-lm/!chem;#1Yee[\_f15l39қr8x0c(llQ/۞yԵ+FlJc!~a6mľ}^(غa? =CDI=a/ZԶw~B~kX,_PgaLMQVL+05$Tg\rߠ1#q<&"7(kQ`ya) #1\*5!GF8 }<_,]Xnj26oޜK?Juzy%s7QUOcer;uC̎B+JKۓcX8"xf辐A+T¬ZVjSY_NvuY=?EipȠ.}k7E8m?~^p]U=|JdO}d?~ts167JDCjcaJ!2dx}}(eY5?[k xASsoe\r 4W"ynu)skRhbCK+m4Iz?|e?Ufj}$l4szi?0ne}RV^lOq~H1wtn:}65%/~%BFٰWv wXf!X.R"+12BD,^pa-lQ.j!02P]^?NM\]MIyN ([qF.\H"]޳|Poٜ;g2_\=vk0>xPs C[w0rp4fT76S $8$]O7/lJrAB7jEQ2G6B6lhQK:h(Ϲ ^2~|ZL厧^3+2 o7"sy惫f+Cڦ3kgW`Vmy OFV{90BPm\Lcu)~bAD^" _mɭ7!3iW[żׂ 1◬Q=w9YB\odd |o>n_J(MMM~̘14Kl߾!}|a~(JBVaj:ӄԄ½J/8DM\71-9yzV<%ե%,nߊ_I;.%MxSVWHľ$}ij,***hnnP('>[ZZr/t3ԗ6_ÖA2)Dڡs(5+ʙQU6x"ʪ<>'oTxCېYZT[X-(G[ڹyd| /d#|r. 8$ p۶fqf̼(5#\N/抨MMh`Fmaq.Q4: ꁯ˨0TF"lMRxhWY=|z e3eSJ0Ɛfioo^c׮]߿;wyf8@*UXOZol9g'; <xXuEXXE%1,rɯ0cdroB)ǣ0m*-x̯'$n=dRh϶Ӟ~z(--ehhvzzzp]1.ħΙ9y" Cll佳k( Y<X;*e c]_"ހ>7FȝIwЬw n)ϸtG's8}Ƥ¢ɰk WͨϧA`QJ8lu'l3FJ _*#<%|hIC` &Xة(U-WMQxFAKCL6+r> n|CR*#6.o?++`!c]+gTs5VLlƐMgzY4sJ#4M4&om$OlmeSsϽiobrY\Y`a0^g߀>7@1f b JYHO" B1v%!(?upj%S*k޷؄d~vU9G|_Ҿ4N.{MqB^au kHPҐ|9nx+,G17bF5jˎJJ[;f[eJ6?pU:PPN6A).KrgMK=:H1D|>jV뀕 WhbͮnJd\2n!|EsY4y^Pvd태ϧ)}y2䳃A>LCI}^G‰!Kv8כMr'Lߋz׭ƃ |pǷ%=t X5Vxk, 'txՑWq)M{"i ;lv5{ՆG8Ah҆^9W=sXS"\Bճ]2doN}aOk7Y؜nZ8LgvtrS c Q1Tko~CԆpOr0c~h(HҀ(ԗGםvk ]9g߸l6%d֥g(CcUC=|Șȸ<~cLF^ֆGWGÉ"d&y<;*PhXesA=1|OCqpl.빖>kGַG?e|`y4҆$1 ü1&GcŅCߧ6sݩ teh.8vvqڌI^8`;-&mBHޫ|)ӪIdX^^vv9sv+k_;6R,mx/:N!ih{v/`d~]\}}/z`⛏o}'x|WqON+:kvvot锏b꧱p΂zvK'Xt wRvGC75{ؽdO֍: gvuǃk<2޲w.>33Z/75ʹeG|S* #\rr#B ugvԆ6QimH x10{J6;Y[DW\w`o^mk[ŷ%{:⇁k\?vKB֨aڹnX m7A?M@ ]/akwuƩ-0iDc>r/c;ޖ>Z"{>{漚ח|101;w6KѤŁ@^c"@PTͯC T^b@_bs[-m_no[P۝oj돌(&Mxɔ7U6e @IDAT)viӫ*JѴ+q7O* Ā>vr.̫nZA6B{E71N⺟t4M[2ڀxCnNbNQ@r?b%orsNX{"{p/sK U%|SgE l"´6Wvl>SO;k[~p2_WΪ]Y7%W,+֗d>.Ys>wqד7Uqi!__z]cU .rD2nz wyߍ'\7B޻]y׭~׵ήG>v\zN/jOv?ήy|czsl{BrxnW˧V\[~̚Xc}yICUYA&3n=IDATh{p\}?Ǿ깲eI-8`b&dڒ $mC@!v<5cc6 $˲WVݻwァ07sfws~=SjtkݺuHss3B) -2)b8ǜB7^&Rt5WeA9fp b !~(](Ku%Apwj_GŢcA JU v<]Q6_WjPJS@H#0hIVUj|x\,)a+v;c:wbuƥxW x%0BTܯ o;lVg[$&lo!N@Cuɀ.A\! ={ $/?5sJ " q}e"ߝg pE[*^jԩ K7D n lh|9dP40$1], (ۣܖ`|Vwa(; !^TJ (sVpKD^RP>QdtM"*# rtzL7&TN],n|5C L 4O+=ȹ`H4] ^h.$UEܱCH)0u G̚BBT" k;drq#!]VRkǬ#ud8ޜԔ0# ɜ?l":,Qc<=Q,*զJq)uM2 "AC8ǩ~9!$FQ$V ^'.QD .^JO0`CصRk/VZ[W,FLA 4)F&PBx4I8h&+:d)WVCօH;?z}k.;SYHZPp=vubîς@^P[Jm΃#v@ynѡ*)dZs$Bpjilcy+Gι豴פY,0bХPjOe j!gL  b~nb}?.]܎,՗[?? *\5*r,FĘF[ Gb0cJ) AEHSH\v&5+Gizv W.sMT̪]7OPCx|]!MQ1(p\#1[Bjm:gkS)* 9ek!A'UrBš ]+) _HA ,ףLdCJbaҹzm9 _Ok vzE bT==iNr kq7NE]H`"0 X.`KSx˫r'rXyGmm-_|1/4MtgιOxĤTu*Eo:S!- 犁;fcAUEl`nUB +Ϸy9B__\R_R8@Mm;TDL] ]&QUL~05Tx75qC)ryꔗv=KB YLjcVuq'i?÷oEȑ@)8ێKR9街Yhؤ7ûm}$ydl˩W' {5kB` c\P&Bi(y֗1֋ 0o4b }i{3i֖ 2i/8}vϾuwG_8W|a>E,ho'o6Y:a,0^]~͂_ܺlLfGL#wܡrx }L`ہ$_ywdZ>%pT477[:T/tCqIENDB`pysiogame-1.30.811/icons/ico_g_0800.png0000644000175000017500000000706512201770060016323 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh}V]?sWe7,X @4IqhbZ3Ɍh28DcĒ&j&JӤ -]>>8{Hrs^9&|D,i dn$C1hع)۾F C&$ 4̀iYwcqMF>mP<-k;2a0Qaf`&5cIJc88&Il(  bz3ۯjN23V٩emN`A>0nN0?<3SVbvA d-q[g>{?vU(K31l -SF:FgJc`!0 cS476;@!%RFH):"}IIE!feq b\|Ap7ΣH`$hi0҂c --g76 ܁"P*BE(PJEnL)SJ!YwƹdmW06n\Zc2њkrP"nqb6eq(x]S\s˴+V WI@;f *@x:hלeZpltU}kW3Rީֹ 0ŽRоo @\Ȕm>jKI/3%Zkp0蘵^û´til%[$e؋B{pI h^Dro״);vՅMƬ[B^OsVQ qs1MttldpapMiQ E2NrɸP$"W*%͌t-b>Jػo~]ǻDŖ}aAH`s066U;X}.Er[S9ɩI~峿>Kעw$W6'/ DWuy[L>hc-"Z}h&cLLs ?O ,>B ۃ`3;"#>zuɭzp&ײȍ &߳o]|! 09ӡjB@d#m֬5ZgE4w}N0YvekwD\O=T>e@|9z?Ctλy3]10c[zƥ#.ײiJ|,T2PWW{ϻKuVrUE`TIp9ioo$IjCCC^nrN4+WAO' c Cm`(b#Zci*Cƫ%UtYI^8fddWf6mݻݻYz5Vbjjal۶wóLf0RP":6̌W0ԙ+TF&MUɪ5L363 k[hoogll(CCCqСY :tgt-Y4Xeb6ς3rRM-8$ȳ֬FJ se*npdsΏre4MV9Y@Ο?]wEcc#---(bddg222B` '?${>׊bdH΃6 8 Xd ֭+E4MI4zRUŚX|9=zKӡT-RITrvu c?g=HKK ˖-fZaÆYc===Ώ 60::jOM aJ9% !UgJ֮];kIӔjʭSnY2IT6] a4 S8ׯЇ/ަICB}HVn^;/lDZkԕ(YsW`JD0F2GQt$_>M|~ SKgz)YI9mDaHBE,Q7sySNһ!XfMV_>{Xu@$QC2u$4! eHbUwfTbE+[֫jKyv5s=1㬈;fK6T摆Ґ!%QIy(N*}8ncǢEx֗EQD{{{ʟ ټ3HYzTI {Eq;)S/bRED8ݣngכyw|<쳳 xs<0%0SԃT$$L8@,ax0"qx8g.,#ꏾyot~tt #Ny ^;7lVUJz27(B%q ī] 8:} ҭ)Y7~ +8q;vyf|N"1TLwK+܄_Z^ ;ݪ{j{ڶ_ƭFVU=QBJDaq @DeN]%NRZO*S3vg {LЪfk_G&d̘ۈ=_ʍ>M[K1G7摆ZA Q!% ڈ'}w ·߈8) L {lάvp-v%"QK;w:AA QLWe)uج;`:I|y#17Oܼmc=3N SjRVGY%FH]rIENDB`pysiogame-1.30.811/icons/ico_g_0202.png0000644000175000017500000001054012201770060016307 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚k$Wu[3=ػk{ $@ ! "LH Gʇ%8&0Jŀmo֏}>gv3=U]{󡪺{v|LIշU{-ϼ{7]ǹڹ>>.qG3HG|ceA"(+TJoȁ?0N{>q.oVJ(%#@\i<xy`4Ϭ=+Q$'yYK:&] @mv>P}XAJlRj/c P H6nTڋo9 .+vfHn\N-(T}#SZ,MD {UvPY(2$@-O Z'c8LhR³">rLA W95h8ʃEUS+(*kyZKu\n.OVPYr[ǯ'h8ki&=zIsi~/%J;7īm`R?CvPwE4`p36`KY:^oF<|oڌJ"98 `&Hx!6Jw"g^'Xp'`jƝx/[#Ght;^\lEş4-3,L.)}[V1:RW*d?`m>(aH #n:K6xlÇ{t:!Zuoee-!I-kQe2↙F ނIPˍDC$efx4IJf,X 8tKƓ+Tv_CC~=yAm l)s"fFU+GʞC9p?O\=_^IӘz-eX KIOxi%3<%B]ʙP%E[iU:`ĕ$w6 s.2b-o";7UU'V&8YS5&'jx*z+/rTl˅(<>$L|/ GY!NQNQLbS:;|z cj>2+N[V˒F^+Ȉv}brhr_VV9r$'7W}*~Š+iG2{LKm`8*SrF Gbvۍ>_`jNbo і> 6'*THJ'epl I>rG I1Y+]T!"8DDP"HO]gx?Fa\yH*U1깆a#~;Vٷ!Q%Uz:Qjʑ.$zf/>pp|m3P~h~I 6 `rBe/ ⦱u za0ls f6119ƶm5N.6z18)6Όpk8>wssC l}[yĺG/u`̇3YFiA8v gt1k݄F#D$AL&QڱwpDŽ-/<-gC>rtI,0gHLZbZY>SpOBp#fn&۬-.4l۶ IҾB; H$HRDEm_]?9;yQfOp"_#@KC)*1g)rzͧiDZl_Vcx-ĥcO'L\ *S+.r|:|]Ȅh㲅ضZ *7M@S8 mƪ^ȹs]| h/QS1jԽS$YaFaLp)I")Lɔ慀s+^o)xG7֨;U\ њ+fgV5A-b񙇛/qYx̽H:Ȉ1.*fh`_+{Sҽ)hD3zǞY?j͞';vaj֡ ֮39UZ 6֦ivLsWD֏CkQlBTO+=(CLiE?H<:R q1&qWgsz%(2W= }vJ[Yu ?h@iMY\P*,; ^sN@k3)JP@Q—dž+W)J Tʆ?ž햳 Ҍy}a׮ qZwLn޿Gj"*Ey9(Q^u^؈*Rh,滿XR 4e.AN'Y _ٿǝ{&۫ F 9^Zu*^N MZ>Ɨs*9lUjJͧ]+8 ƞW+lQQ6&!cSsˮd 9 Z qsU+IL 6uaD]ƒl&B0srI A%}Ց^Ԩz}^ʌVTCvnNh+OLH{U'Ku?~K7:axB c2U*V瓲R胀Քƚez<_{/,k n596p|V(([]QU~H^^ 6) |>8  s۷U1`UT l3"BA^HɅ(y R\`J,#wYDKy`8&qI,Z>{_\rI߼CPkF_%v{-E2ay*f')X΀(B+|l((A}Kvdc)e}C>R ٸ9/UV>|IB? :`fD0mR@wl<M0(~R R^j3ajIENDB`pysiogame-1.30.811/icons/ico_g_0706.png0000644000175000017500000000703212201770060016322 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDAThZˎ$YR=fQYUYUD#͂ bł_iY,F,KVlBbׂԣ3#qX72Ѱ!R k1;f7A`B -k 6( ~6?VB0p0 aa8`sT2 (y?F[M ʿH9glV@P)q$ (wlvBHAyH)!匜2< 焜  AW.62`~X ?xOv}}߮ZW՛cD"5@ 1L@@][ўLPGmHJ 07hFbmf`&0`fp`3T7@7@|NX]3|[@l͈}-6Ub!"1ۊ +8f?6z7gJUxg>@7X l^bf:FbԲ,8%"\.T BTdOq0:` b8WEnwk1mE)bKٿxC>R߻<"@U0#/?`Y0WVB8SjR ) RB)"3Dp #h3g!;L Č4m3#ń*LHIcӧO88NmvC۾\.!B=Hp`Z1D@anW5orᰆZv#RJxqD6cˏP Gh gfF ټq<%g?ՌZ"CFrrIwna8ϟmSī^aYf3č_տGH)!ƈa0݋'qzZT "A(N|{ Bm󲀙Q` |ɪ| #rW{1B5"ri`5 ܟ? G6.GWW8ض 1%oHS =aw8j@7z_)Gؠe /7I z R 6=jBŒܢm6< .0)Ԅknb*G u4yP "k+umkle3yj)"<8?< HcA)&qj+pLAE1_glk@xkz]x¼.ӧ0 î Ԍ'oMGSs膔^z! mC*kԲR̽+j4/v%\@5r5\+Ə#B%R ޽{Uhb5TUNH-QꞐv P@Ŧ>@E^u]ADx-.kㆊu6/3ŵH':֥8g j/|Ɨ/_Ro<)%[`d Y4>G2̌y[0< RF`Ǿ*7cO ! eFN^*`.V*G3n(xeh=>~̈́|ht<kQ,e˻Wxywg+p<09Gy ,+]͛FhMFjrtZMs_pW(w}`{nJYz8""?N r88-oh޿rkýTsmN~xSqDGb&]qٟ Ā3yFe2y{6el ͓u"rc`c&\pAq< my~Se7{^Z IurwPj 5a"'0 4[ ;'"Ҍ sCmkT+{Ռf=Z0 CFIJXTNxWu Q{ٹ"4 R8LG":05'Z7$#ÐM;9'k<䛾S5jI)6TMUbl-R_!7v`'60 rfa@{/{_s[|3imN9s GRkI/m.D8,ZPD,?TԺϞ#`(oڐګY83e^.n4F'^4L?إ~TJDH35!0 &#)8X!fjD\&KD J/_`ַ5n$|o޴N$;o}LV^ 63O[q8 `&#f Xnc_WjNgyѷκȳyj' 83Um1uV?{yK8pKNa 3".}a 6*MB`t}K 뺶P[ځCE4Qy>rua_: N o\soL24M]gH<6o?׮`W7+fEoa%z2?IBXUs^ʀG~5^:ٱ&GLAX8?swvo;Ȏ8=ǥ(%]Ά3g8\EO`4O[Ebe[>Ͻמ{*ĩMhtƗZDZTLU!˒!5\K e?gMߐΈ!tiJT4b. ㈎0Ϛ,/c@VκINBĉbLyۜGc<#RB[`<ӕנHQAL>ȒǬ $ ;ⴹ:$D Rc'Oߕ^^![@LJT7X&I0"k6 -ꔺҍήt-C, `e@4IY[S0Tl$hqG4e-蠃=$eMg%n "Iu"aۻ|h%#UB;ofocE \ (%R8!SQqJĉq duqSN71HLZ VgD Ѱ_ ώpF0=R%\Tl.[A1~G]x6$/-cHSƏ)AzK˥3T3"(X6ik7׹4Nhıc$j2b?.#enP֠d+  }ì ;^|궝1åIwPה),)?O[V瞲*B)/|AH@#ε/@υ$+VD ]̾DUR+ͳV!"@YrL2w~[m/ , _ϸ4tPңݚwfy{GA2_Y&wY> O,Q6Ky Z :y ZN֡v_m;7qɷCVWWh[f-0ҩg hƀfiy'&//gp@Q ,_x'iˮO:~*t\@»X/s%y3 \xncc@,-F6 0 7c&&gR8Vt HƁ0Ų%IGU .KIH IqGj3ѨXvn kS._ZEۯ܁2,I,#-_,/1xH"]UJC7npAل7 7jy1Vymd@En8o% sK<7jг4#'9p{mB (т;gr^xn&+ cCc/_I1M0}ʁq$z9낧(pqMuKѿf}yB 8wpMW!{rW¯3U^95{Ȝej4߾7XWF.( =5 ,M qcjv v{Iq0L\XBg9sm&ZDʱϱKIE#Rz I~{6aIa O!';|#XS//n/bs8;?*mh•%?ӳm>}4i_G_['6c6ǐ̭$wґk9XmgW!;Z!r]q/39u陕 @э1w9ٲ}ow'Ǿ{`7{ C%=oYm$[ٵw_!Pf-i.4tm:}OK^#6--;Zf u,$,-'<kܰrj7ݍʃbljq_l5rVu>ᐌKuuK-|Er6rC*_[Un=8 aT$JQXRjb]K2.el:ͫgN 3赖y lj1J,Bfv~w[:z*9ArKK/SOq+f{mu%b-5bCD'zR1zT4 kGF8b3ir4#nt~%-BV疍3:zC_)P|2Z?ggQy# kfld?XRVMo֫\Tƃ1_F@6F`uшepe0';q$ :827{}@.h%Vd&^/`tZ^*첼2^s=G-X5j:γ )q 9nWY˧9ɹW - _?,˯,ѿ1epiΧg|WyO}~0wa%Y#zzi؛BBb!ƶ6 dehPͦBYv$]cl&. 㶍FogYm[j| -3_)rFt[?:. SR,==ukbO|1>>Yp`z2YLS>2V׃1J4t{wǞY,߰t{ F( 5BvƷ sizFsM%>_ۧ?*#Æ|<7?rwݴıw~iuR?<:|Ow]J9+ܓ["~R#d_?3}1xN,[GԚ@g:v-: F :fpxG *\x#ǺI,::Yl8{IAǵޖXڔ=x_8yu^TW-^|HYˋP3:"OE5AMg&ocz#9}_8R%U y+=ڸ}ϣ"w𐆄x aOc&/~LD&*YLlM QѐZȓ°~ 1tlĬIQ"4&2ĵZoVVE&*TcL &*39@|K5 >'=uuDEőD@Tȃ"Le""cfg@VYIJC5(55D+֧WTTJFVQ)L `M`PPuq\׈.#= *\kY:H jZTWOz):0ki]TH*q-@7N by=mdu)UEeqoDT(7hm}eqphFЈ T@AQL.kfݚ7x]o&ߟ T.`>8p5|;S~P5}"?73,{;V7>AG#4UEvIENDB`pysiogame-1.30.811/icons/ico_g_0406.png0000644000175000017500000001006312201770060016315 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚y}?}{owՁ$eK  qlDŽP,ĔSTʩؕ8c1K$eR@ r"!:X ijӝ?ߓl{;O-z-YX߻?y_ocVPUjYZRT5jIJZe RMx.s4h{|PO-NY1 JXa0ƍu@NZ*:#*:%K*TtFEW$BTt-:tD&-4iТE:MZx&S4!8}p p_ pl->۫UQ<!R]/ r rr>=مF50a'ٓaq*ON;փTRBJʝBT9qBҥK'2 atbٟD)DDZ4NpadxV q! ԲZւ$:! Zk(MS׫ď:% EfW6r^0kY7sb0,H  mE譧W3! Zk kQP3~z?)(mZSŁ(v[‡~E bD) }lN_B,f%Uc kZkŒ;֐[Cnrugn Ef*r̓@aH@w`UH-6cJ';s/rje|tZƶ!փbN; ދYMw}ޭk1&r3l@ %co/c'E`ș/^waFG/)hUjRڈ86N "4=393G0457L}bNX#3q+<Đ"'R0&2tkkbn7N.9z9®4+!8!Э~~ ݡ3y(i 釕;w[#[ " dcQJbS{X|E6֐#6DsN ;۞Q)S2%`/ G!O>؊94.OKzQ#4}^ʻtli؅ ##b'2V,/I4wh+vu{A(%yWCs5~qVNH݃qg֥ClDXK7bt 7M24w{E2~i]ʊ;Z@Y=@qdP.ŕ wH!h}Α*?v c3 _kv{0lĘ MRڟ =p)f\*!H<6o/V1>_~46M2&fw~Ļhd?j&H߱Û?~·.hZ i{}xE{NDk"CQXfz^ReEg]>w\QEqqEv֛!!Ox9s1Z3aALRyENKx VviUg.)]vpG4;ѫg{,ec;㖔k7C6m\J4&3rYfe:G-aC%F:Cv}a1.c>gN>, ;G5x|goE8t.#} ,n4i! .Q}{u#g<7Lc)d1x=WxKFȲ R$ZDl :vn|LaHTy !t9>#8`IZtiТAIi oa3RbP;e+ #z1nn\Z!pJD]H~۵8C5JILdIJS*I ڢEKhYFHWʕINDOKnLi4 BBZIt6R,HEqUqJh.\W__۞ZIPIuv(&4Ѵ4iz?Gh3HrCۡm2۝mb%)JIu^_ >>k7Wr_q849&H2*yjR%Y7VXNHG9wp/=;J=5+|Kӈ#ϯAKV Jj:th)~7h"TתU**,L:*2F#JHj3`=A I_8%7GYnF'^$ )?) -4vTJ{= R2;U1tT%*33籤f ;z9ڈnOd52U饖@@#Qq; |()R!gFbJITk~ #{d/}('-kzu2m%R2}rj4VH.uJ3Oٗq]Ht=eh!2]g 5`+ w+-LsVՊ7YKkd*-IגH ZH.a~c&{/fqBk!TSQf&3,6o˧LٝLZ~J |mueA#oedʲhg3ƝN3۞e%^_x%TOYH5cJ;7=T귑ki \jd>e~=R3wqwߑمΈP=3Y[w ;XFU.{qU;Nu IFH`:`X oV.H#GDk0L'8+>Yi%Y"uȒf}aѢR)K&Q H8mkěF4"d0=8Rg RJZ,;'HLV:M­:eDPJ#̙8RbÇ9|`%s/Do9uit&'pbm!ZQRQ-B&Wsx犆m"N;TF@B9xheTrUO1g,9mOMiԒ b?\p͌ZL6 3m,pDlلhӡE6meoyl}BKQcVEʁߚn`@ԐR(M%q굓̲H.vlJ"(-O0ktʽ+wӢat;y UIIǑLg'q-*^J :hD+[Kt( @ލud$Ԫ.>3[-PDB )~RNDm苍j^rT<e"SW <(QW^ ʟ V\}-w M m_i3,[Jdozo{}d-һv.mt@3r<ֿu6јf5?5՘ X;ߚHEqIENDB`pysiogame-1.30.811/icons/ico_g_0503.png0000664000175000017500000000665012201770060016324 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< %IDATh͚[ly23%)˻H$["ɷN4@R8F'E` EiQ.}KܴvDmزڮ/bQ.%\^Μs0gfw%rя83ߜsw;iRsig- ւ5`<H1&mX!0-h ôDQ CQH! 1Rc5ű_qwa0 )cւ`"5>`E\y\RBBP -ma@D5BKA,TpTIkK\2tl[Bp^qH:R~Ƿxxpm@ DHD6 `!f:o./@S&NwsH66Y[2>n8BI %eZT'DKr BH ҍMIIu%:"Kav I9:}hE4Zk{} Z0ҡPUU Tx4:GmчOMFrMw]{B>V%-[W YL-Y Q%ٯYG鋸5ࡡ^TgbµkG{Jf+xʅW7dqD`pe.<_N\qxFCś;4"m9DZ=#;w~[&Ly]\LOg+|f{]sm˵@Vpey:/F3| 033зO03ZXާ$X<;϶D{P,ҭ MwTvl8iG"R~aN0|SLz\;{^l>>?Gw7O2ú͛@}/g졈W S*z\.'XYط cM7G)r~ۛ]]]e9xזlb-MY590B)m{nq_@9\cuubԮ{zz/&PAtwwbvɵIiFbM:@s8g[v3 Iby{-uMwp0paa^O'xӲ6[&YP[)݊Ke8xSOI?EqV"8krJïݤa)٧,F8^mMuj_k9X3YID.Ր-s "2 ڪj5r=(9 O_1&986~7r -4 ee@YfN_S5dKwoe׋J1r@I}|亐D;8$Æ>13l\eཟ#HZXɦ'6Ո|YO#̿1rѹSW/ 4@[R8ش|aVFBk!a9[ȜYR\ G\P?2RJ"H+0I*Wr׏c{:A_i+9&1L0?E$ŎtiHl즞٭~،T Yz81f,-g[ q<}$U &"9==aso(ܴ2j|ݩi9l~okRW,O=ɖ R0gW9zOv%E} H~@!N,|zS8xa⎈ٙLLrۈ/~Za3k$Ԭe!qZa$ V~cf25w_@UxD*6aǼMH:crֲטU΁+%!GF*)9/0u_/բb׭ݪ8k66lȴFw0yI+I94Lc 4GO'&(h6^S$/1n%* ,,l8y mj]gsÐ0# PZq89;$oa/=hwk &_X58{!((QDf_^W8W\ԯ6f?7hdcT#A@C(S/gT ;WAxI$Iz)(. ,BfGM8QT?*H3Ӓ#i/ @m }E $;G_BG( M0d&Xk kr"!\ L &AY*81xCk @ @D RHM@RB}EZ AF`k jC_SP]bR^\6ZSDHJFBʸ dB86jlUo_Vx]k$Ơ+ʓ(ʆ D<8OglIENDB`pysiogame-1.30.811/icons/ico_g_0000.png0000644000175000017500000001105212201770060016302 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh{]U}?{}ιy'Lwb&$]`bQ.KlkeYtVKiV ( ! !̘d2>?9{g`zyW?~Z!ZǝjWkѽ:݃خ8)q%vJvJjA4%>CxB;ʁVα45/!4~7ۑ؎D9`;˱]Pv-Q! _ky2|@BA p"(tSsqG,B@H@H¼DD=Ҽ0&. M? 7?sXZ hFO!4BG|G%&"" B eR ,Ru@@BO+6U0z.f#I5u5[Ith1Ԛ04$^A Hܣ#!,̏˝Mk-j&1rh]32Ah3Gd̑hօaCyOLw,W֞] n0'?~ʕ96|}+v&َT)hZDŴƳDUߍQ:R rRevshmd`:6,Cϲjg(ν?b:_3\ę_{7:W@$T, h! U1T-+؆a~o۰tosY,_fG.!Y]&_~z%BsVoۮBLkh+*;0r>.輂tc"b(p9IYq:jy{cE߂N{ލ޳K~@̩gȽ9^,^–Uo^F4'Gr?3([o{/kс4Lɱ3s^@eQ\ DWcc9`%V|m?/BY9^(jgt~^F[׀h}u"Di>M 6bobE DQz>NOݸ7"&]ene82Dk5TpC(ymm| /8R9N~ gi,eSJ8D/L0/# ڴf]A,b ́2@0]Q ǂe`^) R쀊Kw\xý'-Ⱥ6iFɕȗ<*C)`+,\eqm@S(|:w|ɆlNGf`dEǪ&{LX˝yL=GZ R)HJ Zc[fSN*htQ[! Z"-> S5Bac+<,yp% @ NC Z1'Jp:}PcU| / %4Kj SZ*x:r9_ (VR:)?m‘`eRcj|gHˀYx˖ 7tQ)̌%BP 7D fl&b٤]YˡThe׵ D++@6;Zоzx{ZK亮't_5gB{4)A.Td,ZRGkiPkJF BhD葲 j  Ғ#oi_ϦmY>4X}6~OJgI%liQfZO5jC>K~`^7P,f#b!, ;߿]3Mw(alʵY=z]^lX?tIML~mjnfbŸ]I7*0S6^*`2|hK733W=̞.G>|鎧ٵK.@kcҨl yllLGJRa & ƽw}2vJfxi&&r3hKFGG>vˣ2\a/wf [i pdV0Œjf;_w+Jk]R)w~ar GBZtw?S.7w|kڙ}"0QR c_SC<|W "$KQgMGF tK BPMqIN{~;^C{?:K,_ yU[xkQHg>Vv2rvgy GDZyGb?n0*BT#x~H2A! ?}뿊$.֔˧N˂*uEyo? coƻ̺ [iu=( eh-;çpϻ杜-*4eB Mكٹs!MYۼi9L>ş!]صrQO X,IQ͌ϗ˽xt ho\h ִ%ߴ\,"R@n NmM<JL^RgT\>IJ\ O"h >CHY͊FIf+ [o/?> 'ްdLϗ87'BִI+ ~/^^5BnH]'Š&?+rMsJIl\N( V+s\5Ü8q{266FʂKun,g&4}ނ3p-ImcU_SW8OsyYdJ1tKg[F@[{8<ߟz/~5\> ?Z% 8>Wdcw,j!tɳ.~ߨ+& )O,R5d*w0W mڑE[SLTB̳eyV/[ßY3c !/y!:qU` ǎ ɜ=HqEDuˀ0,LT[ -ɁSsJ2]-Ak=ͺ, 倒ҝ*Tdy-fy5ìCF'fLB7 (ɒtRۖU6O^]ǬM$) `mO/Mp,IW&$JJSάñMEGTiO,~_!"ENJb9Հ:ܩQ@#{*踚]4Rf B{HM|}w&XBp,[Ŷ¢M vCj Rq5^72bfe]3|كSf>v^XݕebBgeDmmW'gYӄb7L>vLZC]U{}6aC:u^ZB`J~#PGW"|~KSCPs|⮧8~j|vdN#sH\c'|ahFK"-c ?Oǯ|e-.)>wS|m(b|Dfݫ)V#-÷N ogN"'Y$وq\ +[aRYwp_~,c\s ~ENN3 4k[ؽҼP\AT.`ڈoaS $Xܒuz ),4jh;L-1dvj9?}?? 02ͻorNՒn;}vaIe\gV | 3KJ9F4``Ċ@40"-:>SJ U+'>n͛+862MOWcGf<|PYY-x&WHl# HKԱb!X=ȧ^37!֘<>grmyUġI BcձDy*#vř-UfN#{asw9YVSrhw6L&X%XyCU_D/f$ɌaJ|kDfRYO ذռȸm|@h#'2dH.H (1cf᳤'AKWWz #VIc5FjlȤz%xF5mIUjd*xe_Zax_*3R^V{[i\A,5^wP^nW;"d+vqD]5j 1 QYظ̈AOY-$W Q7fVDdo;/=Oj[YwG8*]܋Z=e~Lޓ\pLU/,, Bw/'꿛`IENDB`pysiogame-1.30.811/icons/ico_g_1100.png0000664000175000017500000001146312201770060016314 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚yG}?3vծ]I,HeC-l@H`.EH*E!I0qq$0lll !+-ْ+J{o1{潕dȟ~"٭߳AcƂ`|~XH dz VWXhbZ@K[\pcQָ@!*$,P!/}Jڻ 9R!J} 04@k/ rp5 0"c0*EaDEaH!, . TIP%@IRQ!C^@X/ ȟ1f8Y}1l3"D!B kKdӸb0wMc٥P2[lS~ 4ds665m RAcLJ6@)$)C&EoBn5=ϽnHc^NZ6T@8UH(P)ܽQeH@@S)G(# ?Z,Z6bZ q&i ?ʌ:~"㛵 } w}4M9@ek/>S}ֺ/M֘eH2ҚfBXcs>85o݂*\jL30! x ޘ6 }7Ӂ8gfVЖֵ!e~}>L p͍.XO{*޳-<ωOhyAϗF<ܾx OJ>2^bd tYWxKp m ɲA\zHؽcoe>4ؑy֏t9Bv6lMȁ"GvO'v`╔Pf6MeG̱2JJߦ_3R)c ZNY3RbN0PXO\XGCD^K\6S@:YuMG tbdl񄲾$bl.cMF`H(At8u_xVٹ-%0phJ~ پk]},039c 79֬tC@8͚MFw@:D1XĐIDfუuVmEd6ev>Tz-<p~;Ksu~T)VFX5PE]k; TU>}:nwgZ9,^/ GaL]Z j<2]Pr{j?ĩ ܫL.5: @x `yϿcuzDDݤC-RKk1MJ.|̔S(@,S&HSge{#6zk8h1q| or<|wb+)}_۩W(wrn V7_~Zx;˖kW1rEt 83'FN,csԘ!D)/O1NršoD˭oyk&jY'7lSeMGgXr`ka˛y~~:: m-N"~O_@J 0ɟ`D  |-z;]]hC&SrѶIXMHWw ǟ[D$wuv5hkxûz)F8Xfy>epKڛsij>00CQkmI͑GnlJ *1تYG24%-%$eM\ ƛm B*5aqEag_Jt;_FZhj>Hh4)TiRvG-gZ PXEnl)S7 -::. dMUVDn\Hg4*Ӌ[:ŀMS6Sg}"1 @3KǑRv T}xb3L Ku̶nވ:bjoh;A h+aRܿg_6X൏ zN_RJ9w1/YJp~ERlڶ?r9  vjj߿><|C":vmKB$rL lB3 `\֎fB ]׮FA! m]1s'Y(WVRP#^3Ԥb>ZiB\Z"O'w?j #H)GktoCcY0UtZZDD+=8ۯ!Œ`P}F>m:L}v4$MP7 I2U96|,‘+KƤRH0"XKE1iR=#jbwo[ Q@2HҢaQ)쫍sT#>h)RRaVeLQ(!QzZ#,Iu RIjS/H=yAF&:ۨ&v`b$i 8ZmhEw*ɩ?ڐ^s+Vf( em@!7@BuiĤTHD*S Bۈ"C_ Eq93wڇVgJhD8 @Wڙ 2;4ҝ,>oYlVDŚE`Q7-8kNaaNH*$#00 )|A:N QZrffY%(!,͖ I˿`qN\pZ"Е0P$y t5j)y` ӔW]J)$UtZq@IEA@`B$'!Z%0UMGBd*9p Қwc3Gy\OimRha98{m?F[:I0$h?.x/?8)!BJfOa[TǦ?12s_Vh*J籖=HkA҂pqP*0wЗ|F"h1[oYM("V6]GDR1wUQRJ1;82( VGZ$ ~jQz}Z_@qS#! ;Q$WO $X]f~Sӓ#@h^#pA^b&޾L\ @4U?42 P9}0ԒI) hiwliw U(O'kuK'j,N̳Wl1yҺRO8[+L2/dbل[8HЬz`񝥳PURS+N?DDJN"GkP{doSB O#rM[yGZ6]:-߰Ns/laZ' ~wv,kpKTHQB]:"^H %kc.(1bo̕L"v\?«ONžxa \{u4GM dJ#mꦆf~U\e6_ۘ9%Q.3] 22=C%F.YM{W+a(iC8Wg]Ϳ7P1ԽR׵f!}A;~ls[y]L ri) s_`D dͅ*A*E[+>ؑ/,u뾅[%R>}l8$B7KcTb+Yi`RyI"jr>K. RJF 7!CH BzRJ/9kdiFe0X{%C:ԅ!Y',8>yȀ5tF+e%V,W;;_6KPSzO|-(?FfӬfPx7oFҳyMWHFUk߭W_SwuXwKY,IENDB`pysiogame-1.30.811/icons/ico_c_03.png0000644000175000017500000000767212201770060016156 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<7IDATh͚o]usٷCR$%D],[Rl%Rqqqдn7h hߊC>(E[ 7@& Ԇ %PG_J*׀#GMp8Ij^&'c9`(0a0C-f}K6Ar8߇hb w㝏)Q%/b[ni:Y UO]w;α,yX)f_m>v<1ù)At.;.)8)t| c5};գKLv Wg;pT n}n_zh.]9yL@ X9;^y:'UUR 6kW,|Oeae~r,+Wph5N6]_>ɡ3$/K y5١Ra!+ZX*XSNj"i1=I 8`9reyi1udO}$w~Z^g)g$ɫRӥq y t*{ZSK\4(IȘLUi#]g.𓉧yq. =+iH+sFD\t5/ș#pqC[X בll1f7942 P{r2P;۸soPV h{l)$, ûyf0\&sIdO}JeDH]aEǫx?K)2|L{JP51 QxIƹq cu{Q2۶Fpa5PوUnds5#<@/_(hQ LL" G ˴e !>;sO\:`[dw4P"(mn1 oL,ȵreEtΓ yWz80F{eU-7Lhtey=mT7[Hl$nŕ>q|Y_aydÔ|15=qLTLx+ i#6<+gv)g0l($\n R:>s/474|uNM M04mBr|DcMOc&h>=Ƨ^%t`[a:l wۦSdE+ՖWkh'*ILDĬ#sW/jȖFZYoI! }vo"8]ZLHV?;~*Op#c?8c3[`K-2PO36vM9,6:41o "cݒL3AFgyZinp.g7xUt?XkGRg(Lvpna>W6^+{H4V8P?9bnG DQ9# &håWzv2MŁ$* c7`m*RV)<8ՐT%a:zxҊM5Fih[m9q؋Ֆˬ%]2k,Fܠ$O<,֘M ] 0(? @@<Ж#Z:`Z\+kl]f2QA*vOTt.w#Z%etV!-Ֆ[| gPk}ee>W9 #= 9#&"bu HA9'??pak/.,rbՅ׆Æ6Ng;$u#w+#J =L]ZV-?Fޡ'όq\`\l@C8#ŷ"noEr#* jw8BMZKb[r(hk|\տXmҵo[}XR-Z*Ѹ7 .肕]ꪲR< ͇Nw,K~ah Q$LixIENDB`pysiogame-1.30.811/icons/ico_g_0105.png0000644000175000017500000001061612201770060016315 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚i]uf236A, $E]';r%8R| `WA]C &" . $d4h_Feyw}OU]ݷߝ{?t+ϣ )RUD5 پ"V2*T.Qa;{2 eبR_[#O'vH@8h@DLlRqrɴT +3u0ƟEAmB.ǟ'D8{ӔKZEm*;~R72}+Ά쬀XS]! !g*}Dgd>^a 1kJk:v^)DHkºf%*Ҡ4$ D UZKh f83T߻.h&2'[Wd" 1XR$IDo r6pԙKo4K4s25pE+b0oI\.CJpJ@8T<%E#Rζtж0c G%ft7OQom j(27Yt3~ㆵ)_:ؾ`-W_9W57b``$Rsm.s#W88#ъt˦ɘHj"H`CflT $ew?ō\^>Y"NDϤwMp;ݻ9d x:/k 9E pRakRV*,6XiXh"FJVԌ0@)Jr"aBr_?:Q`Oӡ5 oVR/,x05Dܒ1-Hb0^RJ?È$+Qh4Wa ǢA(fG1}\ TXnO-M.[έ hT>;jJ "&b 8rkq$kZQVKDn,7^Awމݲ%EaG"D)ْ֑(EXTl>v#q(7" 1qPT(IBԗx*xP`}c#(QOt=ppU躨¢r0GG3+L+ش"obSu!)*̂&KTwb׭=G|z^>{7A[[`R|82­f0ߺgƙ} 5c Ӓ׊5h"NSB.~$O~)sko.ַ 0ܹs|[⛍|(log(ſ87wb,?pU*V8v{} Tp^%&rq l*l# 4_>v;&Foo hqrA30u]|{UL?9#0sd w/> 탾>pܷkC߉ LTHEQ*1Nq]C#<}M^ϼӘg|<<^SO!Qߧt,]J "Ϗb/|3Yu\Z݀*y7Hɇ HSU噔ǧXP4.!1kf~1(aDҝw"wÙ3g򫈙P2hpU.A"6vv!^o?:wֲqXL_Ϸu@k~z塇ܹ?A׾#}<{qr?X#*Cy^3le"߲Sw1?b~6Qpejbj2K,N1GhAS.wOpYc#/6d LnlzDld."ECYc"w]?W^(+4YMl}?L=]l6" Vl{i1|Zڞ̫ȘTgQ hD$d8t]йh.˖0Y*cgK pB0^alW/љ٨HAřngh'9yK`½*cXqn #  In`zá|ݦ KLJ#bw'\Tm+׭z].9q:yrCgٔ:>S֐'gf<ξ'>\f8*@-ȏgo.G'1li[ˆyt /1܄*6d ]4NU]Ivm^0+N.Ex"?oZn*~a 9y!SP`s ==A"l#ƜtY81<ΉqS ,[e_͙7,V) ua3ð`!f4qzl'|a_͝T" 9R.}@Zߎ\qf  B`; ?|/1 hWcVclBwD:wrߡs׾Ke17XԖq}z{)L) P1L9Α9C;ܾ#<򍇩\2Sed]׸/?Qtn|Ұb_;+9uGy[&55("˯?tvp_1<-=zf+'k3cKE۟-XC8OR-e 0tkUWx=!qkXcXc>>i[Qۯ{G~ᒏרPKus`h nb"@CHrh4/ȱ#6"21uS7!Mԩꐒ0Or,cʻ;c?8:Jb[C")blavS tSG SFfS4bF[M:WqGێIO(Q8 =9觖U!ƥ,Ukyÿc3;ؽq'WγQ.mcɐݓL8kN)~8S("DCH_%]ʔ,QoCd(M9`Ҁ(ZC*]pWs{Gvm[AG@i×d[&HƑÄՐ/s@ 7fzbR+VSÇn;ߗyfz %]ДKqU ^OHMFszfqYa%X@[1ULiz/܋Wr7Ì<7Sۯ{;7-ސݜ, (%^XyK.]E ML%٬K!FMtJ5 )Eep+8u͙pΣC.A;f[821h|5GP J8l80t9g[y]/Qiq8AV+W4<1+V@{1ώMT*%Ha |pq֚$PNW*TfB d³V~J:T;EqjT)ScMiZI~ q$2\Us, Щ{mDhB*TdJ"Lꎭ $yM)VZ 1q|"|Q&RI2j!qDrղy!a08z^LlSc6-6X1#-R8$n \\8麔)%R 4&d\qNXcLHJ sOocl0֠V'&ϵ5IA԰%Bʴ Rw\|IOȼr2gE$8UF,yf#h_9K>_O 0 45a yJN^&L*&2=yG:S?65']YVxL" soR-LDlㄞ({S^Sd 11:uF*Nzꎔ$ϵL2ZOSE[s!a?S+dmVEHH< 1M-EkChLShm"'eġtDdbMUF1O"q0 18F`m;Cd (5Bi~oZW ReiBK6Rʔ(nQxW-WtR c!1BLlZc%/||O>.lT('Rn8Q&](J4DfibsOCe]FXcF:<;Iqey/(&ٜ G:)%s@7;djՔ!)$5\$b jqfrJq uȪ/ |7 jMs+7sVsTz1VCm 'syQ[Fi#)[W~Dr[||dFYJD=m躬+):;x}m@)D\A^sTl^ނwb)4$G ^uڴQ\ށ[pYrR&IQ2`,1z.?Mj'{uQPPɆh4ۿ Y|joA.^:T;;j \H Mw̐:vS6-,`>LA"{aawlAd"*9^ S>pEȫְ㇛ymtp._'LL8atyL0Mf8Yq ”x-[TZUjC~69(>UD$ b7#, Xܱ!5N42}`Y0j"丝dbj2'%;)eYq۪ :QٲV͜ɕ1T4bN.WD: VR~NqDky6뿷ը{e"BHu`H:* {c ߻+_IG qZ%(R$:eޱ~- =,- |SwGPq]mx$>Uk5IK(aG^b嵗1pR%r0~֥<ϩ@9cuR)0uZi{}0/3kְtYla>DUѻd7bm\)B٣I|Kޱk"c<jBjZ: DVPQZw]PJ>Ӹ[y=o#<nF\?fl{u :C̛V_N5 iJ8!,#D @UQ$%*"E}zCf6 )%D$N%wBǿ9;g^/>&OŗFSD ~i \OphvoŞgPy z*hKG$RmڌKQÝprvD ySVZ3ѷ'8sY®r V1F9Um7rzDIe+!*mk DPഀI$6N%~]7]*5 *UjvJSUb^3 c@=HH$CG;Aു 6t^ArfR&,*la~\ps]K!M"ew"NZfsy6լf5խD5ՍO"uKfKFuu2Ϭʆh*d2_-囬\iޕ=fw Ktlʤ )0+B ⤖ޯA38o! -ۙT L+qlO8"`@^YF^X- ~zi([Bde7~#4<Ȯya>zV0h ! 2I)آP2;)Cz- eLo2 19T 9{4矿B?x*?Kn/>y+k&1|&?sUz3vFTn#i- &.Ifj['yScOtqF/6zM?%{45ϖ{CZ[J)!'34D@!s#ŸQt1yөjѐ$X@6ࢯUMI3 )<gL>'{|>jInY-& YHZHSX#kqƇ_?\Fo.ZD#ۿWsUf'eje&k%jR*|y<ʡjCs^€umd0^+-ctlc,k*n{~xnϫUO],ZjRéJ.\=Xu2?\`s25 ą6aXjo|d1K@??<8W.8vR ;1LfB$jmHG^zIQҚZi3YhqrniF#↩#ta& CYZj!aW.59z8ԡ41 R̈ȶ1X7 |!!xrM5 j\Q1K$$!ad۵=[kbmvi0k%Wr`z=ɂ%FF)L ǚ-z[ё :~@Xa'}A >^Ɏ)fwNPfkG= c8F6Ц`1޲ő٘Ku>5_ nj~,i4q:X0SutgR!7q !h.]ZG8dqAC[# lՓ])/H{_T][ʱ]pZ Q[+k_h4u>S*؄OOt]+< \xqfj0$1:2aBc JNȻniT/}!jF .fsq=V ?̑1WOogj0ٻw'0Bs!098Hi2FqTGD<+&|>z%NQ"eL?'AT!N.F#eBgoM)<RW c.,>~NHceF.K].]nsgFsA$imB8 ;#pEp,|wVQ l^!VJu\i1enUVFF͍. G!Qr1 kz;w7sAV)82 EV ູ^eȈO9Aمn,P-m.`#f;,/hn؅u  r-u2O I&(NH4Mo$Q:9w?w0thtI&+DL-qilvC&1m|C2?yg >ehd1=׺fmXd_)/Yw)Gn| րagJ C\WS@ uM`|{2B&7S5ڎhsA^+pv{LebkqUh*nݺ̑Qitom$@D{ehGyR)vl\HLrҽ=W&P}4>%[PoW,.vY]hڛ%k%7>='ˊ`9ZYFDhF9B囔.3JuC)n?PwL2l׎NQ/Ðv;`u }P.<]Çn7n\qcc82mrtg/.][T&t:LA$@&{}[q[7Qvo_=NS+^c:xw^7E#}j #H2r*&TW]t D_hP loc~j5|(#QId"cJA)c֩]B;LY ʁ4eIA]w~VRLNx`#&\gD*LBׇ1\ƄGd|꭬¶;U}sOT+tu= r1aczuɷ^*xWF`eµBxoxSXd$iA؉t8¾91RD5 "èzQ$H _#scG:#qja QǙY?=BVe9Q0^,^WVWcFOJ@D2N\1ĭ O3oA@~#yij%kaڲQp"oD0RnnR ;>\ɀ\ۊ" +WJґcoEߕ#=ASa8]uLx{ǵm5 ‡Kۼ|U\GJR.JºH)5=~_:P۵ZjFw\ t>H? ; ES0!; jIbSR7w|U7E*w^aj"e= jgw?O~,΄?cG.spr莧ZUf~xնr.ot-"?TڹMk1 6u+7VF"};!p$M]2SN%whpC4օ;-,'zVJěv -k+[A 3_? 75>T-S ml &)\dDN/w'nj(9dtw\<[fZU[!k0ҌRU{;&[PH]WZEW{~3աW#WG\q!qe]s5|VWJ$+lUpȝC G=G>`ܐ|j9LG/XS=jg_L vc2ܯFb-QqAjQ ):V'Tp[:68yR؞"LDlcbmDgz YqE"؄DqcOdk؈UH3J)0/R|U/O*UKp6#&c"d".Ce &`!%*US > jU/0Cp6P 7@)qV8v7^ݺx) &HD9^_eER0X> g$S޵fLQT1K':C9xZMA Q9H&J/4j۰rfꢌ-wCm* &dB6#{񣈴nZ~P{)S 3h[c:cԛW$MKd]mE 7>`C/䇇D+am 4j`c=3q: B_=ǰRa2$!՟]a#zF3P8pȜ6Ѧݫ~qȰ%+fv>I8Y\oy[VXHNf?IG:Q& UVIlb:xWG냶qum$^-@&忕TOUDh$a%MÙo&?C<#'~7F@FVu`4N Tj޻'KJΌ݄p}& 8V9Kr6ݢ_V eZ#O|ƛ?:F`lLh̤k*C'R1״W%TRp6"HN}ח/p*bVnӥ|e^^\b@Nw:uI$A,MU\(6#b:syuWy2'iƖ2jk;(ˆ!2`J0!s?< Ĵli%cm9sn~<0dyqԍ:6ZjUDLo4wPVҚxq>n|6b[&&8@,My0ZDX-Hrrqr ﲖ4eed聈6m g~YMhFo73Snz%,_vkGjXjulZVZHEd^6 ⷟9ˋsnyf})=Db)m$ʠ'lGqAg=v;7]Q8oz%5)֬pjauA1uM d-f<O Z kQVZQ,˛SV ( / S7/_r$#}lu ΞE"uBhHDdpf[a '{v'}C|= .͙bP9]@|i0ಉF,#ҐL-"<㣜/usꓒvHySju,];;b#)`5 L# ,Y8]/\ښĔ0nyRwTVq2j6:f̵y[ 3~$ށ5EfcV<SIENDB`pysiogame-1.30.811/icons/ico_c_09.png0000644000175000017500000000753312201770060016160 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh]y?3sιwz뷵1؀KjH 1Q%ȊTC_TJ"UJ[U%U%RHJH(رvlb/{3r4F3gw<9{#E?|qÆ1'E8qᰀ8? HvX@?p6z1zT$aA@"V9JId{q88!Ib$&NjQhu `XbH߾ORHHq5s)|, s3Fk@)Pz+8 {5'",@Q Bt,@ +*2D{]jZceFAfv8)-A:h*%|L48TeAfXYnb&БCgAN2fXNxt3=ŠtiRԛx D<F|?KRhD><ȉúLȰzHX3jN~(D \0smju/\$cc:QE^K(WcHNœM0կ\d$y5"BOs׾Җ0e/["ZR.a\xWTX|Tε &}Z!w[hs0R"_$(EMF_Ø\Ne<AcTH .#{5L "bA)B*^ #gR`Ar#`Ȼ[;HrCµH $# i$q*lIBX)cK`JR"Q5J B @0.y9*@B<ʓ^x*1ZK,% L`-lZ:Qʻ~r2**!\ YK'C*uF|UbD x8;稖V#y(!hc|L?:/.ɺS}kYQJD-ws>p9'8g+c'`vއ4h6å/@p!֡pC> >=5ӷD{{Uv%!DhWVJ%3ShSG8pc~FC` dX#* (rk`KX]:u45`u0ErstB¤E+q j0Qs sϧivOEO6g=L;<C)Ek롿 7}n-Թgt3{S(+^,ߚ`RDpJ1g *>Bb78f4cF"vϝG;:^G]凗8o |s4#]g+Ma+´T ٨euXˏWVr o-^=v][L6k4;KG/7/si`r[O*i-΂ `AAއ,.]6v8%11>jƉoX!z#cy E"GvOge.ѿ+:޴^;˜OEͣ{o{kHnDɍHwg80G|眄D)dEt?j{ 3H#k8޹R]۶ff_?ˍV]M>16\Nٹ).! Ix~RH `IRw[WkqcA}G_*R]m:c?+|.#` R@F"+LMq~e1":-K'_W~;|bbmxyڭY&O mؓե^Vm7AZ#0mwvAc#i (pʣiK4RkM5v趴s̭s맞@2Xc|ꋌOj+|3[Ѷ>0q#-SS5Ssq)#߁68@i A[zUK@@Rn/DmPJ *9d4]L.ƪ ѹZ u &h_~S u gnށ)[j;_C{w j;Ȳ}PrVk%Q/ ]⵻X?^h Eyu&1f?ǮťBVC:6DjbNVĤV#F z@kՂܪsy 7"Tn*m|e1J ~ kmP̭HF$%E8mh_Hxazeo s{(v~ZL#Fr[ҤZqEʩ9|p_v@p%hf~g.7-L#vxr)Ʈ\/cz}“Ub*feIzo\g|f2x,[9YX0Jz?qS$e־oZ ڄƄhMA/1KZsDU4`KYƝe%J5tM\KPJ?]2cL^#"LE&mLmc##^>2R #wRڦu+m%Jj5TƘ8N*XASR_X2KJ~# [؍?;_i]Wy}d%a }4LfINb/tdiڨ @Lvz`7VaW.Z}LMP9s(/ρcpG'ja̍%1DI<7F\1o9&Y3Ë-},q8XK&Z|w7k~LdHGVWox S̚zkP\DdkTH'AЈ(IPJFyHU@kmVy ܓݹKaԡTZA;Jaen5icK;p=!.EOQ *3䊍1|8K,R,/3.'2ǃlwBH$7kյ<[k$-47#IENDB`pysiogame-1.30.811/icons/ico_g_0323.png0000644000175000017500000000577112201770060016325 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< vIDATh͚ˏGTc;q!v$`D HC$$ذ/`XX`Cl@Y|!:6(`L4I/y|LjCDQUD*mQDQ XP!G8LoP`vQ0S W&<'^n ʜJ_U8Pp2mu1< #KE8hړN[BejR; if|?&g"F\ք?,(J,y(k!5ԡ4(T}6pCzj%4"h*ZTE!bR/B#c3JP(+KvjKn_LO#Q,o̩5Neqj؃ bH`vyvűVB>[GRQR;6=v>Gid#^RrغV;wN_#IU=΍p:FչQqnJ"qѶ{@l$,%r[hpJb]Ԅ8S!\mU!Q(׸ɮxX#)l7_ɛ&O"^R".Bu5d,z%|Ꮕ4+V: Lm`#VG2&ʜB#Fr ^3`.q7 HO̒f[C#cOk]5\sΕ4ngڴYuK:V, +%ߴMFVF~ 8iDuOBYqthBhcƩ:J*ՈuPzx1"ևQ/SK/ҫTFVD7ҫ~)ƍ.j\z,=Yˀd/2[4RkZeҜ%l޾ܸR (  m,wnwȹI:XW b;{3cW_t^w8Hz֎9`OFZ1scD*!jqaO#X\h]zvK_7"kD(cί@F ǜ>?IغɠtJ4џ!J K_ OX}" Z ֶwA Zt5o@`5xtۼ7SQ Jzm؛ )gO~|9D_<͓&It/2T§oC1Jк@h:sܔ_9:pշ׼\+= n", NsT(c } \f5 8iMW51TW6Vy $SKDqޝOj.ѫ-]\'\(3vfÜ:fmrId-u$Xw>;egwPW{3?e42 |IIENDB`pysiogame-1.30.811/icons/tab_l.png0000644000175000017500000000073712201770060015654 0ustar tigertigerPNG  IHDR<>w4xysBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<\IDATh۽@ L/XXZz^W%v^NRD !`8IHuzYy:ZKD~?|^Ʉf@윣( #"epD,@TU6Du]c 5-}ht,Kit,Kit,Kit,Kit,Kit,]7a p8$;Z%Iz 51rħ˲7MC$I|>u3fv;;iux`t: ,Kewn7~Cyh0TIENDB`pysiogame-1.30.811/icons/tab_r.png0000644000175000017500000000076712201770060015665 0ustar tigertigerPNG  IHDR<>w4xysBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tIDATh1@ofM"9A { !gRy{6 1I$0[,6JjQq<`f4=D$I>;3Ge(a>nCUUmeCdb-904<奄?ڶ뺦h!<8wh##өa1e4 Sq0uLSq0uLSq0uLSq0uLSq0uLSI!tVziLFALFkn7eiz"|>#"e ۶2mRf<Bgr!V۶H g0ei^V^p#dIENDB`pysiogame-1.30.811/icons/ico_g_0315.png0000644000175000017500000000711512201770060016320 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚{]]?>'r <$ i!T'P *5h;U2SZgj0E;Z?:i )UKh J!ۆ{^{^ssw޿>-1rV(@N'P8w#cP8?whlm6-ڶE۶i6mѶmZQBG0E'1r]jRN@ s%0#Tp.Dܗ;hdd& WMTFdtJj2rP}=}B?q<`p Lŕߍ )A)D|Ts˶_rLs=ݿƺ+"?92Y U|7QUV9LQnMrIg,{Eԟ[Gs(<]uRs@ X ? wNוR}wE W5,h%b-urO){v>ODf-_-lX<"!Rv)_ˋĆɪN?vuta_ã;7͟VE Z9q7.{LU]q:+ x.[?X*_1|C9U^%"rx|k|dK]UsCK"u~MSs|i?gOy/ዟno]`ɴjyPrEѬj }I*ǀ"?;9}?srh;)1ӠWIS=$p O&6IL#JjEy(ӳstgxL$ o#N Z(Wk#:g5_ug7o"]pu𩏏iAm#R)ɳ996Mp홍 '. i/\0WUYD@=^"g[ǀa+]od{n 0ZW"HJP^Njz{U3JUp,F֧-xժU`Q+KG&j'L|q,R! \ >/EƕC-NsiCw{=`nv@1',IոT+ dJvyÌF7%W-*AUsKPL7J-8nUɿ9ާsU-IH%1 LL J_(q:jP7@1KRLL;2+D:zO;Q`bTN'\.HmqҠU^x-zOzzƯ< 6UZR]p9ZMm(@N Mm8ʇu(= mlREOCi-]b!o+$4G)BxFVƵ}=Y 5fΡo6uƚarlhUt8pV(K?KS,i#őjHƱ*4N(EGg@'1j@bb?PGf, @8q]4wes`q %7󛰐r*_FQ_5(rMxxȉ[ΑKNqZ7;9Zp6ytc#{|CmQ`QClMC/șB\e#Nq b ڟ :Np|tCDdF[OD/p6n8:z^(,ZRh\%{Wrtud 7?Ǿ}rW o\V ׭p2y,45WY7VA"N1V]w||[B)_TOφ]jmݜ-*0XmQT.ϰʽyY?ء#C@ڶES=ƣ(_G*5*UjD"ڐ$[;S_=GO}=>lĤCQ6_7}ˠenܒL;T~@AZSm.˃WEG`\6mRz cGԡ} O7Xq"NQ?m9|$gak)T{8d=dmfضm@Rr .oSF~_>1z">! *Z1( x¡p-63)$!3F[T"Ka$ު.'%RH+3|?ls&Ǥ)E ]PDy2D) 86 ׫3qG//jZjg0utjLFMИ~Ãk %mWp5|ԧ +tP*F2z4 TQj-_qg/u4 HD2d:ЖGrxjFðjtI0 9/nk{A롖,DylFi56GŚsU?{҄s(lL\nʻ daş,H4s հx .JWb{VCW &${nvF~=.)Xvc A#牂̷?^@|֩f= >^EjFoCj JBJGmIT6|y[PM D6SԐD_iFӈxW47Tw.Z{{Eh([;4R|/[)p3`[e3CQnwo~kS"O14[aIENDB`pysiogame-1.30.811/icons/ico_g_0700.png0000644000175000017500000001113512201770060016313 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThi\UܭNt:Bjd ! HDè.A#j@\A <&$HI;Nw:Tuz9ں:Q0S9Kw9{ō3Z.H@ OB tpxxx6CuB q BN'Ox/ ** ^LN㦡r˶\s/x(4Zi4 7`F xxC ϸ^]<mc;ea6ema۶_gH$xϸ->o$rI]k ~DQʔӠEi۠.B R@HN䅐H! .N[Ø d+Fy Tِ`w_'/o#]{9XiQct < Vy{i;pWDM#R<߫X%f}o|9NPW׿\CNN0Mw88/pj|UEiK:_TbJikNh0$ H]9,12D's`μyxul7-yOr(Jg+W2u 8Ճ;tť'6չw_ފ`JUKk*؂R~k-d'캆ӏ"26Xk[`SNaŕW100gK8g`7GR___hp]rD{>jqlX}:s 3&)R4ShHFw >:3\ݕe JGD+#>_"OikB{Lp3JxWʀhϷoQZ`q\MQN6SbL&sT~|pɇ/mww7*|*4WqqM?)aOpk9[k^nY gJԶC]Ep)/_C_['l\Joom_ ӓȒv`ƍ+֑۷qӘC6[gvQ|`ou' R}17!x{Vjbi ThzL)H?Ă.:BoHbhx_7?&Xr|9{}ԍ8Ӆ,Gum>ڛ",YlL)6.[nbYT Z]sW|I5!m*l 3@^~bP40~4IwzX|g6۶A{mU9ZL5y2$sh*lye.ї D*UTF4OZîay'DHRkhjpꊫ>}:|-??m[J2y 嬧 ۱ʕ˹xSO{Pq$rFmC&_Xu/D9s7c6mZ >?ñ1U*6N?x%~UEyiI3Ƣ3WI'zkjj8e":+V\G 1xYJ7nF a"UAJW0o gY֘?Nʁd9I.@gyIGH[Kpb4OIDkk}]Pw@3.h͕_2 3HyZS8R2}hBu\b*a u&SZ8!6yh1HyZTuӾ\5_ I3I2ޥϸh =41>UEq۲ oW(fe5k0Wf0 &Mf=< $qIN`"@׆jHe`+Q@8XVQ"Yi PP ia99H6h|@6nSFT ON?crmHD#7 w]&e+!aQJv]Hd&jYeo54Vټ?N}f8(."~УTWWFFD"r9RTD"/0ꮟ`[t`(òy.ot%9RvAW&bJB1 9v Sa{0CKC~5B q@ufz`a0)diH7!\iK6bQAl~e#5"M>L#M$E{!N@>c;_AaؖV!@i[ej_Ӝ8;,8wT\垟+TcoO3wZBލtQaU+"ZsŠ  Ļ,:[PdDA~&Tv${{8M|WqQ*w.^ )Rb&m!DJ&[1aHCb&a3SCx30;{ڒG~qe"0Nm n ҨtfJS-cz!th`" Se@Z>mD<>0i`&kr*7>_4䕝qj#Yym}[GH̶y3ŵMͽôٌW6"܂4BRe@ZE[)W6V%9%´0XȭA{K5_ż\V}K'lA;˒֣s>㣙W%vr424Qpe#dEiiG P ]qpУ1kL=΋jMMI&D_0=m(3Z1 4eTI׮p}lJ>z oϲagwnɹ<6bIB΍nsobRH!1_$y@&aױsL?{,?}ۙ4~.uf3:_Wz䎙 ٲno,߮^*U"tQ"̹#N)2}H!)i B4,竏==-_rTjԅ~A"B "6&;_|N( :U_!\Vܪ qGt6lI/g`(L|bH1 afGWo3!G?sIENDB`pysiogame-1.30.811/icons/ico_g_0321.png0000644000175000017500000000634412201770060016320 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< aIDATh͚]]UkfϱﵯIچ& mڢA(UHHvU@7'}BxG^8^r2fY5eV͘aV͘V38QC /\<_*^}r VS;&IU_S0@e#`E JD''fKtx͗^=h:7_%Ӂ|R{ AD 3M|$ )_,%cﳖ`UU:di򨒒DP9ї-}K&7q2&Q,1SILNEC'gtW QJ/'p"YL Tf(f׶ .>+9KL+nuЦe ի7 Jv"#H 8q L"1ڒ>_S[7-(g^¥ZGƏGF<{m_w8[1lxwH7cG&N`dv?$xldo #N=߹XW )%Xv-N:p%W>:~r&)J^;`oCQz' b] []W\-Ka6,w?[V_{>ȉ# TZH HXJ?;O1pq;qK7眺?Fį{{JY )KЌ+Ubʴ6|Lq3ԆkuFxnć H`磌Uyb<#s\9bĔ-sY#}n,Kx+)R_2ґ=1vUSH# w +2Be Ȑ7wsP96R|LZʬӗ 1 0'FKVO?hŶwB~hLQ1bTS דSzWwV/AZaQCnΕ~m^_yǓO/+ELgr`>15VR~ݬS|+n/ssXqfC><_jp..M\pkITcdcY;mTɆeVMM DF|ڀ"]zx׬)A?;~!mn0 b#H`L x@aQ e3Xմ25Aw qOqA1G&|Wa:IPS'sf71;-Bgi33jS0@kvW:~DP6r c`A4jJm~q%'Zo?(&6ʟ}個2' F;y}ݍƣqf&T%||jw/t\_!R'IOO]ιRiIqU&&yO^8<'_>ڝ%eyhѿ=Ұi5pΊ.Z pf?Wc9OZVfbi5J⤜jf[bM7~? Ǧ䒹|S|}x* ;}dR̺%T\G-Txc ?>C ޭ? 9q<ޕMjl%Kc2Vӿ.Y*%L0f&懆JYWb$0bdЭ(@ ĘM (y1ͭ,/;0t#(KFS,d\vV)sD&Xba)v`:#PeYr'n̬#XLk;$1ѹ Wڸۡ"}*(YHsb.gaϸ= &w ofƧ´iJ  *qt cS?ޅơ }e,TT {4h5Ϫ4؝ s#a\KFz̐QuȘaq! i f(X"bFp<|￷j3](~5fh-rYu;g޾o\GX.\7߹9?NoA asIENDB`pysiogame-1.30.811/icons/ico_g_0100.png0000664000175000017500000001045712201770060016315 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚{p\}?>vW^l˲e!2 j^ I!$mII&L:I6tBz 40ر lٖkv=?cdoys}Ӫ=J'Q7iFĄkZZM#qYJP4*t:'})2.Vk#v:E.%a'+"p* ,Q ?#AnR){ͣ{ L8 8(k_Y" MxJU@`rsJHXW*8 I?0FDYGcbBPԡ4<02RPHz &, ,+ 0m;+hO8G|0>s۠1>.!ANO( 4o_x2Ac0S4ݰOc/9*!x4mmS;wPOL9_t144će@*J!ƀzb~/n]nR^Ek e-ЅF1Hc4hhtt/ 69˾-BN #H:}Mkô0FnjO E)bAk0>:$4nFb 0*`$ UH&2Wqg(_׵22V@#P4]y$uđD ZޏU\I(zx#NYCe6t+7"MuH_ =9 Ơ/ڷgP>5|bQUǑ%4 p+Gz2ݴ \8c㘉 ~~Fԟ <Iٰ *|Cgxqhc"#%|UU/g嶵k`REb>) o4VvyXZQ:0g^ Oa4lT>_m <ˏѪ~vG6ofcg';]D(U'aX,+78Rn6VCЧzO!)0S{h(8]{_S9snjb NO=š}"e\tY8a*4&"U\K.q#GvJFEйwRԉ}(Qv/u.Zͺ7(ǡnne_|9-VPDkR$$=z P/Zñ/|``5.;/(vG~n&}8,fv;/ncGUёPh3S  Z@KCr_3 4i~[ 9j.Rرο6͏їPԚ7j|E Esʄ|ԊYG$2!kT%~~.Z)>ݗ@?~v/?55#P.,3H%!Z&#C4Q(6{_fe\@):llоc C2/^g;m7:zٰ"&a"$EKLLb (E{=gV1'^N} S.˒=nFOpÞxg+-{&p8;N7KKUԴWevWX& ^?k'^ya'_fpjkx 6q OnU 9GEʕU !IefS(OkRX'Oٶ f59vq*~ Ak$ -ܐP\4>?teQ"&YWWO#Gqk±ð\.}ww i1-Z)x7wwsEGG 3AhFjVu`rsHY0|Sy?pW)Y;@x,J̼?y2\2s_FQpϪA+`b!10z./9rki{_5k3&?OF*":aTN7#C5 O fvZt*Ksx?gK Ԩs۞=ܵw/F97??&yqn\'8~#EQR JBB,"qGK ??r'|_lb J,f9V,bDP## {ζyhZ?–!qD|B Qi(HR6eqo{;_;y׊E. ZbXJnln_.3 "|i bػVD^G|#T6l43ADa%eY701̵ml;Υ>AYl?QR)~v-vw{TjWh ).(xF!2>O8CvvfYBJqGK 2rN&WI2pܹ\N3?#WWWEǎ.0F`*ѩMkCF*NTY(e!%/8uqEQ3M9ά5L&(vѳ!\$Tv帠 yZpK9܈(i꓅7ǩc`HS$HI"%#)Pn5 :[oA4 ! 1%rz L%+.ةL"%U1w A,Gf3t`,Z ( ݓc3.HX$$:*epR=D#ʭ xoaWnJ(ZŵcCF LJYqM{$a”hXJ*%AUp`N$FȧR,򳀈HB ES,i/_S 6]Jjh@*@Bx'6c^{Sb%-G^ X*s1>wƄ9Eiڛ$Rɏ h]~:)ݸ5gu,45dKWT0>,~h_Hm}5ʚKbGmy 9tJ.Ö߿sOs릎xcIEO{U@GB;-B=>ey|m(*:OܒVp1<sw_dS0QO֪3ƕl}$_g+͘Gq"J1@照jظ^ss|mM^_?w\~@l̉3I> [n|ᶕh"vXRKk7g}~NNh^k7IR]cc`J5(>Krܔ?gbr\hRl"J#t.?6]T=ͯ7`+!)zln }s5F_jzƞt@!ʹӴjQс\6Hj,$@oKE<<}'8U泟Njuvkq,yghѽ|3HlY;f'5?PBA6un 35mbmoY9Sp8ǰh [[PoA ܶmRmd 1H2.[ R6ؖР}hc!Dͼv.f %v.?rp</Jሐ͗c0C6B*?.:Ǝ*ijNT*7UMϚKFh)2yYrQ//`*3>IENDB`pysiogame-1.30.811/icons/ico_g_0108.png0000664000175000017500000000760612201770061016330 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚{}?=3{/tw<2H2&/XIU"'U)'Se Tl!N)RT(S!EKOId I=nw?{gVuul߫j£JWP6kFlb5-o<#WET*TJ~ U KL^P ~\\IX*< I 1>^U($X۫B}mU05ZokD(hǪ{L)]KW*zw]W}Jwx+xc&Q}!LXؗz@\^,k* ]\)5v`bz}v]Q"ANO%T$@Ru,Hb xw0D=(@vbK=, $3 1&Hro9S죜]!$CR 1ɮܜlEamFa )Dx|Qu`yc|ss2/@;k(1rX$<&j T(q] ݘ33qʈڱ2&$U%e7y;{{g#AJ04=1}Nx^K3r>:Wya`2#{{;7'÷yͫWˆSm<* Rv: 3{.:ďF?vɢvڴ %~s'.HAd)||# 8N5;i"g9#ϩܱ!VT5\=QbMɝࡃ`uw7r9نL)Bi@t PMNs}_Jx95 e#w/<ڽcW-O=<#P׋sFFA.MMuB:Dk6|uvk5ns}}) AN^+hH8Q1cb/Ě'Oq)(.gK9t -xJ4~ڻCC4!_߸ΝUb<*xBay0_}*x󹼭b͢R ccZK C{ Y4kVvNQ*7hgiˈ$,jkDݝ\ebpc NW GͯwcDU(pE¼?2U> w>{̔ty)%H]olRvo3}j'|Xyb`OT–*9hC_NVB(EXH4H%8Np7- y@RLazT^q,wEõg:;99V9Y>eŜ] 8ʶ/ (8#j DASK&ײRM޿INj 1]a5NK uuԄ 1^XǫWssFV]4T` Px@;~lHqK ¨A5w(ŭspZV(),R,&e(bcWWr(9|:/at`2r/i O# T`k[*$^ H (b+TXojJJav=E*xYa 4BVXwh~-r} _r|Nx{q R Uԙ0LJX@b*P eLTUŁNJLr > $Eq{DO0Gk1⣀P:=yвkBBb0FgŠ!@' SU^>œS6^TJTÝ Ԁ[nb_34Ǝ⪥3 #1z5dGYá-vf#I~J%(R}# sgἈg)h[ڕﺟFFZP@L~pQ;4@Te&p0#oXHgS3tkar}ã`aTj3 샩Tt`? 3כHH@ kv^Q=2(`jJG{w~JJLMS( Fkyũb@uJ7گ_?Ŏ !u"C6Z{y-k#m,~?| [[fA$kjFus7ct][sdY3*=U@ q-[9ʇk#ER }tt7S|盛qnټ6/ mI ^~~?@{[!'l(Ti`bۯ>]'t}Hf'!kӹZwb#NqTÞ7qޒ!'Pd6044AǜR/d9o|vcJ2Դα}p+/1hyq.T`mL $R D)F#XrvW sU+-O0zz gu+.]b>9DOoK$|8n Z3<2EI%Yt9u/GO0onk6t'x^ǩߊ0 5ËSh?dbrc+Z2U99ʂe/ykIb!KNv'pϖuJUO5TP{Fk[m\30""c:Wv $ 0CӜӔx{)v94*|y)ǁj\ƋzR;0UDb_!VI+jIتesrg(Fal39Ct|fs!UFiZjf "Mrg( +h_3tFqLT1#ZgXZ'OV"xƧIENDB`pysiogame-1.30.811/icons/arrow_l2xx.png0000644000175000017500000000115412201770061016675 0ustar tigertigerPNG  IHDR! ?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8JTqwEZeTџ (ڜ! EH# j!l.?AT7PhVPm㉓{<,؞vپ.i w@8|4Xպh{,J>C$~I6Y@xc !W7I< heeeGq|aaaOOOϔˀ$IyO'1$pȀZRYş* `\E{M"i0MgV9d*X~>MӬʋj]@Q%X=x ,i6𠰷=X[[kg四 U4c$ib&p TaѦKn{dCS!e{IS@8!Tm{ (i'K4}ʫB5%ݏ16l 7$y6UYz~֫KԾ߭%S1kIENDB`pysiogame-1.30.811/icons/ico_g_0110.png0000664000175000017500000001040112201770061016304 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<~IDATh͚ٓ]G}?gZ,2lelBa'2SlO9ϩ<*!@1%8,aaْ 6;]ֿ<;#U}{9}ֿsկp|y5HZ/ط&B=#yW\y(Kv >`|Wvby.oE&I I"FK^^@ q캐q kg Js& .8lay+kH$ЗRJgYTFo]R 7 ~@"+ J!(@m,+%NJJ)iX >a%D qRH.{ ./^JQF DJTR00V,e]IJxuy\RМIĩ 49R c"ryժhL!-&b8eBSevr8 %(cm◞ǧ>u{7S5 vMj0<ÿ89?ʞ?[̉ q!$4gc,2(E,\O>›@ 2 J7Cd -Qk(ᰩ_4DTh@"J;Tb(8֜i4xٸq#;x0̉j3({ح&V޲ꌎPVg~+QZeZz27nārm^amŋӼY>'زes>ӧ9|<f3Ȭ$]7m C?Eq(2?] .??LMMѣس{'Zeou# : ~G?(巿=E⁃%Ȭر$";!U-)*MVⶈXX Q#qh4ꬬEERJLLxiw=I\pw9ǁ{njU\́SuZHD$%X=eQV Y2zU|g@fl:MVV&ssM(С'Qlq)n޺,/-: 4Fw ܰ-MESZ=#I+WVk۷1ɺPvUQX_v{.aBJ%'NClt`oPTJm$HDXCRFRYXXdymh+| Kz}6nrMS8qfs}{w{/LSoq]'C\gDGS.,r\Xu:N??ߤպĖ-!M7m`i=BZY#jRLc JQ):}eQ*0C:p˲mJJׇOy[?p3Qy-ԪCEldG|1- @2U O(ETB3`AH!F&z>QfӦ)N:bG0NP?`uuj*lVcLrs H* BW/p\#fZki6_;s9ΜyҌŲ, HF#TJk($cBJ'w\@^5IĖď F!{պNy|la;|i^_ss7ZiVh( QAD!"G$7*l$!hh- ?;p8/$wl ǵx%7OBs!1lJ:.ba2 $Vp: P՘U6!Z4aR JT+;c=eբZf||~~@0޽{xWguQJLO_#= O~Fݡ1D/۷}{};K[XƲmJHoW ]Z.6jfL;=}:Ԇ)ēt:]o-zwy~Q.^ĸs]KQK=ضe;ض@bC\Bv&n(7k3cǎNwϮҥ!:p\#/r{m{wsA@Ѡlq]u]J$,KKWJÔx6%W=Cȷv9{-v# $ cfebr鋗K?1PT8x~x4333wn*ma[ {OyJ)Zpp4S,..峜pWyٿcd Rb~c?ZDN;mv(C6 L"G{o|[LNN0;7}{SIcd{3;;GӡVԡ's?x~3=}eFGGO|0 !cP@RTο=J@ùh|Uj*msöm@ŗ{kx@Q\ WgQTW <41PXm_/?E7sCXY]aue02Hf,/ M.cc\(J^\8i69׋ L1j:5:vb#.8%4`,0$/1~@1Z 7&8MgS5X2zF~sI,b˖x^LNs$K+c %*2qlpzQbdb)-x(qa"4k]#ilTr1؎1>`M\rn1:11QA "BȎe-R҉AffDf͆u|[-o[y&ؽ[8j bcOe9SN3;&:htᬮ4"6ư3WqyךKc1=s.mLĔ/J?Io?T(kٴq#6ofbr<ò$ȳ5hU< C=Oۧtt;r*]?pSZ5n]vO|ij"qbE,l_Ywߥy,jj\yZ^feYXZ:my.`vVK 0g+ZS ;46ڝaCo-AR8z ,zRDv[]h6Z8=%m"!$[m*5a >ȧ}Q/Aҿg a[ V W&k%>PW)¿RZcFR Qi'GP@`ڗ$FT&F%Zh1X;Bv@}񋙾 eN,_12(sA$Lr{(LS2!N m֨)Y[mhvvQŨ,?ϘSﶾ~%XKidˠshD^\ [9"y9bO(MOw5D?LۨwnIENDB`pysiogame-1.30.811/icons/ico_c_00.png0000644000175000017500000001043212201770061016140 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThۏ$U'"26sٹgg/3 cm#-,^ x@<@ /zڻ]UqY1/d+"3*9_Q2w? 0k;aܦ[~`6yg(:+]Gu8x&T55Pz@ŗe7,='k$gk&FM@~)pt#P_zQtpR@hBl7DS_<3؄)pbko|CP"D"K$?@N5UG~Gh5`{xg-\*BS2qX L'#yDeX^gb}ޭ;/_UD Ad H,\f(w`̀XA#3QN@.>.7\:/6wd&@hFhHT')3b:U@pD$6`F 4 w--WX9tzg%6 ffflJR7 SCK0Z9`zൡp([N3D#8 *Vo3hv^eޫx2/} eCbd]g\Q 8{!~vߠS=úX8TShCq1zZka>!N? %L*N 'j jk ;T՛t[= @q1U< |<%_ @Jweg&|3Wj=(%!Qj _t;uIA0pkE ! XbB4C.!wu:pņN=@gk|k{e;&!zTl$RG1֖GA`0'J<፯ * jGW*&'͌ՊN7]m˸pra,"a<÷ Rl&jÒ8$}\yԓZbn4/p#DV{eayߡ^=w.mHz%\?t?|ij1Ʈf8@ss8'h(q^dH%CsNJ')S8R|8 (Hq")2wY>^m$a'4CM!jiNS9Ks/q81|"){OK4\>ȏGu4J-U.W8 PۼYJĽ/m,M@1ʼnMp)wra䧞fyL:;i3IOuHKq=,9s]3HNO\Re*>džx/m~E,2~Xl 5ȗN'3ǫWšjhK>5F)p%yt.Tg,h\~|\ w6eLQ^h=X}(Eq퓍"E_ ާZu&I$|.e8II2v&9۷Xx6ujKk7Q*m@nhUXr#*:b4ل`fh4F5*þa"9m&qmgg,1}.5UPG+AiX#̞k$54khjb%X$<;=Jb_j vO ba:ThkoшDEB\KH3aJI)E4d0L /Ձay4(b"9ddJ]Gvjnv߼h fFUuK۳5jW"X,md!iqðM4bLRzKFj6jnnY2x/|{[)i 1M)DVs%ܥ0#-co0x+wqFWFu^jTeԹeLh߽qڕY@mn$\-_Gs}(Ogf @Q\yuP VGaAdcf8jhi5Q4"]Xa77nN;mӉ6kCiϤfpʮ(xTݵEdk={ dh، HoO?uóܽGjz&,4i%ޏjʷe`w^9?1VԣXWIEȉ6%! wycDWҋ~照Cbr!bj "L@f$a6t/2gN+:ieʣovS1O?ݴ29t~B1&?|J[T'X!MhRO1E4hPܸܝ>\9mQ}s_H'0 R xc8T*MT&߿M*V6̔9[eQ]I\y>iwf";+޽hBC V8P|QbT_]: q$.Z$1]u"ՑOC@ʎ(SPtx+,v[l`l 4{_~_}ν+HS%vaI)pWUG?KչD.( ]qʼ&༠?v'Q{"?H Wh_Xs_~/׶P xN;[dǽ׷(A4}D0?G{ Q*csj6BZRp1~B7PNmߵJ*L>g똬@x=_O7GwchpBɴ~WXi_cր1"P]`. 3P_90!. UBz@s_>Š}gkg3! #`ٗ+  BfVZuu҄9φ/-Z1e#ZD+vlM|Qb`v"j3TiA9|rw)w1وAs(U5qD'.gQ!*XHKo~ɋlqB80f[[MBY@x8D\ ATy~/1c~GgO(ay;o~/~cܾ}ihE#<Ĝ>w^K 5U2B~ i9sO|u`sseVWWYXX,u Q:R?ϟW6Q+%%Kw9y$> >(w1upґ 99{ܽy :lllu0CT?{,.._O\3.\,//h4|2W\Ν;}IeӽHf#5FBp"!i9r>d/ _NNʙ{0hw?|FK%1lnnry66nEn\C菺4;؏xwz|kWǿn_LVV7{u̬6ρ f~vbv^6oCgGy|{4`+z}[cZ!NɝW?^ۿ8sSq[-^O8̦ƀ|;`X7 H38B>eeɍ44bL39{=Q΂ х:nvM֙u'G,CB'(>JϕB$TѪL&0fh.c&DX9. Ҳa 9UFSDDkFzVͲ-z%($3Pdd ӈѱA6(YFZ!pѽY>8ʀgÆzA+ƪE2wR i9bq:dn^ @c.Va1U^qkcND 2zߔf6 GQx 'E[)LilVyQcnޫ?s.BCJ;ܠ[21+yNEs B /_[qg̨Z*$1Ql?qB|d }τZcba(jWwhW.V?כ==Mˈ**IT-}?fܹٲD9LKFRRZ1-:KDUcʐE(HNmU4lEfQg%Ou@Lm졒FB`#Sݡp@JY-l r49iYP!8ϥ揨֛_:Mcx#jí !e{'h|1-f+òƪrI>~ֺU<' I"4+\)ѭ!jy:KSO%#wXX*G3n2ٖ7wBԌQZ:@fDqDxF.s[ ʉJZ0>( zseY;)[^ o` 2Kw0ehk_K`*hdۥ+iD3)@H-b u1lE}t[*[AǦd"i(Ж#n7pM O|,yO3}eF?[/r_a8c$M0QJYi4IZ^+dLm˗)AȲ׮.6se?;#W F5d,# 4~8\+e%+ ;t8g?ɋ>sV^#~{xy86Hk{dy<=&I$eW~?y,6eᄣ={[;;3V8A6nցLZOyd qP*⨿IoWhE[DQ/~ AB#i]%;&L Od3ގ-O5YkO+/+0FǦD/5$d&qo<G\ jwsY־S,8/oVSu;GX.t7smk Z$.2 R8i8 cESe"c{sŹp||yoKh}/1?7f*j?:c } H絷7"-t?(I?vm?_Z?i?1;cIENDB`pysiogame-1.30.811/icons/ico_g_0002.png0000644000175000017500000001157312201770061016315 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThYyU33K-)RL)SeIv!~I18 'oy @`$-rdKAeQux,=]rϙCӳ%4_]_BcWY ҡ6s>X[{K;`qs ////qIܼ Sy? :Bq(a=O!V@M .zד8Dy 7'qsו8!VCtD|?(W4@ޮ@[cPH0 ܪ{/r!"!>" D>h3&~'gqj-03c2*8D`M*5""?("@X)BE`qD\k5h @G3487z} EJADR@6&)xqTm Tv݉E 2 #PJdzZ4ѹI!я[CsL5 $LL$bɉ<cHa_dG>72_VŚx5V`kv 8mX+&~fhwdIMqɈ1+Cz{=019RJ&.Mke83w@w"McD j%E'1~nu5ZJ`M$Z'ًs+ s[{X-:VVY"S)t@IDK {f[$3S #bSVZV)ZKΌljO G_|\>RENښOٺHT>P( dyyB-X]:q#抍m$Z G>5lߌIr֭%ώsh ["2yu^P[`zz0 #aiihEMĂHb)ORmk"2BXNT)(R KKKXGEH}H$-SH!144μ^GV+6(^p_Sʏ uO#cZ!-h> ͻӴGhjl }$Q.WS7[GH!$ -հ"a.X,/Ṣ] e\.G[Mf s?e,n$N3\ Zu#T·j l J0022?8AyaH((KXkq\.Z* arqO6KS\nٷ{3)=ΞZfl-Ϛx%M&Ѻ+K%~{v< q)8yRLNNbajj c ʾB+sMϫpfRC󓜟`yl!¬8Lp$+Z6^$=V' iJ9|%G PdYyczz.s7KKGht}{q\Nx 3f/ʭeVfnd@2ylV)}3qG|q-vRj,CM\Aymnf.&''a~~JM,\7\uN L{q\Ȧa&э 0B"?WK$T)(8~ |zn'l}G^#%΍n`| K/b]c2n^GX@)əc& ޶7׎_ oQ`d& 9pM!XXX##$!T}X2L% seҴ #ZT3LN5&n%w>&TazfD+rqe ,-᱐W spc,چ,]Wt Ͽ+\)s ]oǶŔ뢵fqqU CcT*lܰ;n'1Ƥ7uK\W >,Bj-7>Ik.Stu?U[x/(Wu'=7{9/!Z.r-XVY 3 1ն*W*:HۡcU]@̰e mײOOi]~u#c}C~ъrʍ6#X4]~S{nR2벸k')W_JHё.+X M[BqMHwZw:2-u-݌ػďpiq"urqeyaѧ=w!3A>R |cu mW5js:?FKym۹-2ZG?k*g}V>X׶+9Gx;D!~_^<;oG: 333Edh%>݉*edLTҎ(uijMইy~^?:m> N#n>‰ +pbrPH3u<|/Tc 3>>N?W\aaam[ױTW6I\/9g(w ɕ[r5jcwqv"*r3 \ʹZ&{yaNx;FH)Ck֚U._gDK: !V͋aaLsOK4zPT,B{ttb/P={59U(8H"D ! AhCbzx/v3LLLNss3wu("2*|clôFJж:B# 8!u*VKL C6mah BMjr |wZƶ[ٴiAs`Psbk@8PaLd)' E>w٭O鳵cYE`M74:=|"(` `%X%JB-Z$Ԗ  0ԄLev;u]/lgw ~ZFh8AUT׋L7ӹRlJ%vX]ҍtȸ2B*TBDE& #16D(͝_r98Z(Il)p0nISWbg'ؿB۟^ٟQuP8yHEK V0XU VmոAT~ 8$q)A@ @"mpX>' ܇{/Q"Jt$Q(W8sZP.hBSad\1פFRWxGuAdυۮR"@"r_MS0H!PI\6cB`XѠLR `UmH$P&_Z$Z:@)o'U7TQQ_%Tr+'{^G9ts H餄-$zػA跎"^źFV&D&)^4EN2o%GhE:Zk7 C'k"!f^/ĵ [f+f+8H޲jjsqepoźzf}@t;wVr[uo;s?.KҪͺ.k㟙=]<[?[w_Cq@s~đI7nIiu$ ( ظ@ `A 0sk},m |*($$a(Va@D" @iNiv!=BkY`zp.-a6a \qw|{ BVv? )B:XfU>&Ac/b1{XqlzBe)%R !)dsi Y Z`lFG-|3C 雐) @`6hS@IR(%  JJwV@ R8Wp aXkbEZ7"-㌵#;SeeLF"4H »칩\ ,m!!l%Z1(@[X XQ2K o(b1`Jdy.-[01N"q/> H/%gHa P |i*F@_3aE:e7%<8 p஑9o}7Z@P KK/፴ZvE~π =+93^ʥT}ʝС C9y<("KÚ Ŧ<7}X Zd#9DO#Vx6豑3Co1y4̈8g7Ρv-ΠakZ~}6<@Zdãq_U ?ddTG*φE}W/>b>x&$[6 X&y2~ أX^/J-?L蒿DrbLnshk{`%.ձaăuƗp9eb_斿9s?i.7<V,hŹ`\:mL!+kl!޵RL}~;9~c '%8Om7}ZkD1OMrxYá7~]:sX:&\,1]r|'|ټ0Z?h'=(羠2Awu, ІN4\0tl]]J"AڅK*gB*~:7Ы+$aJC:,DS̝68I:)@0DD)ًT_hB->HZJ)Ehv 锁AI&K ~EQ "K #!/翸bϿ ԮwqDO5C#jU+QJF0]o[*@-6#E oi53CÂJP;zyjI jSNm>ߞ:'w5lؕjS3NL]5niHC:ҙPSʱ]=-Szc +-F32@Meenb21Zc?J00`ܺo=<7Gy󷱸`Ɍ5WVyd#O&{Fyr ;fj\x{ 5_?MM>E8ZaxJ}'(<[ӫ~z>DAo;LґC"D(.7T!1NDpGo;8~%Qb4{0.;IM4yS|n'(sH+/-Fl\Z1>1&dd4db*bz&fn%/ӆVH9R (diQss/%Am]]D|AJY9(T)Asɲ<SWǶWز 2(493J $ $AJI,7`)qQȸ`u30s!nyc09H V\٧h4!ݼ+N9: QL> הRLn~w9]s!6NEtSm'̬ j<+~'/a@ ʊ쑈_{ {ˣ<}G}U~=TEW[haXZ#@'nvݷ/י_4s Qz8G]&|^ %B $ du}kp!*wS,1ANRH2_i=M`t,oفnJn5!:e;4,)!TP]cCGaA-1О&][ (˪"zܜjAm qnaiv2Y >KL@*UQH+ bKXJ%HB](5YX뷕Ks j,6,7McB:mt~u_D!, D)/ĶYW c'W1<' ~$]bl8/tAkᥥ9|^R|A)gR@)BbyJv{,=7zY Y UD)]0PY#|ˠg;9@y6;sx0+뻿jIjv* I'_O*ƧP~INfϬ~n3+!6W0[}O^or:]^-zkY ǖ YC!lsQ2R/1X"hIENDB`pysiogame-1.30.811/icons/ico_g_0606.png0000644000175000017500000001123112201770061016316 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThyG}?=$=IdI˶| q;@r! U9HB*$)*TB BR's l| l|H,}ovwfGJr'S5=zJѯJ~kv1 mhwOw%ٽy7n C 紥 ֒v -h nmՂ$ X`A2`@lB@Dc1o|@{B{G+q"H"Aɷ;G_Y^M0?ݿ!a2,BML^~st { B}m@RZb4 :kx]"`9uB@H;9!:A2oE5VRJH)Bd}!RJ#HHbA^܌a1R4HׄHiW{L2'c8{6fITxJ"B))ryEG_Bjrwxюo#x/a0c0ڠA hm'kk+pG`ABڗe(;\)A$ h#,xeH V@J+<,4}Ȍ)  a4zj\W7gv:%S31󌶋p"0|oUSdkj . 6E830H/V?̹O<f[`9FmbZ-(Δ(JN=1txJP,JnK%؟|V6~۶2wW۟ܝBa]:q32P샭t&m ̞a{ fhM5:}SCRA ܿAۘ=O;̱Kont2*5<.yAjҭ4X+qOXA6gdOlKԏh70\;EP`n,cjK kR™ -[ IX-q@*' wzK*^'N=E'ሔHZ* @B$ x͚g!8*n%WY8,/N{j9*V?=5cC;,a*9%aN?X]I57NfNWIh*; <6pμlF#Z[r:jQ$4R̆Xx ybbdGznzeJ<GEFJ~5$.T+qܰ tub%I fB)Q܀0.#cc>7|qDcxjYn V .~#f*wDUr'5ƥ" 6/x'I:PKD^ @ g:UvZPlu$zg~뵄z-F*AO? +ʓ0̆ݩБoqh|#0\K93741Qh%FҐ5Vى.Υ1q!֚ )E(+r#-5-nذkgHDx.,? Uv09A=!i3731*(U 7>⑈M}ĵ[CF;y-lʱim)-^/;+;V-sA FJA+=^ɷlj>{dz~hxG;p1;CB i =vm )/Y<86tK[ljp-c[2,7;ZA{^& AzAӒ=o3Cl 7osrh0ںO}Ʌ߰Eߌ8 bRnb\q5!G~u$cuڑ逭!ZeD\Z=X㭛({0|9<¼`? ,rxJ24@Nv\24ֲZv]2qG!M-4Lm %X, 9* t_w'3tj>B2(W ӧ ^߳{=eGS(щof5<>`Sg"bv1u2YbuϭDP9m8{N?Ċщa!ɩu6xLx'g5D"B) d"ض>Rv'[ @ϖE^c֢_\ ̓W.ΫG9,X\y%[);K%}qlc0׮LJ?O]3[oS!wdyC.:UW)$zԂcβܶȺ~f Bj~ËZ SJG &, :)q~w0T& (6&*EjKP-{K/耈Nz ŀۦGc֌"i  ^;h*H@Z-EZe[RJXP[Y,IpX0i-1m++@ & O} Qۯ"S8rL"BU Q,1 Aܶeٳ'n'r@RNt}k5D*tĕa " NjbLQNu|{+QEj!3c* 瑬B⻃MBD 3 rP(|\H/>UX c|P_&.qgЛJpPN+ ǝ#EPE4a/uw>Ezx~RZ l/RRB@pQEvL_9B6u+C|=@8ZJ7Nl!K`!L~O@KBL% Ow{so}@$DϜ5s/.h/zC_{FP! }.p瞃<~vSalPL Ţ2q4Τ)sz۔}e&P_|Ȗ2kC( D刈#Ze *` ?C} sGdw"C\dנA&ku~CN-ϝ3RLI7gb4Q.DVG2X{z3G/m+wEj>_7)g9sQcvʅ%f3ezZjq|z){Cvu_8Y CaW}aY +=dqNn &\hoaΛYZnk].j83­kw0Qk=f8Ҷ4s^-$prT R$*?2ldM|C9ʒ ~ =KBV.`rB'Gr*£rϖO6{ˈ#Dϵ佯\ nEWl`-D-&C@Y["9G!i4z;!K2 6T 뾐QL?HB-:{DžwVp5d;LL<7S\ ;75|P}P@( .عDkDU74jǶ|.(z >3!SPN5g_" WÈؓ ~6aOT d<r&ͯ/f7eq :G t;Kx{0:sHpo֊p q)3 b=߱y][ t&nʇYmMxͽDX"_ƽgc:f=GUkbG P8Bv#>?@ |'Ms/&ҌN#+1\0O~]vn=Lz-vs;!eɎ$M1TpJ >#D3kD}+ 1J 8w\ ћ4+'鼵[Q;\EP:cA0[^#" i]m|wQ?/laKo&:( F/>`4B#x(H)-"3Ls̹쵖ks9{̉ٳ]:[|7`ɠhQ.(Q cee$IT$!Tl9IH* Bڄ::(zN a`QQ6bw/ vc&u1mpB eF1v㶿A;cR888I81 J`ӰWuЍsBz0Dpe:˝Ƙ:!BH B: !B`4 d鯟:ɥwԯhS t ېtYжiԶڸU262@J R"I  Ԥ`R.6A4V0$ ,\xfHmiVK-vca!aˇa\@X]1 'Zu pk{Sh6C:K-j <ؼou9Q>ԛ ٓhc MpM~L H[m4Jtd0;ׯz ejU\jrV`u2sk !,c vlx7{grA#FaЖƠu9F~ǘ g-7^}|(pq$/ZeYub?*_>mjnƇ'|nޘ=nCwPbVE DkwKq:YOL0j$u~z{6s%yZV*eT,lۇmtl7ݸm=/ >mr@B=VG[G>8G:]G]VW5lct '\B:e^~G9QBp#;./?vhqF9VeV?19&>vaHN  U~LGR 8?bF BO&FCsejkfS! t"ᢎmtDi>aOf˙k45:ʹCVPilX.%A`S!l>\ 9OR. Wس;̧0Uv#رwc﷓+K3|;V=/2:6NzEq$;g0)Q?&[FYe눴>DYB;e_뮲y Cd&$/Z)?7UcnFVt/ @N ImR=eр#)yN:lV&XENz#)bt8XgXٯNy肷 qnBĂŠQ7B|@FKt_ѨfJ-Uar 4> cx KP5>I]U9:90Btjhjך,]LJ56'L^bnN}(~>њP &$)UT7Mԟ mhB1m֚Rn~T*-C T*1BH<W3Yrˢ_ʬ-\GG 7o,9R-یo@:{Om^\.:bRI0ǏG$IZ04<;řCZ=ή("ŜTkӚ| پ͕Q6@ f^3 gm%*Da$DQ#և7.^wNp9J\ݳv>]eto|ŋV0/:0$Dq:P~d¦-,ȸcRw;㩔dt|db{v9Wl.ˑ(!Z2Cq2ubT:}+}G=:L0B+nz)+!`7ß$mv sοĝT'*nn3q# $FxGǹu(PK1);68bg8얱$Iĝ(C"N*{|]zDkvzwe&^^ܔW2UUz(L۷qu:.8qCp]7p쵳Jtl`p4L}@IRJ $#h-_kup5Q&G8}t^v8K瑒C, :HuBux`ۨo.n|AFg$u͑ NGշj`^ޛD_@׬8њyoe(rKg)vI00ubřm2~y2> urĊVHG$,H!"X6 0 }"+{$ W MwOkuI#ovnLsB]ő qQN)Z')oF\}7 smxI·]OY)hdb$_ETt=q u-;k:bX2ϕVA}L !Ǖc>C9x° }$MI* c  uey4$a𾈠D .XJ@a/$  "ĞM,&M6}$XlgP#`zygqEV#pK!\Ky~6+\"rcCFC|<WadB% *.">dG ZP&(Zd8(-((<nx࡙>_^%߯^ NxHg/Ts=님6c5Zo1Fc(Mb, j(R<;o(Q` H9!)s6PT&O\DB APx%h`5((D-8I|2 9/Of89<^U5E1b [ǧUZn+ J!x^]svUo E@ey(&kϑv:˻[=\%8k( )zy}sNʱRчܨ>DP%(kf^~(g.brS*;invw``=88T4ҼM??G*S{''N!@2˳=E+Shc#CP[=ԵMzŇXQBP'n~͉{Y]e4{sx|xei &fO/o׶0-R/ᗗEgPOsҞi(Ra쪯fI+Y6zl!ԭ}%[сnA8K;tՇ]sf.HH7$pvgauDG'$9WhVƣ{e`A:n .d!wwx׆؃pqЙG9#. d;jmlDxG!F% }jH +D@Mhd( U} D iFD۪BEK$xBE> #HT@G{\yGa?Q_VO_`QݷIS# G`yB?B V@ hhBpzf_Mw!yq>3!SPLU+coܡˆCmT#> ë{P:?:5Okb*| 3%ܹy+b<% VG[>vsL?C'4~vI/^b>oq$2RSquݱw~w`c?xjK6{dA5va.2ҷPa<SpFs&<͞o ɲ#S \?ơw9jyr */2 0ݕf=7|&,$ <{Mϛ$@RF}_9IFuD+*w1Ifq~kÊ:\_ȟ-_fj{AE@yyOAl2"o7wvȅsj#Y#׉qeK|‡Gk±h&?OqN4m=8|gygQE'P.zӯ[-ݧVv8_;ߘ!it07VLtV\邴̦ fz-9/8~#o|j u(Jbb\@sZp\^dFeCsx|ҕvQ=P0>2{+E9cwQz-.*A\:=, l:(D -*YΪƣZ XTϡZznЭ9{_JZLN1 >VO˃y|^z #5 +!L*VEG)]:~AK ?|W84$$Mi$),*t,2d_Ӓq~\q᳜EoWa, (O-STT,ԓ暢=vd4\h&$A% JUmPFT,WĀҺ[VJcAh:BYAɷۄ6XSU dwx݋4tejLn20ͽ߻+be tXkQE'M`4(QI %T}ahrhnH FJګ@JG^9tT Α _:*}!(R`%֭1qᦼ.)щEWS.=XBXq~G>֠yAO?nzdD߷MW8֧c_D]V &2gˉ1Nw7odb/x-~fIjZ5Η7BV[msڻlvP.V*&#,֍ )ғ0fiެSRt | UYp9.}>Rk`o;SWx`cDd-T+q.gi qy~ +[4LwiMDm/`bdZ׎3=l 䮕/\E (n~\KQo4Om GƪZ]3VW`Sx߻@xua)[|y~CaXT/6+DsufcGi=X1L)`þy0ؽ$0VOoƣǛ7Ow{>zp{hwV3tTz2r$M0i_G`_mA~ d)Z&ӂ$*֌YTsg6lw|+L; $=`έ[ <;ז{s<~A;DvQIb:KNTk$ƱuXZz;Y"Nwv`JezOo&?[<{vܮsKfd@*)&I%h:8~yy.8]1$Gf0s:z8f~:gGaafsƃ4K ~eq|aǻ )d^'i$çNtX/ kPB\,#Bq߽NBEp@J^Ȉ6$ք̣V`/Ъ7 %2ƻ._] EjQ\؊o9Rۼ.RxvsxRː$0o$G*I$G_$.SkɕCD1~tS#$i/ISD!w/hs<&r7F~'xi&l 9hyDղ%;TN+m**ۿ8ڞ㶅T=]`' 2d"wC IiQMP[T;Dk9hPk[QÍJ•eisl@bD4s趐fK)chQB{AaH;(J ` %3yf HQ Π2-~aKn7Hʷ 46@+% *|ҡLW92PJݪ d%Ac} %TGPoR#R RwFi I\`3|iBoU2f'0{&_)_pA0qhE_]VH0{2:g쯛s#<ڇJ,L#lJ鋤,A3B(=}׏}=:k \Q`zYi_q2󰢾!r&IENDB`pysiogame-1.30.811/icons/ico_g_1107.png0000664000175000017500000001000312201770061016311 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚[Y}sV+iDȎ%6&s!@LJ\\$TR TAg* EP&8$`.!oȷ+[]iϞC\:FꙞ93߿믻Wby?(Њ@G@)c)c(Y_?E57X*W 7@{lw--0"LF1ڄ4m61hJSxȘ%AbYTp\Ƨ(V^%^ pZ@yiR@pZ3gm,Yv (P=J(X$^ A3 hµ{:􂊗N4^UzbT>t$+|]Z*]7(|>j7@bUW~*{S˦TT/V(AT"lEjכi>{,ԾxgZ!UH(=eHSGBj`)H͈%]"Kuù1  iTJ5`&kZVDb##Z+&*C+Da2>|̷}j `@|4>_k"C #^jF|{@MKRBn^"+#Vq[2"XZ+T͈ǒiF##U QC*so:ư+B1qtaW|+` $^P&A^^PZ`JĖǂj7[ %8Wyxo !ms\o+_`#YJT-o_f硌3P܅t 8;5~WFiu֑}ź+jCVQT6kq1ك){/3(ߟr~.ΠOKv T.lاv`Z 'Np&U14eH{CH=^sa@ڹiQ?Y8bb{bbxJX>u%=TfVd :TkK#LvDKVόPJ:ɠ /F`Ȟ\e̴{WFN mOoc)+i{3Hs#{WG.&O آ#{*[wki>qb7h]Ǐ"P%B1)xyB@%×kwaRMD e;-A-h_m"`pUJ5bym+Akp~=`k'/g13p>4ZZkt 30G=[`W5Jk 6+ŔO(ɵij~v ]:قa#^?M:O =J!'4l0`"Jנyme$ǜHps=oiUsۺuPT|cc/Vkt vu떴M%Nu->b1@#*i;aW]n,X|dV #\z.H\H\B{]Ȉ5C*53e Yh)C|.bpm@LGGw 09epq@?}G:;xg,(=>9W(fKpӁ } ;*لZ>W=;q{{2飗V1h)a]%+w+EQr}.?3Om4fIJfiFQB@ N%#y1@ X]u;p=27/%G \x}uu[🼋 % y0#(1N #\D`x2 w\[@1)ᕇ&P$s{Sxa1/ _\< Ɂm, I#WF`7 Ԭ=fUKB#~ sX w=pr0%ZŒɲbǜ/];Q~4T}0 U˅&i,{%t0׮sq)MDz?cq-Gz# ٭f!UYCb-/Z̟B1o=Dr~oъ]wQ0[-v?t_[ү4=y_݁zō?yHX+:ҥ{1g_`{Wpzec{ g\p=?~߃r=pjOlp~=MRo\u ~.\3Ra3C;g|?^*NdXϜFf,GWH8]8"ָboٍsp<&Y0w*?+γט}fՓ}.ڣ`k;IFRRaɥtow} 4sDŎa/ #<3fY89{Xr'P!)I~uDg7w3Ÿ+U2ޛpKwϧvC'눵4CRk,KZyB"金VE. ٔ4N&LI+ܡ$6YWRKܳ.tk{ =M )8mI#&5^kyRfq&u:.IlGCjbNL$dn*frƐ$lHFpFjS/yNɟ55hk5J&'dFl]ۂ# :Jː%i=@TjZ'| g*iōLkQ0X\D C ףb"3άզ P%6`6*6I~Rf$uIVi閼„EvXj Imo)7q;93*h  FћnSK+D{~ҒdJR_T-UG4+FiJ5U՛X;%S@Yf[is r&ʣhڬ.D*p-i#sadz0rX-2+[(њyc.R d 6흷ȧ^y}A5oJ-ӹ".RfGc!_o%Wwg63A1l߷Z߽qyx,}4wmx5m<Ƕ;IENDB`pysiogame-1.30.811/icons/ico_g_0403.png0000644000175000017500000000771612201770061016326 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<KIDAThk]yuٗsƱcq.BCF1I6i)%QR7zQTj*FJ*" Q n6_0f==9c>C/Ysz247hC/ xۺփ8@&E=Y^Vec&} 0h' g,͹pVT|VP JT`d%9k"0J[PؒYIi J[RfeVRd9-A+ƪRCF 2`Ĉ 1>x-|ʿmA oIދhi;ɪjޒB)R JvCN8<+vXT9a*Z%M5JQ |8Tv$4ZcAk&`L{6A+MMMΊl`3ilBc7hhh:N5`S@I$JKDٌ\gXkLFf,Ckrx?90 y7;QkOȉQ4A#CEV$4L"B!x _yJT#ga] %AA^|Jȫ D%5r&)VAH  |N~ 6a'x(D4^|@ DYEkS,Hk@V̴$xN̪by4:|p('N^W \:ȣS>IJGu9@"^ĵ!Jʈ Ǿw7Ưawf ݨK U!^9O.rWʅNEĚoHG^$2;.pיK\a;K\vT HCN<luze{?t _|/TKyĝ%-+>!]4Q4J_'z!R*R +6d1HblN9ʒIdz\ceDEFBVWhz$d@M;8^.0\O!Ѥ|T{5s}iBzCP㚤F!Ȱ5N^UJ~MVW1t7f11\xc%D!187ϒ!SZ4TܘGNa<AFI)Eu!Jxm|V ftuS+:12֊Q>,b}tܝdaP N&t^7SDó(1ͰR .z됺H,I% s65x,20(FkhOOب:ҚD|H^a!J?S`eGYSbXoXmQZaA븨C(BM(3bLejdV#U|="#?Y/ET㚏3,UK :8ZdܳNLj,uv#7?9#HZhsIWRǬ, <ϯ㺇nPE[Q4@M T!8F()ǒ_%o(|-)lNar0b̈*_ 89ŀ.TfS"''Yf#FVeX1 1DNjj]ps2+(TAa쓑v j5̌M Jk-W:foK6t NjeEYJԠY7S/ o| \⸚Kar 9)t|ހ0kyݴ40bs^f0,ȪPL"59A {:g}v^a.<˟gsxѣWҳecr&ڀ" -5pΡfӵ3Jr敖6^ޣ4y +D`/8YX`g,W|ƒ, nӀtG£9}qvVv\3m8ɠc&koK,Oh:/]yy\XsQy`<ۄS>(Begf[@֬z'7nfCs(|z @>)'ՕX\1{s:Œq__y \ mL=m߻Wh5"قʻmzwo~V5^y0~|FS]U=l?I$i.% }#co$OeNcȴt61Hksy5x:+?l?M(Y[dUy-n9ó>{ ټF7ߝeY$v&RQ1Vck G6WF|I {Xa@-g*z#ZL(09k?6lh ^rm<&SaĻLL++aLq l12cƉ:lh,-SŚ);˧3//2x /dcΗ>~DQ+9Lƌqupwޭ;mV2`LAZRdE|"{0 3l5W~53x+Z3SM@|;Ȯy~ANsf7;*Cz*DL[z[#h8#+4׊Z;crX5Yl=O,#>fxsOxVتY薑f;l!a8:e쬱 @fI&s-ʀ(m6p-F1nسVcMgҪ'~0hmȌʸI6m̷$Xz%h@{t0X+ܮdD*L#mH3n~}XHNX瘖xm>)7 kHkJb+7OL,iTZi~'bTiߌtW͛i;k1B[6UZM32dlaSvNX`J?I ڽ檻#>ܼ:jӻCዤ9(tVf ϥ?VhD@TY*8UBj}?6|B˶Xh%mڶE;iNڴmvNڴ6VJ..J'\aI?J/f6cjS2ߗGItW8hٜ6 gVKNLFfsA =;P&F`FwQJP}1g؎c'L 4#  'Ə8eV/ s oD:ÆS5AJhS!^ՕzX1$]K1((P ,cX^-pBJW0[NUbpj|[T0&8:ϥqz;S 5 IIWkI%%)6%S?'T JTɸ$_5ἐ~5=M\Ok{s(NAE F]lt7HMLŅ><&wЋ?3 ?NE!iNpmG]Uն`Ą6MV߷F ʆ?3gYuJ805qq|Ü}4n˲zώGva3N&;c T&u _6VF%S~,!0Hz,M<_©C)q1Fa5+e;V x/ʻsutO/0w܈6@[P>?<"—w)6~nk6wV,j?V\ʢjƛN~4!B9QUSWXçyp(مlgr}dۭGŐ  8>gl!}#Ry fD*]y,߹jް'~l3w{~o?7e*F_m4<_(٣I?s Pm'Z??UVMNpMz 4"j J]<7^Ŧ+vk~z&PU8>˟>[(@|q0M5c'ؾ~}CN:$%$5jixGVpÕ8Ӭ_6O=w Lzq60 &EL=إko@j9vvN϶J*F ޔ.dmؑ3H!'_ 86@T<$Y.Dx_jFK0/"[''B>Jӭ ]hHuZ :8Od4YRԋtYn#$ Cȉ;f1zP{׷1󗛨]0MD_pZrBXnIXc_W>43惿ӻE β'SxGm?GQ3k qD Xv h#UdhC}F6`YW8* .EVX.D bM [97uŃ}`7Kڶ>n"lߺAANu{÷WًlTgvP| Qϵx#d+W/~#B͈~3R=ՅOGw=ڴKۜ@hPmWӶx@7iŃqK*s#8Vu{xyI5&cYidY+(Hčn45wb eYt{Y;z)6IrIENDB`pysiogame-1.30.811/icons/ico_g_0803.png0000644000175000017500000001106312201770061016320 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThkeUunW?_lx쌧c GL FC A@ $ )Q"(BED8IEāq&flcϫό{q9֭|)ms=j{1oڧ E@UJFL^Bwoݵ F)ʂ*(#kl3eeZH{)_lܳ!01ҟPQ7t'Xt_:9$n5ቛ7y7v)_ByEw~0 va|VVqԼ 6yCj086tF{~6}i_YN ?rv&|1G~u^V1cHO}MXlXð_{;#DA7ngoݐOP=f ]wn͵S0XS-Ͻ6n/8ֽ6E`۰%PE8 O0,c$=</@*?E"ԂXE-̧/1^[|R9p/>$<\v`xϛnp(y]~}/uwbs&`}4Msٻ%NNVoƛWص!%}šb$@M4h10 v<ô+' U; Nj?#/q0(lN-@Nf"m1y۶2r;_dRXPI3:N)z١Wρ+AՌ9N"PMdd>\Ke2z(8p눔häܱS_i% kkl(*h3l1gHjZⲐq>=剈Pw1?tKTs[T[Ӂ]¹$SP1]V?0Ap b2H9*ebM678@|d)g/ˋx2) 789d*a0 f>$0,U8QD8Sb)9amq 3N∢YPɤgL=IGJEcF.{i~=܂k3C(0M9hgX`wR? BVNyKmyAH>.{i/{~4c.¤f3GTgvvwFh^~ygr)~pc^X N?>{Y(OVj-3Ήjbe.l8>ؾ+i'َ;vQX2j=O&7Xlq*_++VtS<8Q%mKbQ_c;Oý9~ ;^?,|d#EY?$y)θ[|)~[ Sвd&#^.+<"_+߅֝#' xCz >Ku Xp<gZ47k^Nq83}{ |7ɷojoIEU !#꒤q[BcopSÓNsZUOW'g^˗?;׏\F/#lb0;|TN:8}Q]䒯쟈lq3 9x'Ap CC4^NVKėX1tyKZ鯃ׁ&Zm".z|:0+"!'t/GV9,%dX a+E&=,^ZK6rk$? c]ŷ3z&>kGG9<`*bŸyD0=kSbŷ=h0u]8pvG.u0#('ǀSW.KϸhOmgf|3vq Gu&NDQT) AA/DUU6him%&8I4c{̜Zk9㼱Ge[׭sID>@B $9P# j$H>P:̑h̑N]RR+J6„Ax:׼Ǣw-}AJbJ`X_OjSבHzmB)VFiV*y{ @:Hu>ӾK!N4mjH+ds6`f:m4Vk1(*L @D8+3RAb;*`bHg,Zlm2g8- [$x2&KM= !"c>iH-Ă $IL>OZQUƧ@Hy];^K(ķ~s)kS6.T*P!}|gذeQ^h]- I 5@--"LxdaPV0XYAYe+gW/"dR;R@7}VB2/Bm9ZWTym) ̚`4N<JF%aYђ659d#=]ڋ#De`LkONlw?Ҩo7n#>Vlc͍,:Clhav4̷\>s4(Jw5H;!|H*wul`)2ҐdbQ 2m؈S T f:-9ylw< A쌗2&hpM~^IJYiJ+#S1f>T{rx÷.'fuu-h?{SW{ӓB%$ BOc8(g떖sJe̲FjF%-4tMǑ:C (I;'9<[A[suBt<|@P?}hFZFy _q[K-[fuuiN?{Wz@0Ci%Qhp :e5f\PEʉóTA:q2~1 hɔ 1s}B9a ,& ޾wY'.r'jNX|@|==÷GlohL{=ICoӆi#NQNϱ*[`?W P|jiIc*/ ko oۿR͉ 72͋2eD6 $lCN9>lvߢQ;# ߚýO/yw9zà nczWM(7Ǟ'`^4l::9O6=%v{#CG ˁ? g&lk*J˘z(U jW3~,-;rĆ{?\-#ރxH=O:l=0uY[YZ@ !.D(b_3'5.2IRnNlEU#-OYnՂb$*JPU@JST5>¥/r`<ƅLO6n OݗFvwWLC`}:eHN-?f||Qʷ#6=, .}n޶|9vS~x/WnJ6*O+X PX(2ks1-:S7:FKIͦ%-ݿlcQeP fc#5px`M7đ]^ iJ;b3ktvN$~ Wv4>TPN={Zy 9{˚Mz;#QVZRVb]% *dݷ=#uey?6l Vw]fJMK@zO"+*7 0:؂wa}L{/{jq'˶F-F9u[]0Z5qVFeb/|N'?&ʨY>]l3lԀdd5jMfms,g9YV-r)ʝzErppЦцeshƐX.\qe }Mv|vwOg\Gq_z0C=t|G@F-+u=:F̡F'p>u5;x LzvaT"La)%$Mڸ(Mqcn 5z@)A< T.FyvX#hTo32c`ҎR,ٮ`RIGV1EWV7g'kiTAm:+w֦:U kt:~s% QxpuƂ ”.. ,ubp.25 F醉5kҹ͙yP2͋*JF2ӞmPηidhQlMUe(1[@km%*:Z' :6YRFRhw!Q(߆l{J fxQ̱@թo(4mFIZ]BŏP >YIR)~r!N睗/.I5wEmynyήWxCt}I=v{v֍sOD9 IENDB`pysiogame-1.30.811/icons/ico_g_0318.png0000644000175000017500000001044112201770061016320 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚}fG]?9yݷv –ҴJ A+Dр`Ch&gbc#* !0QԒlK۾ݽ{}^cyswo?=73gs~fgK" RMu8yhTbӦ3>l87նvs=27Fe(4t?A)pYtlBP% 3\P QqJڎhgmg{Xcl}˱e=q&V#O?h2MD2խMk ওil5 -kD6S"iAw?o 'Tx{a"Mm85ޮ7f S7O)|yW)#+s9'A9u>y|(re.VX}"[7; &K3#Kf`;ZUv[{鬪 82c\^p3OȺ }n y;8wxayTP\xO%Sdzne7+T+4B8c)+] I]r<זjg^7/䛖],;u^7GqifW&\c3!Υ}< theZ1ali`q1gn sȞĀ` zl3o_^1ޘr\J6摼$W..=>vwcULH .2jƑi+'2fz6ҽ<=NK*"Ryl.) =˱:gȸN͋?C@huz6k ],RӨvD~Le,re9ϸȶkJx&jGNϳqQYm_?jx|ݑE (FHY@Y@)Eʱ!^ց85ył<&S" x=$A#k/^6 3^50uA}Ծa4$k"8OCOqM`!3rDM4g0AӒ|<}R*#MtIM}zYZ@5#'qaEz,Cuh&2f# q\rT։1bbP/!TXb@ԣ!'q3O72 4T0ߞ` 5oǭz}*0tt5ib d76i1./qBk( t<"Nb 1s ^F҉!)D!bR\_".!rdfQ Ĵ0 1@[98 p;PN‡H+óWʷ:EcAd?܁sQAa -C!֥bl+@]@hdĭ tC 9U"1]F/ Z >NL0xXAA|D`-^z}$#΢ƦX" >[h]U*kԸ Z UZ >m'٦)mqm`iDBa!f.)&H >"Fvh=Wc*S S>}R'_GZȤRZg];]p4)Cx%CBBh#j R6ĄA(&i2BDL!&B}V*RJU%#9XǙ| B#(;bP2'X'X#Dװa$eF0"miPެD@ P)Au zU^)TȾcn\c)8UУB[I5jMmL#DC ,bQ!1uS(Jϔ 8 Db.# 0i5h*>"XQl Z?šOHx`/=LR1XX%&0ι>}1*pAx -d&gRpw& cU1iPdžuQD3pCkm]0ǚl׏ ҋVMz21yt ˡ2!~t;U-ڼِ䯃gp2c``Q@k-.-:Ti\hTD ?z \Zワs9?VT9BI/w6ZSL2ӵd SE $gQfwh\7}s ˭Z} o(^"&}:4$@Shԩn'[T([Ʒ2'}x " $OG_#0wro|X;'y(nVZT76QdewJn6٬b7іS^dKceXyg-$Ĵ¬F56a}1VS JA:H5iNZhpr/SFEg ml4j fe$_f[xǰglIJK3A^jn0Fl:iuc8Α_\rt^ 3k,CY}cFZ0mS& ƴ6NvѶM ȑ-YN .|{Z3:4Z[\<yMtT7ܛ X]jOџ:I*|\mmVKd%˩&/Zu0%T˺2ed$] i1l_]~-63\&v8^T70Jnd1X`jMkc1`ɚ?1d޺zZ}ՙ]Ww{5"ܻ;߇HAH i ˽N]7! NҪ5]KOlȥiu/`\OU,Mq2y+.19ޱ^6Dg]/q߯g?M6㊲^|p }5\Y&8r_yܛܼHA#y- vѱ3v:㣎3ڙꨝVX21:ʣH@!!oȋnror_ׯ5{Y]~kS T(8Džw,+޵Ņχ+JW=/y;DTbsFu!) ߮!K[cˢmJ CKEs 2x)"CGı&(2CYG8"YHo|iY߻kV֠xlJ |;qRm$ЏT(hPګDiE_d cvzɅ%Pg%BϲZkRE[iV  zgCg-P9(leV҂Ei~tspZ ]r>j6X`Z5`A+_4X$ AD'8-hm'p+y+HiQaSTk Z1u8ɮ ۩U{q@Tp?tSG9LHӉ%_w-P"a;0̼'Xre/F TLۿ=ϰh;%D R,SE,q\),ϥ%@ Ղw>_x#4s}D>s-tvቧcYi)' \U.D`s j.1a>nU-(7o&'Ԫj,_JE8^5׾3knGDy8 :34P.pnV9ψ%W\zK{dYJ2ȑ\–v2oq7/}i^>t/~'J4Y/r6rF[Lky*3p-cG/}ǝJXz\V]9(p1+ߣShIqh/o`CP EVY +|$9A2 4x{x{?2zZ[=}}؁9wGv$Z5˿xU3254^~Y_J}D? Ny'ϝ˶q5%zPJ1JJjK.JQ~O6ppl]NZփ.D% "),*Bq~r6#s'Y+[Aٱ4^IgWv&RGm0Y4i_mfeI)9B8UnPHMr[it|ސ#!W$W_ fnsy}[)Ȣg4ЪCnHBCzҒgY gu"dN$U9t\pQݿuxw qź5|S7iٽ2~bYp0%IPJLxkSq̯֊ًfo 4Maؓvb5hӉ˄ @5 nc˳{dr~q+jV,/Z[xqv_6YZAG9$Xl 1qzIeT7T8zlɜ? ζoޛ5+|{پS_>۶/>wû.TFW\&V~Y=ڻ z4"Dt&_ )?{Es3n@'=]%ilz~8C/c5HOvBF#3&D7+9,j 8Lg)6+vpOOBOlR0Υ{V[SZÑc#!NS)|Õ-w9z҂bb*\l$}i,{'O_wqdU+Ԫ jL_OG񝇷젳z_榐$Lkܣwpӓsm:VHiR>396!23$Z6\rb?79acY]~/^HHH=(ࣙR0:&3:A~Aq{ Uu#k4U\{ <,ֶԀ͹$Ϸ˂%,ʜÚ;YchKJ)E\FI>&#RvaƦ:/Q'1uR]Go\Go\2)߸a#724Jp}W;>Q;kN۝ jL{{>2Q9"ky F%)jVR|=3-~PN{F8bmyf+4})g;y4[ŚT6sflݿc3Hu2 Hti-Z߱+l^k M3C-oQX=- Fx# ġDXE4;#Oq=;uH0:"kK> DsOTVcfam"u eR +$ nfisk<-nyo@|WgT64)'Ǟ'h$̺ȃp&On<#")}?jcQicd?d{3~Dhmp i$8IM{φ鏿qI2h$6 c;RD,"`l@*K8Y=kyIg6yM1cѦjG?۸d)dr!%%bUa;0hT{3&˺[^]rO/(ck @y[P>_yRО\jImDA?hy nq86(`LWZLK~5<IENDB`pysiogame-1.30.811/icons/ico_g_0607.png0000644000175000017500000001040412201770061016320 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThY%YwN}Y{ƓfxILJxH^B%A( xE'@<A(q@c{lezz[u9Uޞ %N-rspG@naXLGb@b~>_t]$Rc7S)1*}>T}njCOVoI jJocXn>E(ʂT ) Gq(=e( uB%TU| uwl_ x4=x"XE6@} 6 AHPDJ,B<[O}9?ca;Ή&zA0z,3thŞP- mQAEk9LB- E7jT QC.QM-Uꇈу{Ǒ,9illyũ;E9{аgz1>w`w6zvѭwDx߀0 3âPKhĘYs'10ܹo!ǭi$Hz,3@I21' rCD4J*< \˲26m4 ,B `ҩ**L!~!\`Ӟdr%E!`Ff?GD{zHZ1&T Dkm@0o1>wrA9Bf14tf:!-w}1,EAQ8f2p}`pFNh03vUCbCG Cx)_I@Lt|H!SWlm ;7_n[ޜ: wܕG|k 1ĈXH7J:W)?v|.YFGYvnwmL;l fU G,\:πhI1ۂHc!Dcgb$!!D&Fɉ b.#ѷd'[Ws/uxbJ>0!FkZ\bM Dbk#!J-P1L*2 ƿpg*wX:_q/z;cw&6ځN4:#=ouy QaUq7P12o *B0&6P.]K|{Elfi;ӂZ\xyD2?YF*iURI^c`M Ɖ̗c "R9:0"FιVR[bq I ɡ7#HM;# 2zμLԾp`B]}gL'u#Ʌc= zRXNˠ'Nv5|/!?դ>:f'PI`Ĵr}dޥ ðKZ\!S@1D5{/4ƞ\ё:h Hw=PWS3 zv +4s8'>֤'ш9#d쪖{cfǙ=$w=dsy'8㢻!֋y>mg%M +o̷a"1ҳzW,K+42 BBLvrcQXru ׹6Vǯ%SY_ a hrM[^QH#|hZQO#6,opǕRWӄۀbU15$%ybzNoCΓ}#sՋ79,as3;\\]D&93$G{@ޘ\x5֓vTʵ?~0%$6ae ԁC }tPEBdY8v;T!@rgCM ӵ{}3W/qGޓƹ _ruwYB]ڂTvScB t+5*Fǔabbpcc_ng~ᡯ G1bxKWS쨺 @kw+^&dުQg\vEGcӨ@ :#rV#b&횭a3ιx,g /- >32X;>:@VQ|/gvwvPS<3Oqm-v iN'ռÔZSD# Hk :B]"Xչ\TP Sb;?5hkuh~Wlm~;ZWjm@,;> EyI>{$"Mt4ӈ= U8FMCĉ223B򦅹948u4ks퓬.*1oZeYPx2#&ƗޥHM_KQߗKʍB j"!YLЭ"#$GUɹ[#e E,`IU1Rj1\JR1^'ٍDB8X?,װ!D!qN+t ¥"U2oMFi jb]ȝҮTHLyײ`fTqF4Sڙ0qW%ƀwfWXZ놆{+ENcتq\MTMo")=lcDI+NDػ"[c[CM!nސ ߲R%A5Z|9[ THK1ƴ(].KM%OP 'D陕E^WqP| I!*W/_Rw.1:CߢdOOoM^Y3tRo,ETTsL)DӛhFU\ۿrc.d6ڕVՔ/e0*H=Wm YOS;6=]sm0q畷gqm9gnf!5=%ַ~TjI@3J'ctsbM' [g!d9 1B'K>)D9d`1$}4桯,lM}*^3\aQr4Hq@ "c@h5miA!)E}ˉ@mj`Kk}EjOXQ*@?KYi*kbs;wζK]hݿ(tn*A IENDB`pysiogame-1.30.811/icons/ico_g_1002.png0000664000175000017500000001151512201770061016314 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThŚ{E?U]}L2I&$!@Hc\A#"/9+vu]+puWryyB0d2{3&uN[K<މtf I2&.59.DٔKdwR"+ҾK*.Ӟ"d<B#P \B[C{@!,u7` 0 h[A'u wFva"|!xw]|=ǖ!(iA _Bd ABf򳫏A`Ht"lf(JJME@UG$Kg!@&BںD 6ix;BDq!m:" ?3Ճ`*zPqRJ@ H8;B Ad˦4KP4t 0Hg*@#ɻ 8\T_f㠔DťL,U WIiY)pl$@Ly6V87)QXPI9fgg!@g8MT6.5ZƒJz( ^ՙ{ÛFG>}xXzRLĢ "qa& #м9ELwT2 #A =w/9'?RO}IT 4kXtz'ʝOCx <@MH0z]ҕX13^  ϱhd:POσ ,`lW/7~r׮&?hFZ`J h0]n'{B-S?@;و"=]j!GOc(-UdP(Ô'\h}3r.$/ >c>KOsO̪y? Ǝs!飏x{V1Ȏ(@q, ~4|2AvMDy?>Ł1Mz2R~Dbtw#HM$s[l%z)g|j~q \2V!&:9^ 0&OK:o t(땋-ywKzHpkdc w… gyo~fsςYu)D\RH)BtY o!=cNC5S?w-G`g;q˔ %4^2GL45@ {re X{gǩ3HZםMv4ulBTQFJWo:0,0:h/l}fR_Ȍ'v"3sfGHQrFZZkz+ tc֐؉^o̙ut< e*lZ>}{x'ܿb#}5\|׸R L[9}g豭' "BD:?ٓUjᣩGK&hZ3HRT6DR/q>q98N[o.LX,!۹b(/ f?цvkZ=:tae1H]k|]%xNφ|Rz32#Z9q҇_Ӧ!qO^phnjKpn :6U۫ie5+ES۰ƀNm\[_u]m{/}*_ 谞1)đG9lt_jj2 Aoo/ol~v#QTw̓ƛDb4aF Z[zifJm4RJ|r ˗E[;ygcD crd/J 1%G.@w7uFR I{7x"w:J# Zl$qγt<2Czr{  Q PM54EdݺO`R)QJ4*U<Aj2i\Ǝۥ2dHH5@*+& iUn,#?YQ7Lt2Ln\ $rq]-291<Ȟ>)TyTsgl; Br=WSHGVylޚėsZ,61q@pΏW:?r:짫Kfg?†LU {Ȏݍn;?rc~_qWO4D.-a|)<ס%L}QAJL{;[k`eUʔ?q{y2R8}#)fni2P*H!jy*>뎵!+ \߫>=a~ɜJ$gx߃iȡ)OSjߥ!=Hh'owl1^uCٽ'waE 徏Z)Mb !9G<ڹ6yԅ-sP%h=6f{s!\j(#?k(3lJ*BmdV$AFk"o;We 컎g1 mDEjJz uvN֮z'sVԪZCTˉ9NHuvС,HP "|+mWr I(EVЅS=.<^&wBw7j;۔Wo彧jYZX+;4jU?\:b$ ciuRk;̐20|)Tj$uSYMO?$.j<%3aT^R& ء\괼橾SS\ K֪  U(?gWW~҆;#Im>zIENDB`pysiogame-1.30.811/icons/ico_g_1004.png0000664000175000017500000001151612201770061016317 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThŚiEU]}ْI&d!+$I!24"Ue WTDYUٗ !D$ ٷa>g9UCsf2QYSOUKUP_|ҙŘc kou\Mܷw!)J|EO]Kw)#I` ց^`t9~r:L€0LA g4`q)р0!p]N[jQLAhtb͗מHk8utDY87ةJxnBMYѼ&k8]f@(VD@dDТ%wE4'1cuC&Jw14B:O(r=3FБ:GN/<gXGF Ҕ>#FtL/~ mh c],MKXlS>ȒL6'@@A~0U35i,^m5=Ǿ[v,L gﱮ]BDpƆ;q: #_ݼ}LAGX1ٓ״˄St+jB秪H c8jjW-xl~Jqs? &_%P՝a+Гj]H=,z?&}v'']`,ן^Nw^w ;׳fqϩ|~2q7@=‰Fޏ{7ZZ05}(J P&3BTLzv#۝?*ISS=87 8\ H M/{5zU-I9zn" ai\<wX󴊌=Շ"0o-ae퉘[nAQ@էϳ76_Aj3>I&3Y= W޶1g KWSyɗ3y1]d.D_ 1&@[g@"*oѰAK290~<'m(Ix<L60 y |۷yZkOLMi}?|Ṓ4˟O.|^3ͥB06u GDyLh*ǧfR1n-xׅh?͌i I$(/K>TW0z S&O&JT)3w94p'ycOv)ZA#y׫қ80*VQ>O^ϥu5 db=bI&K=/>?J9::;1ѸDeұE5x$$l=jadٻFWid0j]`> +3!%--{9SZ: IWw#Gkz*ީk ŴхȢ)҈8&aݍuŦMu]~+im}v蠜>)đG9<465q N*Xٺu\pZDߧP] tm|͇P"1  Z[zi fTm%H)yW3g6mau &LW)PJQLm}ٵۿ^Gyyuq.'N$Lx8RMf@4B@d'P?'G'HzO(Ay6vBJəgM"șQEI!1F3|ȗ.\Kb{9! À;v3O1H#.VhDZ3mwUY:ʵ 逦28ԝA5׳3huugY8R\kU.x rYJS%RFJJ\xp]m tUT@M iUW.`ZHH"sՑP*FZr9767l&W\Ut5ncQ`GyDɢD9*؟I>IYgP_H5 - 7)T왤qtGM8طDF5.tx."U;h<]GӿQ&ϡg-۩p~8S,Ic~O8F0C߄]yF"0;zRنX3ڿPѳqR ֐e POBP q:b[~WNAFLa4Cequ(G{sxrݺGt2 n\$D[2^ÏN>2@]-dS(e8d˖DU]m{ZGx8x'>_ $:`)dG^&TRv!85뮣vڎixÿQ !M2xJ@Ě#xó#fKUy"i mםM #@}Gd)tvv;(7M+.~B%/+NIjdh%^>=\Hu]n{JU22d/=YϮ1c:fͤiȫZg _̥3`W!nT*n>5rF`X 9H!P!)n<ς3qw |k^;}/hoLii)K,a֬ щ1w#ȁ0~^p¯hL*_ĴOD"6 q${grrܶFf8h/CbRk u˸@BO$^`P,ug-A`AZ ER r=ߋ@I#xxjV}= b@{U*e"G*@wtIj FAOHU5Q퍘~r:IZ00G0H΁;r$^D3iAJ?qZAoʑl\>᳔E!@4!$%=5[eOZqtC4|&.-a#)/4 1'Cb"O:^c~/۷v*{Ls3r9udC㗰-IrKwr^\8=Z Ml cw#]~?wGt=8bʑѱ4ި\,$B6ׁS}se?ګɒdtX95^ӿ\ /}בl<([ BCV a[tRzsS+.F*JɋD*'C^\1[VS{WHQdC+-ȯH߆Xm hL~{ oCv^#G RQwљ!y`0hSMa%7ܵ.?LQv&)Ʉ*AR~;?0O/<D%kD ڻAPm a9rT7.sIENDB`pysiogame-1.30.811/icons/ico_g_0112.png0000664000175000017500000001020712201770061016312 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚]Gu?w{fFF2 Ʊ)A IUB+PT! LL-[b,g̼n}]޽oF?V}=sNvS{S(ȓL$#ibҺXbD#rGB.P sT `\|0~ZqS/~sއ"$$PN%e0X2bbP$ׅ4W} 4`Bdx]Ⰻ.&  TfB]~JT>=o6+hC O]z#tcaBPN? @&,jJk:0;p34F6Z'$Iyzڹq~ J:(֓T\RJ ʖr @ E'۶0hycK  .1;"0t9v%' ge*JjBA,N苦yh1%*qK|~6KGhD/8r0?ԩ3t=>߽Ʉ!nmĒL kI@iZzI"͛7 LqZ&DQg}WOMQy |zH ٨:nĤl]N@$@bX5T4r3nASjVI\֬o㏢ayy_>݇^<DVEWkmnjh4%ORz\,_tjwno,:5^z$V}l/h4~wACdI\Rx1QzZ,'1- )Llr͞}&v l[+c cU홤9?iCQNXB>+iGol:@zt  DRx3aY6Ȧ#ތV1*flɸ1,Z+%rqX*Avrp\;wnWΰơOd02 ;5[M\7PV!dc"ΗвV5֭[h`ҥvAj;ꫯWS ʆ>0qĠ?ZQT `R3ELIFʢR`J>|Բm*Z׋pΞ}} @Emԩ3,.#O*/Y`\CElzdK1T ] @U'qlR |٘#6p4""رӧϲpc]G~OƓ.gt!:z*cL\r-n'N{=~'Qc7`=he* Ų1  5\M]FFW*TZMGy</|FNĶfoѨ35=}w/= 'Nq]Μ9Ϟ=JF(8\|P@r]CޠTӊx Ƚz-dtka7֪ıQn ;v̲eKfAVcwp]):%~]X]]effJ+֨|i^QD(lT5R /H\pJL 7'-mc6Jñmvm\;O+Xz}nice%!3o<)kn7)61>;o{ #µ7>׮]c4p8x;s]ϥlPtzƶ PVMLNS&#r}'9<옝s|OO}={vIgzj}+8.Bq=GcYFWP_^%)*E-KJQVskljϸ{Zv?y#Gw:ٻw7gߥz.n~L0>q`?S*i~9 c<ݨx8 ]Z5hyg$!$QZn\CC*a46? osa\rq0)6uhbhЙ8/?E曅Y\B;t'vT6P)?1bz,..-0Aot'D1ҏYM cin!Wr+'nlKt:8N@8=C`bbF;Vie@<7'esx^LqklEwٟ?c}}QFdۺzK868(q:qq<2 EEۛ Mrk;6O}AAG RX*e9l R W^eyZ[0&& C0HADH|+0<.K<4!e-J҉A"7/ЏLifCx웚be FkvٳwS dc81&qvb+j.ɡR:_*PZcaainp僋X^C Vmc 8|R43gҚ&;fg>74[\/!z²5'tdž #pH?`ﳺի.%>޽7=A#ބk"qbE,ָm}Οgy,4l4Xj4ljN7.4mY ˲Mٮ繸m',0}0 j&>C%v } ׊V`)pk#PEp=QH)"˾^},/'Z8C%m"!$Ym*5aބczS4 3eT+;ZkEֆe%W)¿RZcFR TmV(q, !CA₀i]*ERbDh`e|F JkvwK)ip2`Y*"{GޘA$L{(LJ)B.&UB>ŵ] Q۶mc yZ|PR3itX.}K*RiϏ+K-BJ|l8Hc3X;yl~ V73^>_~M'x9gj^IENDB`pysiogame-1.30.811/icons/ico_g_0704.png0000644000175000017500000001032312201770061016316 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<PIDAThˎ$IV?GfD]=]0b+4bO[a%+րά슫aq="aK!s3pcM`=L&#Y&'%D#L,cC?Mkk~]S75MPk&Yr iTnL;?B:{S !dd+@"IBG' )DUE ԡ&B2HoN'Zw57XN>foJmc;c5Xc01snd m? @.|Q164,wzfό=Zk:XgqfTP ri34X\FY(?(ʹXXU!m.`s{8WQs QHWB5g_)+%,䜰ΎȒ֌10>6u=m7WjӶJhFd )s`@e-E%dArFDOq.9RĜa,g)BJY_P^O9LyΨ|ߚ؂,IY qJ<{xj$Hf\"xi70SZKnF,vrCUrYCNCJPArA2@"PeIXk31V*,` #m !nۖź %Sߌ_9??g\p0;`0ٛlh7NȒ U`l_'Oc4V%mj̛7oϑA!3Z7WR[ujR?])傛[1x_S51EYu]%LSlzMXK5GGG8tC]x8 GxŌ10mI9ϙN$Q)$)8_y$ y?x᫯m;&MC.Qjі@6-tf6"}?qZQ5^&H*&LA! l&5]׳\oooX 5"ĘQɹ@o !(OCvDwKr}s,fC84g7WszziCJMM״߽|IBUnZQ~'*;(IXk@]f>>9K׶x_c6'g8e~I =)ч(ԬWќ.Kv@ju3͊.%aRL ׿_y<} 7hW=v⑘p֪mO'?~̋BD@bn+IՒ,gn1b&T ϟ? խ*u EA(Y%E1Fh(cC>}st:&M9gC#}eӐ{RL}d~>jk̰;ĺCcKU*kqcDeYc#%*!ѱmKJ3޼AK1F{N2RLЮ[a6BBkBUBD{/Y2i\.6 `L9+Ϥ JBUU.AsCq31X]f2@NBWLg ~[u]SU[ -u|:Rc2PmեA-p{r 7MDB jRg29e&̈́}& )jda[(HSSrI{wWNq^N}Gߓ^f:ZF%ZcL&YX VsĘL& v|U/KtmV<8:R\/a\p|t1_|9"bgghp{}˗{kE% ;+٦no&vV Z_r_F89 ԯ4ai|ڀӗdwΑs*;)jV4jƺ 1aݴHVa)!I$;Z G8[ hU"FrJftxM"ˉPi?T*ܻZZsc!AH?@S7_͖˄J=u wR/_,5/~\/ǎ FO_>*ɬE[ ߌDF$1~;"mZL4baA`A4sk1c zwvLh CcaviЭ~Rd}X.!!G{B=X[b·]7rIVpe*ţIENDB`pysiogame-1.30.811/icons/ico_g_0307.png0000644000175000017500000000721012201770061016316 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚}]y3s{-{כPCC%iTB*ED%؀?^^1&Q[U 4! i %$8 1k;Kbm{ww9gkX9g}yό˯^-Azck : Fz30ڠ]`6HuEDQ9VL(DeTTFC C 0m5 sD.D… 84@#0Xc2D 7Π,ƂSDJ(UD"@EE(JHY$R%; "b$v`L׎i"!`_1oھT"0&:!B!{"Ү$A[s}L& LG =l t#Hgt"0֏σBB!DJ )$"l H M4& L(JQ`H(sAH '}Fv[+ڱb)#, BR)( Ti%"@ݹu)o!X2;6mA[Fpmg.hLʜ{wKtQErG}tPgD~z_ضC_uc0Yߏ1ޭdjL!\팴D6- J'3?sHٸV rt:{MNny5h 4²K,"XӎZN~Ѽ93>ɁGXs0Sα~DL#:8ƙ33;~*0s\ f dlظ0.z֭ 1ӳ8׷ ^k_Gwzf3`˖>_dv"o,y:'6Mޗ V$_1.;MkEv&˵g HVdqc-hx _ڿ z{3 %&t,h-^̘([oaOz@ ~ .f]I8 Mpiwzs߫su8Fs׉fjIQ)}ci b`Cl6F@HU@]>z x@Z>Ќau%Ɂ"UF;*[]lӳ0 r{E*sl=<1 ^I"k|fA;-l s`A*f\c7#[L_<(gJ+VHb.'(qFԲs;`מ;mofNֵTJ,@3S{كh{8cK*ºYѮ@RJP8s;+oг _vzBokaZ2,ZP8x.o LGGs?QGe Wp 2RR6RRVdH[X)@z&*Y]{\.|rv> vcnF;Z;E(ՁJ٬PF>zC~ij;%KyqR60וĮqb =aBJP lDT텟E'SDҸ$RE"Up@Jp-˄j}A Bq_ٽ|E;b+p~;ǃ kڭ Mdyw-!$J-A%nnX a./vGn3fa.^h,R.}IpL~\^o}vbm4oJ{fj.1R DVIENDB`pysiogame-1.30.811/icons/ico_c_01.png0000644000175000017500000000737612201770061016156 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<{IDATh͚{t}?%ɒ,-`/l ƶd!n iI# N)I= `b OFmY{L+9sfvgog\ijBD@PTHՠ(+J*~{@$T LB*ss**ҫUdσ̑~N-JD F;…?Wǽ6BD-$xmv= n>X'p CX̜Ͳ~!1~!PRPnat " oԹSB bh 40US  ý߯M38Bks,TVe)Th}5^  @x"#ۦ0͒5sC㹓̻k2,ė^ %R'o}P}gJ M*T0RTIx )NR \#/q}؃ @Dl}^ʰ`n.u Nd7]G!ƢBS"Va(Ou=Х)`B3WCJ;v:G&awP C< {n%7'BiY3R$ ?Kf1xםt8Ǜ ]BP %bE DS0A[Qy zz bIjێXzFQ~.[i(TSqy}/x|+ xI/;RqpoFS884U!rsbc)^P3Hq]LORU<#VѢ|(uwA=l~ؕ2Q̭"K1aň5%MĠT4㦪r]9 }˜1 NJ|ȕWRjj910CgF:ֻi8nxQs-`H?˶[.$s) Ty4$Ei#W'zWMG?d,/[kUDP>2 9嚲hs kƔ̓wД~;(gsA˓[VA# rc%2~ kR}x M??nA3[lDSC9X_/|X|"sM"J<-wMD{YҨXX CnQL9y:^e(?Lˉ]L:y_ `h윳 ˰8ҟ¢WAOZ,{ꂬS47߷ݤGC>ofѺU|sVo`(?;S3C7y;WUfksX*Z92ضu%7x;>3j=1@u:?h|`=_6W+inԌwRi{!\8(¬Lj#vhRqAo(0OYu*gڃ* XјZuzi"L˪뙒[O <ѳwimKZSq <% }9u|:~yr濒II'A^)@G߳t?o ȥիPekFoy h=̤p(x{} NWpoZye7ZE =̺oQ G:T$+M@ >Z^_5˩~iSv<.w@J)*WRleCL߇/t~t+-7n"]+j<}QM;ȮAnƖyzv1i^ Wo\w~9.J0:*C"|O.*0Y:~dٗ]`Xt 9_dרͤRUz& LNv؍g,fdb !*xoY_Dz;Mf^fr2.LM#FϹ~(nmF GGh6@Kgn++i'LmrsY |(cãTTsi;-0e9o;Hwq`$Sp&ʚFxcܰ A?xf/7ažnzcLΡᑾfStI_H3ʸZbs e]/HY̔8xVrp 2~ +0Lkyk_loapŰ XbR]4R޳%UɱMM֕L_~(iyKi\Ʃ\]?aˊ/24,~-, Pf|ܻE 2PDdBݤ" B“[$lh\lN6v::f\óA~û>"H +9 d²X5Uں3֐8opedХF. R1YYjT¸q?jHڏ""rvQ'yF[`mL@Fē"v2 aYE53`﫴uA5==Yf,d (iۉT~oc$v~S`q/T_!ˠ~aD[bʅxMuHڛ!N A _ 3˘I6n7qg(incQA69DڴJw0 }=aYdv$q9"HW'kn6Pj1D[B=Ȍ)L&eL W2>B$-ʽ_s:aQPO cxuo{JjX"Ζ0 麔'}< 2?xiNWp݅*HD]oPzF4fh$[m#cj{`!sni fayA4۽31pK3ݘqby mY+P:i 6/`.R$S ]DݯT)w/"tVL|5Sqeg(!(&f*p/̠4D՟R׊(R"uEJbc#_(QżWO\X* JF.ĔRJpX<`͟6AIJZ+j'Dkߨ1{Q4Z"l6^/&g}9ϴEg9eIճz[r&  'V6I*ltbKK H ?6r\[{^IENDB`pysiogame-1.30.811/icons/ico_g_0305.png0000644000175000017500000000765512201770061016331 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<*IDATh͚{}?]$$DP1Ġ8OcS!IS &O\I㔌c+U!6."X ^ ^NN'iowgGwrt_mLw\Yɏ7IB,` q>(ϻ+tSW5F]ש:uQuj #X}#ȤVޔIOC €1'fD 0DܖLed*5,ɨɔTehB ZZXXZH&vF-?+yJ`ksјrlwgq !"H! PËoa:t 3XVHu_S!eMgmP(!QR"B]HTpĒci9$KkJc[F.?XX鮭t H ΍%8?@"5LHrR$"!U T$*!nL*4XGʄ`$]ڝL>d |o1 Q b*N:n9ikgoUQj>H˱fxCe,k&g2K!\(RӞCvVmC AH!!NrvJ<#U^w3e˺6Ӻd9g~6ObӇ8w@;s}?#8yaf}H9iF^ui g^s1q` kMpj{qQϲos5NFb+#$Sf\@@)u `li!Kafx~5\N+AL(VA H&lޤ)ϣh"DH<¡UBpJ`00?~X;"uGf w䆻Wr}_ W[Sl:#MZ0enV\u٩e[]m>K_ծ⼍Muӵe/ E)ŋs,79Zƃt=i ;ղ6z*&$2؟~\uuX|v8e&4[ g0q|Z~EF 2cZva, I+,M$ߺBZ3N-'gwK\5̎Fr#ţJp'Ng!/OK%Jam*$M/n-v495;dWP N~K V>6Lgȩ[WmeH! xoVkXGZ;4g$`i0e D00xDѰ]+iQὝ @(Dj4O{M"Z&e)|RZGᶷk>NwQo~n%!μvnD(bCW<{Y?{?{*wwg ]3 n_c§@c,3ce3y魼(ztB32^u( #A˴ESsթC@A:5O 4$!3Kwlӹ {:fpCG|Tj熥?n'm/-y˖͂9қE @lG#Mfû˶8j4vV hwAj!)4s$[``\d6z ᷠZXh6.^?/z2{ߔ:/j_R,@gm4]ݥbM>ܠy41)Cn[4AŐ {3x_!-)dܮ+oA%ElK늋f_L bitaߊ}Hc|uld Wwl05VGKg&s&Zz.]0К%I&l{n'ṕ/X;Ljط%|nᏴX7}qvKrhHrS[$VM2DJZؙ}dQK{dJR2 K ,9.OqYV-, GJQMdl\jǍ͞7wr៟̋g>{  _Њ( :A-  =^ǂ/;0}@ql1{]J`3l̺9g@U}MWΡAlV [۰c]ȱ8w!;PF1'qusF=cx ֗-`ns}2*tDT4F nymΩVWKD;7 _~C!PR!;8W߾{'Vɕ;س?֕YWu]5pgQ_W9{d.<{z":+x-}Bf@T

H)"2ӫtA5IV2Q5Mlu@xvG,Z\cqYʧ\ 4n6rK Lh~qgYd \cYz_Ųs/LFw6<=Zp3yYNW{㵨PFl L2R)G9h5zܨ0`nR;\%csIKزdHM`U87.=2}sF` @A:SDzk*@L4G׳,֨KmOW |];{p3%t[37I5POK;k%kԪ~^@4u N7.|=K)HƆ`2f-f]3kldLGƋ2J2;;zb󘾯lPї?,P&OIus7Ghr4s@0`F@TD2fJ2(IrYH lPho[Z&on: t]cRf@Jάx (0R/1΀%8k&k~qI#ޖ@>H\o;OaR<.n5O|U˨!w/F}1=iYoRTq$oGǶH\M.vz,Tqתu]y?_._\ۏI/{Ph+ٵeep˛:Zuϻ@<^uqKL;m緾P>x{,aoI՝@sЉyc>lu._m!}yk]9G{qWo*Ld>,Zqv>Z9~_U 3(j&CYzcx^|Nr\Ĺ$ +ǯ_` <|}gkdg<f>d "&̞xwX 'H>d#Ɏ=SWS5u$9ko6{3:Oc8h!H wͼo2Yӳyo=9_U f0i7=^;rz'Pӏ9ڏI/{Prۍ{Ciӻt{_u^*矟O UF=:wu̕nqk˜7O车@99 r2@1dg2o><.s˹ο6ճ4`8Ե1^5-t90md"ԟ\3@=yw9sO;>np׾]N:=X;9vLiӬqx^V흺Zߊ8CՏE@)l[:O/{ē@ֽ|i2]=c ?39BϭOaQ͖8<5.1k5m.A6k4YSYxڠ__4Cm4y›7֩'Ns}9~wNLoV5ju5=uhN:kηgWD99Pyx@qתuĽ%`,>ֱEO;=.8csnn|=tA@/>8)Ϝ;;6FlScր,$LΡh>~DU0H#&ߛԺM~mCͩu(=G702`=&k;V]3?Ngc-%7K``0`.ݛ&HV}Ҍc{qˊq;_wG;^/yW/c=Zzӟy]<z']^gνtrkQ=@ 1wHJn|=kZ<׹n)rbv7^|?/}JǗ8zр<9d;"D8$H"D͠Z~~zͭ^]϶cÖ%e%w(sԷ%GY݉v\ΰœ& i%ZiB,.3 Wf mr#[A=jLN..}z/dw·n>xrQz']>OεtZ}<{P˻;^q"D˦ǿs8TS` y6=}ÀyC^GLX xJO;=<,ީ%xG;nԞj[gk#'v2Mz נ|$L"D+'$H"g;D2L"D2vHxםCc֯Ftxz \zfMz޽j7QJILvgwft1v}F alY#A]:2 "jQ2݀3zyz`jޡ`&Ώ^#˰/F^o|әnѩ'su%ԟLy`Dۇp@qתu7! yݒGlիVpsjlUeVW5?9g~赐y{8m>@̓$H2D&R>Y<)&H{k `8"F``g,䏛Pŏ;VukzkXQfnq8-gsw%gk#0lڛ( 0 "k^C=W;uJ(6J]{>R cpNs2oZ_G{z|mP-$Y2DF.%UceoCъCi7ץ{y^O-m鞗|㫝sZ͠(XqתuO;=(c}|{ ?Y}U|},ʳ Ȱi>d2@8$H#֝YfӘxD&H=#cjj<5uPcXrd׭֡aFRyfq)z 6fe &Aڛ+ k]F ,^W{yɀc [k6 PB[:p:\C,\~{? ]p;~W:@y=Ǽ3f xvX=H9;\u꼝@Gl g9>ǿ`yN}K^لl##RA& _,>yzicRY2w<$H}YI"dRwHf HH"Df G(`y5|ނM~}#_ \,5F)%3^B87K7ǯ'>盷r;yuykthq}/-_{F.t;ِZ>Y_FS<YGGvòXlۅ2 vQ~`,TqתuO;=zly=cY|xN:֎ +{<~q|4cP_׏y׉q~\fDʧ΀O"H#Dɰq$d"D-P;0 fˬol-Qɞ]Naߡ~X6I b YI։u,r<=a{;+E9J r= n5S:<ǭywZ5-=xnp̸0Gr\ӓ8/Tw(oߤߖU+u<~vd9>_ǣyؙ:#=k`Ocj;[x<z'PQ=@U<_z76^^:K?g?%0HTl҈*=@}iY:K24;9ԊӍ#a d 6*3H{p+gw\$ F]gOnkM\6l͒%cͩv΀ 0L$#4#0 @ld صRIgs !~iQ)wŦl]o>o'; T<ў} h_ gg>ޟ~xyxPJQ۱׏8';\u꼝@stM/{PypW,- W5K;u۵zda\v/7u9g=42η]H}i>pk$Lz& &dk4; ҵWgV2c79lu՘yߡz&h`W$2 "`jin6(t+黎Y5{tfd`/ӗ>9z 3=w9j+B]d='n>rNIz'PvǕsvcKI奞Ͽ`r, ,L{^ڕ1*rМՋ^ ||Se\pkY|H&fюh=9; Íƿ&̻Iu,(7y?U}8^H"q|t@`ۡϭ=b~}{]8xn=nr/]8';\u꼝@F<ߧُM/{Pǜ=;6y{Ydr򼧲.k@WvcKuwѩ7\ǗK8C/Gۘ`{M(o:lQ#Y2DM= dDT#D<;iο9TyY8knX5ƺf"bM5n7MW<q{jp؂Eӷ@y#^Ͱc ؏\uh8O9:/ut^G5G+tVgo=xh= f D(:x5g{ZP:@ZNiR5-mԀy;U8gXʞ[+h)^:L]CpTYhzs՛w:&@+\}uyd)2:]Rkw[(0nKP IB]t x37g/˓7fdɋsh]^n<=120p2qJ{`0|n s,N74ոL\sϙʌU^ү;}6w/U@?tnsx$'9 zWfZ<ُpI^kϷ^2̻y@5:~w\ _[880s%D=qK~?C ]^\s:뛬1&ˡtysJei@򜱎8_5lKc2QŽF>^|k|Oz]_`L,z`yԛAǞk3\s>N 9{17s\ KMF#0cgD<%bzέFjߟNҜe!{b[g_H۴ +g\7:[22L[^;ys`-~}lthT4S&dS4,=z9MVٟWYs~=y_(>9q|W:'y) CjY\O45uwmH\qgͱ˞b:{%@r-H^9c,קO%̗u{ G<ҖKR6y󦞦4ŕ{qǫ^=zW Wy{Pv>gO}sKt8 0__42L[^;ys`-~}lthTR*Y65z|<<n}]xvgYO:͸{X;<S6'tD19\-/Ny/YDr֓б,VӜfx_O$x6ms\CrGіwt~;õ=x_Wlyt<:p=|<O6'ty#&3?Y~N@hz^EI[ F6^c]nX::j|%Vi9,eH\0Eu}QWj^ıǔ|N,.^W(۝⑹{{ ]x3TgrHzs#˿U2RӜ*#򾴥C<}s-qxf{O:6S‡Wp;}z^<9z4 J9EޜdDLs}o=cˬ:yF2!gGv,v:@_Eov^O__*3w1skw*ΞjYQR֡Zs=̵u9&mVWӼŞ`A飉[->qήQ:絠cykgmn˥57hՔJ:'D=>puW YMK6sRt9FR71}r>}3ۗسLn6sl]96=% ݅ v>v/ct OLZ7k 9XɰɛJ} Z^kذ9ќjg;t7psҧ\ChT}a!k^-?z{yN8rn}@ eyj6;ՐK1%ߗ>GQ_[0/ N:^zE]/-<͜N%~~rgNqo\ywܩN\/U}PpNFG??<=~8竏|]u~vZesvw!/}igWOz3=9 I%+60xU/-+TytbЯ_@8#9uu[M7tu(ݿ@kt<5tz-"q%ΐ0!^ck;ˬеb~!@zTMgW c~s/ُU;F+| j{{p|tg;xX\5smJϷ:iVrR$<;o||zuoz|qsN']N}PpNFG??k|^w'C93'G9znȤ I%мrHtD,9t-Lz g δ}\y5 !@;ndi]sY,8uދ`<|.i%.tfz]#t{_^nuk5\8ٻ澏[Vu5^tze=ϤmAG:g=m<Ɵ^R?9U9Iz;1]{v|_fyԾx4zy|N>f_[Y笤mkӧ Rx7;a yNҟ>tq735n5:|Tsa{闃K˾y,_CZ9Z8 rp[?VW_3课}>>pXYGnuuV&|?J)~m^/{ɮ/ooG;٬k̽vO1>u T1'C[z3=c2ޡLJ3m/%_nw36S˔տfөz?;2iշ{stzzz==]PpN]3'lGkI/䝏w5[==oGgN 3\w\LaI:v`E^=ڠ"|=]B<`qx㍙oi߭0I65ߟ3]kzDN,]}5~yG6s,FW#H-~̜=r#\{Dt:p\] )tK3s7] jf ON^-O&]5Ż-`ﯲ5)'dח Onn6} 2Jnι"bj/8oe]w Sc>mzzz==]Ppq v2r `W75iI` αs~ Z睝4#=^3=]xbx; |}X\c8ϛѼ@OƳqx(h0h9\ W-WA`e6\gfp k|^]sǵ|wλu@O uB@:@)N`36oPebBg1\ qzsz$vh`0} +G>YI(ɘɯY~qz^0LsQ}3Z7d5|wF|ۺ*09=ylI`R8jrZ/m.[p||TԤɘNV3q p+CDަz78x7F^6v p y3q @v@Lvԙ뜀X<l峪hb W<ϮcؖW=0v@ qC=5ۛ  dpK*FeP99rK|ܛC2%޺q`:;@HDҳxdDh/M@Ty.sy~@= 3g3R\[ [h^8CѢ} 7|ycK '.RN=OϽӈs`œ93[ {nbs}$Ҭ0EμTr✃z0`vS:e1)JqN5ʧ33ǩӝ}z=x `]F3.zz's!hUkkuKhs)p%bX68ܻqv߼z`y~ GW=wLBQt=bl5Devjμϓk<^zu5^v_svf6MY:>W# a%k׬j;68uϛeM[oxx>ONl"sFgjuNY.@ Q.<t>b}>P}X諎|>s5Z&D$-K@5O[B EiN cɼӔ+T՝M kr(>zk£.Xyt ײm) u>,%<)Hǭ;í/xK4Ξu$^o~5~w{F}yl VѫEܺː9XtX'4]8>'ü~ PmN^}vӥ1nݬn]my@yA8L7Q"@2Z-OxH {YXh/ұ':ӁZj͍]xx=5~}ڨP XrWI7hj3Nf]#xq}<]Kz X d&k)qέ7[=kΚϕ cY<$uv_%%ٛ\:sǮfKZޘ2Ynߗz7}2 '9jzu?|.y5?:~PO[d W"+4x@r 'X@R)"v) edD E{pg9G&uFp沞Ә,obѿCTiǓɼX=4mCo3YW߮qN7&Pd jm15kDyDޥv_s0$tV^D9g,vEn~sA٠9ƀW_Ӗ@0dW*4>˱!l|vߗ|o#L>oڷZtTW_=uՐj[NrH皊E™H`Z&@k2_;G:nqnmNUܝPqg`,*bjt=;i$ykzՔU_m^^>nw@9Oyr\ן|*P0t)R<荦rw**&KѷU@3u.fFx=K4VLՍݾsIeםk7o\ֶZ{w`6pN9n6+&٩K$y֭az.y_=-C4cyu erMy}0y?ogC;R+]xh~w4_ANd0U-Bǖ*+zP262)L5q & ECz#h<(9C^.zDP=Y9g&{VkbFiw|0DS:x`)z=}TF5cP `-f]~lc65w8Σ|\33X5gzSZvkz t¹DZ6L y|x<5KT@Cy~>k6I֧]45×jv6;w?Jxyn{;l8pm2A\4 qQ k8$fҩ#Ym)MFa#$ɛ dq uN8G {Hst;g$z 0.)M\qp|\jy¢N&@Hّ-WW۫ 9^5gK7 NujRIFRiXI%fS45gz&+ Z#`:bG׀G˝#YO{R^rvϔtLl;E; @1N'2(0abFP:E;^@ <""YplRΩsޞ=7cPz|uǮ=ϧ;y{Rμ:ā EJldr'՜fԀ[HNlj\[$o"q!"_)VnN@cA;+ +Ȟ@7ٞtMGy?׏>??ϷKX1/{:}Tɞ8OXҖDd̙2\l6mWS.pH2Z/ Se5/-yn/鎧Ob5,kN嗢z?:}94us>HFqpT FHv&uM`zts=^>/.5S|5jg\Tvd䍵F'ݻ<cf%.eərf2#d,K|=OudV?L"ׯг/Ji9K}V%T՝59w>K ' ƃu(p3ԗ@sz0s\y/ @;<6}y\zOϠ<xErf@.Hԣ2bu};0FQ_K%̲K)s$l.c=.ϝɜwN1pz@>rY=̏)[7vu;6wZͳ)y\{u;:y@>_[>_0t7M%U=<vpg4| qvK|G7R^N`o/>g@RW[۫:Ĺm _tPǧYDΥ.L#dl.cY=O' ;PyCT#Zcctyn\v٧yx{~y/{ H\3@S=i=͝n:N FtPNNtqK\oӘg#02CNkΪIjN^Y;r`t齬6mre/*3JYMl͔fRbFk0:A/mʀ>hz`yCGDIqyʎv5:gG=H ~On9q2t =2'xsOB:X6w"WԷӡӘ)1ݙ)2 Vîju꾟n k&;S|ѫz jVi9e-ޜk _1%,唹&e6F1Hq7}0y}>\|,>y(l,c=!6dV56jPz`S^`Jsx^z8n49brk^G92};꒾%Κ+s;yldb^g^t5PcijXη1[uy3rresd1dk`zu:OyC3|wqV쾏ݨpA2q*uqpP8Ǵ+\Z;doeUyte9tۼKPF_Kn/%:D!@˦vPDB5Y'Sì'=fU#>Lssq&( + &Wm4D|yӞzh91H{0U.:` E,YnYj#Z4&$ +[ǥלJ6͔ͣly* R6%.,XtǠTl덟GӤT`.~~^O8y~/u?olz `Jpp+ynTZetuj`!JP]v汐s9lt7h6`@"V*Ś nY*x"d 4@j60`0DL"DfRٻ+)rVsq҄鉡:y}% qq׫/[xƭjF5/G=ƶF*w1wx0Hł\n$dYW]d,FTH Tc7[>sϾ}Gׇo|ry~/>6z?I`8w yctzy:[N*Kᱻ^< ;h{5[n'QȹLjo^wsِZ-YDo$t fU<~pԅ,X2\Ʈcq YղK:*z89糧F*spi^Vw\r<.OL חwҠqڔt89[#˧Sm9\B$d`o~^-αf߫ѻV{x':U֤vw֠t:iδ%Nr鿞~f ǘx8WN]t5z$M$M$L'7Stߞ~oOI2V1U>s,,)p_FM4?W 뼞+ r>{CN@#i*̝郆h-5ͧpyO_ z}I&fMH\X.t_i |R;EkczsfJ˪n{T]n@<ϓI(HɘɊ1ZkEߤ1?{T$(qOYY/ ߟ5\Y1g[z}/z?{~pY5dGӕ;l#r=u+{<1GyJ@]w}{ƭy}2$$M$I&dV#7rX7yZͬka-f^|{O(@ۇ 6\q`kK&KpeQ@k+LYhLk:FLgؕ7s$3I\$).W ı].,@/7n:z٢u:\ <'ZNv#ܶe$JIDft.-u}G/7yo~f{w$1sKڏY~޿_}?ryβ͋geVΉgPpYƵ"YWǣ{c>Y!Hv;Tx8:pΐ 꽎W+3&idriG@䝣A7FR7}G﷞%Yמ߫O/yg`]vJMh5gz%/CXy7ϥz@_?O0y>^޾æ .cs$&I$H`s*4ۗ?.8ټ7{sڬ@:gҀ3.<,v3qJ5̙ѐ5%b.٬pP"W-KvG9&Yk$N3ѿp0\,W Vίƺ&o}7v+第-w]Swymo|k7G x|oݕg6FaaZo]λlK] X<>7e_~ct:׵6~a式GxO׳vW;Ժk32\k5Y/kXk;Ռj `,[b< cW===.IK"DD$e&uGLDI3ng=n} >U9U(\ys$:k^-s=n<`4K֭Np=s^;@AjNQ͙qr2ZT($#$d앑Y$$I&>y/ M`O-h 0ly=uiɐ`@.qQ鉔 g$ Nns$)W|2fI2,]abaq.;p|foL+'+^vz6|ճ=gx|1c3v$dN6V}^MD}>bNTlU#7ܹ7xjǫWw?𥾺xXO~~kϣ~=>|@yx|I/9%ec^15,j<5knٰy1gqPpd9j޺~DeVF^YyϧWNlC=:u>33_'cb<<`p15梭%|P]q_q}yTHD6kvuy ~.;1^ު'uI'd2DN6&u*ЍKS6B]y֜UwQ͚j=90d+Dɐ`,ϗ 3H9-ES$e$*oYd ]>=qZey/vs[=M3yW=.Liڶ{W]}<^,$>n{7e3dN'&Z5}- شIbT!O`;'ϻgnϧVi7C=?? > ?Nl/zVԾ[:Գ)KB]S;xNrySߍ<>9lc=?Lq~8E}ϣ_nnjo$( u7I  9a21`n0yιv+2e:έg,2e2 ظ1.,jK QԱ2d& @aLm(YLW:5I&S) ظ1(୧CM,9n:o%Vh5=fw37^vݮ]HMZt_:^38n[6IFLJm}Df#7wyo7r,r>YxuO~{}Ԋn:9V7KKoYovdxN{r8lݹICnb@k?goM@xuq Y#&A Xؑ$"I ߗ4rW.p=f?G˶99 !z\E(t|ީM@ɐ`A@]$\7yN+5"lI2LBxnpahw|c7}˦=w{s>__sېTNs@WߴG/ݬw/wo\E~w.z2`2x9OƼ0){;iuv3H&j,( f A ƃq {|N6Nzto~z[=NW=<O3̉ɘ  =FlOҀ#6L_=gs򻝾~ː|~ Ԅ qq ;oY˰;z<5 }gLyn]/׷>oOsߐy>yտ{1-7l|wp ҟ?k8s%ù:ٸ@\ϱˬvbklMhc]gӟkm;V<#$M~/c~=3|:og|l:hg}oQV)%x$#u\^y)fsӻIWc'yy/o˿\ƌW3/[:3JYf8ڰǓ㾨[K[ϴ|g=="xN8y9\s˛n-w< Y}Wq6]y=_2;@Am=`~cv4cVOYVo:[=ΰjor`&$42nEY8]MWs`tnx :u;}~|B9뚂nwZ&Ϡ8u=.=kzsNsLhڷ^oSu8տ/sz '*"[ */Hι}xgIY=fw0jK=v5Vzj4O5fkw$N ys*ctzx[1ZjIMyK)YN1:qK^9s=6pp3y>?^;qގ Jz15֛4Y?s %) @T+0n6 U8Kn/Vyz_|qjLBF99ߚB+J7/;Vzh8EIzvu@$ov={pۅdy,kG.su}f;ϰ鎈Y0@l7 Drū-L0  P(0de6P5@"sKerϝV4g=&K]-P)nDa.ֺ/N` >m4 F= |?:YtuIJRfQ2mϩ~A7v5)qfM:^HLL" ɀɃ&2`{p5]kKɕכw@4wP= |G\5/ˡT2W=8^HlV4=)ɀH%4 X`:3w%./=<Fsy&L1`ȅn;~i<@ɀf3@ >]`L6u~H,|/M@-dK6y,0`5P1s-j"e\N5{ymMs@ Isg/y=.IMdʌk|u8t@bfW0(Y\(4w\zg@֛%_;řf5yenyhK7V|O&d~@xsH @)PcfYٝf]{," G8|9Mw=]/t<˦^:@4G;u(w˟I l;|}P<;[92 z'DNgKf f1˶]ٹ"d&N-xL= |Wcf,K:լٳONuaf:i6}>5 uz f]?g l5" ѓO:9ʥPEF)cf,ٍ`8|qs[Ʈ_GgtlO939-Ɲ;GZ_wcِ7 jVv\od$Frdy15u83#:*2 &.I2wv@z8 ΍\Y鍶FN5ˣrd:^= jd$#\l>G^Sjs-z|<~/ϓ>@?GF=ѯ\6g@P 5ϋ;}W dhA(n ).q\QJ=s8#pVg:@2Do>^=9X}1oǥ㼁h0X0 ~`s0ѾXjM%/WGN93o {h+63{m&v~iz=+w+p+yn9zf` _{#q#` dV+e2Y<̳\.e 0NXLjunW $s9k cycw扵Ջt;y`WS;3]vZ|:σw<@jUL՟=bJߢVzy^?KF=6gD5= P&5z>/Nd oͰHYhXȹ F/GߎSN\&L?چ%x .ozo Tӑ}>=oW D ހذ)|k&,{|; "J2lr9xOYh2h[^H\zN]7=O=m|zXӣ^ۘ5~cH{0dJX gQe 3c4GS" eQ)3Ρ:s>O؝>ۡwnys*>-Ěg35+zbEWo**{3{r@>ky?C׾,垰 s rbq.@s؝{ݾe0gLd\+UnRd,}Ng\N$Lyݯ>y!I^~nS^^L;sH>rr' LF,ٝkgCỴK:empW,T5Nja`ne,u%GYeO^Kudq:pr3 :6 <zq"<G7v^@d-Eq5`{2@9o4nOénM&`0ܰ3?\XNoN1&܀0d%e?N;? q蛮fǿxVs펞^]᷶%qҝ{g4eu>6vXCi:3<珗kӃ6R81ovP~UZ|W=2';tx6@5݋wu .Ta\ov=E{?;zy?N=>ݿ=<=< }?u|L͈Vmd/S6tŊLyC_qL5 R(Ep3}`T_)iuG;I& EᬑHݍss^02qZ>Vpͽ}g^^^(u4zs/θ.tq<@y a(uïθ;|^ZО׷ͳ`_GۇgNnxk#oq7*Q3Auy7j+ L\z/T_"\u=kQ;0DXKq:>=θ }xCY%K]x4%]\nqǍ.j&8]V_W=>|dĽ,좵s}:'u~W-ռܡ-}>Z0|ȠʦD@ -αΣ:,:̳2΄_yߧ攣fYufS2DlT#`Yk߭ۦޞ^ϣz65fmpƮ^O}n;޾w<ux5\4U/˱O3hSTH=Ku;7)b{r[9NG7SlA9!n7əe@ovu3;&N5Oo^X .iƳwgSxZ=y-I2p0`r7|Cڞ=9(|D,:ɜ:̳2Σ:Ƴ$lrގ4F ˫'CYluF50K:>qߗzwϥy 8wogߘ)mCrn@h,ah$鎠7G@žtޯGֽ_FN@[=nK|}7x<Y:___ ~NumMX{ͫ_gtS>\_ql&I$ DG_-{|z9ޏ6R%T0B,Z_V<:~Խzs ڟ[c:ͯ|\,Y;^[y˚9\\ig]m㙍hgvt_Iӏzyl)D3f*:zK_x;K?fO0Z*&{i!g\5ιdyg\k=s}~77Oٶ:q_}_)UrpѬˡ˓]P+o6\aםl&A  %e=i=B·{@k@fn+ es68Sǯ(ktXκ:j"TSYR;θk$Ds%. KZG _`}$i<"RS&s2͍:u&W12qfe%GYufYu,:GzӕVnt^^&s|ZzP) g@ӕNq>N+8٠9g ឰBG;y2u/cǙ wVlspbo[2=4fݼ{t"I1`me ]zܳjt2 .^n׎L6bMlαϥs̢@ 2 Y)s.@2 W _V{s7q~.Z͙2puhMRQpF"|ncwP82q$j&@-yu,ufYuf`i@ʆ^rFgQeIfPyǧwë+Ը2Hfw:y{p/w=JʠU^6Gٞ.;K?fh\I&Gl=j.8}_'s`Ss /ڳ6\q0,,ӭl?[`Q_<~碒"d$`1y;BΟ׎HٯY9KoN7Tsb& Rp1ab0fQ 5|?׹5yȑ+5Fc;k60HκR.2Čicv=9,S6| %S ˘ufy5gQTً"sXO:I̱`vy{G5G35k. 9Qϫc#:@O{)><{@N_7xk?:3z;K?f@-) <ꔊBzP~'Wݎ9ɴMG~k\> F Avz~~$s9NQLuw6tQɰAlM1Otz96 兑ԅˏmX鬯g[%LVHM3K5O4k׬brzΫ<yk|\}` @F/󽑏K<R:K]?S@9Sn8٠yh G8ySU9` N]/; 4L o7_?sŘArf7)йWzS#>ܮ8Wy|&oU𢡊Hc@CSt(v,שϗJy+Tj]儻fjig+6R7:w:̠{sYc7bbQ5i/)FMo4 r+n5%QJo$ɛM@Obu5z9cyu@fYټs@s|x?N&h,5J\vmh.kܣXmq;K?fP+<`H '/۩@ADS4RygѷםzEb70 ^pgC/T&7tşGtiO=kO.$,{|.P͙ ×^v{dӍIfH&K*6JY\h;1`Ѽ,{rX;Ԍ"Ebٮv2HK]m&SZ,I#eF+/ժ]f23L ̀0 FLf\BRddrT\h >kx8u;Moޯ=뎧ݼ D?1o:J>+~}h, pO6`vO`H_\&` g귎DP*NH)t/8\B8^>SXDŎ 2J]x־{=ƣ5\w|йX,؛ uΦԆo2ΰmβrYF ?cS$VI&ju5ic/)YA`ؑZg:tV$2 e2`D_uzfYK O4Veg䆳L0f kb~5e=4gW;r#fwf D?1o:N6h,0Ѭy_c_k(Mgm"d Ǫ=X#y=9L3d͒#,3c.G=g*w>Fk1:3wcF[=ofu!dɧY,c[ql</^c&IT5,Gc 2`л`m$UI}o=5/f]k9 p @&3uXƤ #`I,kz` D͔L"2 q4&n~[d)g0Z:Nf|T'/4Q R*94`l&HY,E`/hd0@2i<: F`6`RYD*Nuz9slr3(f!_XbYIMU+f9xRzJ+&` j[ץFplo6M @ɀLΥb٘FIJ#d50>j&L (#4@ 0W)p_$Iͅϛۇ[>DV"D2Lm,̈́W˓uqC ` uL9) լ6l͔jJYK"b&ewgY,Kλ-TBNj՘(k:Sq抛2D. dt2kfɂ&y9eYzگ92Z7YP-s(1f,dL) 6kԍRbd,v7鉀%M=GA;#5UD><%_-,{J"ny뛟W4sNi uX&Ԫ1yܕ-m6ԩFs98\6\\\\A5ϧ&@2*Ns߷<?gkZ2uĮ\-Tʇ{)da+U&U"ӭ*Ǚ^5)rdϵ v>_; 鈝yX*_wӟ2_7z y}|T7-׼^4Y7:M>~f-gzuu<ǯz2o3A5yTdM%AL5yϫt9x# 0d;~@s#ӭLc돓zkv-Y{Pk7ѺepkM*U2dUY'J#k6@6~]|{s܀iw5=^5q}. u5WDG"=Q쌀J` *KFnP܀C\s-cy~7;\=٠5.DWǠ *tKfJ,k;  9ϫtGS^Qd )Nճ߹(cr}}3w0.9.z͏ghy8sqI(ܛUUY%Y,ή krܣ&'%MU#d6z_O+#5gJ;V8t=y^24v"dhX¦Vh5-+VIҵt@8I,mF0l@frFW㾅 b@|xn}-J@*poOu:0| Ǿ: x(7Eân/.Ŧyݳn#vyv\Ӿ[ۓ5ojW往8is&k鱚n8n2ddkח( ;n@;>wGۼ$~ wyzl}>T4IIP\Tl産 M]Im5Ji4&ޢi4mڐ/&uY\l\(8wu)ź@{7$M%U98G5N;yl=)o7z[.1ѠU(^ήϫӝk6x[n\u=>ua)}XMd}OWn8’n&LJh0dG#>Φ}-yɃ *;n@K>\nsvu{:'  n@i6F5Qz2haf jݠƪ]l@fF7J:w:dG7Z:zP ˦Yk>C/[Y{pXD[-l=k箩69 r*x8tsO^);ysƣ ǚx.sj=/ەց^y}w #&I4,D0h$DG We2`0d({םy^n^c׷åwAv Rċ%XLA)mLWWW`IK M. VnitߗwF?+zf<'.:6y-v+޳dO5IV:Z_=kyo\m6k5.*Ã5{*Lj%8x/7f57on:=,VγϏ:A挀JZw8y}:{}{y?w<=n܀`D A+[3 W-rN+N\kfpjtG+z;9dz#|ޭr2>w^zy<4ˋrV5ֹZ 9Jfqd < 4ε/';ߢӏ{7Y+dIxߡ.qytk&jC~t(@QI4k  8j;>hɐ` {֝y{Ύ8y:N^ F;9t$ajMU&+~y.=4cSjHl["K~7s|&tr3v6fLof}1۝)-|D߬dq1dˀ(sN$j~K%zID os=]?i. Ok}vö.z7k䆸6.ݼfH?uq4LMP(ۖo>~}3>pnt3Q"`B\*g=|8>^@KZu儈%:5ed䷄!R2 UmU^4Fq c%pk]YHV dXjBHu;v{:6+`0@%j9D @* G\yDsN$|~zG}٭z|sŻt`رϑ|9n0l75Mр%{~}3>pIW>t[>`7F9wqv}Y5L^@srd+I%rY@ ]`k5CiLLm5ֻ5u'ƺ @#pU2 LHdHk*Ӈ/N'پ~^^8v^[WY */E}/OX=1?o%jžYtp"dɀ`3 `@0 ɓ vCQ& pc}@re{k9<~y{ A9yrѾx6mT@ 5˅`@`G>KH`R\|S=OVs t`|~~`D@*+V G_bu5G{sǦOnhG:=yP~_s@Z[$H.SO?>KD $öy` `Iq qd@h6I6 }8r^CPF2W,5|tāF7YX %l)^޼Ny O[OU^5LX2H eG7Bٲ("E&A$a:J @TK@4i"uI7V& iLkMf~*8ξu/ҞoHqol&hf ˘\,>=PWS^h#vmcϧ?O@p~gEcN/&Lu1f 0lγ w^~hN'4;=3L@0ks:rP/=9sfzy}e,u~3ϯ[x^ou{1+ڙ6\&h` AV{_O :orI<Q Y5GGuyt=PGvϛR&H&5U㪜Z.zK7dMD fYF-Jݹƽ7\z<7Ӌg3ga#PkJsOMxlQ]2H0g?eӕ;VqC2^mޜ5ǧy7djL1fk1==u9k=7nr +y[~.̥.Uֺ^5+}@ˬ*=N~-Gؾ  9^^^:m`Ͷ _Cn-޼?wM>^ܾ]ƭzy=lmzxzj}ݙK9# ji$OͯK9q.<ݺ3pgq^^>#}PT%}0;q-Of^^y;Ʋl{ޞ=>p}\*z8aZ.6צ.q_L_wy{sS:ߣڳuRrNwl9gC:Βܿ;d2^OFvdpcY~u;tYYֶm;M=3x=_Ǩh=58؆\svyjO?f#PpI61{P<Y$NOL:ߩ f|?$%l,}Zj;s{/@y ý}vlv\ӡ߇@w娨>Ysq€־4$oo1K.u-o6;s}S'ITq"VȒh4ϣ9˨ӝ}5jT;l=Wu=Iwll\y?/m֩uf:ーIscT9on+jzW phZ{w1Xy+uz]\ Ϋ|ekrJ[8ޝgFns_^?EOt>/FMV]\'|Ƭ!ߟn:DVlZ S3ӸbGxdž|nlצH]^kI wo%^_B G7qP NV*㻾@j?眬u:{TWA۝@09^ozˇC).Tǧs;+5˶k Y:JQ_xV;al 1.W;^Y@Px7lJ^l :K|s=<.j 5Jsq=9Hˬjuٍg9#/zĠd͒mgKQ@s|v:s]}3.fFlnZ>|{-dPOw9r΀j5۶2ŊljH6nk*`H̒,2 g,]rG %];Z*.glKE`d6 !012@"34#AP$BC`pD%5EW}vɷ.cqla4^D 'hX+rҫK[-GYnx&7ockmZmW [kH;NPu,̡njѳV6[SFP5@&?}{<<}õWIM 2ze%DwB4`u Q5Cu&SŖsّeWPu2E)͊%T!`P4鶵0,Gb6zjn J!IӘxWDU9 q^m? ꩬlͱ1x|\~ NtƦK2D't){X=\%P9-uckX0E?-j,tU?9 f+氙 0H3Lܞ6M>gcUG☹xgNISX:饖H 6N]TL&~FmQ, ŵ7Ǻ,e~)o~^/o1fqO Ǩ zVF<`BMz~ٚ/kq4֜?ӹ2bB"U~i;~LSNѕ:S~T& ri$@NӷY;}']d?L鈪6Ӯ䚬eZj{D`xO97QU_OB~%jjoYU}n%ji4hLSoNh5]:SLZó7J/"@jhvحRw" |+kws~3U\ȫ">0kVrW?R|.~&G"QһRwZרnOk-ZtѲi[mʮ+CtOMFmihTOa![=!Q+Τ5__Rk6=bV^U%! ?V/fTn񚙸n3{M::rOiZf$*50YI฼% :FmzN\99x5{> `f۾w8n_N:/f4sǥXJWhH'PNJsbTӴT%#eǪO-SEȯ Twmق: qvkj!b,FQƴGjMt 2Jj6ۊAêlJ%pc^%hN5pwthVmY|ϡ.p ;{dYV׮o~ci5̼ .alfsԃfsص[Yc-jǹPEVkC:`M&xHNMgOݭ@`شʀK_rܒ%u#RWq;(<2Xïm6XAWJ|Zsqh_;uY([i6C\z5`{ű`6qijRb"2kûr!yyVYщטiԼ1gF #09>M %rl:r :Z,+)d7z_4z͆ #S+[Ѣ˱|O2̭vLzb]#|QYMov>8i/>}Q<7srU| mZ;jd^νh,YwUrPYdZ 5f%IԂ<`@%dma:OtJ9~v߶=6y]1֤97 \a:NYsWFfEY\X6A&6kgd\}WVugVuXfs̈́\&rft۬QҡJ{oů>w^V8:Fk-$nԄU_~ [ fq,!BWq&E6y?q]Է"v9 VNHQ`!u<~籜2^W6ڰ =JAķ>>*\)ky+!2]⼇l8LF5j<_vM{ͧ$T*gck#=~7B2?6fY=93RlX- _hɊ6aAUZgًGIٷ"Qro3IAUiR?R}{m_,[ xaJ3uRweŘoӓNsk}/jPfH n5׬=O}SFlYxQu >62e4WQ܏Mu~~GBt ;+XzƩ]:,Yed7qo2B' x8=-y-GRԶ]U1?#mk"#ㅮxՏ1h^8 3`JSH9 zƠ~)2ʍ9 ` ,^Mn>M(YjO F-Xu[YMݖ?#걃;4~<FNEkekw+ȶSTW@y6X-^!})?HgH;Fxdqӛ55Stj mQG[CcXߍĿJr,ΩL[ m`o @c,aC}N6ZeWv ~Y(3:VG,{c˲)jmWXq?/-ea1-&mIdQSd-^0We8DMD&53L'5 &W D+^\|FF}n'jzE|GA`@ClᤈAr0/8i;M |lﰱ մ]^?t@yf!ҼWܕLMf&=ckW2tZrt%#%4S[S{k6=9p&ڷ䍜E~ߪmPbXp/w].0ã\R;1J]zVo,L0}EtJ1O8y^^H9/ߕWmUpfq*Wςzwanl{ᗔ :K[ˑY)0ܺm'ӆqi-"խL|}Nb9i.Ʀ\|^*i3aXͬ hWeorm]%]k"sq7\Gv-ǾQ{Dk.Y>ZX6_+S8xȸc~ޖCJ8}u;֖ HN{f|`]k¦Zk |3,Om#qURWe4rmZkeY9I*ʪNvV\V7ksEamM*?]GTYFƘ'O.wAk$KR 75YSH蝴-nNG"2˩ʶwY*e"Qh)9!F95,*[ޱΝ,̢emXE|@.l-4y-3w65KXj#[e2I Rd[ֿ 7l77mVk\rAթgܘ?s/%G#m?Ҳ28сS_ehmeeZA?ƵƩ9e1ъcҼ&V?^oWffffS:u f5Yd+`gbvtjln@]S_%%;lu^ rbQZ̶xfFm3a_mǿ ׈,O"6nCI*{ʸeIBmNQCj_謬XLV!tC65~=ߕ qsuZg -oZMO:::3:Bt&'¢]p\,tBZʖ؈"r.2 h?`2x=:ϭ4i?Q~LF3g4i?Q~LF3g4iWڋ;M1*QI>m)?P&EvDnAUeu_~mƻΨ#֖Yg(u0s~oQ>U}"bf܉"mțr&܉"mțr&܉"[}/'6Ol1rO ;cfۻߒ o{%r"aƮ(#52E 0r;N7|Gb8Pqh{K'jYH1}[}/?;"3j?dj`G\~MY|Mh9-cf.#qULUwh L8gyVҷ&F3cs}OvXF[]SrR]ewd5`κ` !advl)gZpg*/ܱs,jnL*G'N^$oEh7++k <*VQt]܈m%H| 1-~ ^N5q~W(h3MNT|P을F–#6/ƻ{8)%.ʻ l ĩ/8g u pC 0?OdWRRa6-ןV_!c=B#{W"OV`~[kT: "i'>*`c 1ѻAkm&?N8gyj2z|w߅)^yTuRbnn֦9vt.%^JYz8VZuũޙts1k]p q #[+:YԜ''CUx> :@ǃѧY5rt 4}|+,r-UZ3GNF[cACx[L,졐Zf~Beݷƨr5EgÕc[>j 4E:);{:A0 !m>1xIԝI|#mgm@NcL|;+8H+ܪJd+QGe鵬^z{2'-c>,៑X666666664EV嗄-F't}nJZƷR *m|kƴV1Ɗ{9bZw|Qߧ|b_ľU)^U5̜9t~J>3>{fPق%֛?pD'I_Yx >[r  ::7޳\95Øݢ\ؽ~sw) NΫΫΫΫΫ{ ziFޜq?71Lwxy'KnTW0ܾHX:ٸs)bT'fW>C+CcRҜlBYgnb9~W ma]frtk53CN|ZxիÌ'f3;;dN쳳E5߼";XmQ4=[S zܵ]i'+hɍ{Z{ oc&ݣe88gAwơY2κ^o7b~o~Wռ=K>E۾7 uW[V^Z=˶' OK:>FwBۻNwT.ګЭnmqby"J)}0Դ H_$Y@u4M&HD"W={?}"E/}FX:)i΍M/]Vukk7bZժhf=J;bSAqgpȃMoߙ2V--_X5R;~=% r8KG>+)ʲ1/ߍij:qt+drqql_3A=pk5fݬ 75&IW9z@uk͕:]?"X 2S4444444"Ϥ ɿ3~ YthԬ7[4 t1Ow"EoX~?4bT?mz6é_{6^Gmvu1tm~Y7k=V:'N~y;AI;>I/}#::::::::czzkˋYw\xJkJl32ܻ4h7ЯW43X7Krlm3N7I?#T#:Ft3gHΑm3rqSju+Ѳ-1wNN7cmq_t815u;6~֭_sd]6[p[\I԰ UepF;m&6MiG tQ->yAb{wLrH}`tttlYYgMgMgMfŝ5555Rt0Tjyh޿.n-l-*n޻\zue6.UCV-ٚf8`oIJ=t:Nw,2x3|!VISkVQ kuvָrR) )*q 0x[5h>g`ܜ;[Dٍܻ*y)ir|>Ox >@>O}S_< L1};7;D_p˪5'cu>Y=b(mGTkGH(}U(ҫNEBj=h} e3QM2Qac [0U s26v|nY}>źp 0Dn4lb<8k7\ l @h,ap=gU^*x9ie^XVrz.:SmUSMЎB i_ <2 ~HiMxAgw]Y yH@a(-̪Z>&B:WN8pi•mh{e¼lƌ_̥QvScb2J.4XԳǸùw*bfS`~+20!kN2tkȨhWb_RrxL3|\rD|qǯ!2(|7?'1cݬ 6 %KqG s]+k؏ñov=}*;Wը^pN!_S^cfbmᯪy$k6O{Fgg|OC7Mf}q/9;/}ki*]|(fN^&o|<2xN៑1?78gr~'|xoJ3>_?ϡiTN)qZVϊui=݇4,+_ey E {BН4%tki5Ӟ0Rx4Ь oF&)0.UUuou[l/$(^/BYfѝ^ԛ\2*"cֶ銦kt4AK1 y\]w`n.-H&z+I?Օ˲թk̪ߥgggggggggggggggggggg̚ie&ADn[OvF]XNW$(j'bffQ+mq%İq QmX}̺j**NAKWj *ّ]Q"-?Uh82,TҬ*܊b5'R1,G'LdgqFtYr&'>ܨezpPfu1x^~5]~.e"ɽz Ea[*N_WxFѮtkTk5΍s\U 2}š:5΍p":5΍rUOl̦4nS%yhpWfQz/5*_tt+mseFvtU+ LCOȪcZ.dqZ)qLa:?;^g5ccc-?/(bekmf*f.5z"qhwXMoM5/;,Ϫ'bD3!ŶK/Gi-2 "o;~̟p'q?%>sБmh۬mb,\WXr;eQnVCf5tF.ǣ;[2$HMahkggva:luN'lK<˝q/F]dQ dzݑU#rk;ª(A7q_XdJnKw跳[dVMA<;+/yuPcVY˒>}oonOzr(#R.xmǤf=oHGk lfDW^lWWd]]kD%,1j=}^} ݲzjtk59Zk7 WTU-Ga 8ٶ^!VWweuKq<{5Y_s+U2sm!Kc.*@ 60ţd.2;5+#$pkzrj1iԅ­=g:ͺfmwi38bٗe@NExf w:V_V5_Khm}oonOzrxWy+^cbDp~ ͤTmwvB,w4fٶm5 Bs3GD e溔*1#E~u.c(0P=FC]t[faM}^ldWaB[abX2򲴵8 tcgVSðkҤs8hj𢢠x>.9Kk+X')>B+5QG{M<-OM 8q4ڳqXW){kܖT<6D)P5B΍ pOm?ӳ~Ut/:-εf̟;>>ڭzA,t0t\~oTDc1o s]"iK <Qmrd[E\γ2+_W>..pcǯ/:̶X{lTP1%ذa`Y911fjqde-{RcT/_>ՏcFāoBD2r5/rtilrWyd/;)]ְ&<Ԯ ,|ZMf%]1j=} QWf+[}gJa>{tS_KԶG6)$(7 Uv*]{:j"o;~̟p'q?%<* /l7ԥlGXN[yYIV`n螪~ҳp'Ac4l񁊵n,Oj4Y'T 4KRN*N%'uű!p #Uͭ Ͷyz̧Q6+ؕNmYjm5nVgSE{6p6ej+S*_,LZ\u-pL~^foH`  #*a[l$[gr%iJ9ecU| + )oO7])#)N~JyvZ+g_dꃵժabuXQZF6ij:WLk=wMҨ=%?}>;mM@xf̹givL;;s+[NJr&{b9kSnX&t-+ZvDgc=9𼮍4m]AK6`1`_ȷ߷7s'=9|y䧗>leP* cqnɳYb{fW8.ƖIAGއҿrߑi6 }b٥#U upvB GP*!,۲ڼ7v0)kL^YTuƶS@y$,rP++uƝ,VC!e,ympD9eᙝ x8w8g^S4Wq5,^_%lO;Svʩ-f>|5"tkQ(`Tǡ\UfJ⊴%Z)FR*d>?hASNt7,홶-xYavXҍEi1 %p B>/c{G/7,)D+LcS?އҿ×>Hf|^%c(:֪S]_Wm7[u5߀+媜ʬqvMg }6o*~/FV,ޝ1X֪|]6 ̲~'fΪ 4owף{fT9{6up+vgcsm0psiYw0pN2UcJ{,s-Z_zJ>ǫL⯷cK ;>XefvgaaTgl զV.= f[TԵ|"n}lk檑Qo-*V5OzL5XS#r_'/nU0F7]18r2VZ2fj[!>5`@yiFސF#~/n U~#{a'hL/P|e~/H+-\ӵ,"4XUR~X>Eڋ +EF#BY R2Fv eqpZ.Z{Acّ:'3fJx=qݓne>9Fo|LZ՟dvJ=ʨ̯auU@:GpsXUc*: 2cU6=į+WR'`U2Fmp?U-2ͯQ^~+6q,]YZ1}ܓS#r_'/hZ\ke:JEQᤨ~}!r`k!gFzAއҬx]:~-:sjHV֐:Ԗ!_V"i]TlCcf/_lve)RTYkM9TUmYaW5{|urxƥ'퉥F\wpɏeVrYYe|2 \tT&Լ|n3 g̺Q5YI!a}:kg{`Xut(~wSZ[gqcxcѧ~=+Šcq datkSnY1/,{#̯b4_]1%)%jJ^&VzL$y'䧗>GN_n(}Olͱk{_)Z\Am4xGL8ws%6 0Dh܏>ƚZDYh.эEW;EuZiekDZMVp|+WQbjTյVu^ig_#4nX2:ҷ^@j~}8sߗg}k=Jz_X[llPK6_ghTi5ekbe0k~l l>Hk<5lJFkßF_9ƿ"[]c @Y ^be>lbû꜇/N^_&*[3Mew2d&Kec ETѱw+11NΰQZΠjLU<>uqm x6ػ냟?y'UpUOYH*t2VMbĵV*emOERo.ޅԢ=3mk_e|>'V#Kw$ڼ]W[>e{&3+0]U~Dr}G>)mD_blWI̬p͇ xF-0L]nq|+\;ӸFVz5h܏P]AZrd,‡U3I^Uqp½'1^fmf.3S͵)vn*[qUڿ YuP1˪h^U{-Xa ҏܹ}<-*ۗg fڶm~6Zd cNfp<ʾW [+mKإHbW䧗>uvίM@m| lOCk U& !Eq~6bl%=a1=RCl4NSH!yKh=Lģ׭laMyi+ 䝶s6eW]V^^쓗r򞭋kOJk.}T`Yb e*BfƚEKfƯjdj28/]Tzڏ}*ŧd6Iۭf"zK~S m% Zqvj:]9esr(_JQzF=Ƕ7 )q֫$gfNÙ(NCGư[!X:X\-^V4᩶2 5UЮtRlA }G]%l[䧗_댛ײ}p2iHZUJVVedu8n'>}q1>iJϮpeԆ k_H9e)d|&$s协Q^:ײ 0{h׵fMekk6ҷ>Pk) WV3ף6w-Df[ddK8cPrnc-Uml~gi22PUv:#Qv&khQO=dzNvK{򦞥#>!!EvGRdjS9Zb!vUFEmm]"a0L&;-򊞪K1 ǵk<,J=̜W\+f.X.[d=a5Q_485s W0=A ;\Q[d\+LR|r[l} YaRȭU <+_Sɜ"e5ƚ"NV?.2r-z2mY,dz)*וԷW2c6U4Q2lJ Cm+re6X\vڵ-?j{E׷3k8Fjj>]};׿bB44 6ΣL& m˸pvY1z:6>n_%5^iepvU.:!{n;|+n OYY:cSl(7+-9x4pN?D~}F[SoNuԍ m{Ŵ mʶ5\b f/MZ5kds9M7}hf 2X؜+C̜$|:_hq)3U;1iF.!^}X2jS}))IOgc՞Ĺk5k ZU0.tV(^ERͅ1)_W7"5 r FY;3$N@kW"b5&V_|1򬦕?;e+Tv7h܆ǩccөZWuqr s3q<8tv|y^yta> S]0h9XՀ+j_?޳;mennnn-$||{ms[&&"dޓ;med9]֤f> J62u^-Pu,[ll)ѝ Ђbi,-K/ֈ+O)X_Ҥ9F 01lBL^fL/7d9 ֲ &$oY`RgEEA1OK ZU?VcO0p|a*ǧr5@\(zkWMuKNZ|`^Uv76ZҾ)dQ%5*ͮ?fCXxb#XUBwZΪ.mL~.;85dqbS?Q7%MU-eYկ 3- [lf0:Ual̿+ʶ]: :gg? v0SC W5S]ߨy]_jU+=p,>R̞n&myiboKmU_͵I ͯՍcaD5Lzؿ$PreT``ѝR>}Krm?D^ xȩե2r bpUIy)Nk!l|baX]jixqTCB(8]ּO'Cr/ͷ4f FżEו=Lk,SFN,b|ۭ\KmkJfMv qZʅZbc) Qn,/:qW5<&cAI^MJruBCX \^qlk"?HC 9e-0|mL|Ny\`uznmo.!ǨWZl4J{!YgȢ w3d5j ]wo^ȭB`ciڈn([m*ɯeWecx'3&Ν'Pv_VcmY󏈄5z tۚ-fAdk7Bu+4MiP~U׊FGIfCnGkK,|PY{n۫zmUȍC)`uW "v}6yC\l{2'\Nbn:XRo6C6 Z|۟RFFY:|]Bt aL̥:T/_lAdp!i;N虵a1'pɍ[ >3/G'Kӑ ^Vܳ>5:MfHQWy;蘸 /]"@KAWnm%mMP.E?ٝ-6,$ f94S1S6nYnOHY<ӈbW ~'|˺u⫤6Ml6ͳ:"tyac]ѷe[Ƀ֨h/;oYMo\[pfiO Ƨ⇫Ϥ @L0-tFɮmv^2rc-g#k"Ǜ(qa dcԹ8*=L䍙Q-X}6zlN`*J9lBxr/N%9'%}JV+ S.EVvVy#f8&'(,NGi4XL&y`> =jN I4m&_M#jـ#1h:;Q^>&_ĵUy%ce:UqeԭV<{:YGKq*#rVƷpe #8צVW`cc2 lũ'1H[+nI,S~Fߍ;f>&uE-݂1d>_QST9A] 1vkl-Jf.FQ>E)^p9`^(Sf.:՟sY}ϋfB퍮«|92%H|f18<75iuf|ĸ7t|$k5/=&N5a0ʷo@Ëi0/:JXnj:pT`= GjL(\Iv%<[mk5b׸ya3Y#4:lU_H0A (ѱ#QbML5YM:Nq\8īƗے1ב5ԷQZyMt k5a0LȧŸ'TMҾ\=LYF=q]LAV$]/ĆmWN_%}춺Vq )n>%`!x[WzԳ']D8xƐ,K)XXk^}EߗiS_IJ]|VzlAn4RQ.޷fPjZ%8〶YRF-)UX~ÛL!閊QIs{=uKMͶX+ў5Dj}**A%RVW3* +[&1ص::U (5Hqٺ+dY]r 4nRx{1mX :]GLzX8>=Yb+zb)U[Xoy a,iFOo]|LQ'>w^@tk7Mt&k5Gx]N |LZXKqEuY":FY_v_J䗭zu9ub(Ij%צ:>fFLB`m;;<9nM@ĮÊC/ Czڼ 4冗@ ]U`cקS# #mvz#?XEòZ[q̪߅)tjUXk55|UߓaQ/ z\V]F@ѯvznVZ(ZQF^Gin:Mt']jp˒B,} d\\\in]+SXӰF]=`gP1UcmgMc9e. Ķ-T_N"L|'.eJ Ri{Y[i:KS[HQ/VJS%!RXZW&nǾE}9d@&m΃v]OR(e3Z`u#?NFN;T.oS׌#1.Aq[Ew(ү,yZfYk׹+)HxV} ӑĭ{ uﯻ&cocSlncp=Y4ŵ F֪kjg_װ U+Te*ĺ,chb֫cYߪE}W8~4r'TNe%G4M%6vҗ.1&ؕf15W ݶ#m~+mT[zIʭ:uPj\@0Pgdǃ6. NEV{Y 5-aaR2F=_zct/dHĬI.jMkGv~RӅV<*ǧ"3x dnӋ`W3V|N^f; ~2{f ?ٞNpWżxfM:{8p?ۏUx);F5*'*fI~'XNvlmakxv60m>~./' }Ѧw' _(óQU&^e+`e\VeugUi +Z{_? 2|5DZكM>F$ Wf QZT̟ ŖʹjU[Z_^63i],40ddi4x{A>:α21jY[T6U ,jj3::β2q{"QpqYpYxd\w#Sub@F~5\l,fp`f:a<( :ڍ2^4cls)OsB.mVV5_ODZiOnpvWi\*mdiӥʟ >]]hBjө,KN?m0Y !F-+6NVL`= >-YaYk5{eU-)Ubk&97P*e\A'9wbۋcٿee&%X[ğʬ9;΢A 3p"Vfh0 !+ȗ[O{Yk5>CJП,8S͜K(GR{{vU&py97'\!zCRe xpXf7(͘L}fz|DZ+{i.FT x#]N&7 fȐ~`$NNަj&Yw~W˸u4>V. ~FN 93+ۍ8~=8/Qto| AMrD,م֖u#?+_s{o&çҿun|yY~UBXTm}Kb"Љ [ei&% 8f$O;aiyִΥwy6jMW`ɃvCeHf j1PO2@RՋu òp2 {t_ в ݙ_~y5uB/$Z1iGųc^ 靆*J (i6l gԑs/3[;Ef^"q' >H-F x8?NNNRߓΜ4ieR[n|mv[(4?g{xnV.&B597jHswZNF3 Y%RS@>v3Y;Mah?o M& ժ.m es%A*.(2y R퓵-tif\z@H {^%Y|,Yy&F[?s_R3W̲WqkNYUc+g^{VuS.ܝO2.\!Gh*[S'2k64SiR4-:Wc,ϵUEABkYM3 H!7G>K=fsE!WPaP`,3DlnJ~-- ~Ky*35g釆~jFCʌr޿=S5Zf5Yue}Nɴd*yyišȬ5aYmP2sk8,QuP 둏gO~ztEsJb"d}u+6b6cwL1"C)~͙ߕ&mZ ղf1r&ֵgiy\ ul1+iMx:քƵ>**"RWcT^>ݵwOc߻[o_GNW7ombK$U $ڠ[V+vqJFO}ZlNV1Ade KoʰՋqînE9u !|fsO\tK ^>=V/v X9)5י=V}=US7z//bE2޸7uܫ pưŠIv7LŊQs|,ֵrC 5k?P+Y~:^Լ֦'z礪]5h@C` \sVսhN߱x]]fmcӟUqzl^X2QrIQsd &GщRϯ%oi>c[ZL'HJ.\7Wז5U%ۀT^^~^WN&t.z8mM^:8*N6EY՜(eQExcaXcyyݐF0wG> *z"{zf2-W Mxs=){5W>n>^uK%u_'5]r.9. "tVt\XV䲳SvyWO"6U;QP,CMAͿo'df׏_?Rd9yFuDN#zDUC/Y&pn.ȯs(ArVśL,\R%5/2>^vf*Wۖ]yb-ZUܶRYavUX:upX0NV F1T(oM8] M?4rXVb뤪 KU;u<9$3ג:w ouvl_'\.f@Hɲź8gS.UB/uڦ[UӳU6FOg5'W⏥(44='a{qZ:6&WՇ>B|!f][X=4j0x{, 4R㍙t>ͷy9 eJOAVxG*^5zzG&*G·Pfü#Ll˨oǫMDB΍2ڧ~E7%\N= N^I1v k?尉Pȳe|Q2Oi&,jܬՑVE&eqhKMJ~k~'"gDP=| ߚ p?a8SOc ;U.<j>ByeA: \_AdNuJKG;>Dm9۱mHBuXNݫ5NԾJcOG&Ţ>B\q3CJ|̿ouiI[B\;5,eWuigw-؜`a۪O{eJ@蝹y*wdgJ~leJpl*U~5k^kwFU  ۰/ɯ2Ycy:sq{j_DyOƤ}" 0 3 򸗨pw7` 'x{@(8ުU a[aYryù^4p7e}E"Z/m1¢3.Š0A *Ƣnc[-JRʫ[gſ}e9fH`ƿgZ඘86<#~+YȝlsF( QNOPʹW^4!e(V^=O -*25nZ+t+2fTUGfbTضdc>CY{GBb0 q1 7}hΩw}3;*rx1<W<+ ܿ^;5ZJ[H!5Pó E_0qYm 0xej g4W+^e\D̨&5oԯ}O矠o@1u4 VDU6`s̫kY&"Ԧ'*S]M ˎ};5}E_Vu}|"aa7\afX/y7bC/{q4|\ </:8x]Vt m[,6᭞dzUïwAͶp>5컕8n3,SpˇYs^U0s_;.c7gD,],Gt28knŬ#C[2uVilo_v{.MT rf JuufIeQ(3q.^ciH~a}Wwcu3bDy?Zٲ|I!<7BjƚUX܎~ISжpӮ,ȫEm R]K[1/)N%U/ԫʱiž_;¿'Y^7T|f^KlNs9A$سף~f<9ˇ1W[{\4o_HP,.ijǛI{n왞Ks6 n:U4zy!0ċa᭮'OR{Xøg1'WoJ"_;oIsa}B['ᏛoVw/ݶ3k+]!;V&BmƋUpk5f%/ԫykNΣdSrܞS(u47<:|."WmC150FצecSwJ]qt8u_KLQ):b؏> ٢Ya)\KT"nYu=A9f ҟ^T7 ͔:J ѫ^X~4c(:t'FtL4>W2J1fa:طMtgWKe|paю7>3 ˴&m|<æ%_n 7t!yb?D'LN16 z Z%*_)@" z%Oi|PG+H& Wӿ㑨Mt0<-iՉ^Ք&y8f۱x}x 8=a0wħ"\e|+ G7)bk3'fiYֿU&bAZÖ,7, Սx71FZtgGY'DN!6 C 0*x58w흞018k^I >yΓ==< m5, j;iHeWC' (c٩-8Yٙ*77Mд- Lu2t;RNҳlyM'U.#_dQ~/Hxmv,^RNz֨]J]+ЪtmbǏ-ڞYd^q`\)ciuq]╆1*s(Y_c;st,فUՑk2pC,[q+7Ve6&"WSf{س\*'dIِAZ|)x]gtAc_zퟧQB/nd;r즻e2?I}pA;' ~l+xH8]++Ʀn-7C1Wñkh?VnND9~ZeB\}'ᅵ3Vk:,ݺ}E%Mvf7 Cd'_׼H<;iO}yxMO2a3] 4M&IScP?>+'vz%v.77i@X WSPjVvd5Cyr#N5YOi4kuVuuuuk9 m&IӗMDMm`fYk5y5fYk5+B!PYݩP&_HB1>]+[6IL˫6<Q5Yn3ta#_Oj~:NV. A| ͺ"Qg㰀ZMw4M'5V j}9k5ffkYk5yV﫛[iQn KGxi3mx,ꪝ]c3JZn:_/0⷇at ln3tO Ђ;ȿ9R=[4QڳF@ߐ*aK,QWHlӢ0t؃ù:`Ǻޒӕki>4:fCt.mc:m:m67vt;w4nԝ2UuA^13JCgk1M^l!EUȢ=}/,1 Ё{NMgkiM&yk09 -|c<3C43Ii43C4i4XG%f.Ze/N#d,OtX`H5n3S>4f٤i4Af>67v˿k5f+t?BէJO>Nz􁴚k5o}g ͚ nxd_ Ok _x&b!!Ce80v +Y5̠3leND[sݙA=V{RZJYξߞ-lNCßĎ@k?zͤ@thmJm %ňCM#ؕ^tJ.Y-kHrUBgye m]7M1<нgzICS\dKx4M&Ii4Bg=<6VРkS]5Q:vAuRҰށ\ePe[r2:ӯIjk9Hحwm8VuS_rm*#~$сmws g^]gVy'^^ Mg5039c]Js:B4yzV:jOc `>d|8c}T67@;W5"XOj$uj=S4M]. M%QaM,AmV7@cFgӗvDr<5tC4יOw2}Hi4M&Ii4G6%Xc/#NI,YQeo*ߏ.<|cͰf>AQ<7H3g8m9#FRc01\]Qό,̋jͯ鳙|+5fFP ƝA-mp7y?e}ĝuwy,W=c{~I5u_Nr$(E7ս]bl;)RͰp/ˆb-|X='M9k56ǰy="s_"/I:q4d[^::TٟF5jֺFikDYm4&-nu jhB_(&k*KCqX:uY.5Γ-|nfț7m|:W̩P]ꚜ;$unVRVt>m:%W+v,AW:5@,="jo[֛L2|Qk}G7<,Vɽgͦhyi4N9dM zͦm3iLf6ͦhy-@7/|f*^c`̪jELcdIx u:Cr`_֧s;ES7vM[T`?t y+T4ͦm,':ӭ7)Ym) <*:6@f6YvchAHZ^<ۉ{ &7O ٴ&NM9t rEKPؑU5^RcN5NT]3nuW[,%MV;PV,^zl@E2-sdnS2FeoS|RW 1B{𛻞c79J\,Nڝ[qc8/S.dۉkU-a7yWUҌ}tavZ|K~v7s1rTVͽۗ ]0y3^f}y[!_ff57EXnCN*f']ԸҵmoQfo{L`M7tr>麴,`"q$( 7%` Z7McwO&7 MDcMYO-&I!S4i\)%`":PJq()҅XM:l }X0 6gEպoݩ:Ww8gۺx2JjxN]WpU2T#CܯԚOZ˳(􇟨A|lN^|Hn?k'3mմ\\sfiۭUb忤VX7FRc3PzT.jlc]q6ۃ1qz﫣k{g .\Sp}fjX1y}u5xׅ閺WYDTNNNDmf%}v'Fm^eX϶+k܃]POXNۅ;O\ X[X<W 7H3^z4JD5חѡ3<0jf'"J˕ϡiǨu*klvB4XeH]y08cVCI~(>"qCf`))wΎM-ӄ%6Q<Mb)S'5:5^wC6l?=3^F#i=^ctQ6V~c'XǸ/>B'N}3cN@S-Y*)>0rO 4P&S53xD, "oxfTJV\pmߥBQZvzIv!ױ)˻Eӟ?n j8M6WVta-iznl6wd+zʩJ1zGMeSr Y:u e9^g'k7MܕR٤߭ۙe], s鎡*"um3d]:7΍ӳ+]xM A4A D4iuVD P/}WXI7/6hD$URRmHU%jlI#Vtt:m)ud kMO'Hmq}_n8cNݍ;v4ӷcNݍ;v4ӷcNݍ;v4ӷcNݍ;v4ӷcNݍ;v4ӷcNݍ;v4ӷcNݍ;v4ӷc˳18Cﳾk+n_1pn   w1i`:-:t A4Z"mfN?YNufYk5^Yqq+>{mL񁴛暴wFM64D"`9xO C4N ׯ-1&"76[yӨӨaH_V՝i97k5t~"?Q-BbuOx:@_A4I'9xZ7wMgM'E'E'I'MgMgMgMgMgMgMgMgMgMgMgMgMgMgMgMgMgMgMgMgI'E'E'I'M'ҼRc'gvjBHhX5sOzB5Bl f:m:-: h1`ǝYe)l|;ӱ;ӱ;ӱ;ӱ;ӱ;;;;aJnΪXL M'͆higNlXa- igG=5a?u"eP{1Bxrah!<&iAN%7X+|6m!:t mO  5"qΒΐ%BIYYYПܚw rMfEfƛOHlunV,:0+ 'rm0u'bY+V]3f֚=63c1u\S 7]4h\es8ulu%OC Iwpwt^gOMM&h&h&4A4A6 JkYPALQC\Ԩ]l_ٸO/u-ժŹ?7V >IuYf}5Ρ⺿>Uҷz"TôBFJf]X"?7YN􈶶 P}S)2izur3釐qXi4sX[L鹕NNIŹ'ʱbg$\_]yԩljZ.{DuEd=&[PFfncU,Z2b:PS>6d۰~]Qm||5,=:&MkY2ҘK(Yro^ի:f1e3et**wnZl'oM[Giu.*-\8N#c&T\/CE_ٯOޭr3+e ~gRbX|lV]Oܳ0f:<j[s@&_:\d >tM_aW<-(%v'G*vk]N|g?~< :_ EiJt-@5 30,(-+\W"SE8ڿwAyWW)ɮ.ա!c-*+"RK\{E2LLX:VɭOV;vyVva: &܅%c^ޑAk>_~N(rce6~ֈ9de[qTLd5c<;,ſOϯv:akI)nXؖÍq>oIɈ 7{ӖOpė1}Y}u8uh}[//ꋾ- =gN8s/B[P֏OuJc\F3ǻ(1zMm}AgF\pt M0hEf2ؿS>Y迻6AV(WdMN!KVJMv΃,zAV3q!K;X 4ssnJQV:u/0rmX\_#\5Z_ң>}An-r9xkKZoܲe( ;̯'ͭ&ΕW+aeȖMw̯q7DiePWl$SʺUa`X,7^ [U~]ԬH7Egiaqhb YBΠcYLέg= knBNӶ%oZ*uIQ➉jcxPN{~AC}>σ*;2ĩ:^IՖ :~ُ҃Xn]b!V9fgTf[?.^\N1iN?[yS\ՠ`܏EcHAkVEBvTp3-]ȝ&P9͚@3\YwEj*4.M5q6ۇXʇQE>rEhjPyX&o|S:~sU:$\tm#6/.[#zϯ~ 8Oʖ} xYZG'ͯ*Dנ^6PHU4j?{e>Lհxy>/uܘL|_#=9/y׶tXts.ʗs`ѐ4@ qC}5&9Uf%Qn_gJ~eΖG;?@٫AВIQ֨:l;־\nG[/xWWG)`B7lpGR.n3E(`ʓ,VW__ijW*+Rjr0W2o\j 6]-3qTU,FR6Z~i+L4:yY~JtB_YbپأS-5+ k 0h <) @4ucVw٬Z0P61' >o gSgVY51l~/d59&6%O^"r˫rM:Km;%b\x1B >Iek2Io[e0mFѸiԇV.ΞjY[ E^J>-z:D*Q6Ph'!MRۯ3<ֻ^rɅgFmzLT_?+^i\Z[4ӹot ϥt0pU4Ꞛ Ij⫡i\ I?H ?OX}F¦`1~Lu|,->5c.BqJ|8u,,A&h97^Q(WB ,T;Vpl 7S`[ZUSqv2[uMz iC 5<ˇ(enٰpcᜈ62)8L]ҝ1YJk'xok`d^bK i ᘂv,Ux7~iׂזuUp)Es:l#`S >Ajc˄򸍽KA*ؕ]x Y)r+]ZhTƬm~H5ِ9,[y#*O3^MW#f~5uu||#_qn5RM/p]WXc0)k,V7?VӨپ-jY?Hu8? a@%_.9zG6(^Ar& ƜVT%V6mm"t0A =g}km%Pm0aƂ.4^PJr#۰ok'gf]Cǖ gFCo v-**_ Zѷ.*Pu_UKVBq:tnv˾Z{~s#oNy~fo{O՟;ؗW$ }&WrMU lyVm-zBC1.}T w 91=fbo-fX͠AN|<}~Zm#I4njSk>,Y'v**Hm3}O00p`p EX,ݬ:V/%~-m5M,_~ȬExmU>4 gVVQ1qʔֵ@4 [~}9PWcCKS⭏oZ%.߲[P<U_7<,p2 O I/~-ӫw]p*w?t5{({Λ\Πd  VCٶ Vnxš]gQt6i1}aWҶWtX4<πX_oIl^D1G2(ij *buJZOmX+tF kY}PYıqgɲp' Ư_ӓK%qMoMW%fގ];i.saF* ƭig_wo_k8P7,fmv ǰt;7M0ΚIsMx5)x@ӓK%[LI;6(U}|&?r֦YcNejP[+k[XŬa/yvտR;EǬrl򊆍CL3]8s"@+tpmaxau.AZ|7q6:w΍;5[;5:7—-|fx|;>ޓ'&Yoqy`ܕF<ͽ[|)lӷ8^(~@" 66MS2O:54NT LnnFy+]7S<ǻ?lV,WddSZ fq5mmGjŬÇ"t[_* Tlؾ@Uti6͢mOkXtc{aa1̴WS+YZڇ&{6.7gvlRѸs+TB-ܮ(QIVŕXq`qy+!Fi3EPӹl\ܛlN{R ^55|L?.^~sԏgSLbbAǤ7݋[ArX@|l-tc{NGCoyUŋxnѰHxcOe <"Łw[Ep |<,ڂunx1kBGUڿж5f6=={pXE S5bzxYtE:jXɃrnP JMo}x웄& S)Mo'TCz50D; r(CL bcY]BΥ[*-%l? u8VvEge * ?j6ЙC~*dOӨӲѯ*vtN;8N'gvq;:Γ\(mR<\T .JֿqU+BΦ3ɳ5Up J0q ̠QK"ev'4):>[6ycU޹Av ZmA4h f&3l&4A6F;2|WoLJT')?PYsĺ?1d~WeSծ?!_Ĩխ95dsY>ItgMu[g4M7 iW/(_ &^ھ9Gf|' kgT[8`IJ-T CEU%]]~Џ3uIT{_Yiq5r\7sYk53 ]1Ů,oNwu*VLv|=m*W9+0-CCv8=7ҷAV HNl.ǕUEV^6Wi6:W*|kX.5+L𚀳c0Ʒ_11O-ܤEćO5Ёc"]gg[rFɽ42uF{`3b0v;+ӡr #*[oM-(4[]m|Y7aprU?pg+}nǣKsC("!S\6{04ix͈gNlhӲt'@΂4`.d˄\6dǣdup//^rp8^~.OCAj犯F<_[.>&p;ta`kwtmS"◠\v]®#H~){މn^wWgC K-o4oW' q 3 Gߙ.H;R9pۙ翃mGF>Ыn=:kH g^4}fy P"ʫWnS k` Nmj?VוĪSaiue,YahͤEӑpxB iK;(UU݌lAX. M B|ڕ5*Ց]mǼqL\\8p{=u4AeNw;І W 5@4kmn t{ַew.ed)A -Qa$%y)KfzSeewmiәQɦ8'lKw5R@y}Oti᩿?Z5kf Ry2} 3Mo 0giiB f@&l`b(L<&ƪySn@uk5䫯wȄFX&٤i4IFpbrH Ʒ@Ѫey ~KBtkubbXGLkv[5\Y.I"Pim&]D +LW/FWoZLG-yxOaLE8puDF^QW9mRf,v/Wne?/L"jþsI,Xw|\dade[`d_|&&ԑWM|ohfS)Ficjr_3h0֟#ZQ^#)lzUY_Kn"]J\F'5O9EfSY N&>Y^Uaabi=4K,|1,)GϓIuB9j7Y kߞw9WEU$zb=3C4O4J4^%;+AIh嗅 hձ(\Ğ& ز{G)PŁ!pE5D:Ko7 1wÅ%*fh4 Aq(&1_QV}1TQG[IRe'8~ V[4 v_.8GW u4CoXHPy$[ǦM{Ĝ}f΄}L(B_er]~"ߖRK~DH^ʹ)Y9'(f2aJ`nbw׻8CZ]Nl #QŅu!D"yklr^$c[l%\]zOQhr )ee7wTo>2EWH{rH^ ڷ5jЛFO::d^XTRhYӮ.:¼I2K0S .5ȴa 5Y}JSŠCpؠ(/5'E^ ߌx'آkr^#Uy6RUĞzņy5lK狧bËqw۴Q{r_+ȍge9;H}8jD"Ꞩۑ- uf}{O^je_ \ٯ O OS sQROnK&'V7&q"d1\LDU%dO 3D߂1f;Fc!ltV'ef%إhY:I_AnKy#a}w(ԍEdfb4T)[5c^ \ƾ:`ҍ qm`bi%&م-H]SgДt+aeY^K;8&ISχ^ #L7$S[[mbɧ#UE {Ľ]LWҹSh-J*COt+gSS)M(fr:G$;;$W=5/an,-WBz]SFWјh'+|R3 N 0t1uu8ePxsbpta9<Ķ!EcGqWbkŏ$`Jo#hnGُ KaŮ]FQԦi4"4*u.\KzSrN,9I *wȉIyB֙q򐲐VXi?f%.*N1FM~f-lCbb&#}QoaF1b%-\[T*M8}w!"hZ5#R5S4~&yIW}v|%|*v~Ĕ0%֍(u5!|?^2NDZUfNqj 6a$u;E&d';r^Su=z!t]R)kGTx.W]ߞ1l,"=ȶCDbHdcatt_M% \~t'H1F9^~dɉѧC}MeoËq_Gf[L}DXśԲ. r4Jg7~V53[ay$i67d G'K͋7Qeɩ_5f>i~TX~W*͆Ȓ=^ŝeev(ЏN'GI=$zHzq4m_W *I^IduFY~cɿvmO7K QY䮣鱱yXo$'X5Ĵt,,Q*%+CEGay?[53S53S,YeG٫S+ԍHH<4ƫJAh4 ~2LJ|r؎="O+R8e³*ؕgXjƫba 9=ʿynDw籱ɪ^K!(5kߖQF<3# {xߺr "r53W#fQK9:2;5Q/N"$ȋٍ{{/q̢a$Qjw^,w58O(~^'$eBpɢ4G(2_eٱ^ܑ=}CvWD7G9KS,CI|$vKŎ߇51A# 5%">V+2gBWƎOCxsӸ-0A3'/e&ϊO Np~RiHΨaE {P|l#ܜ} -cK1;>9|[剕۵G_=l,QʾIJ(qtCfe_z*ؗvPifififififififififW4v嬶dħ)Q)ߍqmDMDIo㽹&Z^JfQoUm~Ľ}?e[fƢ׏EQ^ʇ,A;% 6=( I;irH~G"M]9k$/"Jҙ%i"fŒ<i)Fo8>ՖYeYeYeYedU!em _J4H8{/";FIi4M&!0z*/*4J(DaxJGO%|ڬLj- .ɱ;ܡd6QEQEQEQE>|D"}~O=UB4Z?;2XNoN (s) T~~W.׹KG?iG_Xy=,'!LlԲrDv$YEvhj8^mHWL*=ASQrb;Y VJ'Z+#bt1:—#U"*񣿃!8s匳W5gEQCó#ELt?#Ut7ا켺3ڲQŧLOy>-n_E4!;ɍxk<5Cɱ򣿃!8//7̞Qxx+~5WM&‹)"atoasQM2N^Zl,O%璸 Li|(G:eyPr;2SKɘ^+d,lsq"56(VYe^mr53rFee?6oȼ"C%sEXhLq9JV}yf/Ǝ "唟:yGDݿeen892r?ND]e^mc:rT)YyX9_5YʕSAM$F,cQпDe|Ý,ĕy6Y},V-"M>D7y{ٲ,ctDqHJlL奔M(ҍ(S)'DyF̋ՍW &ᬯXȎcv? 221z,:{Y|YWUݒAu)=ccgTj-2k5Dgh9get[e*cJH+5ԊMr!߾ԨSR?:G*JZY^OvĬ7fĆN"6KQuE}Կͺ)YFM ZaYWVJTb{_\O*o⮄i@|}Q_}#6{"ܿc*l}!:_ʦYdGԉMeV{C8Y%NXr~5egBCwbb,iK_n{RO-ܖwdaEKFK ;J(%*)/c=.gGqNƑTD~d:(%w%vHɿ.4M&tbGQyjyߌHԍHԍHԍHԍHԆL~Gb;٨j5#{ܖrn;/%_:V85Ԗ:_eKV%s>%:*#+*W #}~YlE&l[!V[-ɲla5C(UZ:#KO7D{r΄I~$Y5D%$w17ۛxl57QŒyEFg3ј%|F ORN7;ŸfM Z)*KnHboɇ6'&9$zvp>$8v#iER4X)ᾇغebXo"Om"\B[S#_]Y)ıHVUS3ӑ'Fs/%$w17ۛrHRO)Yp C DQEQGRB210\vWɭcrxDQ=+0Nj$oEr".(DG\*%?bX--g QkSOQlX'<KnHboɇ6'&>8O%V`&{]F5ۡ百tt:_2#Rkb[gĦfrQD~oǞ`E/,6Ÿ$̼|5+Iu)Qu,jl=.9wT_ 2}} pJa"R.y}k,8)Őva,;CU14&$iے;a͉ɇG #F$4,;]J0 wһQԜu._Ue^V>LNۢs\ CJ%$)_謚K^mVS5YBn$el#c^<&{sbraU5>Q<DOC &blYd6%P8-R{`BݖeNSu-_/j,eYegF#*!.y̔4dcQ)Q9j- 2;L>:N' )jF&_ψ#'P o wl>?\_pe,D6#؞pM.ķ,8=dA1bc=y=1 d5; a;u(,.?.x/c҉%sb=$73=Ab fl>?\_p~D/H{ɱe؛Yp>wd&|Oa C$Y8<NT\ϑq IXLQlqosd87׽}Y齬? PlîN=X~;Y$\`idek,ij ZĖ^xגET"8+Tx%n?!*CiMFI3=,)ÇODݑPDdc]HO'' ƺu*?ٸ-y{F'4'"y4b`)Ô~UDA镋d|TY8icB"ӻ 딝4%%l*髲4^%NM-uTq_CZca'd.Yͫ'[e/nlnphAZY%V1y]$:al`!%+8ŕp[#e=,ķ(8M$Sԍ6^G1p={|sYz̻J*\Mo]you-UWC빉aKG,S1=#GM=?%I=BԳF.lCRR܏iBGV`93Xc/ӐpzG0tt!K%ƾC#|I|ra7[*RqLxot"˾Ӕ夜5~a2¶ɽ1(t?Q.,)Q Cc譍ywdv.L\7)YY<pet9Zz,Æ# E$'"11.Œ=yg"X'YN;#43MZ+،+8Xo.(Snyc}|]7Cw'%hj;f$x8OE,ǖ;cw'D1܎'-&yq_h\D^g.&OaɽLXS*! =Q%F-߁=.ۮq#.GrGmؤ?RП5bbj*bʲǞsEFǿ˩4,iZc򦯡(g!*Gɉ7.ыQ0pf4V܋>'(ESQ'SFO1GDk6CE[6[=^lA#yKr1R?#9ᾆ#Hn~ bh>bVk7]ه(3z՜DÓƧOt#%M)]ɼZ.hc'H7hRf>4bƜ28b_O Pؕyhgzg |MgN/nDa;j.[ ^}sD^{EXC݌:rB}F.Nf.>xԩĆ;wȢذ~ņ!^D!erIw ܮƔ<1+%bp].$NXxnlYaC\hVzlzc3WE$#]s~k=Y1vЭ_Рh=3'c<&)1"BbA׍c~1ʺlԇWa|&^h5uD8G"Q>irIVJ<xB᮹>$ϱͮɾXtEG,OD!zJ=CZ5Z5R^V5dh?hƖGOr2R.WiD$ǂpK&M)м>.4BiFXvYeYd\BˈyQQH҅QKfN18zYV\f/M+< $z֥NR![uD[e񏵁SɌB>D!eF~:ʋZ'i$Uvgb: qq1qN=&ۼUYC/\qpkKDǚ@᮷b/6k  v_+] (1ƼxEM~t9y+$4WER1c?ZUZަ']E(mj1<{]2d[^ _oTr("梄+KEѬ&ˢu v)vc EW\$}Eى]V3 onK$=Om Ur/mmF92(( qJ۰RlkԺ[RQTQ ]Jĕ(tG]O̔qv((+f=[=4$CXjD^3I ǬHIFч}"f 'HbJC}<U+}.QEQ]gPoT!=RW6Y_"X{WɱnK숷&/xlb2;=3} [!mܢTWb[4JʲE!kYdCH# pz,YKKĈd2{rxໂ~N,JWS/<5n슱*%*.CncKlMYt#zcQJ:$+u:NSÕnzvB_L{eB|}Y&,BN8&zgzc\:U0N; /(J^ei4Y]jL KUq_=C\IOREJgR}!Byabd2xDy:(qTJEHK4e0׉ l<׵Br[ $QEwM Y(%靟tcmWy60#xKc>NVT8M&cE Aibti]ʊ+%eg\XmCĆ4ePD6Oa gO8=h~YeYl/̱b^G!I%OZG#֑Hz=iDtvY~5VqYEPa@й4@Hԍhk5S-yVxf7[a}p ٓ#^"qQFcbIءCjfjeyG84HԍhLBkX8,z' /Ų#Ւe V`M (Cn5ԏ~I|c}yTY{v^V, DJEDWK󰰥<4pX-q{#qH[tq#=ᣊً,7R,!nÎVH\D7K{x0`,(ͥ%LxgmǬY=dzNƖacGZ bƙ88:}.ve7!n_&R+%n^Ɵdk59R>=lb*1!Dj~j\̆翅鎧&"Î`qKRJJ ؜:D0MPaKjYab9Z0$me`ꎥGrnMIO$/:,*]qq.k'mS/$NE1?c]X.T"cB8^N3%c'=T3'; ג,pLM3[ 34Kgλ1m7|kVu5E'o7َݨxQDUFD\)p8uYq!F+Q 8;G ,UO|%LxMƄ(pi2'Gq,K-On1;p~Oq=A;%P%arBo Q#sCȅB%]{o8YqՉF-ɨĉ!NpRTɥ%G<7;d:KD3J:_ \E yk/"]m[re *X7yq>j|e#ǒB=BGL˾:RN'nbʉ`ŘQx]lḥW;eic_"k.":qw^L{'~jUՎ$/o~ %ʄ2bqߏ.!?؄]V*M_Fq|.9A>p\jN()c^:K] nzt'+gDFB$LB=mۗ}y\2#qvX8T+xoRO7 %O:7(] /75І|u ntxoε,ʄH!ro q X?qvXI)*g8=Kl[eêYqSE稻e/ׁ]uA^wf cʄH,/)tfEnkf4 ߟ Go}u" b*1! )#5^_ŗ(F'M=z(OE=BV"R~?L1=I߄7!1~cd%^+]Ի;hO)W,=N|3(m^N.UqY=///,\5f.Õ>n.q+Sߓ+Îwd懜E${xﶼRV>V]om~&Q؞f&P袑Q IW/y1\),O^\&#bX+S1p%09~m6*ssz|%q' .ʊ4 Lk5er_%ѫl~"v%<612x5\YLBb>xkxRabZQRTnQqt'H^#K,\Xf6+ŕ)>GדK5Dˤ߰ݲ.t;Fjy_՚J(hGO%ʄ2b:(ۙXv&83ܟ.Kf~)^8lvȾU!E$,ONQ<:\C&!YY~ Iņ'3ņn5%ŒYrQ~y 41P$O"Bb..'`>9{#m6!bGr<|}и'~N%K'bKaF't75G||'v=i2L}ʼnjEIr%7'zV^VK:-YFiZ11h)JEXeo2%TTᰵ =zNdžE3K=9Bc[z嗜+C^̧$iKq]l ٲ,(kg~сЍ(QEca_d&u"!5?kH߱e}dN?靝z=XK_C"ϡ&k6L:QEQEQEQ\i{ ODd4=-~㎞RJK-,b*NRE52l*+ÿOH$XDq$ȷi١=4iY)R10 SrVuڢΉ.uc~z-4[A^4LSێ:zUl:.‹fe笚Ň/?M~&/\OCš4M.Vل7شjGՉ@c$mw-d9t)=/ήDEj]D%zt4kP$٧H-)XWv(ԏQzzHl΅:2*7Ο}tWabWh 8jmN_g/ӗ鿳D}3(–̗E7Hx^R ~Zg?S_L *{VLr *(M5VND~iu*dcЅ#tG脨HX'zL3I)W$^[gU7\nS,k-͍+kCUʼjM%r%w X|$!bľhX.]fĒ؇%ЗSҭc^N"mt) ~WצEOùrJ]HO{uBI%7"좌<掦Fr["/[=$cF4rE,% $Cl\YeЬlbceN4vY6IyQ+s5]<9MHpZ5PT,ؽ% ~阘]0F]\D:Qx?CTsp߁}MKr6J]O~gɼLn9$a߸ݟܶ;½Jy8 BZqwDFg!`1p 뻇l Y~gez=󁇒J4`q~mZ#8mS=CLxF+P1jľ)3OEY5YŸJ[䇓/l*C܊X?f.Klu$I qO3x,MP> yh_/2'%K?U~|R/n WNRY0#*0TqRi^ݷ }i2X?C]A8gB3\7͒'K˱em?qbºh7dcYJ+G~GI- )!G)'(ghq@{2[dgG_Y,,1t[Ţ (:}2rKb1e'o[+y)Vo†#~icaq+[\G+|xvLIb;IZ$x_鑒1TzS=ӿg҂?j-u1po dg=e2)gRLE2LQEe2LS(Bs1b ׯ4@{2k%GL^Hoe,7,ROsQHU7ÒCva~2%b!!)#Z5R?qԢq5@q] G(6IZb 9rEeyYY͗ryO8%^5]O4]GD.R1ežN~fJ [!Hҍ(9|W#ט$}n,qƻ*6(З+'4~ӠgFf}P5־SJݖ衝Kbyt)fOĎ梇džhe,PJ+K~i>^DYfj5#Z5YBEi+;/E"LeMdYR:dbYG&}5ƫZPۗ6BEYe_=eee)sYFIWBBYYbc4JgSJ+)MK_ĬZ)Qe"97Q5ƹFjFjFjFjFjFjFjFjFjFjFjFjFjFjEŕt|ztYeY|YeYe ;ߒ򢲲vS)ORΊhZu&LRϡвopsӉzq4#ӈW(8OFQj5FQj5FY}V^ZHEru(,[:i(QϨ-ο,EQв||YՕM2䢎j~ןLxr_i<6$b/aůk_P7aLEIa6<[ßl:隴g0߹dK|* /aN;$苿6u5jbV^R4񧈢JNYE1dLӣ_ǃ=LXбP. Kc["4rg5r*kZ"өwPP[M,I"8%9!q$%Ćtz1= Ex5.# h.>08V&T,GD"UrUe/dz W0#_nNJMl,y^mRtq|G\Jį!v+*(h1.CtV7Ԟݐc65c"-9vEN ьMvp4q~N)?V;1u $˯. yWʹZMf {}-lt1%b~Y`<ڴE W ҽFI۾/):Fbd!/vkftz5n/Ȁd{}']kOxxߖXOrM{w!~F:ػXGc %\^MWEwXpT.IW=b-'l}XE$7Ҽ<}F,Q~!~`﵁Dq~K0,b_¤߅G dݣ14줭mP<12TkF~QgF<|?{y[K%'d%yI宅+;fke9[cCCQ+#W؟G 01'x GX#e&`uB~eᯒP ~N?jcP0Ѩc[=TU!r/r C:F<⻜?{yXSR1;\\XM o\&+AnOx2Q m Nj7X/d];D11_씼ICfEf,B?{yX0d!DV]rWY1ja ~qظ{^p.3 l?CĸInQQ1$~?OR++/{fˈ7']⽼][e.OS*Y|#eөv'TF.NAG^8 {^?C9=?%:%=Giى=^LrZ.'gwx#yX =I{k̤5\Rhre~ě/BIņu$IZ.ggl 7V)~'ʊe䬨Ȏ+ec1CS~drk,א*Ѳ1LЛoY<#S)J'XqA03QqSHLL}׏gy{Q8V?}h}#F"S(}r:>[TM+$%E1ypW!zHJsį؟ߓTDZAfaɖpߙ~ [ ^=˪8~#vɉWtH&(sHdЂG$kq}9tA$97~gV. ehʋLЍYet:Ye,~J܋Tb4VĨvRC'CFň2hR-;_;~g/ObOeKRfYњ6,,,,,,|Y-l3)&<)"e0ˣn^8|D5oͱLԍ)d,f|K^jM~}YhJWѥYW5YYY_?梊ʊʊ+~=HԋEy"\وH`/ 5jf%k4DW1lOlLyKsՕ\Ìr$A3d?v٨NΧSOzNQEpkc";2܉-)xKVhexQW ^Zz:z'LO#J^59xt5hלeZ!."(o7NvM6auu~嚵QߒJ.V.*FR:eYxK o8.\k&y*]mfQ|{v|4CdŸsMZ(.fݑ)} >V\~>,/K5^MX| wly7C~>'Iro)EHc\ &BDG+^>gV5_rZ-Y#54)&G|/,IB;s,IS0]2x ߓo.Y? :"ЏL$(s䥥 .HnE[lݓߒ;xle|N\PPׁ5}2FNV%6i~N""$tEzK%CQy&FW^S-$n֖NCExJ(v4vF7z$Eٙǩ^݊2ZuWOO1 L,[ `"w6Gqɱ) K̐9<,e/m̿bka[Bfb◜x2/؏'bmܸ|7"e!+i q;!;.2 ;CꎌPx/q'nl2^C6"ű ^ hrY9G) $~&dg3X~(͆_F Q^[ ݔ h/uTVOaRrkFGlQO B~Ȣ_cz$jY*¹2kKr*mt~ ܌n'.ƬPgՒqY])wS )w䰻.̿NVe-Qe3}lFaFVBbgce{|^ H̏;"R7]b;v"̨9{eˎfWձOb+s3nQʎȓ!dVdlll6j$Et8۽OKfefC3}lQfj_>|{=xxb} D5WCr-V#1j$JŠfAbDgT RE%h2NvЫ aIFa܅;)a-ȒܢI$n;1@.{$[K64\rJS)e2K1ᕖH]AA._>wmq^,^$'$N롈l-c.]Q_ʆMʈR.IZ(ŠLiܥ' -˿i2z1z D}veLٵ̥fYfVefVe,̌Պ TĒIwnw2D^b9brbUGt)[Ggqt)mHűrIYyeOqT,dH(}~жVaȣ_H+ewr̈q ۿ-,^k(^<34MZ,)Xb""^-2jΔ=ȚH%26*b2ǖ(%f a!7sR]6,[Ē2<a ʜoq4?n[Ɇ#"z,lzwr]QNN規ӻʌXۡ+O!rhnLX~Ą}P$Ab[?pY?5; :1]7G2-`66yZ(ٖA&UvEx8""#6?2K|Gg2G6g>g$~Gd~G$~G&ss$92khl/ibXdS ,}$dIf5FrY-/ `SETy~E◓)eDVmYlȌR'X?0]}Byݑ=rNE2He2L[92t?pܹ|l[˜sV6e˨ l8ܞߺ,eFTeFTeFTY~bż|=VeEb)4se1mKaGqI5t]|xJVНYK.?98sq9e~_Tb%E Gf^cV2دVt_N囉ſ?Q߈6t%%f9T)pB'">#6w9iIjqlJyD(^1R:~, .ō;g7',[~썵)W6'6'6'6'6'6'6'6'6'6'6'6'6'6'6'6'6'6"{uM~[Ve;etw2Tcr1WӅX^MEubu1x۩3ԺɭK> I{ir9ק/ %Jw9>NW-ڏsveSr4MՖT~韦lMAYx.\#>2?a쇲 ,Xbŋ,Xbŋ hpވl*+KRL\cX̋U;)x}8S.\r˗$霩Pܕx.nN]b*K)SHG.2܊KoF-mOH~d=3.RСK*ؗOBN.:MnBd?k(w9Zf3v\hr2RΓNȫh/˨+wnlo_"t9zS_xZn(ʗ)S7O yNT-\N>/V YJ9qjb?a쇲=-JT3!܇ xM|58g_dD%Rqo,+Ycғ#Vv.Fd*_̜fCo;j)^WebRi] ܆˗._%!9r9,#';MIss<$BZIe7̨ĵ.){|d=^8ϲ\g)od=ce('OR\2#âJJh\3 jTF)X|2!ECJ-Jr(88 cOъ]-cSь7_SxܹrSM䐆R˗QIo.1ƾUF7#IfcN:H[iEhrUM_BM]h{|]Hg+cG;2DJ4WEOHM<{ ?̺\Iܧ54ORwEJnBE9uaU4vY~Xһrix}>`F*"(2.gBV[x/x,GR)RluedUjʈMA'rO1ʜ%Jt>tsGrw5ub<;(إG+.J[݋*r 2qt\K.Ģ$A~%Z_ :،rЛ#+;WxXWɫža+`6dqx.Tأर[,X^ cI]xlkƙ*ӫPnB EURJ̄]FTF\rFQEVTI\j:es!ϗ7 V]^Ñ畊tKwRE:YubV4u^j}9_b1OwSVWޅ;+\ff3"{)Д9L**q8z?&wy ycb?[ :*+R6U_ "M*vy8'%eN55(owg.RJiZvOOߣy*-_OvJ"gvZ,e-5ff O32MEj/jRZ2/ejy?8*!N&"Hܩ]eo#rşE*+;a5rc)m!NھI\R)ԻNyRYQRQwK\s_*i(/VC,hDe^W{ ϔWg 4qr)ovMr\qSV(Pyw3c1cVXYy5hHHHHHHHHHH2jn.%cĚ?(S)*<xp{%w{t2=Dr5߹r; 7Ql;#0\ʌmn/ٍ~VӮ3iUI±O[=K=(r9Tw.Xʋ"Ȳ2+)،n]!RNPdk~i9o[._ W̯;M+Ⱥ^6'ģb=Dmb߹)c)e,K9Ea$4cBXkH mlC{wKr|GG7-ą_y ]XwN\HU~ xV˕/vF**"בqgC؏D?9!wbPL]ݐo g]_XFraJJ6)ª,c7 uԴ}ڕv%9O|i+R^MxW[$8V8۲8> ݑO+^JߡG]Q蟗Ւ%՚yIl!!b\e\Գ,2̳55331uWb2FemP%{X[I ^v*=<2۸FBԔH358yeu$۲8> ݑJ˪3Y]9HRJ7~BߡG]Q蟐"JhݜNmHzpUvܨj?ě9hqB2,eFTdFQĶcqxd5s)lgfq;c4*hqC nOU8?V5}Dž}qÇ"%#Oݎv؉N.; {|%H{ ЈbR,.˾wJj;⾇^^HqVqaGvqTJ(Bo-qPՑlNhU"WKn{ bQ [}b|>2DRj|VSZcF(ʉC?bjU?q8IN4Lnd[D5xzcv{Or1saT8G,<6D|# Tv`еxK ؑ" ͙{V;+Ӕ]lgfqznN M<-'(SEf_2kKiyk_Ges✞TpDe]KYY% QJ-V4՟JЃbB1cVϠcĬJ6㝣Wv{Os5!!} $'rehݑX(CDv##ܫPRkqiaK srf.8ܳE-_ C-Hoj2,L}T}kԆ4+h%qŬs邑Ηi/&k;ȬpO3µLO.ѺSiyduۢ5/c}ze -)gӥEKtE߻ ^*nKqbF Ru$pH+/ɓ/Nw$6±WFBx-0؎|%߰YG ^$vq̬G+]?RZ3V]5qt'b%WB%?fKa i¥7*BϦ d-;t,^1f)9Iݓ2hWГZ hsCw+u6?O[J.-s)U6$瘔nr}'ƄƮ&28-nIu)a˅˗/G(Jp)l"[(򿃲FW&بnq~`d9fC"2#!j5rPˌQǡ5cxw{ ۹̰m|_W-r ެGt!" ֨8ehn%& Q~jSՆJ6-f^(Ӕ%o CVL{! Z!XojOU~*G4l<#'dR٫EL\]46au$%o؏G؋7%l#x2銻}+ov̆&ġ7# gr1rvE:j R%fp .ËX/[2_q;#VF6LS-5Y6Ѕ5 Zx2BXEٓ½yľ,[ \QXk\R2#Y9g-WJ=qV˗3<2߱,){aQ<ʰx2?r"2KJo= $$vܿk$':!,D{ܹvk do[&/oȉ6ud$9XUMk yelc+22$>ƥ"]r,Ɏ a؅4Eǡ4EG/nIf}*[O~T$JmbR,[*NX4UVP^FUUcPi/;:_nأS2C[*]7/[ LFMw^K~MV'9sbs"g^u{TGnϢNYBUY]y)`TYe[nĤbqo #~лm&*B*~U5hq OWER#%%ueIf}/b.h̬pZGRҕ'erWlˆ %5h7/OԝݱeFc1#"i،/O wO [DsNE)]cVpUF2=3זUHW,_GIY[rUAԑN#bг} O5zr۾߷RVX%ھSW㸙L̦R %ڌ>ca?2q#_D%yEgG&#q4*p\ )ь6AXny[N'fFY.wv٧+"˲͑d)ڒ%لnȍC b5-TTc+>k.)J0jO"%+-إVwzä Ĭ \*Dhl}]5c񱩬IQ"1QVX[jTvV!@mxql,Xб{K#ۮ] ^ t~Ms: T^(EOIԺ;.K*x AO~G67/Fi|Gyb\~ɱ),a{mٝOd\I9.¥Rft瘅E5uJYE[Լ͊*{xkb=.\ .\qmsݚԈznN׹exIb$$5tFr] ߣ2ة+r臿V},[ -cTR}.}~IYLRQfJNBؓfI\t$jH!Z' o5QbWdſRߵbpR=o):?G.EiRYVآ|'6Y4akؕX76%'$-WD\!CrGbd^~˷|i+&Kr&:+t܎ط\nG&Oc(r5sQ8d2!N94;BKr$DmիXn5}kY|TX^Wvܓ!}߹~Gn- weXl,[,^UA]ԠBQ)f#YtJ/nycEZ%Z%Z%Z'(d%b Qr,cg"\t_EFqG5 IѶm yU/ K s9~v8Џ'N,t~TR%NE99AGTW401V]$Rwv'әR[ۑ8H]8Čo%,T:vm -턶!+"Deg,[kKYߦƥ%}hS7wXp𒸕oT~w!,!y _Frb(%*-Qbӱ(FؕqLG(ܽ],.BԿv\ʘ1x7Zq+~{߱ ŷ+BDV2[|][oPdk˗3Hʅ&\̈́Wnŧ^%M-68eG-rQ9G,ds+I([he}vlPYkآٲ-FTeFT[+g-rG-r[7뱕$85_1}?l0#"1TOU[9g,Ȍ2M eM9tCgQ#sFysEQ?'f3 ;M&Ъ}(壖2UÒ,#4^&tgDsXU i}MT#SO[=#򳝍،KBcj]Txs3͙~!? SQ%U|34Fؚ}bS6lT9h壔:Lic; O$=XBIJOLlrK~۷[rw}," >bC]1rfs&/3#,2G2Bb“BwV#O쵺rT ،O bsVfh̬krrD^LarPQ>HXEۿR~آŰR_1lZb}JW}#r9!;(J62W1n{)ؔuT~o>#|g|=?OY.ӻ9Y3141TЋ]2%vJ54ԭTu2"5WK*&Fdn5l)xF9c2.7薄|m)]'w[ ğMd)qhz|^$>W}Mj;ҿa m{RvX6D$fOؖI;G"h/qզl.%$w짌7qvk[ɫ'nq9.++g,_z]moU|&7v!D71,[cnėfUaM]}%JNe {!KuOoVJH'*F O[x`(ZRsel=rCGB5=g{=X̷ʻU.ܞ]k~}}Ց]qh*§ )ʛŸE} pȨ[ {aۇU]v8^ OWun=iaQ`xF߉\JRTb[bO cnXòf=+oTTvlbMTN̥ÉÏmߗu2Ll=pO(IcU2̼ o_}Qv9wR}05#4]b? .{v x<*{*m7¯W66;CP-P{Oo ԊL۩X۱z5ۥx~zGo*ݖ1ۥu˳2N].]};KO~M YnmeX8fGl'žXByFoPհZmMwn݋cr^nk_]K]z|), n{w11m٧ة?S;;ఒ5haM$v{OٸĮ"khk"Aͥ;_Nػ߻ ˷Q|7n]*L >=un藩'd^j)zz!bɷR G X5Hwi+.MnEg/-Lsb[ۮ{/O~va|*[].oܒc-\򑚖inFfb ~o>&[c%wNF]v#V]I̻#̆Uw{ۮ{)퍼(=^Gy]]\5}[fK[ӠЪVCY3{3N6ָ9gtCTwxRZ}xxrU%߫z~u|*ۮ=-Ibǿ\Io!vWRabź e5eښ6䣓J9(䣒J9(-3Kce]Ʈ5,Xb[K4#mpN•)o`ȍ8lK?*k3vCw};߾F E^v-}J-S[߮ '\33332LlY- >UM ,$%[ՂuӍ8[bذsÕ?Ůʋdiv$Aӹ{<-ԏ%n}6`Y[9l y&d2!$-iˑː _b_%r1"m/-[^_)%IZ,XSB_퍱y žw/J722Ō[e]ZQYHt[2=doř$.\r#ѹ{k;Ԇ^ܿ»XgM$YQe2ns3333.\r-i9g4ٗa3/ef5%hFo2]RkMK23[9l "ӱl,X .v32˗.\r˗.\rSb[B7EKE)&d4hekBl˷,w-w!{k X,YEb:\PKÂ? .\~ _\r\ u|c$,Lٕ8{=h̶-K̍Y-+4.\ +csRTY55/ST'~XI3yG&#R;_O3:~]OI{w1رc+2[̬1FѐlExv?sGe}_Ȗ{T}MGruHp;|mX1r|,j 'PD]7~RIߢ*yRns̏ѝљ^-/nXK~ՙfefVCGީa/@ʗNTOhk //OVS/2O.yJYwQ͛a<ў3h&O| OSHT*2lrAd[ Ktر|,_T]9$$XӝeW+$:ػr˗Et]E伌BJcot{ K"Ӵ~_OR# [B]T=Kأ}Iֈ]*ZVdcHrvvK?P."Np_HIMJ5qHuiqVĶ[ EȰ۱'a } ȻӯNB\ԮuQiFOzcoCžX=7r;=K}U+ Gc߹[ґ{gq>lW)vE;#3d(3ޚ#RRb2؄Rb#zؤhb|,X|*FOaE QKW YcIrcS8MU^rSrߢ/+B277aͽ3}t{w2^QwvngwyS[ ߗr(oߜlItQ/;0sf%X?H£CI[ !#a+ 5xbJg-F:9G"-#.!t_lV=5XpFoݞW/*qtT/N!*48zRb7gkrݖJWܲ23+,-V/m.݄j^V]殆ql.$EYwں襷R6J'"<:[)lq;Ұ~AŰ޸K|7ESة&/N{Bs^/Ŭ#а asMR^+韤ZZhSW'Gr߈m2߈&!Juz2BDNLJC{_ DIfY_e̬39}ٕ}Wٕ}"f齋xo.lFԏLc߱r3-{}8Ħj/rX۩m^ST$ب(glj^&d/Y 6۔Ud]<\L^ŋ]N"5dZrvE)9o{a9e)7VMo1`CR{b[wˆ֥5Gnܶo"GbnCrqJݧ$*qЏRRe᧞¯ZRr%˳QYs;9u^'eٔdfIP-:F)"NȂӶY{`WRO%gTNs1rr֞ փX۩mُ-pxȫ>+ЦH9l.+= EF){_QKv8}14ykkcr5X?~ȎM[ ;"Jv*+oکSSP2N~JՕgcwYfӹ~*_bXJѬ'M 9oݧ/l'BdjI*/ tʾǍ-bD|l3S lGׅmű=SZrg)'g |{{V< CNkwpm𢱄2ά!eN=S=ߙG=#)\l)܍;[Or5~׆޶۹Sb/ ,S۪;v&/2[ 8;a21+9fw)zY!-o~|=*bal-Uo,}E'xu5ک.R?T [-}̼7ٗ2fJ2P]9T?rQʣsK*U/_94riC"?O!˝Ի4:mt1A>ȔӶjv#WN3V~ۦBFRŋ#Lo!ܩ+x۪;v% o.[ 8;aP>[ʬ{/ |=xI{Ե%N2܍8acE^<+a573+2%"zJZ#upcD/PLr$cq+c8ى6F~;* %'кd;6 Tv1Z%8^B94Pgs5l59sBjj>E!|%g^D(TW{f,h'$6)vuNJ)QfF$O|Qrabűӭű-bVlQd$ Wy-%<XmKrEXܧ<߹Wӂ#7.C—9+m՝ߊT[+8ڣY%{8Wꧪ!:PR{ #gw!|7uM$n\fw*l>wbRB)ԶŘ3ƍ 23"EnFe,Yv)KqRZDf%}kZ/2mbȲ-ѹl[cwrRwә35yvTGH].|SV!skMiq(l~>"}?ȅXTs$7},̬̆C*-ݩLR߳)9\onS۪KHsdSRŋ "gظCFHkC\Bm/oV/l6X]w+jnDJ7w7bT>ғN c`Cd׍kYȌ-oԝm ٝtgC9\R!TvLYb3+23dHRE˗.f/|l[ evjkq/BR|,_7m!{}6IJP"E\JsBq,Xbŋa~bŋ,Xo(&R31hY %˼,Xqb3ĴM ?DhiE7K_b._ Պ)we; ̌>j~ZGj~ZGj~ZGj~ZGj~ZGj~ZGj~ZGjjm ).j(qbŋ,[ cbŋ,XaDmֶ.hXnغ3"R]{|YblKko&sCBԱnTdFDdFDdFDd&DdFDdFDdFDdFH"dFDdFDdFDdFDdFE3##p]lGl2'#S88j_0%=]-о] \g?v-N6Bf]lee=e%v5ˡnárh)SIĔr~{];V7W);IX(Ժ1ۡq]ѝf$ɲ-u%D;l!OOM {]lGʞS{WE*y)X}ϫۡ+|#>ỶG42-1DY|a20EjJ_|*FEB6 "x=bJvw=J؏SqlS£#݄;]ƞx!J]7FxsNk932g-5}E%ߑ%*BCF_kB^h#ݖ|Z )E;hk~̧MGUVvb>UCHl2d#K] 7~m˩gW2D{2Uz܌= iW̧|ex؎ױ*6&!z5v_ J]_L  {2;y4=ӂfD3E{!;Hm,eFTe2,KGʨ/A z+׿PnBD>-n_$ ̇דZ,rou_ a"=!>UCnؾk239ܶ7ݫt%ou%Aj5t(caNW4 h\Llڕ#u#6?8S_2ܻBŰ#CL._~cNXia^w^D'R(ܕ/řY$*R=*F{z[/ʌd2 ̬̬̬̌圳!d2 FefVefR+ݰxX{yQ%AeOc+Evfe+KD [Hl‹i!W^9nI YDƚdvT]IV*e*ٽ>rD~)n/ݖQ6Zr;yW3#23#23#23#23c9f.ȳ6%ܿ)̨de2QQLʌeE~ĭI'crG1sFtfEnfFtsG1_^k"3~k_7r˗ev].\7)Vrrfrfrd#ݗ]ESq "W#AF(1ы%A-oŅ7b۲$iW$5b> 1BM˗._=ʔr꿻_]^k+.pO{*/*  ^w._rj)dhhf7١c/c[d}؛*d7~v3"Y%W"K-0.FuXQ+R_~?z>M[+B߇83R:/VT=ّ1qlF7Q!xKGmM]R7B"qN6XTV}h3Ft_d]W^ĵ},) YHc%aw};$J9i9g=fc-$_Dp<-iJW/ˊBB_gẊ$7q; H̉Jh,RVc]/ZFVaHȱaQ_ݒa!Z=#…LQt"ņiZS?I,ݓZxlu<#'tSY-KY,Z,%q+x)sdfFdeNW'1cXĔHĖ) hqw!QOl,#tZE{ FEB\ʯBcE+D|VVEFW2q)yةSB2x)JD]LhݲLіƈo>K2~FWƟm$))m淙,n_]v=bJaIKo#Y2{J]orS&K39|E_WtJиb9EIYi83b*M xxůqq߸U{2Q@VĭI]R'=O*pSZ)<3F5#nGOs!QKql"I܊)_BP~vq6CkR[S)lR%VܿBJV}걒Gks +aIkT+rNF7!?-\r\/!xox5J~x;bVߦ[ ؜xŋ|Ҍʜ4ՋœFoMj2ˢV̌$\r Eg(+97!űNdOJ3Et_Щ2TvN2:l,Z9hQ]9hP_=8?Gp?GpJP!1Q "2@Aaq0r#3BPRb`4Cs$Scp²5tDT?sX^ KgU.o0 ܽxUzިr_Zw-:#\Ts.A$ʓ4uA᱑)v@ZteZq 7}7\r^ESj&ȜG|ORd-C̭7>*jI@̏GZjHV-(L<995xC\L6Ԩd`vj훪61G)dWDYp;JdPdyUw Iݻ>^v5SSn&y4 T28k&FZ܂Є|J J+L^~n!G`ⴛ;-LP#ra7/HozgKm'`l+;a?Ed扪Aoa}U|+3\ȿ _O w\U!F?U:j^*,)2M%+¨!h^}[Sv2zzղP8K幦sO}cGHO39N 2#ipfeQSnh̪r-'Tf M&MV Mh3+r*A`פoSەsV4jTeyl!7)1DCC{b4o[Z2|Bs[#GZ,kOX-aQ8N2u{E. G+J{:4InМeVg@O!i\ KA 3d"xZ^-XJ'Z-NRDnitPy9W/XЦۖ҈ TŦ1|L\5d!25lAn3}+9۩%#^Ujž9i璈Ϸ9Ln/ЀF(̵ū^9fQ%zkMXm`K_:l6JA.=E8drvZCa|L䒘Zݥ{SMa$&6[ÊnM\Dw e<ȝv>Y\VHA#+'էN.)HI7t6s ḀHf`bKjx9kr5V^ SФ.vv:AYn,7&7TZ"CBG"jj*NB<aAidc>.d8*EðO-^hi͒wy;04*x/F&SRu9St6^'CDŐW$DF-x㒗=N=#̹ƁutP_]>H iˆ2.5wV_r9&2s\@-Ǿo(*T_>"zjxsCVbGcAJ;⸧ *"{adԹ[g uB>exUtKJvpۆZB{%i?>l<*b7+Q<ͻc^njp(1T̝D5 |A zT,9eV+璞j1uvgK$#[} Ƥ])HbUT@½R8)u>(Gi Sc 9gDo4hy&lAS$2S Dp8fUhͼL^t_×a,vD{&eYxײui=9/`lXH{6|jI}+c8czýhA7L5#ܩ?K/j#K3TX1s[ez%lGvNt<)b 2bhr Yjtwků!=ПfTo(,0ힹc' HϰKYnSp3qл=Y-_噢JGV:Z^H2m8 mE g4e#q˾;L\v4% nZtc5'BބN{BjN9i *Ogʛ /4 fp4B QlSa0LRV]UgU|MT d&LbQ8MZSnHek@UL9-WsQzTKd2b{4\)]8;Y:;?ZPɽg$qrD%$ѭ ?}v#c4. { ˎIo vlܑs.7pW}UUp[Wԫ9cFHPE=R`,Θ "k3Fk43F sq((.:FlDi:@*oG`JqiT2ҴahEimS`9L(\Uxeq36{ݱ]MѾG0R#6y'\ªw⯟nBl⪅ULP&U٤le>•WK[(>݉2.ёA9[/+"MG$׺8=}󅫭KΟi:jNx$G0m+NͰ!2MlJ*?(] tȳ'/M מNl*Ql}Ǚ!"%>ݽNC7a-m ff|0 srZ˜C8vs ϷPܐy,zeUhFdx&P{?-ȄKY>J\;a tUGh->Wn3y6!ę"pxU+>J{B(C;VQ]^-ka?dի hTľ 4 QI,GcϓNG_[p '%oy2fy+XfȅPQwn[^]Re]%f)=[p0$Yq  \vIO1lr8);X_Ǘ`aUNaK)a7ҧip^'-PUt?4"9.md^22yxlT]P8W$&LjչPlpD͸UbZ KWgQ>mԋQaDolM" jҦp<wc٫P_Ugdz-p*:^W.+Un !SQ/SI 3QuoaWxP6[&_m eU*ALQYӈHZvx1o!y_Gwv:hܴdG] )+H*d+LVby.aa3E$khBdd2TI*fD%YU7;,g|Sp(ngrv{8Di~w ˒)L-C޴㻓Jc:aV,wsU&]z@^l_p JME'?8Ur]zc*AxI;Q;JyʚJ)' s;b!L`P{n;4l IJr8&2hf蚸3U;h9mGXDŽQLyjt\mrU,FriP9Bi吿3IS%om6.*FnSdk.. OhJ(ƪ7/e:4NWyw* (;& tD|*B>mY+T<-?P^CETS5XZkUZyKg GGHD#t(ֻr sZ.8}#W<pZOd!ԧوoPL{(ugMuZ'։w^x4re[!4ܓ]s[⺣' L Nyj7n DdyVG;}mYRMEI8?.K;S-r}qR4#rLFS-r HTk5&j4Nmq<Vɠ H}h==d7 /.ⴺEQ{_I횲ޒ7&8=*};y[Ѵ!UzGOj{LMz8Zq+Sa䛮0?7]\^ C 6zJ_61#E57 t9J Z5!Yuf'i*&՝PR#B7)2P7ANs$g2$r`' g-6C.ɵ!r{{͖p e\E3OyYν"cy5N#A0R2y1U=#ᒙ=UT㳈-WfY֍pxV2Kz՗zMjOr=I/8?Ѕ!Q5(g ;Q0 fWn[gtW\bt*dye8H2C57q VgJ;l Ly1}e'V}TXo8)rh+fB#?]\!D)|ࡵf:,35MJjcʻ ..l6-wwV9^-8) aRQm󒀩!89 f|}&r>Fh^%6nh kt]&{Zyۑ?nfKʪr8&&+ʭ!Cq㳵'ȃ*$'Tqt°Z7Yd4kY76^9T6SW$Mr$OƿѷpVb<^';'!m zϢb޴I-Oa;Y.;lLqo޺N+B1d5&km_BgճElz~[??^/Vid'-tDE6)M✂h Mpm ܔz*wEamvf>`Zn'w-7g3ywТaw)+̙X Ch5ZYk<ְZkzJr"S%OTgdmĉ1\Y n)L0uZ,Vez:7+tQE #kS%>ܛDP_\6Zf4 SV*'Y?z6V/a|L2_±)uNl1_jY ӳPar*/tlQ$ygh2&7@:A Ngs!P07 vgvsi+BR5a+L3i*vUtѻO֗5B3*ǂcς TQErU\U\U\U\U\U\U\U\U]!O+aHJs.!8:, UIFȵ -зЉe@9fP;4r6Ajq4Lֵ#!rwg5"F +>C\S,6wy,O Z V:g! NkI Tk)K,亨?执=|GZn*JfP {ZSS2P+@%H^h(9uֺZ]kuֺZ]kuҚhfN"J$^+u1Nt@eFL-\"F^/$;ZՉ b5׬o[eޢ;Le,XD A{t%7Kì躲dRڬFrE#eb:fNb!l=\ȴQiܛkBXU*6ImgKg-㔢(師3rB?g|ܝFf~޺q9o+1CO^qra JEx2*]!N荹un:m ~e5Zmj3hY8Od 3}ɀj[U/]/]/]/]/]/]/]/]*ŊD!r*/tl=D'{N (O>B,+Uh7%TUMVѱGa~\x.1cʹvxx*H dtG>ڇlAlM79\3fwn#+S^^c$]R(꿪꿪k꿪kwdeeoOxlG.G` xt TAOCgL+&vNYQG8ݐ\ ͷ :5ss%QT;8&wG2:3TZmV(Wk쟢?WΩt絗:'GvצGmոnGI&[ h2;T^#w g%"Z7-;K~ Fd|fh_enR ܔ-:h>%VZP9-b9ljoqqCLh7Z-ZM;AQ*|9扢^LL1J-%HNZVZlB& ضY<{?l݂Sf/Vť5k ڊwlg`QEQ9jԔLh+*fZU8$Bkн#OtlC-1''U˭ THqrGLV ;t #  WV]qٴVv^hPzX Pdk|L>ZΜ;T^#wJo,嗪vو٩8چu]Af*䢮lUEZEZMrT2Lfs7Ẫ{ { 8@d'sm2S%GeK`QEri%J)T~2L@{,.r1w&qR$`el6-7-ۊ[ZmIb!q WU&@ظp1ǫqApTqՖR 5FbQ>IeZar*/tln"JF&IpᛡhqXx,kp?lŰ]],kja-uI:i>čƣu-'8vUTKUNe}l]<(nvJgzJ6|7CQ>ϽIGmD;߈@ێK.Vg!* dCNH^?~j N7$sd*wEa7#}ar*/tl1~y_$ Mv{d,q-l/9M$d\dfQٱ}rβ|贻JU>aiQ] jͤFK#pQkť,|ΖJ# N*QZJ|›'?Sf* BSXۚ%3Ȍ@N3H̦l&(1QbYu12p '\06qV bĈm^n;T^] cC yfmن9; c5@ * (ah8hzZ@}_zgF`PۃFǣvdwZLʪj[p1Z^VWFDiw$yfi #ӛת 6Yh8~$DP0mdצMuR~~_ 'Uo3澐)TDeIfuPKX@xF-mg݂n(ѱunAyԩL%7 V4/TKMZ1<-™;bh}SEswf癋MZasU ET y*EIS&Hfd_,eSz5TpMu]ܬf -,9Zw&HwHʘgtYr@+~TwЦ|y9WY扉G8XvDUKAV|0:,=gk Љܚu hUzI+g9(찤Muɶ-ֵ r;ZyCE~(+KE+CX&wU$Q8+n5AЇzE_\%z'9i9XT#ڎ߉'dsqNcoo;:/h -Y'R$SVq!4WChhNJr(u! KշPK2Ed}a/4;ZUAusMQ^~YL"Zp~ʞ :ðRt #-b9I蠳R"'vp'Yhb9)̜EF(pĜCLw,Y*6{x)"yh%nൖLs\xO:[鍒ہ^'j-"Jp!qUS-DzയwEoL@$EɀnI)gRT"dEMf:9߆qSoM]9`17L" ¶+l#*?2 tFOvGy@Pm tM09Zww{3BwW+#e5bͼ*qW8@ewY-E6+{*ڠ›!=>r/YX{֡~OF7l\ɤ\**?|gh`1ڤU4WkF%Nb}+&qW80=f#CNJ|Xp'2ȱMS[=Ud(AњnWjYcbe_ vg2Bq /tla|A4`٧>Ȧ Y{L@lTMUAF ^禣Dx]~:P79Zap͵Xe!@ܥxNöֿy䫀ZǟB-e4d$F|M!X'EXzz^P̽P̽P̽P̅tɭkfH&^~e^~e^~e^~e]ܒs+BzLmQϵzoaA)4 fvM77r Տ5X_U:WJU^_xjL.EGo{E2$i;9;! TP :!44Z~}/T1xRvi8Nt3==VSek5Kz,$`'yVMe_dK1>47U[|oc|[MKxom^I 6][|om^Jzm^Kշ -@w pmWgץp sUTFvЖ*F~ /9tW+zN+'MjPBW-0rغc@ «InH*:T 1_'DJhBeCmySfJ=cZޭ8̩6%/`*7%Y֝4De2œEWZ\T5C=E`E,^UU-=uJ8^p(\£wA>L70wwۥj^UzX Q=P+G=Z*<{ M.U+ 5ǂhjn2 Pa㊲Un! J U ܩJs Y Zr7 oFw)eYL7e $~7QH)R[E5Pc o؂<>7CVTδ۷V<.we ?qwvayf yIѾ ƶxtU-f#j~=Uhs cO3a?}j6 ka5+ҽr[Q~7{%(b|V\T7)vaĬ7:6S -#SL(GO&g˫h%}Psi`.q n1pYmkOjܨ1{^D`j$ -W'6a!!Dq,}+02T@K[q9~&b%{^ۦꓪѽ:$Gio?J]c *+"p ̍.'$昱70W)aZ,lpjineReBRadE V/9!o8^tw ~e l2V]G{=ix6<::Fhh,t,WFr_Ma3EE8`ߪ+Q|2̕ *ީ\W#QaNS|hPgHզ)lFiB$-5L&Mhm2z,JC,cѻwQ|GLv+ġ-Sbt.I:T&X*OuW7gʼn գ Q`oHn;)KUhI9i4Lͼ &Uz|fSb7~e8"Ǎ/K] z֙!d*Is cO3a?}da ,*TKgn2W9hn42CQ<-)[/}7BË[e5sPn.P|peJ'LED܃EUdBlְ _f橺RhE6}Q]sSLg~Zu%pIv; g Z7W$d..yLkGoq "{L SL,OV}d;\}W 0Z^Ͳ)xeTn3gC z6'-a |n.]':,AjF@1@aCk]35;8 -!o%;7)~[l;X{C{ٝ2֛"M0?ThqSS dtF1 M7Urd♕NҁMI_PlN׬;@N @_> NwV,I#`?t"7VטOu4#3x'Ys\7a% PgsY Kr`!Ep95Wx*PR;oN;m# G| m3W f9GmT?ʍI;GGf-F(Uܜo2Mӟlo12MΛca+M#{KL2*ޥ;e6#.; 'eu1-1?vvheTn3gC C.hr'&)ړw0* .+.:MHH'4]kg{+ZVQ3lk-?bR YN.@XP(\WHZWD'D7p oZ#AKnܝJ+'M3:LwLRF S}<7NbeizZK[SrSVͩ*C$‘Vi<)ۊfҠ~ȽM ~ j9'wbo? g{է}> Sf'Phpjt;XZ{aٝlR$"jC2 t_aۊ mw?qSi8-Jk'4ʼ՚^Ap; fqX=L^G(\£wA>L ?}ӳhKIaH~Nx% ZM7IVoy'L9&3ςq~NpݳFSpCF⴨T8YSC.InWL#x_ۜjtmp`Nn"#x?e ^F!=!:&xL-Uʚ*̦Oija%RU - W!39QUuUռ7 ?}>u?EE\;!|C zF֌ t*EiHky{C) NT-axӻ:Hmwٻ<4>J׳ =UWIm̪dc/Zٍe*k+M땻4dL2^mתp Կ~귐R~H4 |GOӦ%73M Fשu$u_Z,-VKNR㔱Q$ik@JOw)2DqMS䚿VQa8*\λf;_T=5J#V0MEC^E<mn%5OEgY 9ne ߂ #L?ߊs⋋%in+уdժ,i Z8Lx)A_JRT9g|n뤆7ڢ!?B2J,imQ ))E_edXG?Ix%- wla Eh )>{7~ -y)鶎AA3iΘVm۷QXĦ*2JubQ1V%6CYg r+շz~T-MsSOgmSkYPl7zy!ehCĬPP-2!Ţ8<,O~hbnwҕr5o%f?tO/[i &0{!?lfzQZ~[lFߒYT-TSjڴTXmޒSe1Ze8\ڝI]+8QpBS)E&KqEJ oPcn(^?mvyfH |3a@:S u'[nlWn{ NWWbrtʙe%kهe)÷/bW>(UN^pZ.;(7T17*y)P,2jגO?pN^9]xo49e=ܧ{Va?9 K~-%T8wY J9[G>َS$:؉CR𧂘vdK{;_Va]z#%jDA$tO?'͐<!5ƋSo&jBi_˿ӁA{"#Z H-*fW_5k}4u<qU6C]Dlb~o :|Az˜6ƁW;XI+L2q7+ gzR-[Y&Zx/J-6>,oɱh> BgXY%^O2f],Eg/r7W #'j.D_%Fk_SI_+y(,-S6J}cdF qP J@7h9qGA8D*8w٨,;h//;dB hwau1n]o[ czX&m؈Ee׫M\IrPYf@*Z$&rU' J~+%R%hЄΪy)E AۇA3+{e.ql_+y(#.vAKIQ;"l5f.*vDT8"k_.)wvؠm"Phڋ'~C: 39`:md3+AkF;rin4*nR:bHLʅrW%pWg1Zy yVz8EL<^jpUk|^Xa )-@Tk|jTsgwd(V(0bHtO)@dL&/%h݁Į7P1}~xum4xIrZs:Oqab " 8f|AV]2Y 0@ZxSVH2(~jwgA͸>ɒʫYֆJ7L߁ޤnQ պ@/RNQ?}ӳWs^9YOuInG{FSA f#db9 h3]ƹ̧mC1Rv_~.}tLn㫕Q% @^"fXC~12^d7VU)Kbjhò`.R$n̿% !"@uIUvK$Ew* X̽M 03Ry*w3p%*~S2N!H8rV9z3U8-pd8\H_wF\V]a}zj.9~L;9>}ۑux1jxQuq']4ֆ9,ٓ%S'eMDJۨp i=Y5/H&1 `N^9]xi8iJ~D)i~pc&'Ce=s 9OpM")[JU"nQmN8f .KљQ x<'a2ffKZ ܮO{7 M:!fB NwVa>G+OkuVrn3Nn#b/PHuj+9v1osXnP v*B_ꬷ[Vx*^%XrǼ:;S&|3l1p!`oețMqBz aJh:;; Mm=,*2X;.-d}\Mf WV|Y;_v' ]vp?Y9|QKlWY*l*HqqCy'8G耆[Q9(riey _!MLZnݛ,$/(4n' > N9k+›Z^lwg!^iOveO=6IM̓6lmo.*JQuXJ.>EzX1/sX9^/Z]! GDzV_ȍZ|BK<ޏEG?DUL)ăD_ȽD_ȿʿ*@?*Z= E! ""*EG?*^O}}ԍI-Ŀptn, էk2ĉL[t C(f 6%2DeNW?PW 6y+/]Y3J㊓iE3EC#&i!L2C'Cum2'2ɌZ8?D恀Q"`%ڴ/%e3~I%aޯ˯Mnp36C-kS]"S 7;:Fkv6Mc M`. اG*ߝꏘNfogH^a?^I@fd2A0I,wDu(>.2o5MC-7oqpv*O9&; ,VWvJUZ-b0Fiuy7țLؓrl&Ey\pQdb؊mcjP˚'8~JNtV'%j{GطI5f (be;N&' w#!st"bEH՘)esqvk(;(ĝ jr c^VZӊٓ>JN$W9P8; EU8HqQ[@E6J+~0.q/q7ڼ.!%=jRpgCdaIC`T%by/SzK^Kտz/V%/T%by/Sz)/^Kջzy-Gy*1K?zH7}N{̚7|7EH'ޮ!4*ߖN Sei3vۅ;2\h\7z -CdnYpJ $zG-(<L k!nWCoUˆo3M{MK\G}'4jo"'Rk@r o?RrߟDBxܽ⽳̭M&Rb |H -8mw0Cܽ\n2땑q[-G_gǹdWa܅2h9®+V'ZhFW N'ZmIf/nI)؈vg7`%+vO͘\w!j~L^һ6Zc~'>Hx2/G(UD웊ѣ)P ;|ŀ-HxZ"[i'r.;xm]cIT+gHڦLk*'7-kKT驭&BǸ-<TCV~dyInsS:Ω̂2S m#BL\{feq6} 94jOyNm ։OwU$&|o }ZFdeX:{AɹXS8&چ*eUM`"Y{>d׸DzVJfm/8ml6rcL05DN oSIn%8m Ki *;Γ*@pZ%N~y]C1Rm5&DҋsU68h<%Sc:ZRc9 GnV7tV.Smꩌ#F'707^vJ]:qC=U_VD() Ξ$\[1܈z6BU |k"}0lZ N5zLbWvBw}k!@<l?#)tWm$^hl }5U}6M'U67H#LZ._̨g[} w5L3kN!5}#~.q nх *ߊ0(P ##Bo6#n9dTan8*dd] ;|kC"8S)3O`3Jug3%tDMnMw T8B. 3U}7g ꀴ~PĴDFKKF)~ \ ٳ9Ni akR9tlNk2WVg1oMuu45^\TnvSi:bSīQNN<Wǵq]C`UcsOK{WSipevc#`ג'YY)ZE/>ܓ\GS&Pj %I{[RI zȮgu+~~60{ "A[&֞'+]牺uM|m#={F4 Cɠap.unMuum[/s/;~U;Z2%Hd\"Ls!ٗ:n3oW#̳T}sQɮ]#8:&?Ah>87C CB'FoH:m1o/9xmL+O]=EWso^:+q ~ah^@ޟ#|zmp}38&`Yho*ƠU x⍖M5[ONδz!RZ.N~~F۹A( uo-Æe ^T+"^չHJoZ*Q\ZAH&pτKS5*!~J*bW)ͼ+Cc-cU Uf\oq.-wg|F?5Ias꣺7;xS`!hn}r0̾'P.)"}X-Cyi+ŗc#vs"T8J0Δ)>gb9 feqR4ECy^5Xr pe8fkN Y(5W92`$Me;>Xb&A7߿m3cm7PY hl)cq4̛$!SgJHUhРh{9ߢ>oU>+h|W;B҆2^:z0f;E~|HXv_#Us &ދ~⺮ -ofͥW7'uMZ2YmmAL&7ԿrneurϷ$]-$])6+fl[#rD69;#KF >90`j&*hcB&ٝ9#q.RO묙&RNCfޛY Sп\X؄Dw4 BfuMM=ID:+W^Âr.dp e"="2tñI慡 o`DSV v!:'zy8ZDL?r$ն?7)1V Ml309ExJs.fðM6BagcwgCge;ӊB}41p`+nM[؆/HݝivAslˎ盚&ؕ{r6yf;2IV)2\;Q_ywZ9(xwv׉@7.&HFl]: % j}l3x:Hq+Du` (4G5JId9/YYެ.q)rk]F'pR}2t̯\ծ)D$)^}{?2f~e0g\ M Uk{sԠśEY~9֎ hw;9`ÈpFY24])ĉUCljtzySS &ŠyD*qEtTb:9sc"AIlIU42ZAtJ1 m|LX"ZLT`k],S4S} pޢZZ]I &xsk6{)j>hեP*2Q߱K4i;At=afᰞ*esD^Z5)&D5;݄!9v3.(89#B$eri iŠpآ|H1"} ~iq]tKi.嬥 wcinzu-ZPo}r%FV%犇nm my8^';|'fB[2G5dE |V(PޜIɒN6\KLL:^ w_]ߚkDFG4=%:w%Vڐ(5I2ӝřYmhZf6,FK6zAJcS9zCl]&"ui*bZwa*ndFzci^S$& n]DS?V~2 >"ue~Kc) s&TA79%KͰuw0[p>aUSE@2AFCkGFÚeKk̡F\N&84uʢAK-.Gzka Y'nտ̌Vo?1#M"spn)39E-Yl񮌓(pmiwh J(l\)ኲY:eilHuit#kJJ|d۴Ӹ99ҕ BCV[ٸ6_ߚyq5MsU|6?t[sKFAkI ;EZިdX.Dh;9)萞,ؐ(d|(.sQq؎bpqP(M1z33Dl5/$^"J["Ѿ(4\6h/whWD&LkN4v2싻Ndi8 6P/Y~O\;YLim,ߕRwr[7=oJ3I5q8(>D eH)PihD2#yL^Q{ͧ,܃RjByZ3LFX99zhOg´k^xR|p!J/vĬGe) 2꺘~*ȿ~^nf[(n຾qnZ ħWpէZۄX6HEl`Bt"erPKH?ESGEZqRN]JZ0<ƒjz,` !OꋬĜMj]9a?e6t(LsMssmx̫"bmMm&]۾[n4Ģ]7S\Le/phfj኉Yޭu4e5o6vG6 $ָ=S V9_J}V&u`sI ʳl]9n(MwT1%Tu[(Z{W+<6sfS\\0 PsDHy!Z1TB.*PYDzc5hC*Z*z;'%ST 7I8oi^wE4Y84lx&0]9 3:᳖!Hx6iJSgu&Z/識㊔;[emb-; t.]{`U:vOFwGyCJg'LZ.^ogќrI5%5)̫ᙎ*cFU)h[S&wdhz(xStx %9XFek;@T1璥o]l-Oiz\vA,pVf0^¤TS]yft#ZokNNCo Z; zVؑ9(G+nKW+@45ci/^EY{H?t<ɝ77&.ꌖE]V8)ZVӧ<બiœ+-jT:"ESc#e%i3; e-@MKe +JzPw˱ H7  q+S4jwTG00fm\ EptZU/P0~lBD:ײ҆s aU0 {hF0*}TIDlB~3 6}Y vji2S/s{0̅VAV;os^oLP7Ej1d 6SV,_8q ٖ#~c8N\btuQ"?+^ޖBj]fj)$9l)IS0. nOkF/ DF2~KٽێX0*heC,ՏG)Ѩ8 -8d>kŴ`bl$fSx3^!:d5, & Qնl65 X9da*=Ckw\6zO:іV!'n5IܴZ qHCԩnS\:!hIH{Nh ;=M٭@qtsƩ̴4" .4Xuܭ7EӿuQ>X&^B}]VN$ zDD|2EMcMf6m i8:ӸM~+C^WbC8^NJiԘKN#GTl%ۏ+_7Mٝ[3y>ܝ}449Huڋ귪*UULdvxl9 ƛ@jv҇5%LTqنU HK d178p)C`o,ȍM5, Bg HfMLHm@遭|,*vBdwiGrB̨lWFW5Gg-مYbz:.l,Qeg΢!1+}U!1uds(z|BI]1c2UI4uk<8tH]mݹu&!p@wFm 7mdeEǪgwT&z;3 -T4sf,gz0;UnF{Jj;svI'D>3׏hOc#}h7-((Vwr=bXj,fBhpݐ~ѻriځaFj1e5LJ%NJH\tT-U^w6IeW5H>*YoFmpF,SDDzg 􎋣-fn)#DTIimp9|3HD~1D#idc[KTeV쾒~e'Z6s| `/})ݹt: ThGYD `F#r7ALxtNWTuov~Wh` xLKcU7\S,.YOf2IQP~ѧ"&Bht^.pZ%GJ,7 X&3kyjU3}PkDGd`6 AS %0:Lޚ/ bNcHP2V_K\Y;8XP) '145Cǀ_`q46v%G9z7`vr]+WS#zM NaX~߶ 2޴L֐;-uެ+~ WvŮ XTϴd۝'F~c5*w:ۭ4ﳽU<(U`3){[s^jʵ7)!7G \rZM0PC谡QCXͅ8/7uksB1FݛX˳=+fbv[X_ k5 J!U~K ITcJS|4 (Tm1\#şH Π^BżL`v!L mvmʲnT3 $15pL){X,l5\Q'ۋUН (.>U8E]wd莹GLAfT> U  N{΢j]KP.m**,z͐)~[< b/;e؅8)ӴYVX$6&Sl&$ OnOa?Ee-~7Mix ޡĞa[Awʍ`F))B6E0(zk!Lь!qeF,2|V%R T3XR I7b7(OzEY5i<-/HN"pb=ity+E^//˻zZ@GGKDÉ_ Դ~5^xXʽgh>BM'*tB>CFPdHQ/k *&>!z6|(6OHW|KCUe1S!4be=x{({NcVh { TOϴHP='V)|>cOhxxjz=' ^xQ_~%jZ&iU<(ⵟhc6"\bgӋ൞4_p9*྽sOwoMJ["Y:c9)Ǫe$="5+XAjD^T)NDT0vܮzUk\KUKQQFiT~S/%f$GyE%OW*O { $|Л]]L=ԑE4cWշbյQdU8O|3oVc5НMc@r_E/(Õ&!7x+Fʉ,3-sM6Ca[ DRuܜ iRh`6KޯUwkzި*C*W ޮZ)caicY%M.KE-ucֺh*<呥':Wbq/yBpcLU7.7~;?:N\a:⭱/i^8C賭KpV8͕KC$Y2a)L5Y f3Y:L 蟢t.׸Ys 涒{e H6%嬵9{(y2ׯ%@&,U*'lDIF}VFV@nUiZ~R^*otRN*ccp!UQ!W71O dЭFn+i'8^3Yw!°\ȣ/|c$7dzxlF\rL/Z̩ ڋ]~`[߲ʴndJғVς')8n m؝,%RV}>9R#z%D{{ӫo̸vwF6bab7YtUCR.M0.>QWxvOH tٺዺ֌&գoGt VD:^ٙPt~L̃ՉxaT7H:HF#GқLb%m^ v)b{!M./aa: nh֚\ w-e78cL߸+O9$ʜo !' 8>EIG%1~`v+b Ο::Q.俠_/axQ(K.Edu]8+)9f櫔pfOqe)ͬ~%ɡS9ii Mo?-CvQ6Qj+b)y3FwtZ؋FMT٥Jgnm sFmxAI(p $ $[{8HYif!fBj5txwY:H2ۏ J: [sV!A̮ۜcC-eb/e*C $~ZYfsW]mo_ahop ։btjj*Qz1ůX:aNG;1Dv|E<%ٹ {`YrVSz5*F1˵Ix㝤&K\~-rJnS -7X}PpSvhڪ9$/=~&蝢 kU6pϘ81m7؟f< \# Vc/^7sjdwfɆg~o]y*d(!9x#  k|Dq+'-9<:,<0eˌ7pi3 ( /HѕgQX`Aq='Ԟglh;E7XKr`{ NIuSBKHBƮmMUyfO{k;۞y/p)R:U8^&nص{ E'`S{W?7*j/UCa۸\|>97 2Mg6aJ%F9%r9v%4Q풜M9trm`פq缚^ VcC ZQ Goyo%_ެFHO7cÖGF:[gr,?*G*nVFo ߺIcl,nSylQ"bvpnN]?Pѹ4p˫.I֝iW vȅY˷)[sq&a =MsmKDkyUiEqb86Z}$wcD|HF3&ٓ Z7q#Mt5@nHbJ.yոq[?^䴤ѹ$IRj"*fnB`NJo4Vf;G=abk~"!vpny"}{#99/ )xķ ^9xvdLfߕOHVi!IdMtMAbaq]tAnͣqiE#x͐{'EKt~w(5jϙH?8(^]2n*drGta- FVWLJercsܤ!,d?; ՛ORԺ:}g1vC,x8߽E)p{G{ #P;'7۞}+ނeӹq̹p0["+9lSn6g,۳و&O5i5^!s*O(NulrBaHGt-{X`]ZSxv1UWfsw$g6{C-(ܴ\_i(tw~#%>P\qq2&-w4ڬ4uMjF jYncoU ;/}c4˸M{n=[ͧ`;Sv;4Nfpu{ca=n$G+ ˵)ou2T; j$3v #vY98|Wz28n-!MK[%S~yŞ˪Fn7g- ⧈z)䧈[=ո.HUq7 o 'rowaNvuݯ:WQ5lCU!pN&goH4x*_lࢱD }ݕFqςy 㑨9M%U{f…bpƉ\|^I~u%>hx"\ZUy%k4G $+{mHIؠMT"e!kX)hL܈O|.s~;.jpZj7j7jUUoT{׬^/]^y/Z׽›S67⬼vJԼ.iِe5 TfqR @\9,S7DqNڄW\nT^J|lb #r.P#sY^ֺK1U#"\^[i0bգf(UT^V'.R'tSr#Z.07Ί]6[= h៛'#A;?Mf뽠(L]QP,[-JSv*UOd 5 _rWv7 rm'U"%8 =:ѿqV\2MEJ7Siϛ23yڦ/ {,+V EϡE|k>nQ2&e0[FؓJ ή{4-o4=j[C>j4R4ߨ"-̍nqܨX|W(fGMӔ&Tv.d+Moiq$WԯUm]Huj9*IZTy-@@ 0S M$lz^.zpiQ5[Uʢ<*1Q3*;`jrͤ'-&oZ,+FMSq'-(TZ)\TOxh˥:iʐ<ދ$ @Y78YmYm"kErQYMHF% ^,ܡ~*u9jU0P!hjp\crو9E!Tj CI rҥW$浂T" v2cf"rm5I*k*9T>*m7gE}'5ᦠ(d#dj V z$y۸zwmZcK o .V$ H lRaZ&O]؂33x zЋ*H CfWfWݘcCK+~I5 x;mBjVs(qR3rscyGŸuIޯ^*q^*[]V|j⚩çIU- \n7hdfw p3MnYXs^Jux pnӧr 8 Q? ۝NH.5Q]) RcJZ6 X?P-J7) ;B^%j7cKQKQ\Gjdl`*5I`Mpm6x2Fh9 r6fI)*v[k#x<\Ч}-"\6HmgH Y \R%jDW?kJR3?2Ūz\^c ~F;v~i)4#Zޭ!IתdMөRU^*GEN'^l-4[d/_VdfHE̬SDZ\7;w4,BDSZAnZZVl7ϟ ~ ։9̶P\x!o亸 ~x8:{N`n7":ԷqOc6:ʀ"|ק:ߧap-k{Xۚ$1D 69:5sJtV9nV솓|N9&s1TWaĎ2Su%<ϳ9ݓ J`B+EqNIUe2I\Ynq]*lV/ ?*&~\=Xqoeeq>㺘 UgiU3Rί': 4 -PL e=xvf!>oZ;C%3pFNQcs9(T}\`ү DLZ1F#U5Y>rtF ("NrZ/ wlq?DFMU@wFUK"̣2!}Ŋ:A6ںE|%rړl&rtOd>s9 .'O,, SuMKMtCwCu{[G}Ui+!w+Uoסd|Q?e:/ k#Y֫QTf2A7Z&DUZ+76kpD>ӱM," ̜{*MOc9;GqCj {bgv3ܴhs8;SKWmzWs osa5F-pnQ|O D>D'4i4)y5Oa[gzkN?t&7nT)ܔ3 X7SFbX ')2ٶWK[_}ϰmVU?U92%rfH7.\>TH,R0G}QuNټ uĚnNA7#}WVn?D['Mt^75b ?h4WĈ鸁>Tݢ yj->c+lys7rVW\j-EULJg!A&jY7r$%2[9fC/³U.ͩZWKUʌPr j\{CH9L)ܥ=8d<n45y+pZ߲Gn2wq)퐆6*rquWJ~/ZJh2|? $}묄\*X2wD$}ȁ D=lAV\4Cm$9~Ȑ=C|Bqi(ss]; ,u\"CX.tef7>Y/p IS*,˚x)4gc%핔g4]'Zw{TsJvo@bU.l܀ɶnA n3YUP6 xԫOGbD:cxPad=c(É!9'Cu2rֺ W+S59)"H VF I[#]K:.跳#)~I5|Jt6ra:^Qyʈ.fXAmMO꺱2Dr$ Ĕ/L=*_P{%"޲  9ae{7^9v !Δg.s`sB$ Ni:mCǂ%_-#ڇHd/'M<2n,ݬs~[֜A CMNGV5 /WID HB19 &J)&ޙ:@b6d*Bo{i6T`:D)R"Y=}MkF%"Z C)mRD&;5Xdz:`.S~91f+1ڗ4L&Y/?vBY)^EOD Me]C5;^z59bGʫQ2)?qtP{삍G5ҲLoEh4ar[mlP\x!o亸5 ~p6P 5z.;_<»*'bxiM ʋ%t%tjZV5 z^k^^^zu]EX_Q+pʟg~`;Ya_}xE^7GintL{dvR\gQupf'rwe{ ]9C9or0D{hEd;G<q+]cK]MJM@fyX5SmrpЯ"%Ǐs@UbzZ?\gZBx2$2ZOqT҇p;<&[p..н: ͒lfö]]nؖ3j]#84h?U;4̉*pe$ (Y?Mމh7)E"%J&o~E+ݕ5n73XBcN;ҹU]l_W'POmYآd'rTx_3Ov%4],k&2QUyiEMohr6*㟣/7 2]^vQ&_-x7rt'w%5r 6#\2JH,>-DZESUuy-d';Vvь+0̴8}Td/{OX6#VC[^jйhr漢rr hK'Y}Vbň3Vtpr"$h!D-愢|ճ+XG2 &xe\sbNc@N$Zocw o-25u%cCQD`w5j{H9`*pf@oS;%ddMW:4bJnDMqp[{o֋ўrFdQ?9Qh<RT9Ҝ?z~U@q*ꇉ*eʊR&#(fZQ:Td4BaGf{(Zq/주>'Id~/!S ̴2h\@jr>Z)lքG`:P&e^ avjjG+s\rީhiT%ꏉ Q$8!S?\ƟhQمTƔ/DfsxS8"K!`H*o9ϲM[ !IY]KeN.ֈi(P7D53"@uے't]"̢,NwS Td; 7+-?Z~O` xVa1Azm"&мdy N癊r ]^UjnZ#tdH_3: nܴ!1yO\h܀5d"txAZM(Fa^9-ngo[?r.W+d*mއ1r97L ]R87N1e:ir(Z%Ux*V\aZsVE=ʹ(=ԳX-r)޵bկVkeIحn_q̓­.x>x2gPb*oSVb4ة.YF$#\Lϛ-2 OϞK9dZ'+t>OܺQ0 z#Fh7˸+P"pC'qg'.Ƅ;`ZvP4%֒W ^P-gg't] /drXd[wbP瑜frh&gsfo9yL2p{H,R^(5$`2xdVEeQh-/̻+% \&7 eme䩛3"-fn[r~HNWfk+\V&:E~c9QT̨|Y6p'=pOR~IM)puO4k; l+]k$宵S0 rq]I,C8t꺅h{'H#zMU"4Z@=NIpr"xeZnDY꺈mo'eKeYkGN'2x)df ٲ{AZz+.U {Z'+2!~p$}SI6Y'GonGbAmUF0ݏ,:FhHҡwk# &g )mwkZ3dh!j2Ƈ%(@ܬT\25O#5̹jpzU:Ӏ2C7AIޛ qL2 䫥I㐇^J*f?ܮW_~K7ik~me0Pš *[rcG~qùYTx>9Z&LɃYߠS4h2嬯U+YQUWo'}VkT :ϑZC~vm m94/ROԯRբAXv bdM15-cpΞN9ͩT36vId[2dY[mb;T Ѣ۝FϢdVS7C/Wp^DlnU㪉I8-kު7H]'t]f#g/D^80m2dј]hI@;/2YJhd 1==K`I6Vҟw3nΖ=C%r O Έsrq2i[3zEW+nW5T#J`%Ng 5ο&vZ묖dDu Q,bR"iĸ4;I&A {KF+jqMaud.o%3֫O4չRY7-nTݐe.4"キ/L uw-'/GV*n3;<[g:_,墯YUSߓl2ygߒ83֒Y:^;\R8)2SN^&;9=Ê_R!T.0_* xB7br:!P2$U;imms\~Kޡh31d#rq@'`TJfj~.]aTSA װr`_揃UzT_5^-xhu2 pZj]U*z%T-TCwv'?*CaLsZULܷ-ȭrܪW*fL-*(u]c/B˚[ St_Ol}n){V=*^™keMS[V[Y0cw o.DL- 6't]IA8||Q(X|JBsNfRݷ ً\Wd>q?BVgNjTE78ܷy5եkG\OZkdb\U-N]\TëQc 5!@snBYWTR:n>lF/ńHZir+ϒި3)~Z:TU9vv7T.إʎ]U@ KxvWFԆsZoTUjZ>JBJW*2PeBxZ\X|׬QUT+tDX&g~MuPwU[赾9e^WMk}dP3{f,v~izXg=3*ߝS}(z֯ZZkWj^ֵz֯ZZkWj^ֵz֯ZZkWj^ֵz֯ZZkWjxDJ;BfWrJ*zW<)vIG @LߞsnrnI-j/W-+҄ iwa/V%Æ-gJ VBB媵VZ Z\UQkUjR$AJph Ab0AoL!f෫¡Z^>}媵Ur\W+r\W+r\ZU\"VZPy-Ud.ڗߙv]U\.tNJpWZW~W~W~S~W~W~W>W.KDW.9_ZY^[[yT+Y^wy-Uj-U6vF+j[\Qup-23*3Od$J~OICu z-w+uRoo\jUv[uUjY_<-UzWW2vJ^/pR w*MVY&Zk)MUYk-ezQ[RSW^Q}-;֖ un\qa'PK"r\W+r\W+r\W+MTcʫ^<𒘻&O7MR #A&/Z6*g0. Z/jB˹-isZ.gمwħZUχSUZ`n+2\Bx rU5w.;` G+>ȽO*+$[g)#yOj ã~Î*aoV!!zGCɲTc[̭(!fvM vp"w= jy*5U w*-6%p*ӊ&R6]pyU{_5 9- +6Fx_0Mcd\24g321w$S.R\Un TZ7 7CI+Q k7+|hߪ҈ /Igփ\MTyʱej.w2ZfwšCI@޽$UZkUj佶-pai+Z5ymnBz‡-I\7kwlE򜖍}VR߂gW, G&%V)7.5`U%ÌT vT=!DY?$I\] B*äUs,Uz*lIJh9p{dwiƷΕ*V3R|@2ǿUaJX)C^GUvG{ӹdkO%㒩01_{56si9\ek) J/H ZeWy*PhNǚwdTcςq>mZvʙq<Zjj@^jMx'2~]E܃qE5qj7wMׅd[BTO2 xA3`-uʨ5،#/ YhCqhyKH ȭdT}uECZ2 yr; M-Z.aw%YۆM&Ϛ+Gp N9  ̔=9̖; S2^Jf߅MJ˨)͛*W"˙-Q[Td|NZdl⯶0r~! $);rv*ntub$-Q ܴYwʭ1~ʽ#5V4Sd_!^/+GDT{^ i}jS@v\%<5_l\< _T؍icMWax%e[h;>՘n4o*>X& ^ߙzyDNWȪ_q D0`*T2j;ݐ}SCuܕٟ_?icLw ͙^K ۱WhʜhdBjf& he+#2Mqh*docn&Pm.T icd)M&*'7xuP,UP 7± k& `HzBდ^=<6g҆1a Ķ8l?7qC%b8k;ԟuN]`x+H:/Y>ՒnoUy)IvIo^ 2ӛܤ8-x.O7_qӁD`r9..7 L-l੘>Q6ޫI*yWOP%1+ʐOU9L K|H&[p ;1{ ʕ@\6> Z@j#<IpSqo$B&Al.Nn џ{?i{q mv'63]\<*$WKK-8)C&caJ\BV3SqL6lF>LZhp̙vae@ԉʧ6G%FRR,k9!v ' $Muq$ Vj9UѸl2hV[ sdMm70OFw'-8V?u`lĭʲUݰGr!1B'iJ"dn $QN6(g@0Ň6Dv:gu=Fh$I*p39owzGL,CF̩%;7a?xd'-2'>}K̳ MY֨\p\qFn *TSE o+sN Meו!]'%x"fF9# I67; ('̈p-2H%0brT)q {̚ 741n*%;nU̩'^y ҁ%T'uL*FgZ/irZ]&JEtJ|>bc019aȽ٧sG!C&C8 x2 k{b&ZpJw !$;vQ4@\$Zu>g-@O$?u;c?Z'c# 8OGrDS$4${v7#rR88 [5&42|bnTArS: k+Ն*ܪ3*8sf67<2҂V Iig1>0L8OpE3'yhS&-t6 3^F->ഺT gGy&u.Vmq>ӊla塤TݤU]WT+/l**j[]+Fe)8eꆨ"7Oc!iޜ8OpC-<(o܋pGjG-T%U- >qZkEfT4M CtS2 !mnjvgg61DM̕1;JUQM5!K/8s+MG?dC3@ZzGOTP ww%rnW^Ko ^.NΚw^nRO.9$5M&V9&TγTSuJM9&eتuNrE%!Ż^aPy)ed5McF9jo뱴G#yex"L)A{GE7 ~Us|axI9$MkZ?*P\eYaq봎y;jw%"} "B#/zm'387IsEЌFTmq;ݔOɐ[/OLUPYPuri`sΩܻ ݑSPoTH..>H4\6F#B&nI$.*TYbD*/=/t=Pk8gy[Y4q+N `n̋Z H{jpQ;ݗH?d/PLqN|EUM҆J_L{S_rph6RD1LzAUkkkR4Aaj1ܖGwқO\ r!CGޙ!C79%QLPUs:qS*rتwʽ4. {$SRoFΎ^5** eߙYmd.s Gѷ괜sr(/0eџ1p4Cmls#H\+dSy8\sUp Aj쏪:Rc <ʫmH D2D2r9 /L=m,<MxiMF<㖪au.z;TNe?$viTjTv'2{`E) n3#w{:V'Dy)n9A$6hq{"8t)PʺJ9Np^׍$`[ Zq'"Y9Sw'{&wJ#1ICo 6ϕU4G!q`BZ Y"PXnZ;/Tʩʽ*jϙ<307d+gO)DH7MlL-洺; ^/qeR_ȿ~. RyXVHyH)r 1 ocEN? xK~Xl7PZWZNqSf4&v2T5<ֻ|bJկlըN1;ݔfBbJ>L(e6 KA2F'L]kmΠ35-V~*U⮟%]n7(CL3$]Uf毟%Fir \,l<KZMZMTvB 5x*&JTRid-Vq] L`&ڋa Li 7.!'w-\TXFKp M.]ce@,J¾kh}^sȕ9di &IMIZ*sM688BgŪfG*AdbV1 ;ICbGww5U]gPKh#@Ѽp4y*IF}wZO w?~|(Z$`^(ӽYw^ѷPp-jvrOGU][gnT 5R6]&y:I-mHL}mU PZQ|JRR&T.84/G nodVQk9k[֠< URO&#Z $=7Lu>kL&95]ZQmzM(7Oqh ˯x6ΑwjXQÌsW%om\oX/koZE ӪЦeқ<CL^jWN#[̯Y>M* Q~Q>8UҴ"5܏"}+!Z^Ὣ<;)A>ɘ -nesq^F/pF}@+{|WhxŴ+D7de^R:TN')kc(x >,ۢq QGZwZ "ś8>ቒGaCfŋݪOǶ fߏF] B9-$6;#!⊵AC (` Z6NK< QahEφJV &q*̩Lj_ ։b,}4v&sآNK`~iRDpE=R t0{SRCxVA~G#C*bCbk9{JDN UƛeCj b2 ^呹NpUU͐TͥT!vaZ2PoZP嫂|U呰5gX7Yܴ0/U -0bISL7st8Ojl8bouqɈWU A D&k:!C)8#B\U(i RsZ'i fUj7j%ABiQ nيhMW\ WJ^tJ(Vm8fҭaWYAUm=e7^\K]r.JoTqZ{j~og 橑{]jfI+A6lCmPE{^gzl2fw3<&Mec={#(sMHAAƈCl(z8!I/yyQt=O,њl^q'Cg'ܧO 7P4rtSls/=K#q1LOgdxq2'\QcrS)9p`ݳqQH$L֍Ui8 x_Vȳޑ97墑R d/\r|xEx-l_%y-&XJ%\ٯH|q q5%TUߚpVoOZ^"")'"Oe}FXfC7lCC$z| ;}0IK֘W^BZ.# D T,Do9 lmGbH{Feýg7'۝) ge]ۂqQK dB~r@n"G%(I $1>fE!3pGg:jdLBU\Qϊ}MeE]S#-2$b`ONu^&,Ȕr9Or.CԨSqXS18I:sHD!Pg&4KbWKMj4f̍AKwղ1*v$v[-2Iƈf3?D1Vr(qCE;DAWj$U{{T-=ع0 d hgIMZ[à<.yA:.ڪ^֛*Ep9$૙tIU0u_#ƙhV>(厲&=϶'F@lUvIU\Vri4xih3ITmTWxxakZʲƆԗ"yxa_eq;}].!1AQaq 0@P`p?!7@GFɌD2~)x#iJ*kZ]43.ɯZozINrw'zwVtGGn_ @.i&ɻާ'2j^ `6w4Uk%x=aP^A;%>oVh=jP5Il#-} iAs2mVx"Xe=?^jD'oF5P>T\^JoaX<=NcD֖YdUf?.]R_.k9k-mq9#JF stCܹ^o[6ACP'> == ( rr@Bzqr'Wo6OUI4%ٱ(YU ڳ-Y5鼧כgCir(~blgU%K?RcOr\|5|uiez4ERs=L6^ SMБ#KWA$8v,>g>=}nw NЁ L;Q3`A WxQz<;p-È;r۴%j {-U]U[ЎƳ ItΚ"NiG4- $+ Z W״rvIcb괖D+CmB5&sz" 9D~lHl s*aB+ #D)KKZAcɳYy;EdfbLVf‡E3tau6a3-u~(ԣhp hl A]W/< Q O1ؖρ 懬eC]fg}[LHIH b"V2SB&k]cǀg:@[ MY~m*-l3B~rn @%%xq¸c7 gY!Ov}T/ru T_A1nGU/}aSLlorTT`T!C :.=(8(޳lKO2cr [I10PzE'tc 5}%G2rpY] hfcx2`;%Zc;"Q2Y/H hx)Z1c>eN@˼<uf700uGRM>l h-Љ͟)oiYNmWˋ}yܧutK8NX@tF˺-xv&WB3˓ c|:?YS9MJuo* W>jU1/ÞrupJ͂-jMvd ~BytQI~͌-xo;o(JwPkD:p ]ōiuE.βrN< diE#H:~+xwR[ViT偡c T6h%`.[Q!f&x cЈ%3@j-m"T"mt<L7\|'x_I,'\XGx7إUsrbTz^I!kR5fKYSa<X} By"fJQ72w,폇9no/rͮ.ev`Jǐ?rd?qEQA\ο+ V"7UᐶvOvGt q϶yRu򦯗"wSp~Lp=W!r@eRkxe~!)03Zmy-hrĦfe=W ׀C@6џPyzDPN+)7Qnl؞=9kKPz;ĵ'3&< $uxf5m˶mtcx(FevpP&(~_\7 yMDwG*Z.*1s9Fۡ+tg7L!RWXG=y}ǧɏwbCڸz"-bזv7àE |:Mu6?"f{1yz`MTg$ղԞslFB =p^q>9ehU  Vc7mE0eV#f /K<& sI Dbv?ysD^se B/#n^,%<<. "{Zz4OtfZN?" n;Ȯ:JMw_ .uWpbbUndbK4n;8:fSìk% yJV;^w49TgrG n;BTJZ(3b﷬QrzIJ{ScNJuk .bO?.4d`x Z6|yN@ن-<ͫ} jt wϛ.4hPPm^:1+oɺ-|q<9:(ۅXwPzsQk"}-vN]܌ySg,E@P98(]Io+:uY.8VdFG RJ*UGuN|3| x`:snݏ2 p9Y6"EOXuON5("2 UhB1,Ky)2+)FKsuX) _d!W>ԭ^K=.|B:N(ʃ JKM!FV٬t(J˳?`VHfaݒ&kr:6ϐn|7 7B#c ^(lNz/hSÙ[a+SZD@qj(lsQ[ UnEG7{Nfc}a,N?caP4<k|C,'YSh{GQoKwTih~tA'z,;ĥNH傭h0u LBh̛=-M/gy6:ZJ,0p RJzץzwYrAqnaOnx|XjfRpk i';i|C1wL#AWX! [;ul=r}vœ0bLf}8r.w~:@x#7T}B Ze伦jSRH{d}?P-irA*T\EƖbMTuT9pjerw! @RێFKc&)|4PmUc5]^ /6.׃7uXW>(OB[)h@udº Sʹ Du?e2}>rϝ(GsQoZ> x\աLhV u{L;UR;+/ Թ1PKWX#.Ѡ96yה%FKg视2^>Vu3WZDh,!ĺNYMSLP%pRQ\-=>_'I|/7Ffe)VK/ '-GH%C+xঽe=~,y|68_ !YrjX֣8r!``w “ŗ''CnѶVհ 쉎Bl]Si˩;L`h,7)󬼼$l60=*.]+Il Ѹ2`TjBp~ Լ,%8i`]1pchqZ<=jhpNX8ML/L5/oK:&wZS?r]S'}zTeԷlkZD(2: Kv zChM v% .l%t YI%t1ЯYt$ rB-)9 )Ȅғ6spOn:\٫;X'wD`:ˠx}(_Av=x ~DGDаy0xJۂ)m\m(fFGeGAWSKʯL@&p7b- . Hߩp0cIμt؏ 5Sj \2ȍ2Βc65A7ˆQ>47!>aC@=)n;5~?p |VS}Ӏ4#Z2j<Ld 3s=%b~֯oq,'T ck1Ѝ^rhM!%(P B(3+z&vRj#4x GgdY'g9:hqj B?na.wYsϣGg7!Φ}Z2-|\tNB~`*jnL6Jx`! ء&q)ŨB2 .]΄YhsK-ng)^gDrwy45*Wpk)brh c(J'U Ǭi5HkqV{tw} =zwx Ӈ}ԉNK3_%Y cCo&>G?g P;@ZRֽ4n R5+ȔW@){}c5(fHUAbnZn̄r޶ٵ3W #2g8 A h4ˑ9Nts_ YKu| -(!3c+YH5௨,pk`Ԉ}og\l̻k};}0a\azALѧ3̚Dh'~;YZpܝy| bb)J=%Q=fhzpk2;Cbh' ,h>-cY bT57f:D<ޑw`CP 䲢'>͢7:;ѕ,&h(Ռ&l-0N]QV)>Cj&L3d==y>4JՑB,)gf,C|9e(Uuڈu&1ǣv+}gPսu TKzj`GԋYl wJ݈z[ y]b9wr hG;T˖RejFӦDEcM:Lњ)4p؏RP\:s7^xB{Um 3&53YC{|* QI0m׬JC&nW~VUG=,iY_t4gG^jðYz% jprwz6?(}h*GyJi'&43,o꽴SE 5e@HiJAjvm6füR|~0 z[cx%FeGoA6E0QfcD)00T8q!v>zCu{7j|t;FHtb̴|';EVK;眴B\t1u)eH;o7ۥVLC`=:T ҧ\FesrzB"4ž\OQSЍlTw?ewL1+3&沩bݣI;~]6@ hAZF2 Z a:x_i|&wϤBM `/x\OU.?P`Ny~6=|X&n_ .e81MZeLz92mNO|PQӂ^.+lgq;M3li|'V^D]Sz FJh\=FLvn;e0>_93@c?k?]#IRKvҚwi_?KO6te3yG1Kk~fDVSm&XH:^(ZMv[Ӡpts?<n6 Y  >|Tz0,S_vSRF+ p l<lmgsw8:e cUhZѝ@Z"!?U,CXp:Up| hDd6=ɑf{C4g49?+ՙ.yx:z֟ P/;؊_T&4.%֐?v|Dpfvg^3u11_倭%Ɗ }rj~OFN3+-$?x596:n.loE߽cXTr~:lIs}'6<̶K[atm=ٛ6ņU~|}1P'7 M9N⩺ :,B-7PUkJpk| hnrڶRW Qycl ܧKF`-km1Y'cC/+8^&w/WWxy4E[$4F#C7eC.]+Q1R©i sDN+`ͯXU0S:M**tUrͫGN~[KvtCBm|jyJo[ o!W ý ԗb_<)4]d~]S\vS&әFw-i++|NɸR1V:'>4rސr%/%sinM(Z4irPѡ9l9 tquN6rw-9mkb(c}϶*;Dno#DG/ z;4]^V-.VjEE[Lk_ڬD1?o i߅d=r;aE3[Oy їZ>孰iud4B14 ڊbFh7|C.w*lTQ(6^UY֏9CuooA![-Mô^K|;EJYYbdmv!1u+sD`scx]*ە~ &`W;"zT32's SzWghuG+Xk+] 璾8;}YkLCh1|c-i3gC:{@ƐR @8 ]INLPǜ4tLCnm,P6HfPrݳGP@9f(Q}]DwpDDN?}H4\=w#ı;>[yS{s_P{NXɧMWi{?S7ajLq&yH/plle1sRgFSioh=~zRWtz~w;rh~0C1-pnq%Z[P(p b5\[,")5,ȳ;YR-<+꺖v+p7Ts `Qj/yg9Kt:^&/ t ,_8,iـA<).?cҚW6 ?1W2Ka@hQjͳy9;.O_ P}3Ŕ}]x`xS)aaCV.\i%ZQ9_$# ̂%]m#@1 _H\V 8.bԻHgMlx/z-?"{t;#ѽ:Cl gj{/rI_䴵|*NJ{cm)K-÷]8Ұ?_|_m w|9tUp6no- 7`[լv|Zdbv=gI[Cv'eΨe=0=AƾycµDw&e:)P[py [9qwB-݈1`_sԊi,+VynD8 =ΡL)BedzkW@m@hՃ+FM[+ɪMz hHH{> AY~N O88WhFДV-Yp)YqsYda7%cĉZ9^(9MϷHzCpkN{3ո %IZם!ЭeV*:9ϭ<`Ҷ@-1]'6O9>r|l 's sʑ\|MJ]=`W;Vl xK=4\zKQbωM_(*"ZaAM"K|.?GFwv! p7G;ۃ9$ %^4UobV_b5]#xM0Ngy(?SeG8qq2!1&/#˚yu<{fv:É (~tΠL'8B-&iKK&UK# 0,蘱_enz +YjT4dOjS> Cphaֆ(jNwКfµrYcSq,!$ݱtZ:_]?`UG1 :d^s lpsּzWO8^c='eA,Y@X0 a9-5y't>{Dg6?$`זZmaB fx,|^Hq%X;̘R"}նTy^ ]bGu:>3u[;26c0Q* ~#6Pa R{GYˮ-{}BA,([xRY1TW%W%W%W%W%W%W%W%W%RMYI7SHi̺AIwG-%q1de>8qtM? _)xJRSͨrU^jQ$ڸ|8zk^Uk=ik[湓广F1;{K Xb mP-]F~aǓƾΫc;@!e"`˜u0&=N #c[B(5PF,q!Č% sR d(uzLeI]L@fRbŗ.\<(^IPp6j zƑ%BՐ~4p'Yx%NO}8q2Ak*kuT{2Ѻx)΃t='A:IzNt='A:IzN(01JP/j״oS-7PT؍4/y£k:s,o7 -)ɖ=P%US$_[ϑ*1{P-uɎ:מ=y^ LQa!GO҈/ۼ0;fǞk깓>y]B'IALM(q殂N>d4SSB?1¾ռ!B!(=b@[yr7uB!/c1ONfo'k5R/rIV"eHŋ.\p`,}ZgZnT9M"D!cC"鹫wGJgNLu}x=B۴JJJJJJJJ /qg'>rU:hw~/DY7(U nhΤ @蔗7A 1;7cDo8s]cWun*0vtv !ey+) j>k>[&kfWx59걽AԂVLPWPYNK.g9&`-W,+Im:aJuVJ:]!ߙhӄu7,oIgZt)w<trB!BXl Ɯ '"늡1(8MPv%lr'kR%c%wn|;~"!B̒%G!*Ӊ IXk-->,9ʕZe?m̕v#$!C<5xx,|8Qj_u s!6*G\˪\rdFƱX(QX^AL/Vr}!VZ+X_s_MÚ؂hB!lM/X54W!uƍ$+UeXkh+Wh"ۗM~[ zqE%z?5̟- Ca]$1>- =(~G2PF`>X!L C9P {5\%wFBƜ.t/PzWQy8jL{sJVkx  ] 짴{B=[}"gd{6qXB4l! K k$(鐁XL]կQ c+qa#Pʵ#qC9N.j9;;a8uRtek,x V;CB]hFMjucJ-O/R"ns=׌AT"@,u~I!OЌxrHpZ $>ӭqFVE½"-H%J/n.Ye+6%ʥkCA}ϠOXe>^(jYa*\?Ȕ:~&5bN#.Xg&&07ioTO)5R;ҺKZ ]`TQQ$? S\Z#>@M9rf!oiM#5p-'~c=]!408z?5̟-Q'-ָ)J}FM]h%F 5 ї U~ʫ*5c֛}AXBN{?+[ېw!F<d8A'ygN(j3Tf-Дܙ%e2r$R@] 8cI0 i1}śK*AL^%1Ֆf&B?Yzl݋|ߑh4*?KNYT<U/jYXt}FZ:G +}x ^9Cl,֘vAKJХIy^sv._ymnoy]@U{(*uRx]Ե4WVdO%`4a٧]?湓广C_鱥/ϟִ<=xe:SY3:-5:¹FzLP BܺԣAf'x8ǁBhr]b)5!$q} <WS d.p nAp-&9^L.kAcK{fsjC/j1Nӓ 6cD=%`˘ nxSZ*%^QpƳFjjcOn x5+tĔfsWrL=īx)|5n%SV&=wT}y3Aͼ9Ftpʘ+>8sS);bK|z~ĸCy5h h]z?5̟-Lmkq}uvbNE[_=wuc=5(YnZ9J>k4KK՛GוBzޟ]I,w8!3 8lbp!le$p8h74%[Ӝn?w@hitb"Xa`f$a@&`o*0`W,X0}Su[DkufFeQm1e%G&V(e :cI'NMQVe WR^bħ"-f w[QW(tW:;-J_w%'xt>giFGf*:&4>jP]º9y{8We@Nw'k+d@ER'Ch^]?湓广qـ%<!<M~&9(ޯfҙq%fr<ŸI-/\אiN~_EYGEU5sozBȗ#wѦXn9ɌbDAi}>non,'Al.0/CoZ82PKIj*kyLXh;sa^,`A}k$s3"`\rŋ,`OKb!Ϟ@9YKM?ȶʥ$7QգUCe/ƒx` y¿ 6f9+';3b0w0( aĜ`meAԾ]cDv9\ r'S xiAKXS֞,C _&!z=w WCXjz:ٕML V㾟IIe.lpʷcۈ4uk^j~ŦzAJ%&O9Tʇ:ICS׬cP^MqP%Ԁ `HSbݦR,`npO gevmhYEXJamNl'mb@:CFk2˗.\qbdKABS73-ʠŻDS[GA"_AyK։{ml_C/[C=L;hnp;gli\B Ǿɲ)sj⡓c^qmJ% ZVkVzllMzMCQq ROYL7ɧ{ypsu,]p>[xol u|n#@˧Are,"+s O!_"pxY6;4|5L G(,ok9]᧷x yj2PԉT Yӟ f!<.apo{B'/zFj2 s+ypakga/ci#PyƯaBdaWx/6YR :)@ :@* o0ʕ+FKG{-mmv*KG|Ѓ3Ne\ "?A0%?Є^h|y 5IyB^ymezʋsA{CC4'`GwK#e/b "q&ga 5&C$( rg ߻/G6]>"j,q@Sbg == Y.}0uT)]&Z5dΎw68^Uo!J$|wE]v'\;GF|윖?/E@ 4bsmY/NsG؝<;K"\fq}Ѫ4yBBSRFv=פ0-&~hAM`eN?u{SSSSSSSSSQSpաxh+ vqpXQ]NueӺ}'={y,Y=vob'd;?ꍳ(ۊ.Ta:DoCts+OS cJљ94aC:c)+fI%+H$[jotY7Ժ $MXѵIdBZy}fe@6t a~JN3U5lǴKR>_ĚoKOFjD蔔)(n]\š6e%pVj[{؏b?G#؏b?G#؏b.lx4>P  ]Ihi|2iB.IL%}<Ɩdj{3Lq_˯w;[nWlubVvK²aρOOOOOOOK mZTZUIFK&2^ּVOG P[rK3BXv4LLnsȍs>.J奇c8"h)9L@d]p4S<4ieeDY 1.`2qzfRZ.O,?Ɨq%s\30J4w4t5>7GIEAf62l2^4@: xA&g?j-}dUݕyNM=^33Uu׺h]@Pew?uŁe[ʏD[xRSuz<僱.T#=i'u{BwHSʼn.jyzGIV~h`8u1֝(/YhVha=ItquM_BqNt?yuq։mxh[t'Oug4Ԁ`Z_ػІ>b [r.Cfn_QG> j`Žfo [5 詪GUᖎɹ #TFO9q1ϒU 蟂 Av 0;|e&Oم+Đ}k>h%_[c_:l0 Gֽyuw95u*-Ccr6]Y1<JgUK`a=ItquM_Bq@ugck+b@GВʜt%7~t~ˁvUkr1))QSH"Emz⃰-nsbVdPSϊ45+7g"^%*1b+"ЗA3X3^$D:?ўC ;,ʣ.BUcґ!GjD=򝨺ˤ ӱ@oڳ;epxla"j `Px~ 1xiet~p03Iºڄ~ʘ?I!9[Lw=J^~:DF DßF:dLnoID(4 _{'Tl)Q4ܓ$!/.!`ܕ/^rYQ7n;Èz_~륪=߶iQ:8>CjD地xi S0\݂kl)I980fs2_.Ҡ| #iTQrB 1g)ejq֓1nXKsv2Դ%C/W7\5WՉ2;U*y茰-JK&|db!OaDAUw~'ӌ;#T00'Ϧ }ˌԗOT/?`9+Aoyn>A:&KDv@" "8rSKW~9QJ\[d=ON[y |rWsI}⒜xqDlbeh>R(A_~Gf*79k,նL `΂HD69Gl9Uhp04=[4eǛ@mNt2PqK'JY?O-=Tƛr6OSήaot;Wh Pe`l2y@ B5VXҀZNA nIWJkYG?V3Y?y-Aqh@ʳ:4ɱOq^A? # pO7x,lxOgy>jKۋjxSM<(>l?ŎA:$Gz\r nU+#|jv=OJ U>Jt)1IwD9Yzc(hBr5Bb+{.TU " nꀪ\t'yWoB O8ΘGz ٴ.C?DVHfݖl|%p ÀoaK#X-AhU /o ~j<_9>撬rA't?NSp _xODxs*!3L|/F:QGPV#7:!(ijJ*>u-JQYzhˬҲI! $ է:#ljJ: RW*)zŋJG_vED}%`ƼQ+Xlb!HyRVE!vTۅC1/cBXlf_4Nd:\f3*+{1zM".N*7Ao CWM~u5i ^; wo}Z0Y욊;bj#/.jg eOM=#_.n.NC|8 pDZL@$ܙarTTh]hoRAs[feK\'%6r r5GL}߆i~y}7ͱJ9}rivMʗkTg] |S^xT 9JG/ :Dco;4CHZֿ ;,{?sO(6{L~by[Rss0󔡝/K_ЩX7tל܎p̝ScvL7a_,B|TT_Sr4lײX:~]C 4́@?HZ'/xx_BYNa0NlU$wA*x[ٗzϠu+,rh{ 7z&tG}767f`"Be~7{f ?iWs]M+͊Eykh+^@-,pM;0mb *L׊ jShg6@@ RE2eYns_Vp6wq]w6\0aW4CO Nne:Kp+6'iҥ/)ɝig?Ib^_h ^M;LUmM\Ū~԰A$JZ}3}) 7 菋/X,]`ɬ"h#܌܍otgv̋4Ft/Ȼ0RA(®M0.厍wML5[ pEd/(ЇғBU_.Zo1S9 na\sb2>Lgm=M7&x塣v~W/tsRnUܥa/ R]TD/%u}oLcI6.ah~Oxy9}Ve+tl~<r_Pk"žAi@H&kayf HoצfI(P 2ڱlB91?N[cR QA囯'39XhFY Yvfhg4+fXԶ* LI7c?\}_38d_ Yt9-YJe3 |g߆i~MW.ȶeG.dO5ptJ9@X.QRXrgn{!Eq="Rdb>kU<+I<f;C0<{lc4yEuʹz˅0>.s۽q5<Bbhq5+< ^;J 5Ip,"vM/= 6!C*ieSY2jCҊqc=Gjz>[.yIye;{|{@ⵕ?sϩDmgҖuis_x֩kU0l4<}s=S~|wyseF/կx | Ժ1z1-*"ẐwY™7*/,edMd2ȴ;fSBBaitp n[0U\>whgZZ+t&߁tc?\}_XU^ [\ `P7~}?{yTl)̖6v&15gz7T!UC+}PoᎨQyO;&N5GY&HN#$.HmX5fWV21&JԀDCO Mu8xYǀMIC%Cr|Y?I%"ty2v%cro|ì${OVRM,k+ZFRx`ڋYD;yHY~+Ⱦⵆv+}jmvaz_k+`}ŸX赂-}+I/X">Αم%fŢJ[XZeh> <')P{<6P ҬJJTī~g` :9`) iQ 7cf8FY'ޭyMPw]XZ :IΎKPj:qCOi&߁tc?\}dp%5\'dexarW r(wz_G9 C%K08l4&:Jdte8\ƣͰtI#99&So+^ˮu@R!ct: *@a2!̾3tW#zn Վ9E2_ƌu_*q<ɇm3D ġ?6]ްP}eZ`hnSӑN}eCfkʦ{6GG}|^۷']j7,dv{GK33%՛+MUx] !G&, B@լiXyWzC{BRH2d}u$M[e5I}T*ye6yNh:)0N|8ϡ'zC1>^I(h8ه0Nv݀A@ oz_GM26uYC;Y7 x i5&J!61E|~>[[ L,bFW'v6 ]%YRIuP\4lrխbB-1]gĦ7m %p2*޳B KYNdLKT(W^Y8z(|= |9W&R nEܯ4 A4]DVyu g K]pZ-Vxba<=W;Kxٯ$܊=R ix?܃qɲtU c']I7i)SKx(% aֵ۬|cw ,ϼ~y4GϫX -,U 'Fƒ;/nÀ} PAahoX=,GyuF 發5&ƲPQ\{ )%F0Tk>AD`/ϜPhiCk9WW?8%|׮!JUޜJ띈 f&muOh6[H@WXfW>?~OBh{F{ԩQBez󨼠O*Qڠn̑a7nI8<* gG`i`cM sHfnjcКBm"Ї3^ )ˌWve0l9NKNc|G(mNNvōoZ*!6m]!N˛x$b}4fAц;diۅ: x#n<*4-{9#(ѲSuغ$4t49KHj@@"<'],. 7_w/_k.W,m/Iܽ` /e'X,]zǞo_h|5NHiR`eن^jub,w)i\9٩5t=Os84syjoS,r~Եl׬Iqdqlt4 aσRd^{\Xtc+^_Qmr^`Y! /@ж%qXo,n<`tH_45VU4HX8[7gCÜ(IyXĮ)ό~`<wlGP/=n?z=H/K55eEWH) T29exLR {(; G# (įƳ^ɬX({949mM;EL7`:ϓiGjt-_Tj|ACt8B' 6 #=dus*HtZ $iFl5%J<6323Ӻ(*Էkd[Ã\@߇q71 jq4hQ;+&F~.=Ȼ~vѲύ'^+x(E69}c)?p X氩n߸pI/jJT4זr1`;o5*i,UJoq{L߹`0(}(pj~ u6/*VnSgN_HlDses^W7ۼ99"knG䘰!c.OK,X?tKنH"_Hۍ=K30\ o@jˡMGYޢ7>?&FŭmZjyU -eZD9*Ķ'X*9Â(рJ\UG<}QO'qjn:wqKj\w!EۇslYtZ]Ot iܝ'CvǝM,5i d6|"̓Pئ襛tg!OԜO@OtW%B࿾bQ'+GP 5GDm:fìi"h`#hTQghA:Hyg> vkA}d*v{5*>o2ㄲI0dk΂إG]PVY5PaD{2\(Q43]?3#vx\PZ!06>~R~:MKywboFU߲h]qzK̟H4T/+9sb eg s]&D[OPKKt, uAUQ=!NG>Z)WvXcB\s8uBւijY+/Z![_PS/J?;AgC׊rtWgqڲ4}򨃻4ҫ>1;OCV5B˛5OLnbZI8-Q.T9JK<:v d VX_7/uC[4A,nWhXX aky$o &۬.Z '$>dmi <,Wra2Y.u4 Ƒ.p%m&?~qB(w;@rR=_#IpPy5yO<;2^yψpj_zyp-`^+Ef7Pv9V|Pn6\SxD)e⎼ =emjsX&Rml|Hl ׫<׿4=rb, $`h%otWG0Bh%껕4A!$53)%"3nnnJx^0#OFBY6v}Ʃ3)PK1j! fXzQ[ uDٙFׅ:<]<؉kOw_Ü"`wpr?͐뤶|s.s|'F%M?BϚ>C>K>K>3:9Śq`4OdirKQS&\܎20p@Cc~(5NI쳡n{+οHjyGx2lHڥ_KT}t+iF¢ͤ y;EkC.6J- e<9y\|95oBlJk0?zfFȈ@o r9fcN5+tx!'/<9d]`%] o(dlB#O@Sϲ)9Aa@vc-56 fJX)@T|΢_[OZ!AV)˅;U, h.+;! J6~,,,/i:>9Ķea,,,Y[b-ࠖ#,,r_oHwE=CckWKt6 j=Ve˻rmOGBGP0//T8 qt$6>_jyrˁ봹[N㲲7(Q~ kg-85{}\m xߍ P}?Kxwcgnsŋ?Iz] B '0.n-^!<JNv"\% 1 *6PT=l堔L=yLKt\, -Je ss?2\O?,ki3W-{?ʿ릠V.4)^XUg&0|G_'G1dM|KkZ0Tjx5ǚqͨ%b%%'% P1, :l`?PPhZQ ܛSu?W[ad0SNkEJO-Dm~h(:Oi/TJׁ̢,e+6X :1,~ZUB띡2uh7e$bW 7J Cw1EwW> t5_Cz}pyL?(%:G]rIOΖ& <4Wh%tD=recl+tck(2# [cԜn|U@a -Ӽ"Ù =]~u3<~ī6]yݥqX: ~t`^dƌ7^y{)d#7FJ*gy QPȷ\,uY*-(eɨ[gse{0E+D8DCo `:~W-Coס ȍe]K S PlDՙo2C/  I)*ԽB/)|AY(c]UO(&4v窺S9oyO TJy5|X,FEi ]˝ܜSz7}_ #5~z@!4J9M/2ǓXp{.*H̾]X=})Opփ04ds9^p^uቪi˧e̹yJ*4S+]y?jYuwsT'2}߹ym"4a%=kio2]G=0]]NO!9CU%_C'=@U݊D8VTպGkOqe+Ni_} F!6b~?N=XT]۫DM}@;pޱ R|ĩ ~(27ECC^šGR6ߦ;UǢm/],Y\HQQJbf,#-*wnFlzkJ?* Tt쌥-/ՈrkO]l"TRKyKV|/VV!oS\L>5,olzqǁ CQc&%_Sh wJCY@Q1~_6'Vz@w֎eۃ2l}sxTnQvf!'YAx} D F M<<UNdLWxPc/[1HI}G q)gc؇`ƁVzVoQsq`حa h2爸K RKEUݎfL#Mo(*w'8z?+vH`_Xx##ͯ8Ŋ0uri( Rz׭_R?iXoP ^fׅS &YiiFܘ+zh @b)1 `tNOWRçX" ώk>taCXD/Dpfs3cAoeU65B9{Ɂbo(5fDhגqag%a_*u^KVQ@J;4fG/O!fy!.{#3}FǠ#?Z,nof^W=)ԭ/>S 6ߣZ+xB9U$rP^7jᛀ>%J*T [?+N6iUcCVMmZƂUw }Z}%?áBDF=.ӡ,V"T!V[~n Z~C<#,;"XcyXř@-wt*'_7iWH$Zo1NWχh}Wռ{'eLAPft]J4ͣc_`xZ- G豽n^`oHQ5w,k@׿7 lZ)HB4Џr*Em0;V$ o bxNd ;hZ3U093[+ 8W;yJSecl8t- %g/)Jm ӨWw(Vt*?I~A-t P2;RY-Jn~̩RJ*TTL0~ 0k&ζzYaL]>\"S :"jƈ2rNc.cZɰ[Y+}ZTj4D>Oi!Sa>:BF^;!Nu; 9"ie~0{C&MNv.$Xe"}p2zoB)AS|lmLB8]T{q|;xFM; ei89!ӬSLs# .V"8y+\|TZ]oX2ב~07`LJ4!u|L -rjL,_XEc)?/و`O8u̽bcUɁj6;[]X%s։fijfP9 a^'OM)V1KTq*]Q^5k=9 [yr&A: Fn+='Z?4gA2ey4J*TMfƵv95Rt>?hP*I+Ve}Zw\?C((R\;@iFކ~"5)OH4(Ny:JU֡sP3rӝ ߇⎶o>m/dPox+X=C?׃=oa)sWlKognFfz<[ljSGcIUu{@Ibyad fy)yz󀨔ZgT W?hH0u%w5:eBaӣ_E1OXzؙ=/I;_U_ 1LJ:T3o̮WiyX}i41q- і6&&ef~xq( oC="C|o[qRz@X@zWU0܆i< 7ڏl/H a+eӗӡٷ8@ H%hu?-LCi9֒ocUG ~!UbjSR^\n͖\Ţht9ϕm*Z 68HZYB&׷BHTtn{-334T\/ ơ2]Y,3`ޱq ~(υo{3R qMUn4R*r+,0Z2ߠ7znJLKaX|, jxglEVBXs!/51yrk4t'n>|,)UokFjo=>uCZh弥BQK˟oZ˯4[z?&6pL_+**,w9(&|se)ŅWz˘5\~v-(-f]hV:~1cw+SBNRRxU7_ͤ5%Jʕ*d'yc H >fi/sol4 ho!e@˗Gbpax+Wi!Wݽxi4D h-1?\Is=N^QX Eeg**0zؠ+/auO-Ů? ,`,̭~I7 fzUZj9= k_14]U7؛s.Sǹ}A3@kPDK$VjBg x:FV-ʊ9AWiOBJ,J , ص_H 3>s72+~V[v)5 /%Wmɻkfh B? RfJ<5W1Gt?c;B WfV_°F,@#%SC8XrMuX@ƱbFf4"xI#CxU.:Hrr&c6}hk+aSۜVMܷtߝF##a{]E9oU~ЙIiPU`xjoW[A,,y~ii)fc,I|xwT0ѳxs `5Hwqim##*ُx +1jU?-@YN i> n= ë{ {J*TRJ>g9p`wO"v ;tC6Z)!+,PN=0b1CuT=C?&@-dYԠ px'% Ɛ.rʠP2s]9p㯬1旄E/^$ ?&/T0Al RGO'fNWуaŷ[UA&;ܿ(ڥi柲dMDPSIiY!\`Y%;*P G4k*m'0/f,|KMO(շ51JdԚǃx5a?m .u,kWQ؅r8ZG?,_.3e]asvScE[2VUrYCh鋶XڙQT#;FZV/?MEt[M"iƎi87*T#S 1a뙼[m}Qp 0\q+B7q4I ھ19eGx>yiPkDoX5 0h-wnN^^Yr]gYeblɕ`V9~Ρt@1?2ETO{:LSTgI޻ʕ*%K(pR܀YIG/Ӽ Ӎ{Pbܺdqn hh (6j9v+-sy{zЁeN}]Рlɳ2*v?r D:qZDٗ/̽tr~R\a%Rդ},7Uu~s,DynjJ]GMᔚE;Ҭ+%͉nܶEy\m#pX,C͙sm^&c~=52ԙI- lEY W359Gm}# vEa.~!h}XW#Fn/U"`u?Ph4%ԭ1 =\w(өdLbPVqX. ԖU̩^㎧8S~qW`:0~3SE[.UD\90lt"n6 )~E)0">:z ]%a (o~VĺkR׬t>. /x)I P#Kcpss#IuC+NVd  7鍅VltSҽaf*kijj 1Xa͓5s&P>xDk|M|fseyl)ΚF2 [ {~f LTYkj  hZV5!k<_xa̭[eHbEbU$_üjRƅջx7z=z`0,\ryn&e t`j3B+B` hLtź]Au}Wƌ bR !a^j6a/yV'~ٶ7~ޓ7a`QVݕUL! 6OY@UĔzY.F6I "2n&eUcPsޞj>S>:@ C^5onX:ݢ0HUҺJ)3:#Ֆ]W勢$4;~ވ{8yqfZ_(f w5:I[F|G gMhߊ*IPYg4M/O(9%~:`,Mke@Fo~:9 k@i&h~㟉mI)+8ZQ~T?::Je]}>qpBi:<% 4 K*pd."!YN\r˗.\r˗bŗ> ʣ8VxL-e;# Li{b:@Mt},NB~@*Nq.8[J|T 8|nd(F41]y,2:@,Bt׭&WXu)KRA}w~Pm|ɈRZ|KMܰR]@EMX`2U:Њ*5:Jr\5*djWuJ[3]ay2zjD>N'dZQXhT64Wj0G RBVO 0;t;kGIwbr=y?قO9M>1h]͠u^&b@\ -$zŷyVZmϟ03άw"XJ7@|15UN9br/+%'lyD`Dxܹr w{:JٽS@Ă3T79SO]77 5@r P9ձΧ]l)KtbZw&NFEi *<8e>TPr*SKzqUһ"NB3 ԮiE;MB W3Z<nHTqT`B@K<,^LYr*|l$Kl墿\ջGgaLσxS\i:ܺbTYru/@ mWUg9c/+L'թLl:>YYYYYYYtq_Fcb&5H Gx~ؖvvx$gP?9=<҄Ϫ\!KWhΙQ5F9$ixQ;ûFl4^5!'o 1Y??????*C96CoZ`eiNdVkw UNOoh19[!G^1ZgWnN^SK^yΏ[ ɮEp Vw"؝X]٨xlepAULQB˸g;CW{ܵu]KèͼE.7Ѳ@z%s:W?.Q tbAc_JUxA^¼ź7s*48","ZWT%KՌLtȍN^_GQ'T2WMg=&qdst)_ZWE] )!3pMuqz~ hh$dY(4S" VjllŨ ? U;.!}QPˤ;bɑsJ/U_/o*G$y[_Ik(Bf +N5*TRp^.d׻*K0c]hALD֟D_t؁EG'C=yD#˧ X~T-M5.5C802 eeGvꢦ*TKIc2|j( LB}\7%n;m:rsVܰ4vlp$+ѕUX5[oݙxЙ*r* r}2T:a8~c߸~F10uQEnBΗD͹QUjO\Ardɑ>*T_NF?w04q%lUnz/jOWV^5>N.H\CCA,Z0>C+>Qc: gm ]+ъePɁ?C 0W}j1yt{p pu/Rz\BO|(Uշ,QjSZӀ3#11hc4i@3 ʶ+EvzϻGӁ&o ZIixan1ʮ5F 'V7֘O@3ϙYwu_ fZ!j:7Aݛ%j%!T\\AKv|ǡ|-fn{mBGl#$tJo~g kX1-qYII&omBy^IJL0%Qx10X=5vy c'P\)YrnKwk+ӄ> !XwqvF -]ew4s?JbBsw~xf4 Eg+!67VlwW,GExNjaGW':]?qBJM5/CV& i GC*ggDiAGvi%L +uZaQK8^_K腾}4C*>t\dEܕ/Q/B<9o(,5畹@Ҹj!%U3 ]t rhGS=NUkk 5ׯ_,܋XΆ ʂӄplsSJj􃦱5f|Bi_LS T'JRlj+T:\3D0xGm$oWzRt""0?s@~r]aA 52>>KRi5QGӀ}W芍$6طW*uX=ϗH/H6ˤ0)d?]߀aU8g%T-YɊk0Ɍ=&` iЃSQyFfŽyAԅOF%;vGS(U%S?.GQ+M96,/%KUaQg60D[B>"ķAA:iTQ<9 64~6L'^q`d+V\~,e~t9פjy"EH5`4uI\l KI\@#\@`L\+.raO ~5ͱ('K¬7Vn"%{2>9mޓ,.3!>Dګ*_;Bn Q  쿘CD$N9Fɠtwf9!8u}76}ABjT4TY4݆!A4~.jx?ztU& N8 _ȧ/3^ i;M$g]K[b?~Vo7B^@+); ^W@\쥰<=`+Avr2}6LbQa4`TdtI~wB!ugEe`hL d-X\LƮx.tt]\!ٵ|}p8*\߰->Nt>)FVK! HB0%H1gnCg]KDm?|/އ* ^eD4X99i2|`*~SaB91P' w ܣ?Pv!Bd,%=U0S5 潢ljK6 b)g%5z⦜4A),a]K4ƺ4g,ד[HgY-` y?qP Y?Lj5֦@'`_ȭ[]# c^uѯ7u Bg9B! S?\Kbda/ P>t$5x(+0 ĩQ\uk[5@`hDKTxRXgjĖ+RjhSf$fㆣ@0;F}s"<2"P_kXv; ]04)j%Oʣ9!eb:f` GznBAڋ\iEΤR <Ѷݲ8Qta=6c H}BoKU\"nE|l$x~73}Q/!qlfJ|̈́=SZ_7hS|b@]V f(&/>B/0lSN[_>!>f'#_7:W !)|W਑ YV0WKgj Titq1 oJ A g,ɨ`v[pbs'5OYJ*# ftD&ލ6aN|.''?`o1-AA),[|=B.3̏;TR*܁h7 N]@c{2oF0fGd:Џ'W4K~S`| m^s>Buvi){\3/<"0рN |!wU!5Lvx^[\Z]aɿF@-A[)Y,d}eKy\iU%wL?nB.<U\焓UD,z}EKˀ1leMQ5'tVO}pwrdp񤴗!Yz } K bZL"YR%{L3{/^ bֳ_p XP_ƒB>D,ٜ:}^q<1b#Xm^9hX#}C>PF!BTQ*P[j=?4[ }Z Ӄwq- u Dahd%A\MЯCqd O>Ȳ\h HF'6P'625z*rtoc@T {+훻F[Et)U>r.^Wy}zSsяOL8xzOq|N.<]>Z9!@}_DN/xBg=ȯS ัfj%pDs-Qn }>^i6}8![XkbkՎ4Q43 æ6 +0,ۋP$b9#;3o_8^wyDp4z<> hMZ=dv(6uݮ_o}\Y!@*$ R*2c@uU5i׼X>_9tamR(Wys5UVh&.dvmv:=hgݥL}.\^s욹1ïV2w~WN"TV0lX(~ƺq%9B`[ht}9/ر<fr &pk xXAwRs< $19 6 4UCTUݍkY!_v@zM=|a6NyW} =ۂ N";?>ֽ' 5i=P] DcLo8ڜK&哤7 r濘z!.0P+ qX˳>E}O\`l95*çOWV];%i\g`H\(8&roՕFP.iq(kd.gO5.ܿs_HKkO_e=ݙn.}׃fnkd0qA r5{*&qc|ʧ.ϡhXhywjfiś4K8:RRA:AI`iAq(C-u".D|6׊ CAicc̖2g?%D߷On7i%ym ::Ʉ.o_q)}oId|. ri#Ba8#Ť8Y|MGI ^G~v0@xWV*gOoLS:IoG3^< V"6O@v.;(kCCM'`[6o/Ot_7IOOպf!g黬K_g>? r˚8Ӵ]xF:W9qfϲHb%(^ORN5F[D-p@JM]Ї]ZOybux-@#CG[}tTF %)s+g%V.ec-"Rr)-K0rr^|ECFtbY+~WCmM(Ў PM˃@g0~VxK.=@Ml- ?/מ7,ǕJS 7:\Ɂj,nmce{yG(-\znFNFLG.7.\r̳6'٠Bmy'C,* rˊ/!?HԃKu5ryNL>)EFīP-[k˝b`zԤ%:p@JM()[O va:[m1gJ YF^.\r"A (HBmߖ>7:}E˗.0AΚoPPiu-XC(SzGE!K"S??7NN%hU4|mCz˦TVb2˳eZRbWtyM#Іe6?,{7#CW:iFYFrN.\ Z,M`'H;7@UAfF@8j; M#l.\r˗.S6oQSzp׷5O2t&.`Hdt]UFI2GyMw L>pz*g ٖGWŏuhAʿ @RYEGA"wWzǔ]8u,"{:4: LLi,rgAGALց WRݼe:%uu_Qmw/,]cNI(l hpKR;jVz& Q"5hH4NqS/8.t^ssu~S>%;'d)ɝ]*p Y [ !)z^`'RXGd%%Nsg ,4H>{OGԟ~$)T0Rv&kxESO"f-nfK"Ң\N՟w4~r ;8hy= KsMֿA-=F`PPƹs39K+7') ~@J*T6Z^-Lug.D7d<*%*% O1ٰrF]~'%O4w_`2RłԎbߍta4̢mWɚ"fw.hJ>vt_VB a>7`ns=f'Ow|Z̫:T5ہ/X7s3cYQYAG(tSY;9K) ,}d.)grb~ApoFb(us nLEe^87kOt,eR̫܁5S4 gt\4fptrԋI2:|";vo659jIo0떽}9$T#b]n!SBR.Z. ˩dkfRu+JwyxL[0 \3%]#.VpoĶu|7!vtNtFte[J9pghٙaG ّnTX!qw_QU{.!qQˤI`Vm d tҚ;J5SIwV\d$69]4z# 2BfXB;1Hy2[;{V]iiNL@PLyOo`O{8A8WpQ1拡isb_ƉA9,I_t.'Sn &N"Zj*"b6<./:_FhP9'&(Ҿ9m93,WAtпfX+r?SOH2 (%j&G3Jtfγ60; 8eyDs8Ҭ?4xeJWN9/R,Zz+A5;:2<hT6hyCm#]Jأr}:Qd4|" g0+AJ si6ssP=<@Lu4Aԁ'&ey%̇h J7&qJ\!Mj-^Z˷X˻osPcͯ."ժ͇opZj'^1 BsڽJn,1+CҷӧW–?t/7g/9x!+7q.^Xp7$:_WduCp04&)UP YL6tO_9:Ӌ^m$aZT(_ЈD;}(;kĈ>?k: iz'~=p39oZaܴ_$ N9w?j @ @h5yotݞ#S)=8͘5?Fl>J w鮸-j/DFƨJFx;e0>7 D&.``X^MV/@]lxB?vjҿ.V(Lu^흿Q~%vr ԽS]Wjfʣ'c!Y$VhhCCBm8E875`VQLS }>XVugB_/CT 4 7O;+9rzHEAh:xNGw C8TPr>)5INyK)PAPKy~eobBppO!mZ #u-4"lUzX g ך b:Y ǒaet~ߢch1"x(4^~CKi8u4j`~xCߜr] iUJXWNASgHxKr'cȖ p[P.OXc؆ӮDYNg-k{w?  . ʢN\]֓vȸmBzDNؔù$h)ȔJr!`YњI]\})))ľ%MY]@.Yשs_Q `D wXQ !5ݫA@4Bm jU9J vn2$Cmdv7r""=[D]t5̹9fN)Ԗ 򲞔85Z{W 4 <"igPe-^ >7'ӥ!: Oψ.yLrWв2*YT)ɬJb-])q/Eclֹ}Q xADVB/XBŒiee57v4yN=eoR*/m% - qy-w?r,**_"X6}eU?$zYڕm-Qi;ޱk"15 Mh=C_%/X А@n j߹7]%*ְkqJ]ҼZz}ZpOS<)CcEؚ'GirX^30jƣC[g&8j lA65A3;v5#oau=~a}"WCmw!:h\9$`P߇{_N fKͮ} ؃iXʺ; < %niψ r0?7gYMgvn}ugCIi@:kXƒ ij5/wXBX?>p՟_LW/V :9F)ą&Q9l@\jGL(p%B9LD@Zѳ;i:x |%>_ ~ثÉ~ r|#RgX.BӜKF|DZTփ tV⥗OtASz0 )=tm|Us*gCcdĂwм^{!kc+z,s5:럖~٠.'N^rđ/ۅB!|ϫl KUs2pU7zԋɻřq`' <Ο:(yp0ێVL&(9\"+ +cۆR չW/`*f)FquXa4fʶcƲZ֒PR.(l fJÔ^X5f VU_:zi̭|0K/鷂 } UU|?C>z V?u$RnQmłPW,w$gB|6L0[h(h|AI*njrn_PQL"D7H N muM(ĦÉLêavGȫtխ 3Zq)+JdAogKfxuRyž%9:%N]xi`6  nkhT˝#lܧqðA] VY⿞n/'KS`f+jn:oOB:uj#ڀi؅Z*XoRuTFYVvtX:plls%V]%b[UP]iZK<fu92a6F@]ig5Wc,ttM4`dqXcpƀFoSKwF;7#d5qtROIW0k'dF(-K+Y41_ !r}? hcMio"z-m{"w>'aI8 iD( *6'_۞ĥn(fdMì^S[Lq3mjM P9%Wӎt~!~P!uOk~W¼(9栤}X@+yє1wEV'H 0GF+b,<&sCY}Z[XaQ-Gi҆yp*XH8|8C/+b%߼*J-k5m@e}:K4ɼ nYb6+m~G/KFj]CVU-O0bO7<0#Soѩۍcw_C*[PӮX[D}׋\ :6&[mˈ98! IN(N((WL8g|w6FW_A. ^e^,Ip[$ Mw*׋-٘{ϴ;z5oHk[LW# ي7s h-vBPT!=D4SaC5]5w}X(Xx7! ŕt5#r~ޥ{46;<ƦU&ɛve{i{uMa M֎H[?'Ӡ[QS>)zw3|svΪ]9@6pf 6pl# zC[?r\w(_f/SܹyvW$B0WX0wJCB..zސ%Ќnꮛ/|pp|"=h>[HxVeñȄ?$!. fQ c"ʫo8HWЇ ]i\AЫ]Nܺ6MPb*)o//.F U1ç5w3v<4 ۞^kXlp([_lmb̧x]8)p;GiM23p -ưu҈4=7=UTnbC$V73s 9QW)e-ަ]d+Y*yJ[kwVr]zC`#p zDA= y@Z~qu!l>3h}]KB_/L4ګmij4eTWhy< 9~u(7'KgY;^ \aKa)#矠c;{pOA>j >(ӜIp yKr"q 1B ^S!Sq\M]~v* W?ac_fج i܎]?0ʏ4! pEFKU΍PeIƗp84idniR{Vr˗.\\Qr˗.\r˗.\r˗.\rcK$c.ۀ]Yhq޷}tӇ: ЕѕrP75%`)xO䃥y 8GB-n:#-xj/ , '+)x\iiN茔N  y]mbUbh1&lohAC*NE͞?2z9qTh. qXE[yuC jM7WiːK;/v Jv:sJ{5 ( j<*q|_.x- 3/d%rMEA$å3b irckL:\mlOL@Lx,0Ua@NHsnWo/񒿫f5]d{'zMr/OR}!Pkp,^d4MNwOW.QK?9]#uС}PG_(J3ä 0,rqp^s= S?"Ơ{eԲ.\rG˗.\&.\r˗.\r˗.\ps \:eܼ8zO|ΐ [EL*C~]{=) 9%n:AأWtF5T/[=J[{J޵m̱)]~SoXF+U~)Bo4Eb˗4` /h}e?Yh%5xkgn/#|ƣD_UY{ 651# fPmYhoʼʚʺ G q.Ѭr8d<69ㆇ ahTie1:1t{2‹:ӯIzV]* S}j9Ji{V}*u^O'S\r}fʅ;'t#YѰ 62`> 1ZrSn}ж~T?Ds=χܧ"Pmj/WnF0LNm)yc69C2`y txQz_XI379Io[GK;&%LB,Xۻ/{IjԶjDZ y>.gf&ј(kO}R˗.\]Q.\VY-˗.\r˗.\r d(XL#Z(#S_w6Ʉќ Cցh_|$KXiS%Ig\&HY-铳7fnalkUʉ,5枰T!toce,O%?낇L(5*.1BTm1ǩ]f9zf%ߜhnƇ֪fG<o ^cU>΄Klh++>pT<^SH89gsrE}I[\5ܚ#FS[K]|28ctJҢrE}^.Yy(SwS-x{`~U"Z9aWwz2E$` C:jmHk >0XtPt}Ufd¯ /T!o h/Էh+)`Y3-}k04ỹ ]>1eICѨ6 "hH\GV{JL\^E ;;z0+*|&{Zr˗.,--i_,ї.\q%˗.\r˗.\rX)7 uy.+bȊ4>'NM CfE9~㡺~P^lyEaoA9 og^Rg%99Vg f߇@VeQ pϘUc?_FOO_s:'p|w>ISS?|C:8K[(DGW-<Ĺҷ% 2>z=9FןumG<ibԮG>og1x2);29[KQް-(g8B˧4%ׂ@$C>Wp!phm]Reoc)O^Jn šGQH LuG_f'ozG= ,*v+ @o9L_]WI։X4a6k|>Y߬\r˗Z rkQ.\r˗.\r˗.\r˗0v:WXj-W}9=G4]d9+OB/3LTkyu`D>9L%2@McSf^nRG4'-veps?B#zyY9XUs_}R7%`hTޤ/YT`#b~ Z]cVΌ0EӮ!˫sWM)k6|c̢`dƵ}{UZ{.m̊iԽ>ɊD[Ye~Wo랕KZU~e'ܧt汢h?, W(j^Utt@*^ ߆O\/b):3PXjS5~43} BY^z+|5D?6J\\\s9+0&[n௜^ۆ~y|76?S˗.\pQ-'( r˗.\r˗.\r˗.\9CF,34DNM-cP2ޠ>sp_SDIC4lmNU3st` 0զ/\Yj:Mȥ9z~ACv&U1"mVwTK-AJ'?xWޫ?}4(U t3޳3nCofQ J}(S/m4@,yLphߎu!Paa`hz;@v:mß9QBkt=jfx ֠l pXx=X&{lJ#mRNmM&klZ\ A򼧥~://+E"G7QEp _pbpnSy}'ԡoY9`ȘGh7I˫?QͫRyl.12 wa` ᷌X^ϰNЙ}X<95 r#]ob\Dm&8! f)mYrbCWg/n_f&xW}'kte<%c,}c|# *9B-6n7K!h=V)ЕJyr<1ljs>bL3ΔNFSət'Bt'FtJtJt'Bt'BtgCO@>>k3'cfy+|>.o@z踩}UVՉ`Ӭs\fuaw%t DLN]yYp',4֎WGy~O[g]B7q]y?DJӓa6Sj&GBhci/73Áx1Kt _$,h[Lߗyۍ xb.NT`-+FTy ;l6Xi| |Ink=*ITj;Fva!-F䡭>iM̵:ݝ|!%GcIZY}b%N%XAR(6_t|Sχr#M}ϭv!/M^MgȾ8=.`|c3swiۇ(:5&Zhq*Т"~~* OT<SQ=OXAr氎qw&gXwQޖ?s+҈4LmYXON,܀?g~&ќ!ne`kB!D ^dh( 抔E#\Vǯ6Ts{1m.pnSy}*O x`tdYlsh]_jNFX#jyRm!n9En[J/Dx;nh7aƍ AA3Zz(w_u,)lEfhƱi@A.N˿OsT.kA84c];ڎN%qjxl~ФuЩCB LgnSx6G|uȸ¡'!U)\h"4fXzK4p`֫qON_Uz6S,h~>|[Z!t&Tz߄/XIc,6n_iŵ&gbK(y<1bkiog`ޢ,i3S}W/jit Q R:t<:ԉ{ͅ|1xJm7*}4pxJbkZL(e5I\$n1?Ѻ&w˫p!+SzKkr#` | {$DvqV%(Vؐ84e0ggF<6w#e~F1onh7Ŵ6yB`7+Ӡu[. dnY>BtSڣcـ9]6Cx<4V^#1ɕK)|206V` 1=Y {y8-FKmLhmƝrru[Q|hj'D "w@]y_ۢN}z H<@= MNDXzU~reG53PyveSfߜx= n-|/Hg-Xmhp W'I<,7)N=4nHq͘^k^L mj47w2-un\nmSv.yo_D_T[ °Kb[9qxtbaLyeɇ":K[͑eiᆪxw& 6 ;`Cּ0+GTYo.|2.;[K'RWO.*dZV-|/n3p7C;t;3Zh&~ʘB։M՟{Ԁ1LafQˎHg(\4U\++,0CՏ,<<ؾ}X{ùnX)BF75ԬLvD Sơ]m喣 H;RΘkH)3ÚS)7 )cEꭂ~?F,6;fuV)N@?gəh5-Γ<(iNCCu$+{^Ġ}%@v' qF&:(_hk~Tcg5jC/.=6aO"L<$!7Ò)-$`ǬG:f `q|VT+bvq~/x`9)sNpA >ip | LJ;͔<ٮ(V[m r9xvsh tqi7+6 c2||)Lײ?+z_T$MeXS[_-|/Z >1q( ( ( ai mr4->}챪LO`gP Vжnu~~JD,Bw:jbe&܈c#'| |OHr b0ܙ+&.9w%uGgP96t.1ud=ɥ?D*m熢bux.^Y1s-qT <%ۍ/'iIp0> _]s:~/XrL%x[PΌyPѝGMn\MX0ro@:%ߎ 0?!ï^i)yزs!Mx'QWxSʁ_#;W@Mw4o'ENFM\UKt™cY9GtW0A7o0I]pܬJrP k^S;O^" 8s S6ѻf/fMExNjiP7IG,f@ m?KZx8;gd읾Ow,,0)4nsr ATR(K:NCn{2tI9r-f\f')])X8f i!V)r)FL?9K6qPZxv F<_iLP ESnHNER|SPEd9oƚ'hU/mF s܀4`ŨoY(:M-V=aG'%hAxG[xOSI%oob=sBh~5셵H >$i$E2eyo V|15P_u)$8]bv'FY %ۮ.g ه7͆~ Tq-ۺd?td|N:$鼓N:_$|OON:/$V"}Cڭ~3_: Xs٠Khv%d_% x˲Ⱦa9eC o: 2ͣnyGr07QOu< (u/_I*?Dmݝ,z&Lʞ¸;a\BRX`J%M9|؂2w4o~^] LKseGs(Ϙ Kܾ j4-,y*'^9ΒtIޝ[ӄl% t+x|9̧d5p' ?҂O8c}r/;P'$1 c{sTHªmy_: W[sMj͛VP-!Lv?U2}&M[6Q$KAK:?)_J rlz>\")%ɼ}-)"Hwᖩ|to1?E㿀 +&/\AZ5E :~~Z 4_H?Q˅p_iyNtS6w U{DϋW*oʱW6ɼN'F[ݕtCcll'B+5A 7Q< %PC%.JW/"e5GA+t[)/`.T=hco O{9UV$[]MIm1 MH:UOLRѾ(׬D4yUX/͗֜C>Qbx-=MW497NQNė{?45 mB,Y ^ ןLȉu͑?#Hk ˇ[=zKC0<%Iůhm=eC2??%]B=ftf*O{Oz+:hYe-MI⩷.x!4S^ZzAI8:h g,J ؞I2yc,pG+J3S(zF}W!~`'f'ckVCȿ+n^O]u5d{{aO,Dmnz.g3sgW>o~\jhvnD#ؚ˭9}#w,1/,1!RgjGvyed0/lh 1Fdm4P6E9ZCD'МJX^ wr wz3`Q~+:G'!40Vsu>P2 l u{?Dlnf`kopkLSMIz=OnHct '2/7~E[,YhJMh_ ht`CVVLQg*ŎfȹPf/rƛcjMW' >\(x QFߗ?{W0zx;k}"9$Tj}f˺րpywy x%2SLlysBcc7(틲:ܶ萴b˨&wBEX"WQ&k*W Ћ!`~C)% x}~]?jk|(L ]+((QevkպEѡMfev fM=Os9˿:Jhn}^lWKb(:t+՜cX]gk_Q)vJ(2\ə Tcx6<]hSqM44|rlj|b4*3#[ˀK㦎jr&DF-Ɵc+7^=VAt ׯ+o"YW"-rK3^E+UAT5S y]o 3;5%ˬU9l1Vy׿e2xϔ}g~e"D'\yD\_vd PAzLJX봶\l9w 캱R*h^5\a-wr_/j:v c4>Q~+U_c^zMW?(uX_L4s2*'/n53]&β|Z]>mq҄1^phvpaI(S!Z?ds`8i*uyPfy 2z:_,zq0R1JI]E ssH'pO%0ir/֮3VtK7ay ҿQ“UlCSQGD$ً/[֌zKyihUƽG| J=h (nm !9Ln2z*b+2k7AzQʿN+p̷ޫ}.Jf]ZzGO]HƘF/t77(7p?_oY SPӴi>njQͦ3NJhowϞ1;< m] NL64)\cIߓgU|6SqoWɯa^iüVWrJ$_x]٩8Rx3qzwLg*gYϮX‡Q4x7Z500%9{CE]SS~ԇX_ވ%!My;`Pt.fs]G7>s].d?1;\;Ľ:9hO,>,6\?,Q-oo6s~X5Z&h0̂ b:!~::Iq&ġ(ȥ4/˜F8Xк[ 9p)m*/n:9p+4yG 'BǏjkA9XbEU*F~ e/6H F%Ux,Nu;DsQ_.]1mftR eͻ~WAiOӗ}Br#hۤ/};ңz8[ &<';cV@Bz CZK}W h dfi,N>l$( CIS"iM QFeMKM9d>O4ëD .qC]X:uk/:+OwNWY#-}pX: o:Ă@/SN]LBd׼C"(.4m6&VNQ߮rއ9՚ixv&g<s|u.T_ \Ɯ a DA).ZM:~/!eH̚)mgp:&(0cuԾ]Űf :yF^P+/)EԶ^PP,:sbX·,-[sK #]Ĝcu9&>~Ą(?y҉Y;/۷ ?'t6eq1Ek (0qӪhWHkX# śp5Us'},`ޙ04b2j{D"^ 4t:hPK]3h(<7UD7ԇmC,Q7:o(N'akeKm4Y>Vd`="w*:m._PhE(?''<W!;W3NUfG sլVfɷyLxmjDR>vtVͳ-ESۜ* PEU5m|Z§V-J^h/" k" _wxUXu> i[A)wb''O,fڇoCB5>u;h߳4qeOIsZ@AS7['<E<1fdYh>  u8Ӝf7# ˏFPrHiU[> k<@ W]OCkA4Ķ]3{IxGX HyIfUU69 Ys3Cx~=Wa)0=dSkmdm5柅qttc/n!?5>"5#O(bmo1>b!b~_;ћjxӼFRj[ Wl5ft,u76'Vk ZY:gƙ\N_:PK/=z|+-VXP9uك;@#gE@& V]`VܦԕdO67aG˵>_7`LX-w@\GYrCb}݀gm:iMK99Z}Wdr<qrǏqkRsaʼnO?”z槃( eXΓ9Uo0=~{Kͯ*}*ө4&'Rk H[`d>;Ezk{VQwS͝2 rS'G,oj'4Gޭ6]`YJ ̱YƑoԎXL<7 4Z{ oBy`*-1n3+ʷ ԍ>izMy<冄rchY+/h{xĠ)Xb<\<JVOpQ>P>POrmՎ;!͖6loRVה9ru^-vr'].Tb+-TtS9'(ʡ%REC:VUzKlw4M«N*k@;{J]^RB/_>&A4Ds"z o8Q;0*4YƜ&;ԗ?5"4$I2B4i{)kͱ_(S/OOYKE~qn`8.dt/cM>-1tӱ S,ŖeKxS:xUu-\_b]J~^sh_!Cr]4]<ΐoQWA5)M p6oQ>>Ї 9&*s|Ts?'-8[s{ZWM[fڰ]"MbiS<]4֮k̀ L:j7,s:GBS,v4nȏ׀v'Q ,eYW^4oXw9841;w˂E&DW!t3|֫'s-tL̂\m [gR1eh8y{Ǹ)r>o=1?}S#@̝R5-K&Q~7WN_ Miۆ,rynyhG,[=5-hrq Sz#Cb.\Gti%gxkGJOfzFp8X& ȞE՞\AkdϠy=Aቇbm d<(4-lܥ;K^i]v8g'!~r oQל:rfTloyxpP|iz A ۆjC+hcn|29qwvgTLoÝY\OIyiM<$.Qvښ]f^q 7:ENt~-s~E] M4՚v CyasoD.Xg9& ;lx~KO_syB * 8h+ &>/od~{cWv1Iv|zYyFkpUéB&%&tX6qX^no]f=^:9nsX ;GG*9OFՇrg,Etb8~K%֓-tu)Τe}ܪ{˜]^~hZAG eNQM0&NפΎOej kN\S{yi4|˃dʍ4Wj s gTL[- XUxv0=fsa}3LeXf(gRmS1@Rt}7HBN㜶7-l^Rt'݁[zq 0rCX5m /)Wj;_݁ 4n0*cr]/ V.Ha=\L^3J VPzٶ?);[=y*9k:Q*w0A ',J.XC:J=oW.ڷحYr1An{ె(]+)uSt?ۿ.vu_e_ '4^F>W06+#Jf+73=|sнY>{>~>̭r/GI ~g_?=OH 0Juߤvu_*9c9.:PMF[-MI}˄UlHC'Z3XE%̗+/I6a@=d #c-}n BÅ _Tض7QHB@y\u'uk9|ާ<5% z[oo!Z3 q(&띏GSGj=V?HXB?3P`[syPw%PޱTu;vQ=#oY^N%^~Z/uiF:'2 ƾXZWre>?/3e=no.;vbK6Os<7Gx~"~܃Cr~3:9ջb+?Ը=ſ8ƍ9uV+S:s3/oުLObwf:DHsP)l!X&P4,Rvfb>Sw5;N:'Mvy ̵mBgKB %!~<$TfxJ7Kз|ާj0opFW͕hܲ`GGE573?ބc|8~tl:1礫oB麽_q -h%Ϝ'_ɞvRBwTNNX% F J9NurɐVnt^+nɇ3{\ w62qa=lw[EO8+e㉨i4c7fVZh ;0:U'q+ %ӟ̥/`t?T s;,zmƇVf!/ ?q2b_pv>7S W,n9.(54V+&?*kHs%B/b<?`jJ^Oѥ>m <}!0Wo?Qa܎IzqtX:l-wSQAjGjʡi&_I~xļ_^Z> ./D^< s22WYrq^i d!kyߕm>w9ޖ"Xwh@S޾?>>O~9@4kU91tPV⡁r^it'v%?'@O@OHO@.bsp-AٰyOlҼti0mcT26#QD\ןJ~.A/$)W;8?m#S0h^^j##5//5a,Os:~y}㛱2*̅#,3JK;~' d]ְ[ 'H)ӝȄVvi#)[w'Jt'H)҇!Krgwsi,R>Eޅ}`~#7y~2+|0nuPAWUwpQ4\ &\j㥧4CƼ6u @?IAԣ:$VuiW0tN%IhLg\۔yiVˎY'=vcyNM+G|0,R;q%;>.ftMc@a_ F+# 4-/r B>adMIdܧl>ֳGj]XY7^ qg/@*T#31\Wi >}p @@0"D,eUz' ]d,:/a>W+@ع_@,Z Cٟ+ia ~<\aoTH׀k0&ʈ/!J#1 F}ldQ% t9\j) %`$Y7ojEBo h6pg4Q~ZNHPQ:;⡫PoId|C_UOp-a^aW$JYtǂN,*C  NoAbG_9=v%4AvDwچ}Uɼ<"(!C~:usUSls =rtVd4AaôV <)?^Cٙv{#59-#[Rw%wj E l;R潏zķ_oQߧW7B3@lkkb~}.s0[W% O6z_*6 (60`fls*~U^>\4Pas0XmТ4@)m2 \R.<=6}Hs'rK+]rϫGyc;sON0)HꯞbQ&E"Y茵"RZ|ᶜ`q #?i3]<\#F;-\9վ&P9.}!t?H m36eTPeu]K:nzsC?H_lpJj;#Q]2p:8F ̈+UW)ÈL ae B֎qm:nrFY~jYQSpKш[Af%I<`C"} a 7)ds2L$e%@V#PB :orPf}bbcizFTX տh2 ?۬]dEpkio{s1юc *1n5Ӭ]IwVR|LBS\@fc y[[8 )̹2ϊ<CASP.=Zr;\Dza{(o x iv颁i}# (TS> Ty  MAnL;1@99A3k{&T*/%}R| pݕVMPW 1 j@l9Tuf*=TaM^\`^?5u*jGm\7mv人a\;|i Xc%?tߩ-᭾Y);qmS<~9/`39 ?1@>'Ղg!;XuZz_^!عamhH/qlHV3NrVCe87Q~p,ڄ~f&l%P84"]&VM>FBC8{&bKyC 0QQF Y@Feظ͝j7*t {(a١ZDBx..%"ml"v oib 89t?۹GmWO܋OXV'l Ѓ4L~+/<*"0D CI/*ui)95z cLuZXd5e:B|,ZUY3-e#-ޗQ7zpQG({xò6!`]O/k^F 2{΂N, G%Ci7M'!Ҵ_'X9#PKGH[&(OŨF9J%鿰1~p1X"gpPzFV؏ uGthV7 ><>10!"tt\߫TZeC%qI<%_^|_y~ yA@6Cd㥔U8amg]SA<asDfa02wN\bŲ2?_Ax=zKB` bP/uxλõ8%VEU5 q9 \Z5-\ Kri- &1}aI{gDJ33<"^ׇljS:'C*Gxi_6G 4 ZQ+l0M1L?T= @(iI` h6C .V ̽4$HoXE-XT(`@I ' jK \Xy@lb2P_0X&x- IA$9YdSC6 6@J0OmPk <P^8zf۩`Nx$@$I$H mIjD=g H3lHemI}@|(s83N I $H !T@U -J}.H{k[mnmJ,M5^@A$H  X'^<but1|; J i P mMS̜m5 V>:sJI/$$H I$H 'p:zp%axIX?8ɄJ.f-!aH"oH]8' Ρ o@$ $q)wSCo9kzUTlJ%QXLdߙwjm- zI$@$ G?y9#+ PiEh H^G8 i-*vsI7 A II $5k$Oݪ" ,l6qcBx r`4   @$ $G8$V@ U~6 {$@78kt?EaϧJFEH \5ր?, $A` NhE0+8 @ 1;Ϻ,a582v$ӱ l$#@ȤE$t>8 z9%;$s@8U3̱ JhK< @$ 9C8%Kc{mpDUa`$I $H2PH |۪ @'&L6 A  'I.8@ Yx B( (@I2AċjëOI=s/@u I8Q0$A RπDA$8D$ ƌi . {e TT I@@G@ 6 8AH@=oKz  Gp,!f mn"@m/ #R Y&AAmo)#@pgO  p ?(2@OMImm #@F"xܴA$ 0 A OdAmm#@ƅA-$];=71CmG6eހAq$Hf@T0[möe;$@E*N'y+(eO'eIdImD@F8!M ]0E6"!VbK 鬂{%AI4@ `EA 6 6i2Ԁ r%$ɢxeq[%It@ƹm-V0R@eH$6[r)e$3 r#kthɧG$I$I'Ym<@ֲN4 @e`$6ܞmE >22.6޶.ɣmmكatltI$X_@=ty6:H e ٵ[.x*v6ɣL} lA#mٲ@n:S6ߏP @e?L4oX^ Rɣ vm*!`lmm@\EiHHe?6R9HK*ɣ4A$ flAmm@fquK(DeĂAHiApv ɣzb d {fRIeW Amm@ӀBȲmx<@SHeH6WF.~$"%@#CIE`vImm@ m9m$eH$6@ªa?H|T$a$I!4$@5f@( n Imm@ ߒmmm@&H e 6@3)B_97K04nDDIZ0Kf`Imm@XbgmmD e@6@%5j)pP K%Cw-* _`A% mm@Zpfm=H`%6V@ C͡W?'%lqC@Π mm@a0H@0@3=@ EIMJke> g+/t0mmO@eX@1Gp@@d'ezb'KuU3 mm@Fl@l\8JI @\E{ FӡAmm'@9A@$7 br$A`Տ maI'@'D@^#oHHL}Kg$йy 8[ #m`1@ FJ $?tZM$#;I$ @@ $ƀ`  Ԑ @ ?s@ I4gR# Id'&^X/b?A `dDI B6FU.9klŃI$@@6\O#̒kHF ٍ> zi6,r,HcЀ @5Hh UvPҶ  F"iܚ$-2,mr`jH $7RI&I$dɗFA8?R p.)%qwmA' (}۔_T+K*#@,h@[yM<]!ZŠ$ iL.#. % ,8.d`.qwQd0Pp/{Jۀyl'(UàY<d6&DZr, w DQ,D FtQ>4Q"2`@)m DN=ҀlB@)@#xU[.'Id'3k @Hw" d()4@HeznȀ oto0yk7I@@I @ Ũ!/ހ`"\eh)#shb#π=%A Flo]w#CH@0|p"Z  @ Qi ' i,t.2>fh@r`$`  ?֗@F;m6 V@ ,$CAjH$W $eJY 3m(7نEDܒHPH 0{|H$I (T80$ȂIސHI. 8H $ yR: Hx ``+6E 8 A$@ )Hb@|*2@TA  $@ $Lp(*Z9 yi,(WI @|@9$G\ ~ \lof $H hbI&/`);n# [eQ/@AI$ M"B=T5W W [mh6Ye $ d[mc&@4 ;}I'v[m!ci$$H$A$K@@2 H(Y(  25̐KmY|m6mH H  A1 G  $$<>P^Is%x9[mi.xc_m A$H$I @ ]( $I$xX>q_2u@A+xyO,2@ @I   QV- I$I$ ~OsH,_F@&@  IA $ A$aKI$I$sg;+ $I$HnԒ^C;. A A@$I H »P@I$I$@1&^P` I$H 6`Y!\H$@  I  m-0 $I$MZ Se[f$ I$@rkNWg+CA$@I @I@$ GmnhHFsvgI$<d9"d H$A$@@AA~I4H$H"4ikiI I$@=5FWlLI$I $A H ,dH7Kd)|$Hx ;3d5RI$A@H @uPGq$I %i H*omHI $$#P)&i$7$I;V@ U?dm$ /dI1.\H뎚J`@$@m  àAږI|$=(  3%#ia?Y% 2(rm5m9 Xx\z$?8G޹ WI$;1NbH @ I(6%irtnKf&m-mOiF?hXq?B?"YI888I$/I$H H  fy +[Rw HFE,m]7TVtR#J $&Z4IXއLH R  =dݤ-T[J npbX%ZƅQmV2_`"4ex2g}$HHoȩ(x`ө ;]||&Mh%ƃ `"JX ^v~A@ 0-رdqL &ۭ@;OMR?;eUe`':,0y :|I 9YS~*Ykۭ%-59V\,x!+ny#"@l{seEwaH$El1sN7|tF?m )rojg<@dP}`xHAH\d2 $$RzWkT%C\Tmj$.o?*K2-0ߕmI$T!$@C1;!+3_p)?)ef>F mHXkzq ǘIF[(CoCI#I$0RIH $@w ZwCHaFKm_[H  `eDPG2j`РXNI$4? H@@$$HR+m(mR^@ .@ Ʌi@t{b @54>(F*fH!Dl@A$z|FOaH 6KN NKmi Hn݆4kI ?gM5/h,=p S$ \]2crt@  8%$`{\@I$ d6I $I'@/sBN@ 3<&mݭmI$I$I$I$@ # I$I$mI$I$I$I*.#b@I$I$I$I$@I$@ mf9fmKE&ImI$I$I$I2MY%xEmmoI$I$I$I$@o06@-j^ZSK|?! nI$I$I$"I$I-2I$I$I$I$@4v 6mR3_U13*$`I$I$I$"@U6gVBI$I$I$I$A񟷀*Ep @>l @NC,\";;I$I$I$:T6@$Uς $I$I$I$@: pH]>M DtM]omvUFT=?@@ 蘿$I$I$M$I-A0xpch $I$I$I@dh: n>]s%dqH=mLsd(`Bi@m$I$I$$I-o *W1h $I$I$I @@DLbJvm<k  6mm l j(lKm I$I$Y$IKЭ+;l$I$I$I$@=d PE"* @m` 4m4 )m HTtI-mmm=h* $I$I$I$@oψ'9(co:m¢*mH_ZnIO@1_$ D J $I$I$I$Axu4 H0 "I8iŀ Pb=mNQd %q`V崼mc'*y`?w$HI$I$@8A4e0A --  6n[m`& ?_Yki 6b!fA$k4[oC9Q $II$I$A Aa&8,1X0b#@Mimm. 9`xr.a@7^Q"{K2ؽҺ^$I$I$I$AATN48?53D [ A#i .n yXr2iPBՀmvLK޲I$I$I$G/ƻ_mʇNI$I I$A$AHL8?:h _&mmmH@$ nfEˉ Ē IaI$I%CR#tM. I$I$I$AAEdm 1ʳ)3mmm\$'P`>=u Uk㺸N.f PuHΒ@I$I$I$Aw[P o$@ N<c-<0E4TZt]Iz@mH$H  [m8,^` Js& pNI0 A$H&l} -`lpC$2$VI$@HKy: $$A$_tQ04$!=ǣD B@ڄDI$rL3$@ H$jmeu`~ho8P (#4OI$@`:3LۘO_0:`2u{l @P, MKI  $I$H Ξ1ym6bWo^m5h5b08M@I$  p $I$Kl6E-gw^{뼀`8 @gmADY$I[mi {ӣ& @`( ~J대$=B* $ %2[lqx_k ^(."` p\YE@$P8@ KtIc` IdYmra?yemrIX9B]a H$UX A^y.3?5BH tA \k@76/ @$$Wr@w' $I"$l˖R"^2ISŌ)+$ $u$I @$ /LȀ(ø`ڇ2׀ A\ ?, @ 6 h%r,(bE $$ au|dh r9{?7;a{@$!44d $I 6IޭdI$  $f%S2I@8DRI$I)p$E 2 $@( 3 v7[eA@$@;dKe$CI"/p@d(##V}?o^mQH p8` kK@(Hl}@koy!V̨DT'kPz'aHo\>!c=p= >(a\ezeIPJ i+GQ Lj@*a7;"M1*Gm7y>hzTE "Ǡq[⪴>vMkc1++ $zt!ST $@%P̏d:)HsJkD@V +$M< ma]Mgz~Ɖ˲bɤM7@$ύL/}5\,+='xZ9= 6%4i)PM}9 m W}}$*VT>KOL*5) FJݝ 0ߤlYH&N j@ .!1 @AQ0Pa`pq?0㻫E/7R659MO /O[A?>NF3><}T{(HiR36}+^)xX%9jS ϻbQAWCf :'***}ߞ |{##C~B.rtywy~}p[{D&!΍h 'FFFFP@8E|=1Җ+-F;Gֲ#"ztѤ-0!34cb؎Ж@'SAUBh9Sa#Yꢴ)p7]eDJ,ell EWق!I# ܢTI}# ]O!)LTo%g眦i Kd LgM4T% tİp>kSHVL4FN_֏T'?(B( ^F'%bү$գiטH,x@=bTV| H+X+oE"/Gm/x"b2c^}QyZ/} B;5 vJO\ ^QxhɼfQ=x2ih[`SjC1@`i#0GMOF IN5HǓCK<0!#GA *SpUC4|t"_Nٽ aEʌ>3}FƳ>~Kp2BB,3%h\iF|llZ{?|4Cٟ{j$H"?*CFWHؔhCtYm ,^ @1>3LkiZ ~eH\ oWe;HֹF҃|*4={{Goo 227F8X2:ݣ-X-2Hy6CO lk(̝jȉdI06mt !J?=&U,bO?*fdT]1\ tgSTp=52 ݦ:klbj}Q k#\DT q ̔po"wry#x! 2BMyD=l~qEd5,7zD͆Պh<.᪉l֏P,p *,E0l$ґzYQp4wn~Ymn12 䗲ϣ<@?Y-5;FKɭ%u #eQ1pѬi *Shs\X jO Z2a/JѠ^ConXƞĆK uڶ!$AQA/([޶, j32P{8dcejjD=MĘ\m5!9Egp6hGXi';xI(V$G^pTCt>2#aD YK.Ͱ[MXt3HlS^.t]+<cz|L?ЍOR[##+EY6ȐF13"t,?bZ=q'^Yc< Ei:k$}hjdz-9m.;JTy(1V%^Iy-4F&׹M s٥dR-(7Fa=w۵PƝ7M?PQ+{-D3*!A8u0bcMBS.Ie\΄{=l[/b c!{#Do3x&> FO[_AI$I$@Z쌐Ӌ"7y D4BN Fʼn6p/WiۥFG+ 6 н} B!>NZ4{ G6۝BbİAAAARH hvD;bH* <6ɐ<Od'0j@ͻzĎ}E?Tĝ_Je^i>&.e#[cEF~h(lr6p:Pƣ^؄DqA҆ȑҐ.y^=pU]N:QrƏӿ=aW J b! ؇|8* qAt ombK!0cW2 p*<:[ [ɀlfdyG@Ib ?Kzƴx~Mo20a׏f.7 >2OY}c'mfbZac/QSHF/ X3LU1 6:i~' m loY%ghNQ J0$DCL 䯔VЇ^vi22z/d]_K;z/ŷa]cPx>~:#Q0HZZ&˵L^C 92g%,7r"kCv"[0WFR}<JUFء] ~g ,}?&k2WIGG=1[$f \Y9V HJWs(,!5 +Y}]0y ~h{ڣ@Pӧ=w|Q DU* D ;>CpVH4#`oBO<5xDG!*z!Rt a׵.TB(De"b@poO N륲FXtR'4lHNȜ)!KHho*f(!ذ̏VV&Z]'oV`d^܌ -}B]FI#v66G CLBQ?)Bi[R/5)' !}k2ڥ26 ;G_15┥)KEM(QOV}O,`(7LNcG~Ld6Hvg+2dA)CI\[猒 zxpTY@=ѢVALAIL</Nb$ËBf%E)i\hI{)6|=hxIWE; r|P|Ex"NIA觉GaC\sSȩ J+DLNUc>%lBI 6W(ȧͺ$ -5ܷ~h:2xN ϊh<4 f6lym pg)yBѐE1lI- tN7FgX VgX~ƈZ]ufH\hDz< ٱ0B֮Zlz[Fϳ UfFCQ†m 3y+GOɁc}j|$i xDDA'ZS~z4AW\{F$$غ/\4bD4C_K,pA_Y뜼J^S]ϊh<W"Ȟ$#'#BL 6q3y2$!+y:?.2^Z1Ĉ=|il+N9   trb!"X;cdN(im{ƴG腭ckG;-.p<3męHSpűX%*ن4PGn-G+cԏO v5h!\ē|ZEc7= l ~lӥUp#g;fͮ0'zFݍpoKVifr C<;uE APٲ qS-dz[vix)5Qua@j䷨BfCBo!+l| 4F! c%!/n4!M c׮Cx:1,̈́ӧ,ɪeYC ]`EDKlI#&8R1 D4*TdFd<ƥw󣙼ƌ- "s-snӁ4f>(\Q(yAӴ44㨻Ƒ D Q G<3 [ h^, F͞oP~fG/(8E6 ~_d{ʚF _4R] 5Yd/BXe G-:'UTND'z[CSCFbNe<}U0Ă D$0N<#T"'SX24{3`B2ٴ C_0.&aXDx5{ѯkB^{B>eo M]1;\3jKT|"̱1b,< Pr7څ֏ ?IoKB Zqd 3rXpl0 M= GAв6Ͱ6`Aӱ4%#jRY'P- F>mI!#E.KBb7̹O$妴a`oU4C1 K;}%ON( Ah蔢ݪmA5&TkQ*C"/ fc$mǓ GBd6k< Bf)Hbֆ_-`l'ZF gfhP \16cWnfFPxaEB|Fe`/"&hcVЊ4UcDUTɏBbbe6RllbBdhhhoaQP5bbtNfuԸ\!|#%&rq. áe^vAKq{K*FH5YAa+;La5.  q%APMo' I4(1}HU $@@CJTOFDȘ&TIOL.Մa^OLCG1$d~]FƇsr$~`b,#HB)Dmz2le)PL4Cy 4ET4F!o~}k{- ;A?G%-z:85,W̵NJ&u!F2>1ΏLNe}}-*1&PE xͶDŽBSCFĬHǍ}$9+ pJ- MŜoM14b O^hh7 <2kC+W^ @c"+EHHk a(ޙ.=/ ~2Q'L% %4g>D5LGlc#4(/C&¾4La]e-s+x)G_:=WZMd{s1DAG|}pN!9JR]YQA b ^ſKca 0ŝcT{Idn 01B3HmY?AF;@c IG)/R~c%hM]ec6RGkI4!#BX!AbX 87#ܣs%amx-ebVWgjF ۡ/mFS>;Plk=Cq dIHv1=ϒuSiL/9eXi9_\qMR*X6&1E0'O+hz"KAD[<W`BA'ƶ!|k@)&\r X>4#G. 0ь%N->܂UD7k}rqAT*T$P'64$!S-+froghSb^vd[<Docfo3 JAPT&0[4l$|1*4Gn`h3Rbk 7e9:& ]}CҽC35wY8ٛ!k##[&'(%p1-f(dO+PZŔ9TB vljq`WY~Dƙ PՌa)JR $A!ծk!$bL-#G?"ކDB)zj$o,hW;Ȏ;U722v9к|r@6ȚZzY^N/"0A"P{tg{|ZBy)xHX B}  t&o3)p5QG1cޟ?ޑTΐQZz$b3 ȜBgUz/&Db>aBB A!sHݲFFMx0_F?$A%ѡ=(CVVZRdǧ5+fFLsc'Q9Ip t-aɇBdЖ3;<H`ݲC\|xL2 ${/N4x+B0CYZIX硱E=jvP҄uDkVFf)xK'~4êqBrBQ~61&@BHen_ jJn<݆ c?AVci>$iBq9lmf eؔ hxe DD2& آ &M}G,JR)x7CEc|?XbN|缄|,!,;o4H7("po cڌN\Ҕ!e='Z?K۱ Ez+GšED ^F·dKZy[z*0b_A@_ԴWݦZf~`YB2 O4OoE#jĞXxCm+li2 &QfoC^đ$͡i'"CI~Ö$~NԩHDDlF-U?kBn(6xGFP5;Gl#Bm+F􍿐`إp q`PܪC y(oW؂-_XП/5/+{ ┣|fi%d1󱸃֟`}B୑C"bD!>o 7iCOmZV1'[5qv WXቐWRG% )FQq*#%lIyH)%8~_%F1(;9Nv1lmL^I<N(4'- C;nIX8qpMl4k>HB‚L`X->?A"aIrюL>:G)";H TK޿J2au^ gg{o箆W+1_cB -~~ >+v PسDׂ΅ީS1aGın CEe16 ϗxz)l@htmd+dY_jcD˲#CcAbF҉uĝoz[^D!5q8`hBR `<ўZhBld%QS^>wK#6%EБi 0%_QA8J &JD=r> cc^c>]j|mz:/ﲶx %6@|򘝦1h[Q,hLc&Z6%QbL >BGhj VgK] JSdIC mvQc7Cи c/zB =J6.R3ر[ ʔhaQNvEe|foF&OOx(ђ \:nNry\m{ ~.'op͈y-6]`a œ&Yܷ b cȵ֍oN|V1W!)zk BevlFc{24j5KqƤ#MGC&7d#Bhi=Jl\scuܡpb7!e c-t'b`|`_u12}

}F׾J/>%Gŗ̛|=G*BL-ŗo#EɑűadV`$15ב;ȷצ51])G)ۆpyq8,+7 Af=O[>}7˵_A. b93`L>`N0eȬfl+{]3iއٍo1<4)J:[6R>|1A!m!og!qۛu.>D/'4EĒ3o4|#I 7d-#CtC7U 5!B#WLӆ&[ CDz#I~4k|~BZ< ͈BU.)Io cd!CG•Tv1mGc|T'̲(:\]~z1H(x]CBI)f\$1>q>6 bƧ>5Pgl>)πc 4BpBqgQ|cރ-DBz1?1!mM]}tO r? { ɧLM'hq#655쒤:|y ߄[/ i T<|!8J|0n BN'XmFw?H؝K,ly B['cF Po~4BV\A'-쨂'y..F.'8K_=ƆBHШo%F>s>gh3ӅBSf F'mZdYc!B4v6DA].1o$>5x涼PEddKoVb_$u5F'R`jw{mpV<~4.SC l;|-!lh6V̾6NW Q&B Y$_CxۯCO#ϘG?Wfxnރ&1=?FI|QB!A >ʫ DǿQ<'cWDTƸbBfgN]Y$8hb?#fVM=q`,kҏ"`-n2NÄP`C^6hOx`QO5#)JZy\Z X[B#DU,fC!FI8CU D}(?E?-(zϠlľ!:8ju0≧ "ѭxyhh&x kDYoG`Ƹp!gq Lq`n"E[D|##E|xK/ ?XNyQ<>cB|laKٱ\^Ŕ)YCËƭާ8 W%S< d]־EhD͌|͞+ؐ-17MkC.)SڼQo1D5 &\ |4`oj>_ghY]GDUN1yG <1+JW8{ hj$b뺥[2cУ7Xjܻ%dpѱ2_qx)xE)JRcwYYo" bLo,)| "!b^8BfI@٦yfJ`71$Fb+`)JR&Ym)DfF. @^_zȒ=s!iFNtH^Q%qWQ!{ye|$ތvaUeO81@ID?l}L5\dA:ZĿ4!N-/N!!Z%Fap90eSrKH 3нѢ<᯳'Av{[_hn8c0\Eo}I z޶lЄ-{CHȞ%b!8Bb!C.HN^-t4sbF"2jA56dx&0% :b|Q?cL0B22Ɂ&/ vU!irSh7:OɰQOLeFƘ9ݱ熈g|mS2d!N 6Њa!ACDz>*$&(* , qiO(iV @y hsj! jf}^tFL8ɱN8E#|C+ۅl' |CQO="Cz ? !l4?&t47y$%Q ^F<%R %+EFOB~Bu`̋޺c" n3$%*,C\&:q⤇#Gyg(/1$%RlqO"1tL0Q+E?%œ1.і8Ə+ g?̆<>8Z;hZS)$xGZ]ď?G~ kiMZ eQf5 afcvgZcqlBpj (3o2]&e~1¬DID3:)b#cҏ"X CۈsUmFFx!K"oi?1aL/m,^AEDZBdS+ȝ lζt_/cUCǨ )Rk7(bie~ b |/#cG;02l!$J'!'Бkh`*k*k79-x< SR{K&&.5.1z ^ I`yˢ>j_m>-73ˍ\bS(R4 E 4"i5'"5HUJPBӥp>"cؾX.X0V:&FL#16\4p˂pO>:[8 F>L3k BU Ue'D"}":5uQ[WL/BhG/?|RU!t]*Q`ɽ7Z|\8R<|%D= O.6 -c<ܑRFtĮ"T=^Po<)D2%K"wAވmFUqDxz5+ [GkzǴD  hnѶ [!oB^!#y~~1Y#KQE@w4ǭE_J\aGC!Fy4&:l|^1-sOcebhx'{"C RDPڜ<q[cp$T{u3 N%ȏ(q'rM <6#ɸ͈QF,6%Sj,3u-Ƃ|,ؗȔ0?_#?!z:V )| " ^JBwKEyh >5'ٟKdP|V'Sῂ/^lLtF%Ljm΢űANmÂhLL4A 8%MG Gh= 6lD̓yGDNC7:1{V?Yn!.TN.RJkf_ HI1:-ۼDs &k%&!$~Enu4b6|^L{ QRbN+l\3Wlۍ<-117BPݧqȷyPhh7~0`~~vv 3$%Zl1 {$gnu4b6ch&MqLjMO n4S}n2%ᴸ4sa΢ɳ~-?j8ކs =2 Ǔd-\Q%l՘(xaa6_,$sJ,\$iKJR)J^/{:1lyН[N<S<&0" 0Ymx,x`3ق|hXRYh&xUA%ơ*PD큆sFIEP%%*_ĵ^A:vJiAPS&5떉я] b'/ a,[PE5V'w2aEp>BtMUeUeQIs:4M5Q JR3K A1FYu_ *k#^C౱.=Ǒ)QS-\ L3%l~GL Y+&coX m:vXA1vX1bDEz)Ql&+DŴ% W ƺЉ ö́#2aD))Ĉ?4A I"T! RiԆ?OXN^1#EL2i{ X\{5 -ǴHVDAX`'壴><ƐoZѿ}űH # \1?&DN@"M `&8'x8A>ER낽p=EE#~""(HCoc7 *=5X "F k׏"h\/)CQ)O4kH{Z:Sh%%䫡L__' |,pAqxWfCbU65ml?~?RbIӔ(Ua'ofh)hYCBBQ_'[Q "L[lHH,١Wui pG*,Ʉ7aocU<"H'&$%oh,eeOj!,pƕ[ѕrϊ[OblXO#7plCL3oL5!-*?)Ǔߌ23,R2E"FIЙaQQTx/^EJY &<hxdM&L ֺ&L2dșYXz2-C =4&cL>?67|BLQdXQe 3ʜ,b%BE nCUߎ=; i=%kOn*D'*ӷd D~&&~DzZCwdͿD`1iB +6hHH؈} A61QdDD =֑TFױOb/c*zVųC2dm26J͋Q@(hxF/cFѾ6$ob&8Q|"aJ*8A-|r$!ҘG44ͣ6iXsh@Z?8o+B (QP{DB,k8 ᑡ^ɑHQ[+XJTّk?ĸ!>J&RL(ժUC eS6ٱ3*"m!2r ǯ-w}hǕ=nɒ2> rRQi$7ԻCMA~HbQHOmC5ׁb_-3!2?AQțه1Ƒ}DlQmAko*0(TTT`PF ͚Zhp%{ 'D+ bvI"(w;N8>tB Cy)JR uB3Ŧ(+O[;B[Ad~H#F jx+' DDDȑB"POyHjG$'O¿,kIln~~~~~~~~~~~~~~[ ֡+I6mz 29 #I$$H$Ix?0PlHIDE??GLle8KاʤFdl &pZC2g2&'d~ї=_<'LABQ\H#^+&dk ^iK_C|¢ iqYLD@%_["<Q3!!i 4CP>mcpY Pk?}5\ X׾;OctBf6ɷq<HjmKS4lh*'hhO] X5I$6{NY̟Fj$3"Db?`G+wC\}l>YcȲŽv—J)zg'@e1P(įg.6 n$c7!Ȣ$C8rBk˹J*WBƸCY;_!qH'Uv '-Nyl!m%bR&3w$ia ,<^'+Ngl[B|~B톍Ɂ.? %Lüx[E6oAb#1+,02녱d#mɳP䠄֕.2x?AȪ^xWwh|^oRD|Q>_9`|D~|[ VMTm*+hĕI.Q5KTP2>  7M#w)oh= ]rw6?c"DY_AhlTm%mm T@r`>27{4Nt P%|^6o"—v'^+<Ї-b j#Nz㏿>ቯKDd9em1sfG!iFR "qe;DDb 9O{u?&׻ FH&x$N'i|z ;!=izn J4~f.S=F㾸?-F%-di[ܥi ZoAluoCm.E1]3H5) $6ILHH}Foؗn)-E̓vpxQ cfimm?;ї<w4RH*1CFHTaw H˅d>_Qn):ҢAz Nѣ .XxdJ,|?$C|47&#gB)|2k-#X˜P] x_WHLW+#<5!Y],\VglJ}!ݠ"t.[GOctE  ao`ֻ(䦇ĭt'P}4H\ˣZRIG{yB?3hi/w<84l-6$aeH@=o _|ʳ@)nԇ =wR]&\b'e =r#0&Ehli?|{GZүTQ#&J`jWmd'?$ORt6jI#u 2J̴w@L<-2 O"5/X':O_*clMP,*pDlR_J/J/4QYWn.FL[4B0 q6hBH^F4d!A ۛ ϭ6 KM=wl%D(%DJ X ДFBL!B2(%6ٲtNgBmh^ 5R|>6Xѿ5<Xhnzg3І2!'!(5VF(1 /DU U0 fAbjg9|1 lV"!x9dӞ1yvKS}7bH>[>Fv- Sh]!1bֆ{&B ^RXZCqs<"2$$fK1`z/2DsV51"JZ:l,뜈)_ j7ڕdR-Kxvv8)#."ocMe[ k$0Lb/gldi0x&[خZ>4M/4A21ge!$ Pń'afPr}^<]VCLAP1bv-E{U<·d@NힸCeg Œvyp-,!=RǷ' s\s7H)GۦDY(PbU'&Kbh,BBHǿ3B&E`(M)h7FƫC{3uEECb$Ȇ^‰{cDZtʆF3$$!x6)ޭ.ok'гFK\< jDt5FFd4īŠCuB$Дy/pSnbV*U3\h% n }NЍvG)7 ,]5!>X۽8Md@b OSZѴhXn N.9i=x| iGC*Zmy(JPy\'T5 $W)N _hƨX}Mp86b,b#~qz wuC(|n%X1:TBqSX<GHfN8y6/ob(f on_ 'V,5;u69k- WūL Ym H(c'rv*?ذf,k.EB\yJ;df8J,q<Ӵ&cKz`#_6Z'D+f:c`-OxCm:; | PI# L"7@6wx5R/A/6.!1 @AQ0Pa`qp?/4O~Б'N% Q M JЁ)ٷѶVVG1R)y/O\TEl8-ytgj,&C!P's,jg=l"CN茌B >6M=/KUA;B d)K6>*ƭA#,e'ǿ >ďvFcD-lJ21[CSB] Ǒ&+쟑OaJ=]|u" o B -x:ټ]D~O}/AxCD3|6^'l6,i*<=f)M"^D( `pcYljGԥ/l|FxdZ1B` Ӎ=l <1?qWL6L& 8Db F<,b4 }W goyE~}8l`xtq a(> Xփc`|spE'?=x} zD~aevB4Kl>'>%72~G~ PTBZ@M3VTd^]J8$2"9Zdթ`',@j1$' ?C\z p2 2V-C_ iEg-Fiˢ_Fp*b6{u2`'AYP6E_ F|)/ 9%G=NXlQMddƻz^қC Dy])┿;/Nbcg H%Y7 8Vp?|iQD-%j5|k݀яl:Dڳ,Dl 8h'K^D43a4VF#~ e'p.td=О숡Dݳb8`%!DmXbzUV32 [/< L ʱ$+ڤXoO"n/4Q!RWg8ȓއ6D1/LJ# lclbF-||O F)ij۩b1-`о,_U{eO}Dz'Ѕɓ&J{ &*:hdneZ{ 6>@ R&!'Y] l14cہ؝h|7J1d_~1btmŸ> -6b֏B[NZ,b>##R` hki"wWyly[6AԤDS#Oy)B=y-C Qsپ{ |[1ƻeR_z`)/O%THi>NtD -Dm?h/\ ۾7} qпc='D8N8~J-no%)C eLj(l^R< &6E<P7?c.c5^z" Ъohg=iqYv~<i{La= <ݲ WFLU!ݫ3yC!i1<|JtV1OVPϦ$|cXM 8rZByGO*{v/CJ [)m#x)ѩbi뻃%Lu`#2{2+H%XoᾄՉNK0Q^ @ͧ/BҢeqJh7K\7],J0'>3Lz $$\^ N'HbwZVC> C,QBB1ʝb4lb v(QCQز"6w%Nя{-]Ҙ B*uL` WUW$kFskS"LwPH!Bx 5x<(̂(E+yC᪍Qʽxo{C*03lyz olmJPJy1Դ1|،ȍ#.$Ie[l(*m7`d"L!e!} oF>HT<~^_cg;>R8,EDdl2e\Pl#@7 O1=6-|eߑj5_N :'>ы_7sCuZ0 +gjk>N68#{5$eMXEAYy&o͑4E+hEz+^WEz+^WC#|&޴blbU^L~z&!m&|Zb~o%[+Ӹj{\ wv{bcE! C|%nRuK<(y4QED,ȑAux~s d;0S"ʃ cccX0x Lb}Kfp a vdZ[Wɀ~ lsamhvIeVP}؉xRS)ϧvYtWSMGbcJs|c覝q¯`5оs{Wbji ԰5+hL&&&R26e821=+g4 SYF*5DeIꣶxuK:FDPW/0biT.)O"MnI אȻ}('_5Cw{!:ctr!%+BۥOe)J7M+8^Đt•}cIŁr T$1iwOCU,!'o2&laHkCV䖽a*؞.Gq ֈl3Km8JOvZdB^-d mkiɔ:O%1[w.XB -el茥 l&/Y~of"0%Aq2 md˥'M, z؄4Qud%<0;RūC#MDЇeڈ}"TXxD~\}=ف}p=W*_}\Fdïa Y}sTIzb2,I-t20ў/HLD.@l/( (x41uQ<׆.QAoH|,,ȠfiY!q1& :Jm/ pʱ'BR98.ε ag^Gt.".Vӯc5Z$H1Xg~2)%KB7km- Tb*ydBt JO z 1kl{(b8<LcI&BVI2 `( Ym͢B$% kZ;&,MAREX(0_d'"}X1"=R0#k(jmDdy0c|x^`EmHpC82kd +HsmB!7)r8xnй>Qq綥$6ěDj`xtZPZkKdSIK/∗eK 3C1CvR~ȷ{i~%jTm6}n٫#ak,J#`ZҲأq%DL}2e UEx"'ءЗhє8;%C UqSJ=|(a?Sd d/9cUcqQ  пso̰̍ߧPFz>O)i,Qh8)x$U|PъeLB4-Gn6{_qDIJvhOZ_%)J^v,^z ]vLaHXN.f0ɪnhOY [?hI,."A>}j,ZƈHa%W$*`T146-7axKC7ȯ|- E1^.oaEF/Fϣÿh>%Q< \ȿg#f#CR!Y6ۯ&z2b|  X4ȝ]<1a/moma+adRa|"$6ى͎>i3o`+LV&$i6#'Vt=:$|۵[݋ףa gT4ԍP6ED, GUau 6ī!nNhZ=fVIQL+Տ?Vzۅ ;-¼'4qí2%YY0s-n &6]6gt.^.^Gvoyb+:$pLHF-u4"fq?C?c!||d|,ƫ#bb|8Aɠ~!#BV9B^e%ٷ uVo|ZX pZFI{!5'>.]\>t,KUB4 hZZCI1ggʔּb@C4`6N Jğ݄%#!cKbK"BbK[#d;D:׶I]FF) @d?W Q>fkѰѻc%Fő(.CWES "?(9Dy&-&>㒍Gbq-'Cؔi O>m$z )|*_`B [exaPGhxXR, Z{ԸvE$i 1܆(>`*n$4clj1;~Mz6v#6=wDWhqL?A c+3N5F8舗Ze]ĂChhrT$}"ad{eYlWN![![LJˠJmpj D8z_p͹0$Hb" jCT(,a\ z4 ᴝFm\baٮ#fx '-lІVI< )Z?FO$_5>?sp/9fJ8JwCD,'SRncMP)XW ͒:ApaX?C(О"V+j<CЍH"x|9m٢o,:5AVILBaL:^8YRBŏ2,pjjjj<84~12'θ]>! %?$SC['dM 601W֘|XSṚfI3hƱcGǀƈr #l&nX.4n2TpeobyՍP.g0xr Kx9 `F&9/.PT l놛.n 61 A4,A" _60HOC-Xyz"x!cH2V./͠I"=\6˰Ȥ$-&dɗh٣BL%k.('0EnJ 0f1T|Qte/VݍH 1&E%(CTσb "rD(b#)RV 3_6!#E{dQeS!a8b^hʿ. LN)eDfu[.β #{CK ˰I#",_F "S,q ޓiKP}`KEhXI}-ʞc ATcP}HX Bz\bC»;T $2?hOl#^pC+>a8;r`TB򆭉'ȒZcغ'Ա!1K蚼 L3'.Kщ%`J-c迅b/卒$уLw:!6HI`ܲ <Ƙ#%)^*>"[(;k؝A- ě0B:-¼7y숰 M bfhU>hGb_BٱC^Ħ3,.Ay' 'Nت, Бw(^Ѿ)ž[-kE*, z `F{B] /h!bMO]覅,/Q*-d^7.[QD,|lS1?%-c̉ tTK!ʟ 7=DǑљq!t'Ό67 k7& U("bشF" k%GQ%7x.j l jI䘻 !>Ga|:0M U/fNj KB4 {*boVdI|bUMoNI{[~xH*%(Ny3O7`Ģ'( 8\,wSRdI7_Q/.QhdM"dc^r Qax3_!Z 0/۰KBE?R&LrPBvB3Wנ毄> sB4NeX&TpkBN1۱J?+'/!Khgx4LYuLwOLw&gEIZlElӜGҿFBMӽMFYJ7|/º1//E(8ݘ* _eT+hL(c"BlJ| ݌28䦾6;5bs8''$z}$5] crGNN2+z b.Gߕ5xQJ=>\a(66RAFS2^ Z]&z] JԸƍf٧DY&1d}:+qZۄ `x.KJR WjA+l8.&-0/H0J^!p1AfB|OCihn: 6mX!ٻ=Btr&`13& /;h< }ߌo cefXۚ*hD<}+[. R6^#akҨ5ɍ_L*mxqz0?dZo|#ශ7e_E cF4JR07*)E;I5 |)z)J] >fz5a[&u.L!o"]3vS 6B~ hd)V$_tN/"G{Դ)yÅ8k |PHHKIim6C^x@1dlA^ǵ 7XҊo,(B,A4/$|VVG=4-o`!qcZ#x)JQ1_gA4B i=!kֆٍ)>[3qaYYYYYYYYKi k.Eh6 lM0ϲY!B"BBBDĚk(sV=6<&̏͠12o `ہwh^)x&>B!>($$$%Ĭ X ZBvѷs&L?_*BywP&/7GۃTAWa:v!44NA!!!.m| ̌)n \y6^bgS"xDFt bِB[Ƚ'P}3C>y! /2;e*14{Yg'E/c͌cG=KOb- 4L&hO5%| Dd'B '4Ll*KUHg0#;x2-v/1?bj-leh#nm-hls q@!^(DN0XfƸ!Pg䟁Sib?"jmXM=}pJ;Dz}j<9[#V9npmV&>>(&G؏{=K+bll|bd7ۡ\?U#nj**L @cbE~g4zb6jC<_X1ASYJ,}~/FB([\&h՟dˣ!|uG2`#Kb&5y)"Ei Wʅ<#n!+!&m6{!o`:t'~fkXX>/Ɠ}Bx^ 72 ϑ% z$m^Yb!pʄ<\U(0vnUOBV2ܧ!|6 WQa W.!K}"эa! Y Hl|Bd%hB= =u !5Ic N\xﳌ{! e>a51hh7b^OC@JtP|vG6!4Ad`Ч +%Dt>mlSx"L 9YQ KҘi \H& d4 X ".-{")ERe"Au<ɖF! e1cMJ̐H,MU&kp'Usœ4Se8@[zlЛ,Q<3=x N )j(!x<'BN$ n8f?ʏ͛"nccΌp,/n#-}]CėdRb}1x> sDEГ ? _㌠4/6-i$cp͖_|p!dz2?CFq55=UQhNjcq9MP7T]i|P?E{D<6S&.ڑy-O֧-eA\61p|A()cfBw}=gDc!#bƓ34!bwأe-P, {lwF Zʖ/'”|"6~Q,ۓ>ZLCkS-xCQv}1\1qcǫQLb}<hJ|j$P?Ewb+Qq G8jL2 qJB(He1Fǯe#.ciu1rǗU撒uCrxEKpbS(!$OϱZj1+t T~moWr</W [P\,\3w.SCY|ȽUxъN٢otvc>> 簏?Qty=-|.+}iCC1. Qk7&\nq/kByIBoW}CFF̦ '{W"39!'dm%V6tDϷP hqjmE~*$.*>BF1*hh|A\]r,Pu6$U%t18Ů"|V<F;,.q ,vNā򑡾T k\5T#Udb9 Hy|'Ǖ~~tt'4ؕ(јz Y}(_;aedcc Ɔ!N ?ɲWCU5P_FN.+)Ey i5k0ZJ.kFHyJZs#䬆>vF?@<!0MD[bV H41s\gNhJclZQ{43% dDDD]EEEEES*xqQJ7Vy-GbR4c!E6-1Y*4B`P9:ǦEQ4 [Ƅ-x?mmx"DDDDDE< "J̛tQeY_ B)JR |]#`--&\IJxekXɔ o&OaWQ[T`GKїOb?e{'BvVM} %|2̔FQGHb((1EQbP9,] c#4."I[5Hڴę%ȌH]>=kzCz?C\FG4+["&f*TU@NljޥIʂYEsJRbu_Y伔TK |>67o1lНی""\ݣq) tOqfl1w|oRGM`zᴏe=ROT1h]rG/lLZO=Sy[ɢWɞ>4b^F$zXN>!)*El0REIz ǴW4e^5OBb@MF{@EB u a!FoَToa|:6CQK2^Fz.0=V!e6:іȊ) $ *OFz=pЙ-`P#O N}*~~~'vOX;iDd$#цR/a E RS#BD%:oQm 51L2B!+ 4ޅݍ5R 4(`NK7XŮ >aApO}x Űi4_5 ::^;l|+#OBqD7)nМœ4Px)J^OьF % 6=jfɁl6(*Pp<J؄2!ICKR !fJ҆<5CQ !y1072E6$/t_1?ѡͿOG%k(yii 蕫a W?˜f$ˎpm~Z hMBf|0^kJdQWȆ,|dGWk->or~F: 9֏0|#GQ"KN85LCȅލH6Qs5hBEB%g 7il\04x2GPY0 QtFlR[eS,<RnDIoJ#0| 0] ,l؝U| ͩ 5lo“z=qM:Vs _BZpB4Eh.&ϪHn]#aM5A.OwZ2| =qlQɣNz% ZbYjPe%e*6+K\.Ux#= M\!$)l2 Uc}P\o8hQqpZbUbT=Tp_ۍAɛBJ"mF5.4 `DұYABcQRH))ѢD%`y ,1,% ǜ!k^k=hI&Wb4'/?M(h%%OѦ5GpƨpC'C\LfЄ l+ W>l !]" B B!B!B!4L A27#["Y{[-+ih\`!L 2@IFzqq9QQ$| o, O$|pFκHUH_UYEbQ \ pgG{BLdV$\44kBXHHDbqKG=;6q6h@.I ǵC{ lֈJSZ.6XJ)j= 'bњ ֆ_ L.6du  k4և<" ~(bR.K̛N-BRdCGA&o!-v/Bo NScT aAPوBdCCCDdhM-q:ZBE鞝 n-zqB1c $D4PN~ x|ZE+rF"ղ D^P?d?F~?~g?/HGgg?_z_?- ?_ DѬof jbKk`dyohC*czz"E 7akzeupBs ! BaA5 Ĺȓ'Po$i#C/=:=8[pZifF&5k,jlׇŨSt$ )JR`2+IhMl?.+HjB75ƇD93^(q ՍHk]Ocɷ_'dj!N'0!B!B `Ycw=XPN? ')M#ɐ#h0oLl|m\dɮ^~\N`6 eUL,RJ3cYE-/heajSAcVؖb#7U.I o= zܸ4]1b {ϟ{@!$!#0p Ob*_bHO2/ۆpv0mתz89oK**|TU*5q}{iF,#RA< QFG"<иp1(Qgc^Z''$  /ο,h40)*4jA$-?i'0y7B3H-|H"]T.اAUE^_U8bTDCB#ƌ| B"_+ ojuCBZ!\G4|!]_M/y &\1cv`8JGFxD#1jOv)Kgफ़vpHlP|E삥'c|+(ȒcJ{, >ntF&FOӵP+)ü''xj:uN6#< Cs"y݅%h11?l /֗A9 %lhCZ' r3[}HYC7p&{ȅFǐlh\CGi"?oD(om%>FBBy+ qL ^q{GOqCLI$OcI?yN:rٞ~!x$n4_|V2CS c^̉p~Ă)DKk,F9Q[aj=1e^?3ܯe{V9(Ϣ{4 xЯПSxF$B}OI|`E22 GB͉G oUԌ$FނPnBdȋ3ę AA|c#c/gV<Bjc;/En|Lla$x#ȴ COll"U#~е/Q0+ɾfC_Cr%x !lA$`eN! g!(7y!BBtFoH 3c 3dLO%/b%DG$$ɴ5&|5ГM8$jM5!mZ=?mp0cWF eoLk^ȘFCؓدB 7ū/hkHMhOlFE4gF3|m&ZA# ~ #M$|Eh3LQ$ɓ&L2gؔ2di1(d +@i̡1$eЅ`A8B|@ 8)zٵq)zdd!E"#SYU^Ƚf3~ RJ^,&4'$B41?| bz/mhK̿#vK!B!B!B!ޭJ'~~GO?NװG cP܃%z#c~4 A. h{ĨX_O-F~Y_+[{i3oJAA~(j4@$~F8G F&!g=1=2Q(6Q|LN L_9BNq?ԥ/[:Qf%h%}Je w_ʓA7ވn݋xbF)y?M;9GŨ>Jƽ7 ^/N+᫼f'+30yx;l!fxCO+/BНRU{'ݽqEoX3|P(oEe-eʩv( $KOm/B/u%T3`6yPƏ5 ,эd4w jpƯ'#= dE! q{uѵЙM/F.툪/D˓| G4IDXnt|VĖ%?B%%'^XFKI$0x-A,v otNݸ- Z<ӸoNY zUYhНP)PMjNbJh>?mnd[07;Qw_l#_7  <~\C -v9Y ܽ L|:}ӌő"cbL{GDlHIn-r$X/ȴ6zQ)Bd'T%K| 6jtkT HÎhKMQ)1{ŧ1\iAnibV C9Њ4dSѪņ>g3y 0Hwغ:hfTj7N L7:1_>}r7҅k LR Jذ ,Cɖ\ _<DGd6*Q/x-Gh ?h͋.4^ɺ M >:'y8_IF/ R$y = FUѓB1٦&KF%2MNB^̐c@>5Oi E5EBlm|ޔOsDk QcQ/z2j.9]) LƟ"fi;uݴzcYPQ'ա!!-71%;6&\-W;r<x6whپ/"wؾoR4OוElxfҜRrXh1~m!;l%iJW 3 Q0I+B˵Hb>!F _fa2% ։ԟ̘3Ӕs#_,MRͬ|i K/NwdAX:j46yDD݋݈􈖾帇9-lbE#jBPhѦ-N6$˦47vw}@0,#Kd'ʾU9< _O^SƐ.xB{6>gIǐ66X L /v/(HDU"1c?22}p^̓ogw *%3QUٱWd'7pi;OD)n焫.  WBSZcbk{ކC$`3~ }'+R'iՑO.J^RCY(&+ W!Y qKEBk ^  PHHljD=BHZ_L$-P6ı1>cZ~AۏH׻xk(Ev'BK)K/Pe]%L-sЦs}غ Bavw-`'blL7o!I~駂6.q VE]'\'h^ \ГeB =E{֘νLw!NlBv)ѡ;:2ٮOofzz g# /a*Pٙ1NȿCp0m0ԸDzCd#g#f b Q?+gr {$I$-E#9e5D,cdzmeLFPh,>Co\3! 623ToZ "E(1hkS@j1O47P+!>xOkx/Kq>~@B5wC}!>BZ1)#&F>j /$Io]p/J|ՌQߦ! D#i>(#: l#%XIC^R'~+_+ڶQai ²W$0² i7'~COŢ6諦,UE Q: RyGfƈCyh"^5[Q7T7f&! 4'BWVkf|} tR(Mاd)FA Q:+;6CM\OiQ&ċGXwsQ8%Fzbbbb__֓ jsPnNhH? I.m&? B hd c6QB #lhE Bb=vKhkƾxFy]rA4NDVl) Hk16x{AkǧE%(K\"IavK@3xzXx!lQ '{м{浨aIW24 YDB /,%Y'Y5W&ݫhhDA BP ?ͦQKrAO3#gW15o p B ֘%/ș d_jxqV>K)l6l|i;+CGhF醽p*o |C:P1"2BdN8hpySyBX<Б]{t[ h *%64bM AXeXĈK׸A}kɜW]M4&bSG;1U G*!c_~gf\ބkbmhKbȆɂͩQ:{ 1.j1 a%);V 0>"^ Q3-Qj"#e/kU џ#S6!Í (|!(-1a9xFPΰ030oOxD Yl@ 6K2Y37y^32Kd6%ǓޱCNe^4Qlm?Ih{<%! Ygex. "nj5k&0MJppJ)L *GRVJkC^Ӆ7Jjyx4U1lfld8ۀN1p&Cud5wa$llGCؽ hUm<UCG5 '—kZ7`6gBmx!$4BdexB1:"QlId WpZ'D$ ћP! 27D!5ܝqP(HlA^K%cZ8NpXt"דɚSxedd|?fpg c [ =~^3`T# sԢ6Aa CS|"5l5A'~\3 QDNZ/H"O`Zhy+ -FǾ@"uY9y[y $bQŮ]IANK03 ֒LdԭO]HFj a3f1ENi%!dч[oڮ6YD]Q&&"QmaP#o:@O+SSs p7z֊aYZE} ޢ彆.[۬X(}H.D gNLê-5IS&_07s#42DH wE!3$iv-'4h`fK,k5n^7Ω&&Mvu,{Rvrp/ҌJ 5Rً@0S)4E*pQ).iFUWϔ<1Vw; H!z C ͈ !'0 ZRR[VTùOAy JTlޭQzЦ,'dJ[-/Fr):֦h<H.?aIJ};sBV U}]DP^h4&r|V:(Í]?.b aGB=MxғX(0NO$&( rs]TZzrwM7 =+? 4,x%vIPJ^dgj*u5ǽZ~[T Io6\&.EnIH3* JQAw?g\ <RG@@%\|*DJ@:Gr3J9TZޔhP%9(<'Ȥ%1<֠:<ckDHrج 9= E h̉"0r9ݫMLbGk!=E ڔ q ܞM ~@.ƀ bKDtޘA+=H%[C`qP&Z |ԑ ޸P׍@#'%ߊ[JJ(PB4X&fyfNwVZbԞ.t%ŠKԄJ AR_VO)OʗҠ,1#Ʌ!~AMhQ$EJh 0$pP RKU* .trYp*:rab1K*C4554x+ noSq: 囩i<\$y3F9; 1F?#vSSOJ y,w Z-TɢDwNn p(1*zSg4,!^晤Ko&)fJ^}|UP``bMA!rny\a4uء m񊸀+ةFld6);z:cjSSypEALhaM02 (4|xWctQkLs{Rnl&\ږKVKRB[McL.0/,p5Q (EisRA1!++L4ܖ/e撅 (RP7K|zζ+e(9'4#^^?&Y ڙ0ߌ+ lhHkVAǰ>1zRU̷\7ޤh= V0frh3={"@\ş"-3@ނHQs.-Ə$8/EOq2$Ӌ٦V#ޥP? I LХ8Ot =* k?h(yA"{?U?z寽?dffIp/_Zc=j |;Oi^ ^`H0Ӗ4!̓<(búPYB.j$,$JiώeSdjRv,͚ @SqGj'6[O3tZʀXS6Dķ6hՁyM QiFW.=)03ba?ך4O2HHiXZ# D͢tmJs|cx+lZ?+#Kjߵ;9Bԓ)ķFtaJN&rSI^+6zKڒbu_a.'J)(Q|EBD G4˭G] jϬԥ̆J F< q5!Hۊ݇Bԉo$`**(R X\?8@βa˲|UDXlITŠ\,:v Z$& L1:3+T"'4)2MY,GId g٦1:Ԃ:ZD,ڤY #Ejٷ%V^W[PePnncԂ{S%aZ$;U_Ƚn.oV+wT?$DkX/(OVty/E8%z.'L;PGt֒C@<, 7f02NI2v 6ɤbI) Z&/p mgTi•sN@X7B*-B_B=Ґ*HQc1t7 #q P@zH8 M$ 3јL4f{=_?ihϥ03@\),{{ Bsh +lM4) 3VJAR4z TJԧ.KZT Қi )MFkM$iOP)B߆VT$[&O@5VVM.{ѠsK6`_Sj@7DWL=ކ!l vRё/zՄJDF!(K ~ x4?(eWRcEo ]Q ES4lmجnr꬝ڃ$׳ƒ]B 'eM]ATӚZ2\i̗-#c|% p:埨c;)*,fWISI(I { /y ?*2BH?{A-[x@9A:qL #'.٦H4& KN%{`' 22~{h3xF cstj>6v-%UgaKmKvԬ'Bhn?*5bշ835>,u' AbYL1D=#z~FLJS`J]aځ:J-硒L} !+Qo]o@E Kv@BnIUKZ*kC0pT  Y["PhB(x7:80D;'čC'b=M?ޓxyU*jjjk4_fOk6ҌX(n R/b7YavdJD<aq{L1#4 WWC%΋F % ='HudW GEu b`OG(:g4LF&CEP*ehӴMX,1o\]g@ϿTM4M4M4M5m=4 i'RtQhDdT$o.>(YDE^z䣉P@ڎQPl%rb7uT~Gl'O 1"~/Htg53R̷^r5|gRh?Q"p^lwʑeoIɜ5y _&Qgr@:5#tq>tRcS)y6e(Ջx2d%e&l)fyݖZ$dM(vY CX{~7N-|.cQK4vgccMqʢ.Ѫn|^Sk|_bBݍ|Fjʢ`8 O]^_FVQꞢϙID]i>kQ6ثrF W%A yU Kq- AW!ڍޞGL>?i%(f 6;-ߺB4|&HtGJLR'QhkNFȒT mQ(Ĕ ;JE~/c(Ȑ.Cڢ)cҦA5-OB&,^zd;(PB "L=?9oR,~Y L?AYp#YB(ݾcXSBwDLI Պ6,K6ma~Zb(/u 2=Bf5р!&ΦHuZ}0S*h rFo:0Fe;*K i@' ʼn֑I0A: ^N7鑒7فf)G[+Uō),I}jiM4M4Mz?ۅSqPiG ڣ>zU:@B.Ս`L Ũ)$(  0VlTCC'Z4%% T١I;Ho);rf,6 = уQJX!fj(.OB=x}dzR+qŸjQia*\>E\;X,wM^zѝht'*jEea\!:=?JwEOnڦP,FzG+yS-IS #A%ܯ̯,NUx ?S9F?d`DB<S@G!G-L)RMz:9=k[ '#dJAik77a5yFA&lpAkx:5$}3 M-99Q&fc7YU[_ EI+u?-4ڀ@@v񳗔QG"(}1^ɓcE$ߑ2`)FZ]\)ҕТILFC>YCG!˴T?]3%Cj mBJf0йiqKj'. )P ̱TdIIKCͨ" Сs0y]v7:!`m^R("]y@ք 0h0uެcc: 97<?~xd9q BC~d_aҢ7$< f" ĝV:&ɩD/heZ!!m{a!n):E!߅~@XYw*!FG*<yF$O2~P0Ku|@lSb)HPNZ$d{>#VsR#BI)I62CI#03=Z 0Gb?jqHmv]aJk -'Ľ f>' d+'N!I44 .iP۽+ z.@<B!SwpB_:Q( )vA"C 4d 2BOUvHM4ъ6)VxT4PiG&7#A1x pA殤[dC:ZM%NS@Eߪ aiPOk^:ʖZ'P飊WID{yZ1ʤI}7S4uآK*E>G=8Y``)!$Dvh!Et6pͭ^1M@KY:_SwzVƈ/N!dһ|7/?޿CM~P]<^uEydaW%q(Os74EX,PSFp4O /X8,u뒐BM.DJp[8? hOh=BZ^)OEGހIU%{ b&~UlgGiYkRT6$s4+wKay( 'JJ,lPga(*e_*G`/~LZ0# D)%HV)z[( IC! (J %: Kyvlf|ғ=DX֓ uޥڂʴ=h6aAEBa 5@c5*Oz"N*a0i4V`&),u7*TUw`nmC!zEQ]e.=h^Q?!J =T%WQM*,db>ǃPlj> UW;(kZdaݽ Vd6DJAtnO\;Lv/tE-'L3K/j''"V~zY`@ x u h{W= ,NyԵa0Q m)B<選V&lW-̘MHuiGQШdsս% 7VJZhVTJUj$ jhis:ԱTI4ף~WIy:E8Y"krwSpBeXC)GұwT ) L bwҍX6cL`E 8==H=D%hcֹ@ P *j< &ġ֯J+ KoI<ג?+u{PWI-1V,΃cf=h* r"e*b!Sk֩1N+*T z 0`@AF*싵^3搩 ޥ (IV15߆TFe=@mC-ihCm`oQiZd- Z&*J}l/1a|T03=E/D!b,wR5sFןFtug 0+Z$l5qXmMH%AzSF߂_zT`*dέu5.T0cPCW*O4k;dm>e]7Pjѿ`D0 JLͧYSB ȥ5z%m{yV"B}"2R$)i |5eҘs(C)W-!u=2P=ַ($IzӺvj.`32'4ŷSDNgwS6toP5p^@5V$ Agb,"=3ހ)(RrBK 4VXt)\AڗDṮwNKAi>cjU/Ի9H/ysIƂGd))܌?EQp>ڝۜ2JCj>p#BL%mJS Q|_n:4)x=gN B8 X F]_MۉyB{Ǚz2$$FGXv\gC8=,"*Au#`g OiYS@AJ 1wBQQM\߆} BsQ,N@mJK*CFaPHN"O_}hCL bm\} BtsZ[#u+IҡOaҤf+*|%\tQ}D*\y@XG9>U y}"ŗ|zg @4HO|:E01MsGO1}c%E7*k VwSG %3GGNA IO ֧ >14xoj01`|Ъ0jO|!1=2AĦzG&?U mP3MR Ipңn@Ī WZ(A~\أ'(X 4HEkCfJBn|4 Kun!)6'D=f9QlSDa,Bqt?αk%#M%iݣن j%GB W| J_JNx#x#@ɿ$іɵMS情gn:4 WYӦ28J )z N)X9(q+"8%.(;@ נRbxMO\'6MՀi n@u8ɷ.jb VԈltȜR C >3+S|/楆<>dì[؀m ,u6i/:SlғĄNzE8J]b v)fz2P=4CKjʚhJ2,HIcFdVw*Ps k Zlc_ILVQ;RN b zPߙP-s5x&?I~KuHypz ''J67a3Hv`{4tL'YW@FF7򧽇/r:ӞlΏjFʔ%dXبmOC ix* L~jx\-٢Ho 9=,ЋڂMX))Xvf)DqeQ>t}| wN?$~FxY6wDKR! wg˚k'{,Qnu=ImL x&6EcЌT  Mj2&Lѕqqr7yC5t9[fidx)*o'v/ڇwwB;0 !u-, z)0\dFdG|XСAl7 =%SQ$t/<)>F%7 1 6p2J>axSR80.GpRB&Ie\oQ4KXSTEyMw?̍(LPCwehG<(y~7SM54]XF6MXmziFKp|fԿVYY'Op)䍶NKQTF44*>ࣹ&;KK4< ZT 2Ϗ>$҉"F'C2yQF7ُ*d>4 A& P/ƭU^'=.>_ͻ&fw sqչ/`V6œIp,ŗnt2[PIoE9:QR&Q?t"XiR]|,77Q |x?/5-&PKHR~Lk_+pqgO}>i  +v#HoPE/hg;4h WuԈ)&ORM 2gvt64С@@v,V0!ʱ|!p4<;;x#$;-AhAne- hH ]>68T(EBgrtVhfx/?4K"枴|D> , GwcFu,QunMaF ǖzzC諽9D_y(iv…yv]^TOMq'4ZUknZy @:4;^I7Zm}ڦw@ohSR6%V}ݟj'Dzt 0P1$ Ov^*4ᕼD3Y@p'qD>$lNAcFD N9>P :⢔tPX%ɾH9M2iph|]-3͕QHW (K@\H) By"4N▜W|N)`h>qY!@ #@ M? ܠ25#4 Vb_ƗBbuy--pb-J-&<.-$Aj!)TSCu3?0+"0zCiɸҳ.MsOH< QFw5m੹sȥ XX sP17WC/FO3Go9;'!гMW=j;u7;Y($g:&ISUzֿqp'JAJ/ i*[eJP p=|pGiih!0W6ŃʄyQ0MPqIʅf(,n44Dd 04҆XdVF fv h^-P PGpyh46 QzkR ֦0sg5~9i*~AF (i+wy vj8$qO69T%zq~2I ^\3Hs&G[IU pE4t ltvk 2 mH{p?,|x<)<SdpQ D"r#htKUF+)m\ޔ,H5 I^lP>0h)ThR\b!FHAt&O4ȯk*BYδ#K/P꽛ȟ1V 'ȧL.AbP|ffDAo"RΫ$ۓ[ܜ˻BRk樘nyQ\q*O_Me7n5⦁44oeD.PJ?\q:v͢Jbw*-ǹ(f=%,p.?q@ \E͡\8Րs5kH ,A8H%BnΙUMaTJ_Q26X}i ` '>)Ŭ&)Ԗ{Gj%-l7W+rxhrᮻFEZ3BjTPBh^^ vPrj 4A HhzІua6㠤 > uI+ހaȦ^W_8f?|"MfaKTܵAqW!Q/f0BhWu2fªm,GR).'4Z@j<& 0XBRNTݘsHtB2tR tikP;hUʁBl$^t_SҞ$XTJ<.^4`hנGlRV1YxUxE|=t^b%@pl?;81(bi D_Ұ1)N+jo}}ݟ %p:nt!,X"W&3KР bqVoYZf+g]6Qpj|M6V͡%آU,MryYC/rhC'E.*OƇ.)]]%!zQ W`F'#w kxuFҠBѻ݂t SARZrcqbZU:&[VhD,6)H1v 9LΟGJ %P!E r5m.lVUuyK iZRmLcA+f21z ?7BvԚ C'(^dW"$0~=J/M> |餁RP`ژ/_?N<⵿j wi5~VؒriDhN=W_U* 4jL*2iT,JQtEMfQ)@!X)M%J"DkC80BKV1(UIyV,Fޜ1d z$5r25ZZYqۘB8" 0TApAo3 wlG%7}Vؠ1$M/!K1Ҝ&p)={zb޵i|\Z7Jˎ"p|XCxZ)mbmUV@qUC#QRlҔ0xrM@'QSbKż ir* Hm&.`KZ[ 8}.Gؠ :JgwfryV^5WܫdvsaK*~ SR)sq@nak'gGW  MED n"O#ɛ2ggv;~+rEAnb` 5a,@tf3A)ƛV֓(qWnK`F+JklR6"JF"˜i6iTV׼QT,0,ZLәƜ>t*dwAme$(64&)P#fWŨ"^XCA 3SSSP(&J>pE-@hfx2h)&ey[?KXF] jz2 %h~,ˏ-I#^>z / K@5i)+D `I"H@f=8KyZSk7 ʼn fTIkCX!/wj.zGГzQBRTN( #yw8zYǘԧyCVxtd- 75ٚ${~boIQr%J_Ұ:RLќK_#"R(Z##P@vgÆt0)%P%g;jˊb5 Riԥ4*]MTQsDh̨ N`j^(ItfeޤuҒ~5455"Ib#ސd=sFYC'j4?U$vI,dY137?ʂ8bP%R.٣8]F]#xqihA1F^XkJ֋hp/Г(*즊_!wf!`񚃒"9 FqHE..Rܰ"r8jN/C?ߓZoKyɘ, XG^}(PB jOZ*(7B|O Ϟr#~ #^DYYA܇4k@`?Qx sKHs_jJX5 LjPF0PJ!F =Oɧc`S\edlNn{ ]Ơ#- ,*ʇȱq~ u`Y:oI(;Q+%RY.G>J}V~hG|Mn4e]HX Z|?u8u|I7yڭHs)gq'SBOXoܷ:a% "aj!dwBAѫ 8hAA6J3Y<NI6)C #%_Sr:vQӔ%$3H}l(u0&BK$4II8R?*Fg`R`悺Q-m*@RIc2:'L}*T6*Mx.-+KZ?\,.ֽBtpo^tw<#a8Rϕv&J >P)3 {ӰPǬ ) 2بR;İO7bmf80B9Lا Q%z-Ed0*jjjjjji |tU`UC$"Y 5ź@wR}~xzb][(FҞQ*uKV6i C+l EG 3?I~ L4)%H_!gmV}#+HO7WA7 $8ݠdy.͎v ~*t"Ue_h%ΆZ_Al9`vNQxH|Q!2{kAem;?qK/RA%5xu4&۝%Ύ:SX*G{w|A-q@V5|>XUeحOfGZ6Q̭k4v]j @4Ԥl.KOw)W>-5*ԣe?u3bg#2yK@2U.+Q\VH;8eA"hjk4x!(l3{zGb[%W/ڿ~K__jW/ڿ~K__jW/ڐ| N K,sY]~ 1ZIGdKa4Z;!t!=I2iVĦ qz/=YL$lŻPd§$ehzFߪpQ 0fvj@}砤O|z2zz[S .&:ܰa6',ڊ;~50>~ʍYyҥK0ߣyHI7d@uգ[G#;ly}Zv!8MP[; DaɬfR|l볠9}h0oJ@&DF×Wܚ1Q6ȟTv Ͷ }@!qA*7w^Z^ARwhm<('U  lg4Oj$۴W+:kG0Pp#Bbl5<ޣѹ-*P[w5*娙FE>L oRX}@Y蒷'z|8QBJX:VE]!V-YoP07TԗlmV]piQyT}'nx%- tv?tP6Gk+8W^4JY~1c1cDZ˥Je VN:,7IVL9ؾh#y=i%^A՟u+q΅vXBRy.|O/v w<ȃ!*q7Ij`s+&6ALFvLaZ?$Q$Mb.Dƒ#SN r!7<Sn7ft&"+6Y8h&@LY (YERt1CX Im@dwvrUiW_UiWQnfMHClT\w\ XG^C <#RYeV ZE` SG=BۯM*@9`4 `m]&12 *!bGä334uiw$|GozqYU(J*TR@bWF{rq;no4lqgQGQ*B͉[ʦBgzhx=#doIy tW* rUX@*QyCn2ވ6,JȒCS8| ,<pPX}Ф+>IR < (=?1I9H$`zvF<=ֽBu6zW__W__W__W__Tߎ0'Tn 0@o{h&ĵ^W 2_ 1c1n%Ig#` lOQqqAQ94L}/xH<&BGtuPq%u7xNC)Ըuln=~ &@}jԧ30h,l kWX| 'HuZ<ȥ/dt&l8_H-D/K_WU/K_WT+5 ikb[/]D2cP5CYZ򀊘'%:ڍ& .PÐf֘ tvj42t(x{Hp/;.5RDŽ#wQ TS3&J/{%ɆRHp1J*TRJ*I@dON9Q9TT(yUxT}vb]cP(9r-qX:3I򩰁uZHK%Ehڕ:ThiRJ0%CEv6I6 #$Ԉ|rBa+2^!~LФt' =e(GjVǭ%k+8W^sJ@ _qNks\_ÚMu/&\_Ӛ`ָ59/qNkRpNh 24`Nx.PG j3Bm?NML@LL\S{F{JtdIBk ,SM{ᐖG2׉mCiC%4ZސÐ!BrHlSWJk52@KDH\gt"9HrPo^hp٨,SpyfO /']|lr7X:VQNb4HiUJɦ,ReD@ң! r.=dh<]SI*G͒JSq$p՗N@p'ּo:ۊsړ!uсFx RJ*TRQF?0y}@YM:t|vl@gM%HIt̩edQI/@_˾Y'E%5M& fm#@ACvtѩ(EX}>}U.dO 맟HnWDPKOz0FTu89)x=b{ol %mQU j";;T,й =rBLTqշM(Πtaf`2Nԓ(2&=R%oX-%A9V6\TRO`CTbKTH{鞅F@,ElY 2S7wR[x嗔%ibhv.& Ǵ% =e,#Wh46"\M!5:bla4@PK. E%4#^#'j/;i+}&Z %, O 3Rb+<>?p ~ѥ@ڑ"7RoJm @p JgQ%x9]j؞*RjJv%4kE /_ lq;1@|f-fLwNzJ7D(_pH-j/?Tu=ijdRȈ<9zTPak߅E FTiS%Sp!jBGN9:(~~"MBpj+Eضp> рkPlPfS:( hPBXi"P5SѡTړL~Z$P?DL}6aȇV?L=#*)T: }`=) 6Z +ע(@9%!8{9jUnVHΰͧ@PLһbX=r'1B5nL;m+̘tT3S,|P-SAaPjPL$B`MPUGސ u,,ˆ<3njvlʈQE8ެ̀&@H41cC#Y ZjFBH  nkDQUw=̝(,I#ycքYc\?un F(\?[kG _so|cݫX2db/!i%)+(%]<ʉAz~tJ mI2!]Aw{y^GEwu\!$eӁwY)|׿ξq_TǟXJS&MP GoḐRoQ\  lĦ(d,ԙ@}XioSfDXJ˜IU,OCiQ 6lCAցppUiDڕ*tOiҥPScV傚~;4s #k+8WBzE] ;x AGފ!= hD#niIo-{ڟ7dpNd]A=!0wJ=_J"r =Fl4['d FKj0 }%}50 .SZ z%[ l-5F0le҈Q:ҧQ*U';uUCJI 8; [o{zGPV~,잂 B; G.{*>âժ 0riفv83;HTYF£ڞ7K3Ép9oubo !/'!mcZN0sO19{djEҩW<އ`H>O7/34FYAŻy牤MبJ"aM1RݚMd PlCVR$ĐJ8łS$ࠖkb3''Q22D#y,_Qw{-%DdԔ>pFVIzjS7U BRP"tZ} hGH.$yҥJ\?Rt1;H1" >@(d`T!q < #9nDv/>LP}pm`wJ2E).]oMr6ҕHB!> ꠛZS4WI5 gP_DҩO~ SB(,6`JްR1!P қ,4#שSYZJ Gē+'+9\բꀳqų<{-gaIJQT"X7d&"X⪐ܦ\GH&)qʧpTKAGJ!u.4ue(&.h, JmEF2/.QYe,msB< ^E ¦"@CD0MGe-\! ]f0_ebf -6]o}|A<DCOz"jArfsI3*y[}SBrwr-u02tK#~\ԅ)@Wt*,,;BPu4@i"-mWN!I'zD}&*TOsDlԏ χ~'W|z4hI~–sGDwTvbSXYN휆PZzJ( ((P]QEES<BMEo:P+E2 &loPnJ\in٨P"~L18JLO􀐆5Kn~ *9>OZ6#ց=hi:im{ME %O/TԆbK= ԥ#3!ڊr'J{Jj} 7\f){ L]fr}h]bO%W`-+Z hA8. \ј4$1ޢ`bNFQd ):$^&cq&e`Ԏ gʐ鋵!LAwLiu<aBec DžĴvm C} 9X*gW 1^ eeYzq@$&FAX9⻪;$?fĦ(<7@RP jzJ)X%00oLv5iAxibdZG I$0f;|UR`$"S&7ljYܦ$A2SWʊ# Sj`M2oVR_]ߺ4p)"n>_{PE )Xd;$eAr44. B^ŝl=hy=$z" 8:ҵ`:jIR.7Jses` v7zQLd^3YJH.Ѐ[N;^Qe ֓\Ǩ>(@r"s2Vluo7(xdфÓ ~1CPB=~}AD*7=*QlWAUh! &a%{fNhMM%⤅XWMrpa*RҮq1A-5 olŷSPG# bY%7b)쾕c_YPJ)ѯ03]MlͿ/C~d z;ecBL~Rjbĕ\rP4-VV!MфL Úer˳JZp)C6L9wOtsF7-F4-J(;> k֓U?ӽF 2Q#Y=|#c6&u6̷]'.C`Q K.Eţԉȇ'#! +J44h!S뮈I? Lw V(h#wG0 r),SpEvhC[.Iv.X ܍ө]^!F=AʀBU`) ƲDFzPs(/i6VVC RhZQurp\~0NJAPٰ-ܣ4SxNzPp^6)C اp偟Yn/Հ I١, %׶0sh =\̼sV)hH4Nk&"\Cy.[;ST &171hś/ &9{/V6 wgB.ՠqsWIjɡYQhDd8 .yв:B/Ii.o*<.CJ T0tJIi]u&ESP ;LzTĞOK"~?0̺RN{sOi=*U"ACZdab=l' sa٫+EĬnBUd$)rqro2`0f @ԃs[ۻU֤7sW֝\n#Qb*fhPjb4މ^$ 1@Hh(T5j[w2%r5KB%02ϓ\V:XN9zc0CnKF $2M}2Ѝz,[H$݀]C@?nIb=1v,7j`ne$!,5 =XceCM:-& fEoÀӳjXDwAG̤*9eRw>$nM 6x6{/<>6  lnX$]>C8kn粖 U*z⻣>$y)l8`SA;]h@##̧l˾h@B6XSӟAO,j^_43O!™N"EA߂׸zTHh?4"Q?9?)OZQ3S^TPΎLIGV6[ ėHثOw?U^S- 5-JP@Edi9Y(~ ґT-?:Fw4(lQt]j R,=*[J6QǢS987޳ix O kyEJ<{Vl+a|MMOOM3j0Q +u0juSLw3+zTOas0~hS4슒:KXCPHqG@ۉ4t|AD>(4E$5Q@`5y翝 ȐJ|@53s4gJX i!<ڹ?IS&g+x6 Cȣ< Syh*BO=@uCQbi$7FaVcYeXMݿ)mQ5Ş, ͤsGL>T0竗S? G.Z=SKNq)>&1ڭ2ena$#S>Z>Ua#/%}4&*h\ #e0vV'3Fg;E@G66}>E@R*{yU)J1RFA>STzBNR E+@x3BwA!4BPKA$id׳ڤe>W'Q d[<B9 ;?J*T$٬oGG]c iE3UPVľhW;OĴ LHztaϩ@[u:Jv]Z`E|"KAXPjBСAsK^I6V:4&g^J<Nޟ4εzKB_6RPĊk+AηPz*0Qw$rGdpm, (Ϫ@,V >RzjFC#hA&ﵷ[2l)l)M֧s,d0xF.,;?l#|SܩT*{=$FB` 4ϹArƒ̀3SA.cxzT$WфG4B_K ltCI&Nk%wZ4Oʏ%2;z zfb lMnB%nPZUuZp'u%})a7d=hD iA0qDpS~Nx)c<ҖcW%LzQNa+-$a1(^b$[(3$,ЇA_?)O S1Wˣ)O S?(+ z0NTwi|<$3f.h]'0&{]3J)Io~<jIҶ.ϭAV[>,cx5!_L'`?xV pj/A޴ $ gʅD)Ol$M }_|WйK5@(r+ +юQ_|WMgz⿾+Kioz DT΂SSܤrwZq٢(h!5Rޗ/ ܓ@&,CUjY hWQ%DW]_?+HoutO2˟j&8Ovj H8P{(XAEJlR<͓γlhK?mg$#֡Vm-`HXT)u})G񄤆Ҥ֯`,z=^+bFl^ E0j5*lyςT,i(hIS>6 )KʁbDKD,{.RHZ_iX򚂒՝M;{S@+StXɭiqe4%6G#RƌB8?5h$Zh6BAL\$az~fbDjQgBʼ׼: 7`HCO, ǷKgҗvSм}#_ߛP*ej2.,wJJ;Ԝs9z5L`B l*b$_7R!*8N;+ҬWBN,"f{)t]t"x-,ր?v cJJACWLYS0;ӶNnCO"ŧ4b4sS꣈e04 uX ̷4!ɮ64"]حD[:7-P֯ *q.Cd$Pp4xtjp)zPm6èѫEN2/IAF @"LfMٮ`BmdmlYw( %n @!mD=Z?; ZL֔=tXzQ{Y¯"-sMivlԨ0QctC'%nj;B -N_O|_OB3_~%~NڛP.b+@X" 2Y{Rz}\a72*( 6gfco(M€ȤeOA|44gaMz_)U;"[`hڹ.0w0qgZ>8t@թSnW@w-uuKVM@ yjn`RJ2ah%le"( Q@X?If6G|$YS`_KW׮D%>٣=hl!1RKzxrV!"8Oϧ//wxF/׿xc֌$r=AYW$*2'y&UI@vDqѲ\M56CxzHM"KW_ A$rj/Ͻ^Bx|__4ͻILuj] BU-yͯT:Cu(\ 4eSD-"bWBTP}&1&"(aU6@+֊#? YN-Lz.ٸ{Uf͟O1" >I&Q oVHK[7`AY-(iiU(Y;%i9Be.5,܏1mi!Ɗ͝|#n>M #>G+67t(!fGsS&e-@2{~iC%L=k͂y< HX8~"cZNX [(V}MSe ĞTĝ/ߌZ|jNpJ#WJku>;P 7f}EN aᬗ7BuF#u@*%!VM98'~("2> "BTK+~~?}9e?M= 5~~6e@"?5>AD;ddMPnv>dn@W3p,! vf8Wc U]u3㨌பn]^Jt 24֔*riObdt[ a`|B2Z7 UN: Sj5vQ))J! 9"Nc& ʠT K]) uc kʹ$ݗNmK4~zGM( Z]J"6$Jha.|_p %Ū}J.ytMB!^R C) ʭڱIL1/'K?*QޘF%PO)*H\bE N)IXwySj~3a= ;*?蟇_a̳BTY'ވto`߻@`pp[g/I%Tב~fXƻd"v&/Vٞ˻;LKt.=&kB )\A2J$~ D\+v QIQaf0^Lamqm]iDԄ&eÕ,|A d`^e!Afh (ގLѷ۬f)\X#,vV 7\%nFO2256V}%c ߮d7Dש@4P5`\ȧIUs񿥳;)o]^>s﷽Iyv 9nxۊ0$R!i6%w `7AB&kX(Fz~"xb@Cau #3R.%-!]ux^ެ]^Q47~hHf6+pT}l:QSQd=*<ռ 3#g^d_㗨rsE,t6 K C(蚃~,78VOѥኋ<@, ~[ ,A遛YزLDT hbL$$4ʫkE D{ $b.1t gK  sg$kuFҦ5ꊺvRR s"H14#vrFm5oV7GAXIvx8EL7 ;[CAim;tN%(:@Du)MٺYǃ&m)Ha#R%f(<2( D8jw"bԋd3l>J4vi;5Jjn2-{4◳a+gQ l\{oKy,C Qzǽ~8a/lT t `jV%[ Xe^~%SM/߮T&m9nrQMVς8 ؜b~*@2holP~zzTpL~~QUJ9S${y8m"HҌ@3ؖ9Qix~d*xGPąrLAd0e뮿֢͔᥈D^V$_ZJLrNHLw ^ެ]^|y ȥq'FzdU{d55<ĉ##4K$2La2d:&Prd;#{CjarĆ8Ļ!yք.7l49ZcWyd9Pf7Qb2qF]^D|ÄcdDH'$PV}nj^ʍ'-$kB!=@"Fz30cjaK39R NUC4gnE:eM--4L(&- Ct)7Xl ԪΝRvO5"? (PM>-*LaKi$IVp=)h7OdlNĕlO ֡:oJ6(IT%% wcW Ow Z@5ZpQҢmm`YclAK:\iE3]^hBbij`4F ?`.FA%E%%f#pCD/齁,JPT0%}nEƾ4M>.>iJjOޟ>"2z QʕO?/FDq/NdL צgsySPNxd.!1BI"f Wbńy'h_s ?z0uQ'}t3 Mj4@Js1?[( B`hRÐČ,GM [dmbBfUMҒ@g{x8*@ nK1Uܡ_mXRt1r \Tc`H1P:J7j tD׾ToP1$pRKOHX) XUҬFmw|qGeڲx NM#o>PxX(yy][%zs*D$cX=_aWb\/4l5st9 ԕa3P樲66ЃRڑܓG*!!k!r,ؠT2Ap{ڕ7Z1EEܤ2+.4m%e*M bDu-$;0 $cFSRP58Q6I" ?a*3sF!Uw0 ff)B5J[M-7;Q~)y>T4ߺ$dܡa]LWY Qz}vlY†D vGuhG4(PPPPSRzU]|Xla~~ f:ӜwWJ;{Re҅4)(PB0!~ K;sL1HY:=|M,:e^JoKzw4DpC0Ah80~PEb!>O޳Ilwvȧ[mmS/֧TrYLWF"yj3/q)[ߟ D˕4 ?ND3j?}|l(#[sOyd:qT2{FEHu(.R=Fe&RтAyQdl&&Wf=u".RS3`^&z(z%YFlp?+dG@[1ͦ4?u#@fͦ!f0z:!+ $#ԹY,ٷ%Zb3zj!hdf'HJL%Ym@1* "PyIwwv|}[t]i,Gt@elPnbF 66(D:y,X=_k[*b#hD DB .5axYRjH_0([2u)L#G5cDGf{uM ZjވO!3MI2&h.cv=)LLC%0Ia((p=I vdwz/1|UA6{; huI@wJOt[JL]=i"r hjl :IQ(0?,% ((nNM #1+r8y~hxNunȨZCch(a"_%zO"z`|">>(PPINr `2'R|^ѕzA=u(}*GIw-Kڬf[L@Vn%괄PҠlsW],t8[B,ZcB!F'7OUMVD(INYCcwMjqQ>p n+NU-c,ђ<QQDŽ\ﰏS XN͓U4ʠ"}}n!A z ~ \B,[ꉱ?tL0!r}*1努ʣX4Ku]=.wE>+! ;FQ1XL4z/ `#=>LjXF!(Bކ3Nm ?Z) 'N2#!Щ< `D:G7*s4Ib_}vd|AwxO6L-e੗!hPazzT|uejqiAꔖ(։qy-bxzWgDRzL4PL5ؤ8ii*E>  nf)qD-0һ {?%7+.cB ( njp8hQ7٤VO%) >{*kXnL.#s oAt΂Mu;uQaLHEReGE9ySMɨjB E =t{BMiS]LRP蔇ԴAHBo^):x޸}*@+S0;҈@f%BE"rV2y :$z.7XH{t +3jvjrK׻q W&;T{M "^pXVwjdtnOb /[WUoFW ݄&b!"CTI`F52+yׇ- hmlr, SLw,Q]4ȿ TOq~@J!.zјg׋ „Gg#|Ū܇)z!㳆sr+ 2'ع j˥Kڣl>X>0> #S(ȄfMyf}׆0Br\2t1@%^ tX̭~ &?|Z#Ğciډ8F}pB4GwZ'a'6$MAje YV{\~jĬm.>`-Jf~`h4D.-_p!8 4&cQu?| 894.Kǝ_ӳcJ}KRھJagz\q`|&׊DѲAu*PM{v,u(CCO/hzR58*IZ&Ć`ҝ8b0<2K8S\ ) o|2GqDP//o>tlaj'`~( lǣE7M% "kCD>O& `E긨MB6g+7=*=vZNur<~8Êo|(07ZzT:H3Hr>oN ^'B#!XilpS-Z@/Ibi3X+et?9ZDFHYv;}HITE"}*l#IE=>&܉j5|lb3 w @J(M^Ll"aUFp)뷉cBҥGfsrV1ޡz^~kHD6B=/<'Sj~}/G!S~0ޅZ b"SТ$Ķqg"I ztb@iV"RBMk+Qg^v@kTGD&( >gImW'y %{T)mB +Щ`RXje9}ݵ?_~ڹWw?zJLWb]Q&XyԞ5XnMt[]5 H'LJa,P&o:(h% q\^v$!7>+Rt*yɌnV)C$;?$gmD,n{GzuWDbyiD%#Ol<DDvtU:Y`+|eUʖfZD, ;aa ar'-³Di pb:UX,?j8Yd)AG#Q t$1$ESP֦Hc1Is1Ws(fji> NB:_fO"o`z.F+Җ֖۸eءy}6U =s_J ^,?D5H))Hmm*Fg鰂[O@<3K('^h\\I m[nVUnj^G YI@Zk޼DNXucfÊ%D-Nna`ˮ&u!pd4O[K!َԙ!̄ڬDFCد3Cf#aҒB1=iA ME#(MNz rH:j>  iJmG*3McG>_K ۲99<"EU!~<.L䔌e Q.PZb4J!a*!)v)S# +@4&&Q `Ԁi2K@uX @ ø>E&66 0Ťǁ3L|q0Bߊok4@V/z" "Y֛Y,ȁFnUKLDtGr$ϥʒd$!VJ{zݩlԶ|2(PꀠbcEv*l4CԏL BXa8mAa< &RMLD"H֚Vɘ(׵! {J%.ތAxg9LF C2s&fv?-B^\5_XmRtmTޯXn5}C%EЀqNv9-gVWBG=*p9?}+oD/>Bqڅ$omhcEoQ/%.|kpO((tRC?AhgK6}KH|귋{1WVK[qRd&o6N 6kfS6)+{YZzӣI92T efECP:HHLBP_ `L55,榔>mƘlW+P]MS$`-|B QƼ*Q)PDjsEe-%4ZZTԣR =T uT˧-/KA0pp?.8v pt5-^{3`Nېchsk-zT7"''W4Yo} &L@F?bdRD)5^f8apw?nڙ7·@5*ή( BRPdhj}#~6J[|<ڮ̈́u3g9!F%!0JPBF4\iXh"G8࢏7 ?`1@ ,#[!ѰMLj6Q!ڈzR1i }Z2CpMwzz!QJ@2][ęs:zjØ6-$-.Zy2&QcI6Yj8)E=0ZP a~)EsPBB/ttJ"X*Brl D+-(]x5RAhOzlצ_ "iIqk;5 Ss> `+$NW}Mw@ւ(dΘTC8hG~XhKR@8 F 1,"gAm#"^RmA} v/>0=4 P&`E>o>I`$C$mE?4oj!1A&T٩I)78kƣf0$lǥMMM]pǁ'5 y8f377DCh9N@"0{)xG NThh@J- \ hiRGN [.h4(u.SqdhRFD{W񖚒%7 `BVuHDP2AU+V%BnQ* ˎQ`K-_M9N}UТ R.O*E"Bd|MGˆN]"bFѝ(E3V@uk1>ZjB Ut%&{f5Д-lrbV>~AG!`x2VFS[FK| $hψP d/?xjJ c)*e\$X;O4(t(u*D1XdoHPZ8`r<'2ؙޞ;ӄdH'W}vXޔoБD\ȈdKzft% [Եp Ba|Һ 'jY"@m#td,h&2vnZVLu(̀D7!yA$5P+~jijrA1SXq_TO;)#]^ Aѭuw%<\(4P 1{f'3BjMI x&.ljv4hѢEXnh,>䣚K*g=@d` F;Qd"҆fZf!yq6( RgAV K;а89ط@ !9WJ P3iS1 %n֦ Q;HoOzj;4H\ #"z~$$&;R6Uc%:~Lywr: 64C1^ʧ-nZ('8$CgV DyM~2/QTRv~);h+inTXwF@->oRv>%,rvn~Y> )I>=Eeg24d^NV43"{⺢AԳߺ/:Φ)1ao͂ :)szQ7VaEAz"%*0 (94B05i(ъ|j\V*=<SR=XMMIbX~ ?@lH\g֗XގCʊO4alRءݟb6#Xyx0}l;iҥ?,ѣhB`yA1%H7c~HJH+ @Cx (щ`eyP6_}iRB7PD/b\PF0@-/Qڀ$Lb梉P,6^M![G #^srh<7*֢;lS2%VL.oF|=U;LuJIo:m8y{.InL"OZ&${K.uB?O: 7: vI ǣ>T?h~EX79~7_V׹9BĽ8 /N<䱴Pai_51Cj rb/"HSlvzCuh)UUtHa@ulF4q)\P}ۖ !`MX]\y wv ZwO14cV8:8zw?cTQC;.&f< ;uVcn_Ԟ[OR5{P(_ 7DVDR/J9&h"ћhA@`]|@0A$ ׯ}ugU]+s|d/[J緡L/"%:PlePw{?rw| **4*M(,jԤ,U>~"Rӳ zv6@{P=-fI͈gΧD&TdEJ0C@HaGpnDZ2*7P3mj})TMM;ߎBe 6[czxyw ׽8 G55>&u!vzbnD T@>21*rbRϣ@24P'MJxТoWoN0*K~cԿZ@t\wZСo%4UQ0W C(vo >WS%|LR$#@%fߕ*$ ozV:YxxRZMJ]i à[ʾO$Z oIF4LI#))S[h(sKe8 x] %}^ u tNN+ ѝw©R$^Z]XB3 E~eAxڝ|ډux *WG62jY/]Ύ3ҍDPm!#S=XOZy4i ĵ2 0BD6WQm$' #TGoG4Dby VF,M8>Q;iJJYpH|͓ Rָz@(a6J35a).詷&jckv+bK{^`Uq5J =cc9AD`}NR>ǘ0ղGP,OQWZlQF&l?++#Cu:QuzL#>Mk5=E,rY2Żs"LP^|=I8x„n*/-0 92u$d<Fʸ L컅 ! U]@YaDE{|x ٖluXKOhF^qA O "b'!KPؗYP |XTJDQLh=n]Ac/EGO.I lj Wp.TDd{?uS6izW&x"Kvpt# %* [UoK)o"_} QiSIq.?EacbKj&+ag XL8/)vLM!lè,9P]Fc HJŖc̠pB:"B3СXdOL D G)di| M|uzPQ=H6zDU p=hĖrGަ@2ji6A6 ӤSE4RK^%<-!|i<W]z)}BGqU'q<Ԇe'ZvniLv>\O:y΄LZCEFeDtFu W>\:Q( ,g#/xUÙ=SEu]s%0BphXI%4\J1ބ0Yk >i ˁ6Z+(#Sv( .Ùq N(CړQnG1bQS܇Pgga|K] AQbIr4ao;|.n7lv\찷ڱt%y_> X{V5`4GSʱh7PDØ" nS&R,c!YH;6Y|ڑ(  Eq+@K4̚ r;էpP c*oo#(漿d{wll-ڃ,f/iB7wҗC@ A2( wMrN'|zPLWu$j_|W_"R8s+;!?GW%_|SDLK{F1[WzU %FPgfq U]+qtW_-BӫSp4jLMɥV!PNE>)"T`Vg;X$4桭")ZRQBiPGaDd6zO쀏. WVXCwy )aF]nsXB;6c@@XRKR լ]wF 0ꮫ Y$GEN502n:ˆ=jje1%@`֭^dzf1im@tEB#g=ʟs8Α9IP:k൯ BAP6`?i A4ͺc_%RC@ >S5 iduBwBI)` ;qqݡ0ְd0bIJ=?4G\iO,j g?sO)K, b&$N $<0? 2C`DJ"'I:sOXUC\?FYeL+@9W \"M`? c0R>&Fh?꺃!M|Thjc(2z^eZdЉĽ22+ `yBA ] f1BZP K F'ZWnsv,WA`X,T=eQ .S?S^s18+=1}j@D^$pڋt]c7vVxJew#E Q*q}Nj2LDu"Y3V(\BhJ&& aݏJ=V4NX3AJXwIJb>bW_ӛ5  ATV2Z 2D`BBř4[ &b'P $MhgpKjDGv[F6S||>eU5[}e{:Zw2$++eYI^(@1 A} V/[?%@.^S'} E̞EHȟeA6A4jF>=jtA<܋]{E<ؓf4b;i۽%NmoSGhA6efJQf0<'⊏ftd}( (lRj[j:f;2 JEj$ 烬uplQzTZ40$L HR Sx&b&M$AB ҈Y;Z&,U>z4PKVs HWb+%R:r5( }xv7itK~1EռQP\eT+*ZI R z)8jR䥦Sg<&@Z?"R&W:@1\*M4>|P-k੃p H@IrI[gzRӶ[PmXBCPH $[^#n:~6oЋljHĉa@`6Iv6 ǐDҮB#T=8kR4qDE>-~(;F e h\֑FzY` Jsf҄FAahKWfT+8ps1W2j2kR^$$V9 ^Ac'X9PCڑD#`=C@`4@ebMSFiGf[à}HXPqǑ6@UuZBtH u11c%_SBn0-Х`GJ{}TζE=(v;WDg:CaqŢ'+PHrr.fN"f 2J wx9>$kE0yj]Da{v:T7eR:myr Q-M[w>ߏo7 6w6ˮ#1@Bi|Ois)!7GWSFÀ6-LIpJ"\`d:?%`Uc_*RNdk,<+qث$@/DJvuyzLv,R?<@S3)mOrVh$*Ɋb'I]II~U%Q7a죈_AHK7%de&Ɣ{M6XүV+Zu暵$i+Q3ҢD#ѩ|"eLR#!(}C,^ylP(k~Hs v@ԛ@)iI C$*7-YT1){'v{M/yWW, + 2=%E 9^P6a&wZU.7'4P*";,^!ѷgp4)&:X\>hC9Y٦gˉ Gel٫T(xMbSQH{G?yT16EKgUB\^Nbl'] R~[<Ղm$t7 dڭޡ콊p]Ɯ cj bUa*30lH=}{l=#sa R@*@d'-Q,.E1L.&F@B?$E05]\ڄ(Ȼ11I@AmuX*BA8XM̪ZmƳHIDH,} :A]d_/PQTl+WxLڢ}P A3b՚C dF]}Σ*jwvoPVZ+ڸ)IrVoD dtjQG>TLݞB$ ԦIiQ&<,g;{')i+aKސ"/C/jf̴4=zPBU=+Qx ÚwhX IulBŖA§S*gO 鮊装j;T֊荝Z*ytyPM^V²Zbl0ZR 1ho7x[KPXpNA+YShz Ԛ'z(P("-_OFv$|}kqAP)ep`.1  .@,}-c |%\5Fd1 zL;H t:$5؇XԱc\˸7ƕG4.c~^T@CLS(Azߖ䄼PINDJdx ˆ[VE$=~@ 1>5j.,cs۵+3!J~'"AܨF*mM.D+|t惀lYVv#P4vP02hQX`=JG0.F|B4I)ƽ ֱv&T ޔ0(":jPEB8=2rQ~ *T;2幐T]֛I sT96Hݬl +ǝ3IaRC7Ќ-@X'@;>m1pfQ?۴X8b˪r";qRc7'X:eb"n){E`!s)ceuhIwbWLA\_67IE- -c- Ik6Pn) f/{Lķ}x)@ݥ̄·'4OK"~Y)FΊ$f)) w]-FF@X "4* )-:` #g)L/Q> 'RމTPMC1lzLjd*&z4|ꨅxB :6u)b(X>hy)<' eVqP菵+_Bu:%2m|SYiLKT,ϧ! ~&ZoIhe.\q~)қNOQ6<iH>D.J+UuHٚ2&lźBCx&;gL Ԣh!7hN)%r*twH=ZLFxOpǿwJbZ#/j1B4s !ݼɤv։ĉ"k !Uީ.C]}c/NQIw&ݎLO.$ݸ"SxmM-X٧aPL"\2`f:ښJÃp% 1+{m]M6d:Dx*, \,.kt]eľrS YsP OZ#ӱ̲[!!Qv%V\CQ5B1̂0AxWء߁j)2%/z $9>b(xf.s+40`BR`]Be]EҠ@],,(TcJF,xY*!7Va`BuOg V ol")XA%MZd8ŀFaIqQ tYpg3@P䈉:Q# " 0Y+쐀V /JAڢ e2YЎJ"VMiv&sEQ^$hT F&]9Os1$k"IIYK'E3H1FyH(6VBɇ}4ЊY'K%e_WjiH/jCBVsV]D8h[+6ʋ)cMMN";R- u9ғ|?;bE2X"iOQb١̓4DsE3cV78'am5#(w 5K-C$Ʀ]>7thM= 5LXzS]phOLɝؤK 5 Rv5-]<hF-3H%4R8OM^_bî*)Gb [x#4gnb Pz[;OZױBƗHHF!Wv.&WavJʫjb`Z?s-esq4ވ Apz/8^U^ ]`V/-EdMxK(JXi1%L(-o˒qRP$1gaKєZFJ$D LY(&-HHB"rM"N:uRPՉR"%rJ,81DFJxa  ҉B^Kb +NPDVRP6,-4$ $ne H(T%X*r%NHI BC@K[7F9&HJ0e8X"8b! * DK}dDʭ-OɟZE*,]=d C-h0^!"FKuK9m(^l =yGmABۨ2^hԳґXxԔN"Ra"Cjr^@a1{F( m"Y^:5%&IΖgrap$Fy(8׫7N/3LplչyzgPQ{!~Q(M)(-$R< 7?eXn;Į[!{}V.yVHlQ6QLjORCR>J4AZV"b(o P(PR^?U hҭ%'Hcr 9* v'BNH\z3T\ cxHz+QrAtc^G?gR DLtDiS.Ap[za tѢa R˫ 4/hcB1N1``'j~͸Dahj ΥdD/n?gndd4 u *v?L|TO?(Q$9A !Dhg š؃kx' ܨw̡(@&7Ԓ~T yډyj[3-%OM):ޚ":AlT{p&P 'vCbyD ln {f)A1a @C3-\:i&{$Fpvؓ@b>CK̊%F 96% 2p+*\Id0Xą%/",Vqj XEC $#%!P+#/:\ ((/DFk`DWZrHI2I(= X ,`_A$XD(-7$zrBE( \X:r1Re1jRdBCamK ] \^UvɎ`&Y[8BRJbwqGSh98v)pr-E)Dafʕ6& ҒV.Qן0IeS0ïjp)lX;ہZ& Z9"&mj89FmRe {\2I.7f0N}A6ٺa2AQmGh*96UHJ*]^-Ԅ|FT #D@ *-`KWrbeI'E3Qc\04 &=U3޷ڝVmd$*{04J =Wȩ y:R^\k jVӿ_*t_ߩ;e鞙3Q[ 5u&>7*jK FQ^*T.7V'rQκri`ӥW /Q}Ԗ؃иmHtbQЄƭn'(Mf%*Hy޴(PV/O,\T-wKO㆝DXy􏰓/PT%Wv(@ADdMI2;8Hȅz-O|zs}Hi eAB/C/jV i'ڔPU` %}pu{ayzcT+>T:uY,n =+t1@d $褤 zV6t9BCRsyu 4%K!lhnz}@,-;2z* ףB' f>o*&i,`ԣx2r ww]a `OD0+F@Y^R>a4҄]^'ԕtqN&jvg"17w3)j=B$L=f)d&908!ŕqz'K5:έ\I~0_J c63,"DC$2 鬄ݗ( :50jO%:)KH,r&[]` Rۅ4'ĊdI($"N28% Ib# ݉Jr"M7o6"$IrI \# ph7O'tvA9\HS$ҽi߾ZZD6Wvj NnmCg3L!w(nז#A.0zyS>XN=DaI:ֶ$@a  R6P'_ʡBM#SgavS"YWۭ -2?0qfrkj4VF-E5"hXy'VKsn +՜E7*12(`J2̴j X J(ADiޕ\,#Z3BA,DY`zdTP#QJJv4ȣΣfe/${@7 #ҢԠk`&2q[ *Iw$En&^&@F٥T-h^CCaVjҢH* "&YVڌpBBغSHJrRX\wgQma#,g1*Vdbȗn$M*@IRXPFY BD7 -eK 4nbťK|@ ԭJ*޷0(gE+Y(2գbH$c gA8挑%0D$bƠ31dڭt&@%#)̇C?uhkИı(/(":nm)TA\X;@\waq3y$*(BAIm(q-0m%6ڌ p!EU+ 5xSg4;\L- jI%- !F4f@k( @xOo@bܓWu7gZbt%^:\@ %^ kLV8zމ1%lOM,7 vDZ]VcĀMIp~e"H"<*iR"h <(rMl^땆r5)Iq+V,IoN៍Jr.Txe)ù,d{KI[=g`pau"ޤ}+GAσ6RkԾByB (3ZSZ䣕u%r}A[)>[ƣO+0&rаSj`'{MVʇd{QKo]}AAmNHIbaeeO7_[P Y*,BwB+B뜵l$aDC&.Dx|3PFƂZzZe+܏Wx|!"-y'jA%X\+Ш!B"E>n 0m+A]X Gxmi-+uw P) š6)C"vL e)Jrа1hËaZ JD`Bv_B AݟB,t?D#Oa%dl)ΟC֒J&f &`0Ҳ;4D u"Wv ĉ pEˮ"tC41L/kZ67"vTm@yuԚd۪O7j2L %Dp[k*dS,&nB2"n5#L3uH9f<- rlXc:H(K@Fp2" H2CbIᑼPbdU] `+Q(X .w L@Хnf5դbN\X1憅vb l:Cb[.gB'TxX RQXmI#-}ڐCȇA AtI jŸ!`U@ &`B$2 &$T$K8 %Ң/VM47_ )Xdd: ׀n4(IM8 4!61{%?5HL&t8N ♒ j9}.pf'$3oPQ* tuRȻvzNI-QFD%*1M6C']ވd$XHySjides&6LOĕErLu$c٢Q `i(o Œ4ҧ1P$ߚr!́M;RROvb_J?jC`5nRvR;ڏPzSxvև뷱U |'] #F5 RCFBWt?!sO7 h9l)} *TdjTM~"A\ ٔPg#Q:[10^[8D#J 2`XIsrN|ޠ NmQ%pݽ);͑&)K}D@/L<|yF~>SҿMaf=^qU>Blw/8&H`J ;QA/5Va]ކI*nZ-4)Fp`T"Nҕ-uADKA;7^,Wu֮-LtJڶi&@#"H ~dH A\^2yNiaIPW3n<+g l(Ve L<\}D-JޚMWaJ4fAbnֿ"KBS#Ҭe0d/LJ,]q*q@"L/(;.iacr 2E46fk.(oT0è1Ft5V/6oA(v8MM ,[_*e%B<$|CA\ [(kh]!wf({RB߂)VCZ֡!/+Wr3 0ȓo5$TPs:XI=3JM!=ݔޥ0"JׄZA0"v 9P$No&D" bNaOG=FCeOw6kKE;@v(YijitŵZو $e:nTIϕE7jڝn0tAU塟l@z_EILࠩ<$MU* ~"N ˯ C1kEdIԂ^P51YWC?#T SVAEEkd0P`0[v*;*W蹴#Qw=[ `n_YuO6gQ (PVUV;}k#ӫگXյ.t8,=.ʝpD)l_Z7/xKLjxy!EǠK{ğQSE;@UXL 00AA.LMȒv*Mx1H'g4%^3C&GZD 75<2"65iDaY~ML*.J[#wa<n }Z*.ԁ!>RlǘTBJ)*>JRk3K0BGwlO"#'d|sBqȲF!QVi˾p^)SJ> c.5wP|N]mCEd^^x :G#VIl:8!]BXLq r@Zijh56ݽμaF\g.:,|R|$++0*d;ƞE}i LhI$H;@vK}L MPa+JR_ԯW+;F.XB`bRc#JM?L# Lmਅzt_(W1e@ 4E5)/20KoBHIE5րCIT/x('J`ó'`:&T!t! J5aw(tH!skGE!@ %<G-~P($sV#RZw~+VU/Z@[hUrʮ$v[y_.z<8~I1<+NIՔTBꚚ~DJ%di ҩF}%JtBȑ KP(b#mv?~|Ra^7AԐH A&wB5E*ihSz$^7T;L+dQ>^e VC{zW*=h%<&ސKDōe,wwy}JOX{g9LF l$kZ;d\sS4Z2ejZ<}ji&AܰS=?ˎyO'?~ c*5MUa>~Oj]<_ȁ#٥]̞gcҕFqC(Lݡ \6 w*v @,蔋*$25H)ޕQ<KU=Cw@X`@WQOdR> }&ok>SPh\[}cJ+ᣨ#ݙ.DuE=uq`b &0㉠! 欀ardՠYng9Ԣ>:$,9[uN*$,wGCc8 g'!Mdн~hG)kk7Y/$C0,cbs ;yB0Ab<$帑D 170Bqn?'6Erl)D+r@6pw>fF(X\   0VT9H(=Ƴ_z`L ޽wA? '%"(lj=/IH]m\'ވnd䥠cMMIԩ?Mf@r@N {Gy4x2Ic'uq&8^\N;ת{%yIT(5o$d$is(NңҙdLy=M`)'B.+ҍ%xT4uh7>D`l@uȑR[j+C zb6x6y{wpj0KZu5:T ih|0uwߓ.rġ*&pgAFeC?`jdsu?ϤB5>"P IC!~͊jEy.d "vy]޷$T;$-H8"$;"ăQŠ>0!woVA ڈlZ&[{H(}y8TʆA (s| 2. /mVRHo:FDp8&Mtkg$s*]XN$Jf(^"|'Z3%dr%[!P,͈m?92+6Jޢ`w׽7uUa)5C?:F]Q:p*ЩdݗDNOIc5ѽcΈVwG0xBLPR$ch,vI٩"hJƳ_\(ݱm)PP XZ VS{VR8;J պ@k4mWrZ@zE aɢw:ո 9>!O4jYv*.ZɚK4+l:MǼeowyW]+1V"f S50( 8]t(HHHZQ`(8;V5TAj c'Ϻe`=O9Aҙc9ŮF{iQӺ ԌL6Z$ULt2i MmʹMC zxTݴ2[ye+hj1FJȚ-:wRp 1ĺ| O3v S-z)֟tɼXaoI~t<}py _azf8u@.u`OwUIQD9A8,F8OT+.3֯g{x?d6ie4Kc% _T_s=z]g4Q (+p| Z4\U\i[N%Zw*R׏iBk+ԞftMĂ*IgYBZVFy>NEJG,w݁Y=XPH[%VXHB` ٚN zfBNhCfB|F=J8>J ~WM[?:gD&l/H0z~4m !Bp~K|ՒF )OTԇYè1+'j-1=iީ٫8N` rc_@ 0izҖYeW#W"6lOAXIP*RK|bIӝj@:P5!+ PF&/c3VɷA-=0PPPQBhnʊJIoR5_0ݪx , upg46BQ< hu w*ϗSȎ߂LmiV*VV7U x7-:BBNUC֜d&JXFzaЖa//C_C-N߁]Y`o,u,j;" zga=YV(~9OdTz0po,٬d"nLҋXDGDԄ!@Jld#ӎzJEBD 4:+baq.c@Lbh)))).DľO[C'凘 Ɲ5Dit&1o#Jy֠U8PPz.|$5GM2y1ހUć#\3J8cJ[:0OJpGVgkJ  ݋B((AbiIHDHCňpn$XLXm#vCY_AR˄+"z}(* (IQQQIIM%%椲ZdE:(1>ޥN/K4.P<Դ \aÏڕdQYVTMh6^u(Rl4SRƼ&;l_~P d(54?Egh >h݌ I2\sCJ*sC"PuWz~HXh.\Ӥ48J яvԠVgJ(lCE#w ``KURJy$HE^R#Jr-=Y,˺#sF~i miU0F@yU #[f>DNR:?``rad[EEEfhGVUpfF{4 C(x IP ])-/bVyM =W΀B3 x"([l1B#W= hХbkR-)SgI/n$`LDY{mǍH>J}^xF6y1*!j@#uUCpl&0Oz Z%XdvJTXriEڸ)PQ{P :Zlѫx=*HEKsN&m=!>Q?@sjK() \ 0$zӌі8<;&-=$yNCPdqR+Դh]UK)bGQ53Ad5bޗ&j30Tt`^P=3ߔ i\`ENBf*<˖B2R40X WE&5g:ۚ|_<III!rDZ;h @XҐ{˭haR&!T4/ '`}R)bs)E;56h6m]Esp; 0vn.Di 2#rgg= Mi &tc3HN:'mHe@cZA$X<{̃L;HoIaʜ =wG6#UUW>,J3"LIȠT{?be<|kmMq͒ڱH*;ODJkQWL߈nh̗tB[rmXV <FfŊi)W OJo!Q~KIJO45UyJ⍃H}#1|IJ*eVBjܥqIږڗ ||(8*ZSҦ7Xm]~dCy@@}$_Jdyyu? &tTD#C2]ns Vnji*9v{V|3_ZZ ?/t%| re2gAp`{=<,DpI hT=J . "$<ЇS5#:^'AѠO{?$kXSiv Ӓvҵs1bj!{0>* z8TS{Wu.%!@Br Ϟ!:K蚕H" k]=GSDN^vivb$HXRYPm'XL×J5| vuZ(DO`uTPE# Өr-0^ΉDA31f\4$jYn\fW!97ESwhWJGF8A`(zNBFa=,pk]{/r%҂ؒ2wt.,2(+n& ɦPaKM~+`dgo#ʈd:-,j]z 2UƼ׹XTXZ3bI 䈩YJ)g*o"PIP׍K39HzZR;WUnn_"7[4 bEH@C K{ox(L@z(p bط& 5Ig/ =†*L{Qb I"P9VD0yMm9)yN䪬կ'fẗ&Jij"ٓit>Ú.L:\Eo2RpId lT MO@xON28s3֔dW2SJ070/ZR5|{ԄΦeJ@MzyM2hGrh@+ u7h/H`v1n\X:Op;tԥl3yJ0Y5ȃxm;/Jx<4Hh5,>i6C\EfGV<DìnKgZmhB&; Wx  Bǝ7ӒY7U!#۽WR^"i(((T)i@U?$@iRBWqE<Ӯhvtڣ,%d.;q? 0#j.! JNM58o?$*Ƞ4=H-s'0u /"E-3gI .F*b4EL߲eHBQagqA_^H"$5$'u{S9&tNFxa`_@^J -HQABQ2FKWꈬk ^SHɫ+D36OXRZ|m+֡Դ}]kd(ΓB%A9p -DR$43T륞ƟD˽T@I`z0ַ @KEJU9['>O2I6*R.8)`MMI*pXҠhwέ2I !օI@&Rf!;E(l,*.&cH8Xۤ^+<[n]['Q3e BoH3b;`_P֚iiq*t.¯t1{j]&*Ҟi E_cy-IOb J0* M Z-jWU5@@@(2 = 3 9O/]0~ӽv$Fa\5(M_#AdQܤgUWDQ0]:SGJY'E .|P8Q0xJfJYNQPu[CsPt-ZBf)q$EoR9);wi.u[thB| w횘 n| ԉG|RUȑ"p7NzbyTP nZVk- (Q4D([J)=1L-,M%$kQ9m:c |P=#*MawO{݃ӱcWN *4H4*(&$%\sHo@H!"jVwʑQ657i#C-H)97F7J1ܐ;С9k/$jr2!RQXĤ/peH20y^R 9>@ӡyk Nց =Fcǎ(Τ%=j*Tų)ij =SPFEj%-+ ʯӫUNH_닰GKUXgsSb?a$aP l} .BVi@a/5PBth ^kxZ!,`$t0Skv0#^Q t_$VPu<$S|}2/ (=&:Y&I;CIl֒ozV+3rh tcS" $pB7C a*$YdC.? A;YE-x̄a1Ή_gJVNC/đ0-D$ FISyr@ǯLZ~J*tN3y *A"LХ (4o 9H\8ܤ<$#gؾx_ÐN6&ԟ(\P.c6Z/`3|1O%!l`4* 6aH#bG,ChvaM,DQ((k*fFXUP`~]"X^^hY=o1IJy nWQ`՝5ZMh`fbE*FNz*k NGin*T44> vM4M5(s,t?ڈ?LPA7'dDPY/h)Zi@/tlEJ" ljTޞ=v+56woQCk$Qu՘~ozP.vL?Hpk q~hx!`~TH$H#NF6d먠ZEN9ݟ 28M4c_92(Y @V]^ ^JoXz8bڦ$T0E;(2wֺ  d DU2 xHgP[&>ৣg7@ "H9mz^!&zo2#,p˛PܓR>}!e1~gg~((RCCCE:T(ϞG(P]%U@qJubNXzG,$ʫfHG?3OU!/"<33RO ,Ё!=>HL98n7ʫ& Hأifܒ}V+@`u}$. <9 `Қ,w 1bo,%Y'8[^ރ D/P烆څx'œjnh(|Yzd.T5 ZaBb96E-\tbwٓֆipu tM>1VZ?Eh *<M4Mk)sޅDvJM_VPjtfyzX('ZzG;,'Zn٠t@&Gdfh]DPI4 Ѧ倹;cN7~梛P4444P~<7>iR.N}/ޙHhzKz*)$Db5x%=ϟ*tIdnja1jKZ: B\NbdE""f/))cAjbS'(puV46`MRRnش41XE:V qiOX&4P9Swva/99 M,q ˏ6Mǔ'p`fwh#w "n4 _W9Lp#dЦ^ jO} |&+joF~EbUcOJr ^ѥ],<3E%ziM?OZ aπQI?OxF'pQFL 9E)n*u\8h gf<&<" Ha @X24K;R8BZ)& *-I@DQtsM<3Ԣ 4gkfujtuPCHTCƋжCi{QG\Ca1҂8hRC8|1k `PadW񗃵)X"8df5lxn}p"(KOe !oJ1CCCGҦ|e})X)DSED2PԧA*zGjG/)IXs#HHG`a!(2HxM%rw.|`G֎m #j>Y'Ŏ)RFSXDv@l@7Vk6%)/C/j_W7^~ WutZ#B$M@cgs܁۔wc渠PԘސ%aseMM--4@R5?bBK?B•*(ӧOKK{.wBXNz5Ց?WJxoZTҞ}NJ@(|TP_4nx{i$%տرr~<(@u+IYǃmL](1 W|F 79❵Bd5!]_   zӿQ-` W`  J4tahMB*Ԭe߆N0['92J.\so(@#luc{ <9#oi@m.FIjBK.ML1Y}ٖh3L=S(Bi+>ԁ>DTzIICCE}j k=|%J* 2 ~U " ^5">&T˞ox4)G/z=zyW87;N&^ NGұQ.RUթֈCmh@Z5!dQPC$iMaAZ: k=j&zͶ+c܆;74HO4{? m:}~`yX gyO'q)z(hi5k@HWvzZZZZZk!VKiN*M9cK?@1ZfQ<JW3ڕ$/徑>|YmOP2H^PydDx|%tWMN:E٤7thMZ2 yl&HFnsQQ暞V_ M-JS&oPD҈o:uT*۠bXϜ)ó@젍_P2npP!":RFGQa|?~|9-d$.F|  AܓBHLQZj9t rT#IiC_8$@w+AD^eZUYl5Wإ*ۓkN aqIctfz F݄iCݺK{]Ej+ݏς*A&ƅ (}1#D0S@;H>u5?oêOR:Y(ZW]<9j~%Nc.jsx%O@ޕ١V~>C!'EMa98 $%_Sre[iA~:(ttDfg"Du0I41+02f@pRRxeb"Y} ۜ.)RE < 45Uyy4J Y?i$56Tv{T5&x\&uNȽX/Nh*!X\S,ʺ?WZN0zL5_ :tIՏ'_Wҿ~$!jXL߀HX[-לv w%r@ꄀUa .yKQHmPڤ<$S-1EhVRw.U̶ڇXf--K*.D&Q @ "IS$ =&#F Ŕ]0v=&HH%I=l{s{!CHn$خ^ cRK69ۂ^\7>iJaYYѵ?$0?5r2ŁN4RCJ(PM4DcK:7Mn4]|X^p?h'CK9T=`=Zvhjjiii~uw=ogRA!R!j8BBM,3B:z]˪#DBд4POM-MM--Llt|T,F+@ʯW@WqV yy&ΟrE_I*^: ZNu]TJ\kH4223$WMRY'_Z˃Z2+/ӯ&sXƃQj;w9Jud{=|Z$\S 'EXXU^zO* k\2jrX҆;R.w(?MyJPcFP6?!ֈue+)G \vC1Nґ\/8場7ޡi W$#>;z"Yb } f";76L9ʜv(poi5V[զ %R@YHOWj\Nq#}(l*G E >kX0L >Ҽt}vI}g؉+_Z5~c.J! ;T?v?|b%HDqk~:r>wP؆S殀7@TAT 3E`kd+δ& `3A[2F&^Ɖ+ ƴ8EQ;V-ӱErC Z$ |XlS4RCVy)2%4"śNab=LbBBI;MHԁ Dž/0Ah.*MrpN qU)) SZWԜOHwҘ =:>I!O QaOAKrYa֢RBZ?%hVOs֎)yl`E>sàu) (N|G#W/+|ϧ׈<;]或c.KƇ.%qlщm$! ٫i Pd41bfYj? ןp$Ȓ5MПPm7?1kѡuwJ NIK(RJڧV,)r\-ף Ds|$2K8 E/xm>OS [ NzԊ^vK)Jn(G @n[g,o/+*51D#rReм_頀"K03j ;b|P`%?ŁݲѥC̡ј>D`zjz%JNt`xT| A  wDiR?9{<|w(ÄfI9WNO|QbB4( 8_{,a",v}ڣB\1Hg" ШKCN1ˬ`,J鰓$ @"HNr[#MqB&P&`xI5ADMD(,]lgy%.8,< Z˼RLLHlzH?xε'9Ha{TID*-K3<51ډ=uN%B3baU 5I})=UW:QXiӧ^xI.qҗv5Ks (f:Jҝ| ~ AHq( _&/ҋWbGhP)Q C"sGUgh 1"+#J:Gˠt(e!wݫpڈah*AkPN`NeN#Gt"1KT ҺoCZ)$3Ƒ^bPAQVB•Pc%=y?&MH 9Ȕ|DaHl b ;Zh _OMX !k;L:&B mjl3-8f2K)0^h`AD FSIz?/򔌏hOwS NFS b i4_'_ 4P ]R؁Y4p?Te!J64QPR TĊLqQ#P3]Gf}?-#(X)xbi|3hs_$+@=Q7vx(V~aZUkJ9^Z9'ZPe^Bt{`7ߪVwQ 'o:s(qʡbΧ< d~mcf d_s\ءޗEVkf=;Ǧ}KB*y8/D\ ~<JML@XU]"zIX@8B*JDM'oƘ5|S^UJyMj mESyT*рL,:}Bȥ'Ҹ jpΏzB`dXp] SwO!ֲ: 1U&/ *])g A.auu6 #d; cD5wijmWoК)#eVdOy7MG(8.Ze|w0VyHBLaוCC 1/91T,$aɮzTo%jY @f53ظѤe>JY_/;)aF ._H9= GLm%;TR +MJ`<< >%L.˽SI^<0~fd]@(+L v\=b\6vT`.J:B;w1 4]|AK4K&V*عX_~Z4/"hIzB{ΏbK"HJAiGڱea( iW}iӷGw|{yO{G;dw7s)WzIN^[YA1H_kiynFHЖem)mzmC$͛F H3F oP&$$t.jIE:s#Oo$qlZ5w(dpι뒹=)=Vc?XQ-#Our~jg_bE ?S7d6Vg~klRR;PzƟ&Hۖ}~U6?WҚX8JAEnF0^Ҧ@#@EzVt~/I%WO*8Jא{˦h¨z:Q!ɵ SGW>GP/mj+hHRgvf[G#C~Oz-ZN?!@G5+MQ͞5$ub/ޙ" _{T1 Mk~:" 0jr"(Ψd:"8\>H~:[F9I6(ǝC#!)ޤY('uJ`fz{GdR^Y^+ߘ{4xOK]ⴎ~GIlҳ6 As+ <ׇKW(ۆ%GtTԛISSRoSRTԛ*ߜ Dmj?D@l.?A))I #/Į#*7<P9c4" >\+hoStOW3J)MdgD#?:DO2[5i}kL>‡֙|#C7H>=(QAkEw$-J2ߏ4D MBK.S=܋>ɰ6>*?8L,ߤ/, DSDe9uJ!^[XiKaC*5춒Tv\6]|话?E o3z6']cJ4+wMMMMMM Fe[45>ԦM3?`ʐ,.=dO_VzNA2'dnϊо;xE"{xb U,1=T讕`폳^<ϽC@0*¥aa`3@0;}J?8S6쀣yL"7qA޲BfzV=4j̈́/GEPa(gtsƴ!E~(1N)"KHSX38wߌ^1 "XAۂaqH}G&XxoOs` _ 4IrC T2_ I+m q̈;dm{ } y e&[hEln7U?J^I]"FcM`Bt}m&QL(u$8@i"dж[ +CZ5f1EG qVLt.8X " :`4&^ahO9ґDizȣH0f4B{'@>'%kNcu(,\]b`V8hrS!RI)ej;bRR;;OC;xDנS>[PO[*L,>Zm~ e#%.u4N MC~:66gsYh$` 7V`yx&"`|i"@12l5+^^ F3Z g+mFmlN|_I!/j;kCS?.wш@E"JMJwV)MV ?LgaB=1H~ h*  D!oHGWz< A?xV,+gQu<]}jG:v7Z {S2bor+2|QǽIҧoj'_W҉KD#8+~5T ,X X<ϝ FgzTsnf#S$4:yREY8ޯ@ZTN 1ݤ\?N1֖zQ qb=elfPv`{AJ{80܈bLM@dSf\M]=mMMMMMMM/ c~X*A JH@̫4ԒSP8ks09jE0"{л.BeAӯ >û t} MC/ӚQ֧lSIchl[oCY*"E 7.bΛP`w_bKHϖjs jXߚэBpG>$蚞_Z2IY>oO !'ԠU֧GM>?׽I#/z7 6J#d=lS4~̆)t(wtv DHnh/R@6ދ|jǀ\KduO Cl]τ2n nG*lY3ޛj O^^i0)morE? ՟Cx+WzRGG BpXƘlUl,'uxII&C;/9u%c5]gF /M-;u5P?>ZF\V?gҘ#'"վͿQQvx)P.V?Ɔ՜tAeh?JtڍJz~s@2N~D"!sIv^cBEܶE3XvvRUr^&UvѾ^Xbj# ҂AsV"E}3NbvХI}ovh hsk͌H,Mu}2vNX;Cf 7hg'rCJ2v|Zi)p|Ё8:AtShW9+pR K?_DŽh"y~2z,FȬzre1:fO;ԁJX)NR1٦zzf{D3a5[]b`$0/'uaެI ЄΔWvSEa͟ב~*=8Ky؉*&\nUn4G%4<ի`i {W-Ki;n BxhI_@~Dv\ċ!%nXmP0`o $Jy 炙ڤyrDOZY4/z?X+4)}-T' s'_6J^=[ /,GbKf6K#O]5]5OvtlF 'f-EԐW<*;վJ(e6`Cm@9nf`4(VQ|mlP\+'Տ`$"g6+1aMSU(1y‑~JtJ {R+g҃j[M?WPLi@b2Tu h5p)jM J婊jZس]))%7> Y-.E\t-N2H.$VIk-֡BeYT0.&g6`T/H.1ڮT4$,T;C..+V .3E9SthI#^ z %&,VYB4l  $^P+$vQݰQ@SHg{=D"Wv}/ = ?=\՟X0c 2l*bl_^+.o8u;Ҳ8PJ-Ҥؕ@k3zvꚫ+֦alxV2 ƇxB)'WcCBgڵWa@wɞm~!x\ .ZЃ l.wH3BA4\ u jެNw֝p;&"Դ{y$=d8mp #_vtN ޮ մ{S,8U؈6)9gjnmBH\MrH:UZjC~".,]pwk8-:sc} "78 ŪW?@a ^h#: 2lc+ztEtR!tCѪBCQdAgHIrB20ڊD]HkSao$Z'Es.KotT kV/좮xff :^~jLǘ}ha*AN_CϗcoRGCN+0Jث@#`* ! -(Ww dIدSB!}:%[ʧ++¤ ؗ*XeYVY4U2%rW&(ZJvb|mUQ{с5A Ynh@5]wJ1#`ysANacg4/\34{Vh| :58OL QtRe9r#?u]5]]5]] &sv7e[Ǿ~[E*Ո[02ZZSut2x^~&4jAvN2HiR!Q4JaTiEERilx$ަԲdJMMMMMMMMMMMMMMMMMMMMMMMMM(Y$R!}i1h)8]V^C֟.cOh+DŽXn1U$ޜE i.D+޻ZR;̅@X/0ֺKktLFS)(>h9`yj@zN`T܍%bh-$lّmW+HXe!SO9va!Iyh I`ML @gl]g>)0sՐX>V{Q)w3?W5~< unj 8pOi{jDAp~5=G(`cI(`]QnȚP1iǂ"2F=CBL4H aY@þO9<VzO`$K@0K#eq3oa(0}\ILI43-{DDgz! L0#JL(Fi% i-fQ;q% Qo-ԧWaGdDAAB]%DD)P] FȵQq$/,U a#M,Ě'!L7&XN?s!|8wiW@5z|Rp|ҕ<oK[˪aݵP6z>O}`6hrX&͍) ÷/ZPtKu`ٱZgP>{ tL{ynhV!75kMVi]|'_&Rd=MG&F 8++S5Y.Ec(SOe3VW=e18z:OަKY(Ӑdڌl+ǥ/ܻ5~xmS0z,OC5)̟oYС/pYyhq ;}GZTM4m6HoH=iNoBũݦrc֗-e,@_TV"Z>KKKLdS 7ѵB'5x D iQCȯw?3iD#?A? =X=zb^)fԃ;xh 24g<*7@A^F#LRäxI2ъ~戤aLvabQ$EuthN)'G"'VnIL/JuC%fJ$bX"pQAIsF\BQЫɒ[,dJA&ljE5 3d^J)A uZcZ$  8fO$e%˒EͦTī3u'_%`sE 7h:%M_xN- rti%-KJ2!ρ %Ar LtC=Zsi p: 'O|"a&sj <9KG.P23e*΍gǠR8%  $FMB<!z!&bPegjin -e @t&(4[GеHZ GPV!}$ls( -n> h>5hԑy:W zS&E<$Z:5s ˇ2֡CZdHXgb"&ߺŎV[ޚ+bŋ(NܦtG7u#Ib2l'Jʸ&dCE/2x/uԚx&u#MV1[ˣFM>ju o5ю(5YjX-V@ #RMR}d^=^( {8-e-PX^;52]pwJ_b۟?*g垞ǟeԤgց"&쩼n5ۼ4: a(5_XHis^ ނsJ@愆2XœSe+lS7nk.WV*>Ӹ:Zզ%+A8KKT\hH w$(?^ l4sKjsZS<R v8hsXYV_Ƚ {Z\;Et^6ޮ79X=>)k[rccC$#rNӧ-1* &1bAxfp`3|b i6B9Lt/؁D i,hN XhCڊfR@ɛNNEoHj`>p#e舡Y苉GJ8J :@ 59:t't ܣ@f=oL26 _PhQ%.ZaK,a"I)BǍϧZb{aֲ<I+УCO/iNzJfq4iéDž<0h1hMN_lV%UK@H#:?fX M)/ L,+mˣsà>䷬x_|-%`Ys.$POv /@"BRHHdyrK4U`RRcYRXL0kF˽Cb&Rd;LId}f,XVlPXHhyf) -HtĤɧb a޸lyUF[hz}-!jA'BQA.yAޜ1i N#@NCO?b)D5}>\j`/ǘ[b3dZR]^vJZ{Ε"f]x5h O{dx/@h;E Hdb{j[pjiۣ2K|!SphQ z7kdmq$||xTYbhj6Ez>QM4)G#qWAM7#;R@خQb 636tjtB~GCXRO@;~sJ]<@RMG!{r>ѥҜKU=ݟV/;W DAeH[ oH5|=KO FH jm h X|7\ J-xfr_D5J"6_:K]zc]b'u)mYr%ʜa^0J-%BLo4!%V70[&Pխi@2o R >G֍My[BʕoFI$nCimv,hc8BQУAQSJDPQf&^BBJl||l"Ā4`j;, Lv](0Y}! k~ ٜ><-}_px6g~ wOn>&M>=i)T`:eNkP2'f40Im@e;S_'Q>' G_7u AjO;ӫ@x')"Ǔ>tr.ΚȴoF)vtwk"ӑk:ޜB%QX[XF y#GrQx>d`Mg0SD.%W2?ׄS/Tr'/EڰbY2}wO]O # j3҄:{\ U B2$&|X 61RɞvPf'?ޙb}O f?b#/mrx8ڦONJe:TC(]I:ȣ֢֓SyS꨻Lt>ិڗ5sM880J0FWd4eP9ɚu;*SqBMDR;NCKxjp4)i$(IUzUJ 6N MJ^-uoIRv*&?P,DJve<Vup8P@vQ{ ^j@o6zWEѯDŽ+$ė&("QLQa$@z9f'QuJ6PtCSgNS!r4y[<ָcB(Kr.@ 9wTt1n0,аg@I>a&d?*)QHP(42dNn)ޑDYdfIּPfH,h*e_+>$㔂/IPX: !H Y3;s$!s(:tiOg~zf x4XA"l|P, |?T%ZȖmL !1$c[Xd I*D&}:NPHAODivS :FRJFxEzYVZy?:7?5jFHhh֬ޢ-TZjCr#+[tvW٧粔=7;Mܫjvگ#CÓA5Vݠ%[t7K*P Ax` 8cWon8*#j3S-T4[PAGzBd G=z1(DC.MM|]+`Yꔪ $;% ?TFf]"T H*dBxS̿/ҥ{Q{:>x_e/+>pkE%!޸10S(=W+_ozڟBqRp5%&K fyXE}Ta@L _5ca~gu&;E/B4KY; SQ`$CTͩHQTYFk2c҄ ;E!$#%N9R]? `9Ciq2|-6?dTzIqFO8179|f}=Y"+ш QSK}7g*qIK]]Y;5P!u1қV@Ju8*>OBxyKHΛ7s߈_o HP,u:LP<,.=DݦObbo,KAI^TQzV^YA q3ip۲OBѨM|%uzP/`8Anx|ߺz^jr zD(ZWCI_En٥L"{Z,,VZPX%3F͇p9,:I=GnGƊ*Aq%hCʃҬKEQCSWw"PY4 |*'6}ltXR^wH'8ui"HZ4 +ԭX-BX./+{<'^6ezOҜC:B!)" (QS /E%Sh8Y4e%j X+튀>q10JF⑅V|@0TMLp`^og`%`_g;)-S  QR-_ޔh}4?|:"ga"ysJRi~<|-CH*BV;+RJXe$N5$w^XWEu(q4A7k>ZR cEФDe_ѬR] )W>fvUsC0F ωOsB%dP?!E\ XS2OZ($7:^0 =%M- `U^֛g>& :j c"rޔG6 :MŠYW){(WzˎDF1 .M}(/򚎇삭]~}L@tzK'Pla_Rn:R:u,7EK `WQiDB+bJt7EX-/\搈tk^F|xxJl5iXgI]&;aCMV`'h1'BU.%ʒMC*7<_Wk5TyˡuJM&_+4OZ&RgFnxI17J7&;T ëFY+-Hā|nR$kN'<С\HQNz(L4aY:&H,wXd`ƆPM,  rt|Ewp#JDE#HҘO1r j=G*$p h6Ajdj@o2ߜT&~ʞqdB:h{`vm&EW 2T)`{яplH+-ye*J5y ДO5|V=bdffhséP7=NN=Y y8@EE -`֜·/H#CN}0|t<[{O`n=/8}OqNrN/Wr I6X3)CK~i! "]f LH +ehCHäOPGH.n~U*c,#ڌ3 Ny7AEplrw) 5/G(Kw[] ]*@\"ތ})ʫ) *ĖM?eZHcQk;і<3Ef0t.n_GGFRG\a(ЂX7doQP??PU_LtܠcHhb*pDnZVgabH7Ƈt!k8=]WH7l'Gz%ndiB/.6mV<{)ax\?xez*742^:FE D.@7P@wI:G%EkY Kh(K_SA#A:@gbSU)ӲSXnCчJ$VXVKu]>MRJz ċD@ͻTJ`H#+SB4UښӑQh5ғS_V;Tjn@ȍ_e.ҷФzQ^euz ZTmMASRr\_E#@A񜂜& `4ݩ$J"l9e=:Tv HTHKP&pĔA53M7cؠJ0hz %KP`(g :*@nj#֌P>aD^'.oF V[Dypzyh6B "bR)Y)xRoA7IʉD:Yփ5dkR)H9(ꦻ&CɩIx ,5>qX&"' "PA-%rRG{0*\MdOےȏSs'EAί,kRtwWAa.c:߾Iݽ*>$ @>;>Q῝YG` wcV.[/KV Ϭ%:>{T0ыڱ0"ށ n0q;؈6zhZNKފDYG "y 33ih1Q\4hy>Њ:ihm<"*¹3Jj_}&CW$5!)5%*YT[o|v@BeEeyM +p”|9$1ifD@ ){ J3b΍7Z'd q!EN>x !*@hve*0dSQwȋͿHLida_HA9;2>ٺڢbxFZD4BKT*>MQ*8caY@[ᖺGZ2D:L4@)yF"( t}CN1HI;3eN'UU]y^*Jsdk4XI]Zry>*xg= )4J}Wڲ ֢7*7ȑ:PwU0@boSacz.yEX@1b"4j$sء&&R89q"NF=φAH$s'DVgbsQi`Bi)ʶ]oX/?L0≉Vn"Ǯ/4%3^gҘtEJ F>CZ#Fί c٩;`=iĽ&jvRp3J2|_j^XATv^m",zE#h( wfK%[>,Vt||tYHLQ'b@٨5,f$@r0Chhry:Eo@٢3rKAۄ[cCC-,zh`B t v)j I#T*Q҃ [pE**"b)ģ8^7Ny(, d߇QiB{: KXmhĞ$a(6S1z-\g}Ji6Pji(M"i[m4sSdPs#2}1FކNir'4L!٠K \±U^0Ё!,_p\+:N?6O? &99 `<遁ewx)55~%YZ axWmhU)RfP*-),d#H9\=ȑpV|%pYX}Z$ ̯P$vYZf`ՕSB܄i$\Kt$荨AGa$]whhMB\t`G.GppiڗT0m)6uDv'/J9[)EDMvMaI`IJ62 91#j BjF=Y|ňޤ2T}M;e"H"rsʚ_ XcoP{;]hOCd77T/),YU30<zcցLMBT. `۷lb#PRQR0DT܉j[;$njMAcs!S s}z4،*cYQ,X*撆#zere(5pP~*A$SNa_reCY+,4,D,'WhNd/iR{ 9ΡAږKWX3҂bNN)[ ~,Eieѭaݠ1+#F6jJ_枀Eʈ2Ka9UR+fK\;8*(݉h`%yvJ匮yh,Z B=TM eą-JJm R1 uq L 9pOfwuր7v sCj#*=D({)){@-롤=o(f2Yԑܧ;xyM# R'πx5򧜻R An(BM=j:ul`PBo92DJ@FM"loK4c@D!(CĀ[ `@im6߯ $oR+,u֑# (.jvV:∂ek0@ж  ȷnU<15nB\ Cc&D#%IlAK4lG T~0k1%UEII&;bLXĦO+ģsZC#$"p61Sr2V;0qX :$SIJ̞ p%0c% ㉹zҥQ>壺__;~1mtjODSS,F`!rh}lh4)!e!յ,NK?Vz9?vě+,r&)X @T/(J&`=TDe.P>8²# _Έ;-FX٢VTqC ܩ-*>`ڎyB -C*+rX'OZ[PmY4`Vߨ? dֿƕMtj֥i:Cr[{7[KTky٢݃dkR愎T>(z\i2 .=* Cyӭ4D,8 zO3އQEQE(BB]ӹcRVVYզEafS#w(sc)ǐEd)V}"`-Z&(22aqP17;T k2M)fU+e:KGS6H8];ճR V|˲ :-LoXB5bn'РAGz r# 2Oв \4He_څ3@l r|Ej; 9X~O6 ;~>ngkx Qh6:>ԪT QW-B?pP ]X8 U093xG@CETT`3#J UquzN@/)&dTfe&wO7Y|ָ7]/Zv~T,GLXWJA\p*=@;,>vX LjQ+AeVUui+o` @= t fvP0|JL7>K懏R?tM|2ldzxKweҥjn J/'HH>Hhʀ Qx"c?&O߇Dp1*R (|%+ 7 ]tL` n!4ke$> {R'Uc.ZKcJZD ˱AQ٤j&C)PȺʟB!" ܫCϥ3ýkGjiJPB(g;}h@!)[#ܞsr 1 Z! AP!Il1p!i;Y֪t$.cEb(wZ>Hju6*iSUMs% MMB@D(2@r)0{@~+KѾ%QE-Q`te]Ur?Bu]{P&T2Yl᫯L&܁4eO/\S 1ڃf?MG*6;Q?O?']dF 7Gj* 3Kvj={֚m<7]!ǓX&?SFʓ MS'p* V 1jk{ԡ9\kOҼ<_Zd5$'n.oaf|txرí"e;T jh1j3Kh< BJ>lެD"2E# &@tJ0EWϙ꿁W?_U꿁W?_U꿁W?_U꿁W?_W&U@bqi}Jt>((Lc#BRW'qH6GZfIg1Q6Q_TtgWv7(/Z7i4JD~Np~A="JGrтNuѹ& )^?g5.BzQبWKʡ<3yV!Qg6ˠUu\D Cv`.beuU[d`3Ժݥ4ʷI[-FvXSsP,2*Zz:TZJ͘OD!f6L؎bE:z0դUJ?z#,Ú>nz[ң(zR㤉SѻOz%T/7حW?|@"J2Z~ZІm3$hV`ǗcCJdiLlv@=kz o"ŨӠM*%OfBuVǩh$"A (SVQӽ)Q")Ca*`7*TOn&O-~x=^Jq9|1 2;_EQX )hwmgzeV꺫u^pgj4* ;bt{ag7HbWKW;,"Lmtǽi_ޚZ12.\eZq|DRGQOUգZʭpيA9*N$pp-F@ۼ 7R^)qP+5zi@UЪP3#7DDg5> ""XV CN*Gj"p%o0DQ!4~7(b7p~]H*օب*?\*yWALY`( j :_U*1*+Lj 7+*+ jd7xTP%5p` cPܽwFfį=+KbMNRBZpg.z8-bX L?81K(H(QZK8wb[PLcFWwxz-2~BSqN%BЇ|z=Ga@JC B۪ƢEU.:Utv*C)Cu$5J\9URY15FpHl1ܒz% 4XT-vcݡ 9]`V'}2XQdIU~c9pHa/~>Z@.jBy&_j݇"f"sL.EUƌn3:We2 c@U2R1z%gcԡ)诡DAdupEC^2Y_@btI?e -?͉u$PV@z@TjJ_ҢF+ن$D@9b3>r?HBAj Z '@OK.IX=y 4U$L xIM0 A!"hI]ЃdƄwXF"%,jsNw6ͺr IQ7uNW`աz*A!=sGOab@!0+հcJP̗OP%Ry9]mHuQ˰思cX I5ޤ.0z{'[I8l0~04M:fiQ7ujRUFf)[=3`Z뿏8!HmM8ϡJE*İ Ȩ$=c!ʚibVM6Xrp0 pO7{gaKޜ 0\~i;2֎ w_d GP)aw aa{Ѯ{th4bIIAaXaGyqJCP*6a;L dS%rpdzWڌ(+UT,Ġ/ҥ@QTj˓v*4`6"' OT 8iY1akT~W:\Kc }{Miy*@{یV=㫍'". EttG $Hrc$OHd| #"/P3T.TkӉLn3=ss^1K- {+ڀb]|>Z Eu'R#6ӈp BFEb$fɞSbS[_z2ӆZ5DVK:/*W"\88̚)H.=Pif_P}*p^E-s ;M^tv(ˬBv Ӟȼ,7EAh#2;7_*JLNZ0(dfPy2qMjo<9`H^cn|a:/<(>b=zjVCV(ҽ`˵>DQ"QL* @"%[PR37dD:GmPJW(x!Ex$# 6&pD5@@TBj6F`,pppE˘ RF1\/=ԕĺ/s߯r" kZOzi-_I/[[)Օx_\{cCG`v(<*hvb7x>E2I7 >ۚYQo}reJϢlFHvjVBy}4^,g\"QA*/@",D^.*=h4>df00Y:L \6N4a#5.5}ڍ Mu#cg'$\PZͦSd ^hbtJ1;*lyNtI&ʕY1ǧP"B]^Y<$V u=N%:$c;ZSb58 X*xC7Ae]m'R&\2210I%^W\;!Тu"B( zz|Z&rIP>cߊa=1Kz&Z=}(:LP_0SgwK$&A;7֘0؀jqah.C1+N&݃#6P2]zX7oB5r(F]LQȀ: Cݏ"3C@K,]P7ICax1%@JhH.}CZ"RW1ChXXFP\ uTld"g|I_%EDVVf%fAb®Ha!@tr.Bٺcn0(aq et(wڏ2 m J1{ӑ$k;uIa&NLVڦHd{B'/bm!4!tZ aGCNl@Mb-@dFAͱ4x&T&;~DU*y_j h#'"rwI lpD IT!Lnݦ@X5 jҍ p2Ȥ^71EhN?,@hzRjLisC$}!\.E$VtbmCР5h('g:S1s <Y6rc(P/{w%ۥKŇ~{TFkO8;{5!6}I1iDӪGiU ,&TVs ɀirYʔ@3qQOLH3H7T_hلu-6 Zm#^,t'߽ҕ]e K6Ph΀E** ;ߚcohL)Qp1Ir1,O`7֒DEK3*$+R3$?TnjooʴwRr{XjJG!v' dbDn fl u6~?PjZha,xb,!LЁϾ*BKb nk lv2zTtH >Tt!g^Ehm-]UE0Kp`+[`&T/Q < Bֲ[e.ok1Zvu9%X=7VkPL.`.RЭ"n#*f A6 eiڃ$A%6Oj,H#l_5dM AQa$#(`5 ۤHVpGgCÇ8G`V< wY &{Ȫ9Y-ƣ0T,&D?0 S]$vgO@ VQ#]{h\uf~ʼn8[dOhK&Sk>*bXkegc)iB O̟Jyx&E`^YRۅO K$6Wɦ/{PK!B͂f죙0HR8a8  i1NH,$8jyة8h'<=SSS@@!i;/w# Ӂi 3KfT [NI;.AbNK/)Iy4Z&qF X+I?|-(B0.2zS)NJ NB"t" ڔ3HZZPD\\KRVu,R,M2.QmQ+A$W%e-Hq![هw Wɠ&1QMA%EI]`ã_B"IK tv4zר(҆o!Av@e wo;`yP: =-6ˠa@*EӖZKؾf"[4Uxzڔ `.i%h;ƍˬhɶM+8,]Y"bGQ2&s F1զ_ 9*N{u޽)e]u[-h)A#N6h4ur1$"6uZ)G.却3^u]\^ 4H@݊"TKxJ@`?,gHĠyb3j1.1LoIT$&"$ # 1LO3hm-k>忦_0 l;`돺`KCγ`^{iے/Z%@hdF,:?% R}2;?}>Cg= T✠xB"QNVҦl(~X;԰PHL4)lMюWcH3Z@::4HHBPT6zPtK ?!D%ǾcF'NU&t`"I2$e)^Au\J^xRs<  잤ufh9e)Oߐ[-Jރ.d22iB)Gґ/ ;ʉ@R+@C ڞjMDX$IJ @3D ׵BJWQpD[ 2ĦI0^O1$RK^S2w % JJ]@X 3`ޔ%AD]:'e)$l2=׵Ml!HЛЃۣ66"FX[~ޥtrZdءiobsKCaPWAyWUujDoI&b`w:UUMdCq,ldwX}, (R5pd0b^_qwi uwPzg_*wP13&SuzіM\<|P IoBLp>."'>{CoA{` #]ox?NΊb* R&6$VBUm|D: =?|?nWSMqz`G{Lrq6 0y Ǩy:ǻbv#}DvTwr{N57n,osT N-0nxMiyEbgڰ: ֐O+EAHM_CڬO(`H1! .2R[Bs>*a 5RcziD)1F4K&(ࡋWa$7 Z x Ӈz;)!h_QrLV,uҁ>xR1HZ_iAw+Sm555?B]ZV0Qdwh 'U @iڰi»h5װ8Qp.Q@E_HLź GF6,G5vQ |AH@KMA[CbCsJ%Hv'bIo\j] ^}6 PDdjˑGIz1X0-DY=*>ςn,:߭Edtִv`>QWb9YwoGR8$&;AaD8qXQtM66/ xKWJ#0/e <%Y'h4iWnh$($ Nc89 W^%ANtUlT2zDI֑p_v|Qi[-bB2&!$vbI7ogHVd!{EXXlm"$*c \EM3RL25n3"b'/ @rBLNS7Oч*O6r翌VAFDNH֕9Z{xG T8cމ8RAQ^@A@}D U)H@O㎯b/V8}cBnܶ|ǥ_2 N#PPg,@вr5A4CҤBP%? =SpV`$"zG>!͈ͧj)^u#Ő*yԣ,po:D |nSn/j^-()gH?q.n.9?>J]MR=L.goxW{[>M: $RoO-p*l&_6-F0o?/RʴgZ g q֊l ' T)d&T hiG`.ib7U USL&h 0bK 5VlMSK5Kf rz*C`Gijڊ m+suTў xdE'C/*HsH!NHYh\ 7[VŴT!N`1ѪԍBCLe4D*ĶS>;Q ڰ2 pCסPIy+.%BLbb&dj'&YzsJ,,bCz*t~hTN~d)sb(>Aky F(B{ژX1DM"4-r&sc]5֞!X49kY9Č2-b(Ɛy`#HjP'1@+2/#8\9ưXʋsf*#ܵ OX+I@PRD[ d^I8 ^]*W\`p+`1d] 3D\ѹZu TV~Q*e@-{ѫϞ{c&&DL;ԉ!ͅo58G@1@,^nApSF; }i"INx4<5$L9XW##S~NsN`[) FnaKo>I>+Ž~O/ QoPЬלd%1G0#$7\Uƞ 16Hia/h*Sq[:G0VˏjW`,)IFhȯ{B=g m|])f,f<[eH !/`T(BDz jVr)b$թ9&c?Ev< >&ORwdB}j:Bj>s\M))%[jK˻F۲耵-cť^򔳲]]{"` k J:iBjf&"9F29'PR҆ NkΖ18y:dZ~T@ۢARyT^.?]k>F&'zX/M;/c;Ҫ28<2E=(z{xDقqEq1,\Cm0?,|NC?ܚXҫDf̼ب9>W; =Zj=ЂgNUH j!=Wݢ!(EV)%k K f h6!^,Cc-m)S|RTS8&P+*B)ZH,'r q{ZNkOJj?oUG U}< )AŞmՎ NU]VAuZV)P7[ ^J!A"Hs/U.}GP#qbKƺ#U\Xv?)KL" 0086mfJ:boa`Ujז J^x5*M5jXVzRb<E(O=DRFՏ8B;|y`lA]nC'zD2!7)dywi"R4+)IE*/BxF2|"雡WVK}<_Y3QA7T\&D-6z?M9|9?] O R aSئN 9w̫hkӛ2%])oR7bi3A5MaO]KI<ӢVǎ -z,ҽLeDBLHKE/=MC$*S 򏎴ġVADP8"4J#)Uh>sA1:.]>b#4.>qL-3 !~N]v ZI^2E*mM9B@! =zj佨TP T{vC\E8C!״vPdH $ "D dNz; Ƞ3)*|ZwA04@4I1od^)1J\nWΦr-ʉNZa&D`FV4A+&54k ڿ}XƒVYh;wvw60 Da k`-jP{rOC#?EnL#QWԎC|#I4V\y*C旤a梲O#iU]&;1ilviIzi1 f!B/ i(W>y8{iy 쨎Q`,IoHC[VSԅ%fonaK rgtS'BͪE7]7}׶{P;  " .- NL/W!ٔeH5joN3yEv{bsڔv .p[١Z/{Wg7Qюz";JSS)b`Zay/zeQЗ ʯ+wF=fW4nӷ]@@`6yTy$5L=Eh/,-= ڗ.>~D{x|ZXP|Fd \L>ffB6FY4A. Z~f<4(n$>A/J)W5eDB!_dSSנ&Zm)X6R"=xsFBIv^i֪ tS%Ox9kW:bƄx׷P+`ICv^hԾt@k~!@ ]_ (*Z4XM2 ȵf娀@ymԨS26e&Z$voy$--9Gj&J3xZL&Z<`' `^HO-.0Db v^ȁ8vђp' 0l 'jJ8 6M mGD)JKA<ҢvQn5+kdz鎴bNJX k l_U K-l[O> 4l&~÷I(c&u>zRl40@k< @3'YP0$2+ XBwZ< k2`KNQzAD4DԎn4|0ܻޣ pt)֖~v h HQHİҀ3zx|c^ZBTZ_AuU9 hǽ`dꊸGx"{7HGUc.m=@DX EH-@l/JYjSޤcͩAѠ]b|>{-aL;CeAё 1M1+ `|Ft3[+GPn6=&/VTV+[)S`S6dK7{P:@NE8CI(BU[K6%GL['{W&Pq*B'}t Y5 s:Sϲ=)X4+[8ISR[AuIIGn@[?TS)uO|4OjmOK='|9*X _cXxט%T`})) B6^v#Q>܎;G<ڞ~Z|#7>C \ uM 0Ȥo[#l#:sBx2 L'(رLYԉvP^U]-$;`=@])ae607Vl PM&G|#g#/R3+,en^_ @.AtH/Nri(2YLI#AA y@omB Uж '//.~CV5V6mP@d(e ҩm( $=[.IAv7H1zNƗ;')B4`/v^ڴ2RB .vmKoCġdB ؑ5"g(s@tiG x5>+dT}+dVD'Kå\v7Az 9c5&?CZ:l?;S7vzSZv1PW>B3b<2V20 =-VWUr9^MlBϨ+lmך'n7 "e=J*]ͪ?P?c@$NQBdMCQ=0$xgv=J3vrE {_ݙ{)X2AA:tO])@jtZSJJٿ#M(9>Z0+>r$ޒ=P"I:c=MNOn? %d?+ڈ =p;K+LRUtnY=y4#@D s#dmfi@ CSɩN=L [;P&>02>e D@8{-8#ѳiMn߽J_3 K ].nOj=%1hcr<͓  5 kK@ ZMl6lE撐ohAJrH髄zT $JR0v\kJ,п*)񷉈A7ZM2cT  Wu|MC/sOsMNYlwIJ --APEH{T@gg*5 @Nf0TlqLhPJˊ}SA 3 ;w(H%,-C=$ T9ZK%cwe g̋W=Ѭ;B<\TdEĘx@qk LA-y} JPwjCo`"4$ PwG4Ly<Gz֤ޭOeC}LD`,mTSM{oCC$.ɦ(Jzη |Aw.zCX]ޏ'QR)o`>ZᾱJ嶂=-N eM)wp=KV=?%y&T"ۥXlu2$ٽ;f1\=i TѦtҞ.8D$^3?%[Zr.?":sPA0At_tA!"^eШ sRs3R 'P X jnޠwe{ ogQijKGv^ITaBVLu>6y4{M{Q+W-لFcuWM{-3t?E[hIXntݶe y7hY^9ćRQެ,қu-s,` ֞y1Z|ؕ!;I>~|+S)R u)eܿC)uGq~zG77o=W4+0o9F:,D@6CS #ңb,tDj&yM).&L0D/A`\8Z" zT8U[4ǢA,AikAҴZ-ٗ=Hyu_1Z 4Y:A1Rp*j)vL N`8H[#jH7- ʍ:$Q $NȝWJʣ#)Eqw !Ci [$_vYp'P_hзw Ib<$@4M;tޑ_5?G<¤ƒ:5קtMMMMMMMMMN1 1z(2FPSS:Uiilٟuz*LUA<٦@9?5:u\[].^ǫoS$[TG.c$M!]]R,N:p9j&\+Q9Kb>T 1ΎwI=% ]Mt4p59,W>hI5``@ He7&_)|¦t{"c&{ i`deh%)>` R+ӉL>4 }= l Eƻ/ҟ1ҬZ(=h}FQ{*2#5.Ak.q}#^}>\zT=Ɖ^I\i`p%$TlTjomZT>Fh`1a~Dw5C)8o9+XFGK4 :eGJcK %F)`ٻzQg% ̡jBBeG0$rܿ%A jI<2iLtO\_DH?ꙁ5ڿd&REjtH@qp$lY d5?D׫ѣB 4@UlTAWcXu'h;6p:xaJ.պNYɹܓFϨ$#-K X4JedG@zSa KfCtA|?W~/ ˗J@2T?^F.gRڙ֬c5(o~p*t;`˷~'j'OJEcn@<ʴ} %$nw P + Đ:CV|LWd qa.Qo SL_}@JcezҴ,#1ʴh r5ҔҝQPov&iJʶI 6bJ 3ei0A ҘleKNfKirҒq*mG!=k1LZ /Nx + ֚@nBvhP`V(,E1M07] BO*Ro `ޯ3W`PodQ\ p+1ؽF UC¿Y~ סZ^iX>#YW+|"ĮOCzOFY>>w)N#?2ʰF)qgHZ;~ =ϊ:f*ab%gbju T.MMԸOz"fu(>hǽ `nOQwwʮ=+BM(Q0f!5hvT0z0 =i [a Rz<-/n-XY\cܙ*w5'̗'?I)^j6/5NzJddjX$Cp='Z^Cjj 2Axb{_ 47-I93֘ 4FW`V\4XXI-A/*JZƺi\\tŢ3N % fB4(&Rev/cZ"ÀyPO ?Eл,o&׿o<dp_ үĪݏ628O (j%&:i=VJ S?O OȯF>QA64h_ÚC,D*zI^~%Vv§ d89;D|*Uzhtr.#(ɃRr&FP:/T*w"$*''PJ~/hMQvJDs@S w.|5HJ 2ѡGR/:)&u֌OO5zdx(@ŀJ ?a9Y;* IқN'huԷ.C6B bwyYQ+}(9Q%nDC?XXs]?M`QnM@HqY ը&H'8gG 7: 3u2}%P,^ZĐ_k{nA]S~sF1lgY!z'p$ȒR͔tߜQpg_z]Mf Hƒ|R*-ԩPK4DM^ʶ]/A@"0'>j\J$zп(iJ (=QJ2$=HN,C܇k ;Gu0EZAWUJ _1^N1`}J_7QrV)+ =kk~fAf0@9l ??!¥G0#/٠&4}1GRM6"ا{PI-@`|A'g*]>ᢇn]6N36c .N)-% 2ߏwiLnkܡVէ 2X%1إ˓f =ڭ ∀@ 4܆玟ޗgط#!$LƏM^nһZ]EZJj*@^Q:L 4>eDЋ ϳ֟b*KҁRSXsa> w` oѠ>i)¥l7w‘Rzaυ0sH ۥf,>yYJ`•ieKŸKEߥ [>NNzն]^R*h)ы/e>~( !^Vhr70Gw!w'퀈J).WtP9##(B.(A@Iq5(oLF*2^y4sG "9 i<& !g ZJWXKP|c8DTƫQJPѩD4>0<^ثc 7)/"ݑP`RHkD@ֵ x&D('r#9$9)V x䐞AGmmS&Ejd2( %-yz{4zS+.jڜ#L tكQ+/7)B;RUN*{Kgu>QPAC>>< jd(xzE,?æOژ%L6B^GBwgΌ#N-IW?T+N q{f<BPU j > 9o_*9eط;ugsf$"O$"J~(i!π *[4`%5a> \@xĄ%9){>ޙ  6?G\aI P'QM-9qk > gKP,10&F3,6'I复zCAWB['oDM]VsWsH ,^ޟ%B!Р# {|yN#y% dHDDkBOIQ| 0b!8skPT5|!}sPՅX"b@;6J*``҅۱K*K ev%w۞皎*iSy /fޖ`^#l0lˋGoH[ڠgMJ=doEezJLPRCqw\nWѯ#q"{,JhMen+=)XcԒn`pحzQѣJP 5lї{z'*oAr4'ld!"KvqZT&'BKdzN2SQ˃kŪr0;'Wh/#yP[\ 7>UI4&W2Is3-Hіdݥf%q51Kb) WƯ._TnVyuĶڌ$ʋIsr2bS" ȕ&!4kK'_~B-(nX:B/B=ALsSrEV4MN+2VBV{P]^wӁ0vTEc,JX q*F b(R$z? IX*i ? J`U`v|DR LiAj|3L',_[GQnld̛T IA+ȨUꃷ叼TYXi;I8| >x@@uYtv:I_EXjrbʻQx΁hUKz{;Q -&M$N]`DdgX\kk2 $0"2TJo%.tP6GZvwL|H$RV  zӰRR[oZ8wMI*ƙP2ܠdՐDEM QR{6pҫ5cFF)55G5};#-9F)CSސ75heeX-3Sf&I6T qfiJpmHl,<pl:RD+OQ9n=FJmYI<*X6,k(hXj2(@&0҂SJgIQp0s}IX* נ*db\ 0i:PXҒ105hr̚NܻsGq G#POu|T(D7֯%Cmij** jZb 8?}Cp*b/6g`rTu#̥ESխ)$@@c'"tzI*YK6q''4ov[DS(-(إڔ X1ۭr#ȶڠ'umK)`0lc$l͒t+ G1xhp!5 zYP.L!/J;4E4Mʄ***('JEփ~O{S<7m=hQSڹz *bV3eC҄\*'@l~zj~25&)VHI!/2]*}(QRMƦDv"=G *`R:d+]ovIy4K՗r$:԰ԏ:x uhx!.՞}o'K"ֱCsw+j& wzv6o:*Zԩr{5;E$boaMbCZmj` S.-l BǓQPq)_3Y7E Bj=F (ZP&zQZw~fr=1I> ;R6mY $<Իϵq=(#]%}T,ZcwV%06FRMNVOaV'#\vVX?T?jS4>=}M"j$?o{c y?yaw}n~N= 9y=**o\KJHRRóa^~vc_Q{_<'g$Sbׯ޽{2A; zJ\.I$x˾O]x<OT`k>] @*e2\u̜-9poDtt&2RNgpN'K |CBBb۟7M2`l}1ah0*szMQF9Mtt5{֭[5UcH%._> w?zo7i&s۷\ hDXJI˯AwΝɟd3tHsS(|<7ظqcq4xAD{mL+h몫5S 05{9V.SܓNHHHN#c6 >\uujy$f^& R}2Uڊ⒒LSB8yhWFF6aLYQ:•@1Vđb4bzR6_hMW[[[QէZ|i553T"lcry+|֭&tlՓd9!oA. <|맟VVKKKZ[[$p5*RUbk2KN]0Vg'|;}Zjnl D),e7`Ljn> T-Pgr3"& bro4;h骪;o޼yX@7՟B 8RF1=b~-bdhɹ% !Z#lk׺m^kid-a``?6N3̣0@zaY B#r j*!tvz:)b%슄 Ad8XYe%x5c@Veeb-.9c+V`Vŀ7̂>`\K%lm޼9&&1/`X'.ŀڲPal YL+=1V74)a֒}gfVt10:1$6T?K¬%{ ~լc$Jq t9l)Ϩy{n20X,h. 5Rx{o&]tﺗAOh-Ң䪧m(x 2.fo5q"p4 Mq'a!dbFߗؽ"y,a.q^oލ)癆GpS*CZV[h &,AOEBlW(ƺp˖hY/!5; pFg1?pkNCX0,¢ #F>@L!s2`sFšR hQ؀F ts=_ǜ+CiƢӗ7>ɑv YK7ɧAv)31u>S^܂u+Q8[HZCBA@ N>9ihrqo'cʫpiem"/#vB*(e(M c3&aJeL>n^/f a!C&L܉&ծEM^@ V>ҚPCT9Cavl85ӓqNPH`D-o󲿋>l[&Cƽn-7!`M7apn! r"Ǟ%G|^j,w瑣 Jkq@"1x} ׿GiIX9!8D$"Z:_s'^8wVIj/WF%#(SxHV^>˔1/X 92[ݟQ+$-Ғ?U"Dg)12DH%hV B&fEQk" ]1 ht%CV (!@}K 2ŢѲ9WHk҃jiCE3hʙv8pi֕8{+{w-$g /H?(l+2qkM3e׋NUJ&yքe*}84*T%^YiyWm IVCRD)jK= ~6|xt;OS?CeF ]iMX͊+S4R>Fl8b^\d\LM{;qDXHr%@&F%E4J˿ ^^*`j|{ gjzʬFWEZ)6L9*#MzaA:*úڷ,_. dϚ7 ٵS›j@##\ZK7Կe*_eJJ TJB,!sc`F?&:P5Q+VJ,$4( %nB̾?5Lv׽ L¡ ΀EX hJ .`*Z.A\\7G1nkioI.BnLdЭH%Ͽ'L-ٶK4XUFCCY)G|v"61.RL.3@n-X]< J #2 Q;>.n>!e'A<_D\sքe Z*}Q n1Ha1 8l;϶M+KUL7=l# .-n+eI;b f<^Ao@fK;sS=!vpeޯ^샅+'2X440DEg5W LIl'!?R m,F;O &Tr>;u,fS| 2x:JR7iQڦ}_+4cF5ДF`m,'li`Pݝ=R9]r<ݾ;w/_6в$ @™o,BDz"WcVKi+*H z#sԼkP'BBP$c&Rm pZ^aR xw[w(ƠbTh>vg o!b!rAh 0 , [=FŔhOcɃVH+:lFa1; 3`ٱ\imȄ>v6D|Z8 8<?R,:>zOvqWWaur2"a)bi|2̈,άN#Kw^Vf YғQa r%*c:wbZay$"Ӛevtur~DЇ EQˤԥ 9\*;Be‘flg-YQ$E- @P"N*j#&qCcSp>H_ n`j !ኦL2${28B*(5i=8mԣ-r yp KC:#ƷMΆ,\Lj+ s>f`7/1PN6;2. `rP ~TYLPQ*#< d =ղA|ai i$T uJ^d w!ǽ:O#cZ<9%lAh6;l}Uxeuj;mʚ1<&|8Q5sn7"*s?iYG!SSc9 1\l&5Xg)2Yd\PdC{#z@~T&ܸd /ìc5:%\[lLmE[D>@\Ͻ/bRawdEqXS|δՉkUTAl.2LqZf4-LS>2:@Us+c{EI,0yl 4oz?WWwh`jeFiH'ʓ? 3J+GDٯ T}lxt/iV8+~lSSLb.혻e6Gp<nގMc$Z3laʏ2dm)0t\m$,6a8zʠE)܈SГLq!aZ<Ҿ$ GT@Нg lbnp-](_t-sϴb˱hX!!!%o4'k~q2WYU#*.AfFE y[Ξ$fSKY'Ax^A0.9zO{qEpaE&mJ1J"'XZ:C/R  aIzs,Ŵ+29{,} ҬN;<> lB3Cf;ŐÐxhߓA  oؾ} ? 'P@ Y}ْP9r#'bNX YJ,")P45/9·0,{rbKKA l zL))F  h,艉B8F$6J;7ѥk`Ι4$x|F<\ə7 ;`ףu]h]}$YGq%$OCB>;珃J/$E1Rpq|P-Dt}Jk2;> 5* fG(t fE@7LQ(MI|B )4 $JGz'0G"miIgW`qug_0>o*^ aOGۖEd_,ΟjkL~-g:"AdN! BI `h)E T 0fs]5W9I+*h%7 (4# M^1/CG`D!%9!BP;4DIzcI` J6`i+i<ϣB:j`P<s_8T>؈E^#E 2XOOcBڔVsP#]Hg݊'CdƲi512$IP/3%lYg& 3t9)$u5NiX2dZ楑F)[2ԷU=rJ̌If 4- y_ ]6y&cއ]Jw@G4&'1J6?NvjSf/23gϘiS`RS!PkZ^%J:&2Vэ‰&vwʔw5yў-A!BkUJ:lzhha0d̑&gL|ZLIJOTƄ‡K߀kCoz[.FaUJ,d֝ZQj' ݊%%m= E"cFP01&h Wx2=p~\1`2]QQ|]nM"E6 &$Z{'4fH<"3M ^bp+39w"/!@mdr#*^у phѝ0a^?aY'/Z?:#΀Hx񅛥bLWZI=NPga@!=x2L3wTmçe@"R-U}ى!mG }>!hVAbIN$mK#CtF}puv+̈=76- U :txF ScpExv՝RLs;~w$O;Jv#!.M 8Zd..'R ㅎ R>R"L,O8%42q]0w,td:pK߆W"3I!C;?ԓWD%Sqrشתr"sZP0ddFT᎛sj䓠jT80iU\l:"&&X4d<$d51#;m>I 62[;CH_!A#-923#M14,46C1Sz>s2scU!\/igTz0}e3]w&F68k5.5T#I'/#02Ƈ FyMTвe, hRag >ΈDDl>qeXwҦrl),a4,&ɒl+3&(6"J˯JP&L$5Ma\lmx%/֟\Cu' Me&pv#xdE f١ EP #rA Ÿ,R)ϯ|W P?kh<h/$NX @$ gЃ E:G LkNG̶h(MbrI\T ||Wx(FjbRG?5&#Cb S&NoLW $x]Cp2r U~3*eҜ_⃓ $[MkWc ^ i]POfetx ,\J1'Rl2;EDTtGOjSt >zLm{\yg{ŏ޿7⍨F 3ßn;Ԍٱd6 ŸK|$;QOSb>{,~s`׋ ?xk;Ђ/B*mLNARbgxmH#x"3al:Y]i_ZנacTuh% Έ0jPpx)~2ښ>,?5]̌NpN*Fxnvl h `ͱ(i(?DBGXlcd`7ҎIN3JY lXx" _[MFE}>p=hZFDF,X|kwyh' {&~7W4nǐ\U˱iXn\ĥ}9P~-`5&0,!gX2)I\ 1\32*Lw`LTJQ} rN{!)('Gu?W MMzɰv֘4Ge)=vةV›YVSV*̍Ŝpef)QQiLTl6|'U}PvqyC@#Jp뾅v?ݎfսA۠5J0.OްӾ)&HIny3B 1?A7 a1l ꙛԣD܍pAyq91kT66Wͷf4x0}l؄AO2AYo\H@BѢJ ){P@qu޾wET*b H 8h_ô'#x 68Ҩҵ__tZ_"OB g[͵ Lp(68mNtq.OfIDAT~QiLLDH>*`A ~BmVvcc,njl7W5[JݠM&q52hDAѰ]2$zʑ R>Bk:@k1?hHJ&2<~AuyKt `N! .! N! Nd!8bI: qU>@s??n TE?Wn#o "~/Zk}\jJ{m}dRzN%-=i&T $쭉 D 6; Nب~w\n6uG$: gj+Դ3cѨe(D`ҁ88@X5rE{:UBP? W,wl''-/Zz fX[\SȄKD'2l=tNayf<ϡM#"v{ i=( hiZjj#׬b)T"#D 4mGsCx E-D^gw="8'&yP1zO=> F-F7` ݗz/%@I=,4)%5=PHK\ ?s7N%C444 'Ƒn >iA3j`A -W Ubb2(,G.N "^Z񚣘dvjL<- `!4.xmŬwdRVnVx/T !KZ01Vl cE^fvQW+{E/~3BHSޚ#Ce5?i*$DѦcsٴ)|.!7[4ŮEخ CDkh(*]Uh13&؅>Z5& 1 - :LtEiJt͡$U"Tf(:5~E4FPlɵD X7i@\")!TCC>↏]THǰ4ق ma{C_ܺ>4;xQyO1o/} (H31C6$N{qN:fR 9- J$>s?ݾw @q%byLw/_UFiZeb&L_:cZ]H\z %hf&u j3ejFp^Cp 7|m=aĠeQ",ImZF6&gr@0B^ix Qie193"l6`ᘹx&$ʹr*b35(Bfz%|N~%<_QJY|A!"$^%CmB.k:0c7AkWCB) ]"NA2ȭ2"ڹ%@, E+᚜ې!0[K5O i\m ˎ^"|E;z6#*[f I;(&):iՇG`#LZ͉9#bpЎoN"*aָ4Rb|,(e*mZ;m\_>FXWbDHYjkm2=+g+t9f c4,Eu! D55[cg?NBDHoup fv80H@&:g\WYC|Gl"WRheX`:<㇌,1Zsױħ}wk:VL).X„ϓ`Lxx1ꉊ!tp!/< sߴZN}Uʄ5:V9I~b`aKtn:~ɇ/w [l'w4腣o:H`찁`qu3_2Os "$z ➡}eET]mr X{9'1MFܹ~~qXua$z/XEF4AQHE,pNFð߄Gwke‹zv4q"Wn7۠gd?QGUG!6zaiΟQhƄm:[ߺ &ל-5d9cjVl9ɀdiGHv#tG28vj9l;%.vܐ6t:Y%PGbIȱ0z\')ΙDFl6B2tG BC&ؙҺ|y;`njaq~T{ TDUF:bApl}n|k\v_/|oO"=,b%Lu0w4x=}0qZBpV0mtd&lau`]UūLLʼS3hJ,ㅝ/` cqx՘:xzԝVW#)^W{/_ C> eNFY9nqyA" O *2۫]_c*&#zGcۑ#znlX4ڱUh-q"${yVl-ށw> svCXqDyo/Ye yX' pO(<ń_9d&^eF !vL!#u+z|<S1>q'H`c@H\Ҝ;֗ /??}j ZC/mAN#9] љٔ7Ŏ{ ˒.|%.M a%#:ll8}ѯf=|K6ES [=g뜀jWhuXD$Yg(hfꛕx?Cg;rױ輥5,FDaYq&pn6_EiŢKQ;m_$iF UF\O@ ON7+[Na@l%LJję¹l/݉&͆9hR8sc1Ne HW~0u7ӇuQ x?CtOfYLlR]s iWûwHXZ]"r%4s)k9ރs~Ѩx7bvш3YԴVaۉ]A7N僮l;D\@Š[]lW yN;5㡄0[VG"ͦ$:?fCL: ķQ. DUp噹|t} Iڱ8'] ~8:Q!* K]@tQ /37oBn62왘? CM2;h&WI)[lTF&/~ܹLet+KgPS YB#NE*͙AUxAFw,Wb p$=!WlR1P}$޼vzQq@LC¤: q$+37؊'wr!@_f (5*)媳G2sVs YM8.]="oTHRJ02S7_= oz~ 1cȜNu $ RJJhfsn[w?Ls#Ă$Nęl*Zʰ׌ Lp%&4ZDTݎ8͎mWl w^ ~3gĦa3LVfn6bL.#%@y+ݓILVfn6~ n~Ca&@#.x ׌6F%15'g2wbN֜a vbш%(eMIDQn)WFE<)l<fH7?/]}.a B쇕lVF\^TG8ÎSP\+ G,E+/ʚa+_qїd8-A\3Y4p`CLc cu6 f\P:9n=ař¹l-فAV‘$Fv# nYC}f&u4k}DOXq&+37rYq=("#q[{a 5FSm% Y]L8-ylbg!n6fW~=3̝Er2"6ͩƓ4f#Cfat5..e!W>>_dI%+Ə[:1Wb,=qp}zvhUopS˞ïیg>DrI[rc=d0A /Fsr1TV37wՆ(pu+Wi2/3  CqI7#VT"yF벣$U%+3ef-( `͑ϝ'*!th$s= Qq0mNl͐հ"\#[;V7Ww4B W,o(D1-R>?XmN@)@bn61(oδ2~{NBr&W&ǍMbcmZ&$WfSދN2d54x5zd kBP筅[ja hDxhtpgfǖ;{13́ouEٔ4mC]K=CV7\c<>9.SVᨛ= )jÊ!bj37Jw~k*W.g:} j})2 ŷ' vc7pd%wL7Oc 5%2 HvL{fz? M1;{ =d>w`Caf01wY}tzPU= {G^KmIt~BRbpn6{+4SA3w6[H!DIX11wyj?gbuO: +BIU2s ~l?UML= ٤3Ua'Vr" sn6-fs cSxV,^F&,iuh֓u3 )%^Cb]hZ11wpݍ Yv5^X"^H?2 UEM:#̐=d掍 YqGS&a+37M}jf#0mUp\BB! t|s7OJ?#? f'~'-ҋ@Vn6qXH7tH6HIaj l^2ZUAF7hݎSEX@1 AU_F,K- ;k\ȹ$/Ql>K[J vT:H?-\Pe#ӑ[=ڼ0Mw|xUh vb+#V87%;QlBu93&mA;)Y4{bܶ^Դky ~'漐n6"(`fR_in6z&.B 6˄Ko6]/&m?Nv79~ J2tpѻ6#&mp7txzke/cowTSEXZHmͦV6,g6-E&m@&r6wǎbOy-KaB9!+Ju9 UM5"X<&/lZ͸U76Xl[aҏ",4s)َfv0o"8j!^XffS.m`@HN ]~5 !KAasͦS'v! q/A3,7tE>Kss9X};O_71kBVMc)vc6`ÕgbLa꿓B;:,37OO~~ CW=Ow2v4,¢Ph\[On6py1S˞yEWcPB ̐" p\syuxm3 5oaйmo"G^u}+ y\=j)F񙓫1̹OMæ;Comy=Gǵ",LW`IMX0b ,7 !j[;6ދ#%f5i].gSSiEX*F_=lF<W gA-/bq}nc^7{xjaH@CSGXmUeK9HLKL'ghcY)7u_wƿ}]GX48*=2a6\ oj C_ ].G&^ lh#@Ò}{qi- X8r :{ i(KxbWhG07_-=jaPd?v܅Fգ"/#?zlX@ yA.9`0Z ҏ&?M-j3<-LC1oiאKS[pL0k|l iGX'r*"5x\9dfc!*rmTD릉ƃsn0iGX* rL3sc!av7Mug!d¼WcpnCKVbVhUDZ yXt2Ȳl,Atd5`(V~g/85_k9}ж]=, ]ɍ;-B"(li9L7v[Z)ͥa00? Ñv& Q#˂ Z`!a RaY`!e` RaY`!e` RaY`!e JZ3IENDB`pysiogame-1.30.811/images/paint_line.png0000644000175000017500000000063712201770070017047 0ustar tigertigerPNG  IHDRdd } PLTEDs! bKGDH pHYs B(xtIME $ ;5IDATHK0 EH,%y¡+9Py;mcG;wyrc9MXy\Yy]X4z=C` !F(B:CiAf,@kRU*JV d@V d@{]2Kvɐ[&ȕ WW%BDȗŅPJ +Cx(.aA8(OXP.eCV *ŠR ;ZT˂Ж'L 2! + * Ꮢ2 XˀWVX.¥CAy^S_IENDB`pysiogame-1.30.811/images/hands.jpg0000644000175000017500000005274112201770070016021 0ustar tigertigerJFIFYYC      C  " T !1"AQaq#24Bb$3Rr C%d&'(Sc8DT C!1AQaq"2Br4Rb#$3CSs ?77h+zSTVTbXiMl7Կ/\N',|p@g8SJ1K:YY5k+E/zX:򖥨߹Ĝ^Q))X\uixIxQ{SŚ^ ;[T]y3菣-]JU[bo^3ͲoF2 &l.?3MQEjXsӴU9aJ 㞬[<$^ 2\sOԝhTm!){~2 ޱeeS]K5͝5ܪ.j ;i.x?gPVDZT4V-nf6} ԛt-ړ)J/YEiõ>/ qi3UMRB/8$V/ո_iZ"+-Mf ?g pwGsYuըZß+Tش *Z޳COOI7ԹIU#q>կ8#7[2м{o%WώwĺjWԮ5+I<:M5IʼYu}?4Hѵ;^={avٗ\Gy<4/z!8x5f:K8|y%isuko{G$Rn34Jpe $^[:^;pٱ7wէ*vJߛYE?,RǜY'rN98=8[=BiN?ڇ(k~5c F/7g9F J/#Fښ[1TUQw$^E{Rc㉐XeFtqq34[שpnVT?ނ8n}ٵӻ_Fy(ԡ% WR=6v>,&l\\T֓Ms8߅8[РZ! ɬl#c9=bu5,R'ӛ*M|k~=sKI\#n][&^>W{:w{_w:WV17 %R]պ~euJՑԓ ҔܛϕjR97)6}-frFpddϧzM5Nu:ki׏qR_oH;-w~\#QnM:?yS~*իM?/A~#/߀{l۵yzKZ^~QyҧtvZ6~cF^_j6훤joX }5vqyOK/Um _)֨9$_D֟iT)x?J:M^~G]nu&iU$o?՟g}:¦C̞&74?{RqUgNxTiPN+?}t?yc.fe)T7/\խvq_2tTvVΥXR#qٺ{׎]I#@S/-.QZQt5J+xsNpː ~[;y):栳'Y4j:}kR^10"N%^)rx<8XKڟH+{ wgJMA/$z굝.-*?fM|ܱ}Hş2n}J\Ք귝t%ERGSQ}-b-Xq \ckXmN+RJu)TBJQ%M?ռ!<myRI*E,xe5,z]Q-c'QǮQ6 ҡgQV s]O#g9XJݞEU~X:Pޭwҕ[՟Iy 2} V=W&F5,i,I3׼]RRQ^P8cQ$tf듉u)=ӫ$c+m](N2[_4fZ _,qkwjٯ*#B *c'qk!.ڵgьe`8Ƿľ'n?< Qy#]د/#8^,}*ObeWٟԾ*\~_-*?չ_vI_bzKfa]L1@u{|/(ΌRPrvĽn_/'*z~m}Sy]+i` ij I{'Ϋ(5YM9}jѕUs;zkʝ+鯔#r$u/fS>ĴwMlqz\TR6"F?ɟA ɺV~#}?9O_Y$&٨~#)pg]'CLӫTOoSuk(9x^7W/F+Dzhgt w\;ۭQc Iq*C?R}X%;`:<ƢSr[?/D~x:i]𮖖mn?߂#~٘{u%؍s^55ϡmyQ'RХM695,p>&rqǞոG?+:)ӗrPYU>{\J\Mt'V">Jr$ےx] tphh9쵿groнIԼIJu8>5U\tduTm%U~͖j=zn#UURRa3Bזz^g}OjN/A~EA%7/tէuH[?«>qT[W'ڿlQ{/iz]9wvjCΝ:Uj7i}ԛ?z"iso$= O~G%}G5Zt;lnmUҊ4% ;I^ 2v?~Ӎ+ztaGÅmPk3HI8_UԪWGvw}q;4^n6s.42n˟gt"YOџڕ+\ԫZV9˚Rov}[>{qo握SQHgQNY?EG>/\Ab9a m^Y?r= V[W̼:y}S1ٽYg^P'Οr]*Y03Jnֱ\wELAUhdۊ{3*xCbO-G{y 8,7VFnEWV62zE7 ɣ Z .b(9n{/7p5ҩ+:rGyj)}e>K>s' {IF\[I}x[6tRvh4con)wŃ#.'n-ޗ} /sCK︨~lwWf}a7 cןr$77homjNMx? dp9 8\>߹59JKoJ/MBO>cN?V/3^g:}K4EgKt\ҧ[SrU>m6=m{meGۏ.>87QennY,"]ﳶz/1 vs# q]uOұsG{Sٝ*NZ~R]"?I[/Sj?X:_+^؜wPV6Tc(Ko#[k/g-m_=%T]e-Q¿/ N/uwή_o 'G9vj;Ku]<gqZE8k Nhz7'Ƴcs]7dZhe]j/G`ν?HUZރNNQn_-ZV5KJ\VZ&hгц\|OZWh4jZ¶DoTro?Q֗w1{m/VU8?['>z:qIWqOIjGf>6B폄i::iTiQx}Ke6M'W69ދ_JQ̨OBIwk:-\iVQT߃Q/ݭϖqFzrG$ K/C7iZ,=աRT.Z|1+YFm5*3ɕ?ByT:*#XK({!Ti:o+} Yǻ_V\Qc7ߣhv-WUyUz=fjGC~լE =\KvMq*?儥w^C;am{hCH)nz#EuS+ŷ^ 49絚DA|J xj3igo8vIܺO$[e*ٔN艪7*?SXoQt*irI>:#̷TmDEnpԩEΡR8ۻM҃TG%PdiOuqYMyJO,obnTnxߋ*Bm]Z^awaRiӂWܑ)9I\[7aݢq :,$ѡiUҹVI)/qj)<>gY$؍[m/eF o^spw|KÖ 6*¦|[əRjS9$(FRR)JNRnM}v/dKow|A^tj'qT[ԩ7%CuJT(nOPyd=hmFr敝1)7㌦c(, O^Yu-n`Rq|O $}'=JkI庲6`#}$YC7ժUXN$_:~x97b]3[Զ*KŦZA5W|^S] 2gAvEZgpi}>NnU^\)?A9~?FqBڜJjpxi| =n҅KzބӋ]i4~^84"n֗Bڪٸg x5Ѯ ۵?uVf:\9hrLsU$Q/5?#Y2kǟ&O{SW٭nN1O1>*҅kjjNH/5WsgS. &\[Y<=ix¬V<T[dD4qQK9c%xw k>U<2!.}ߡR4އC >)x{O޺)Ro5-*4IfK_#ȡ$n|r8•& :rOX=;^߻Sr +YWJێu8Ew'Wם)?9=//Tkq)Αa+~<|;QWGГziR$^goPG[Z=]ůEOy*:6o*fo152mBB1FG;=بZhlhn-]B2er,4yYw*Ɣ~2j+;\U;Gbqw uCeԟ[K2}{hYשRKg 8msFGM\ʵ;X̤"R[sZyW\}xfq̼4oil_bK~} j>{]߸zŊ{Û>XLjQRM5׉ij^Ec2.wqRjjѣzC:b=jYkωVUr/v85STmFݨO)g<^{y1[\ѻe,GԷTXiuXXJ/Z0OgqhkV:Tj]a.^'ʽ~:'Z{ʣR~m216ʳmX7[Vz1僴moJvW/ UtqH}2eWZKtS={xν;MnWdWU^j9yum:NYTշ+c[Ť}.?<$K彧ZvuNJ9$R4|~x?{iZҲi)NK1>q{ [N8v٧*)Ÿ2\ҟ7{lOj7:M/"MҨk۫-z]=R2$B2mjFF˾>.0W4i58ʍzIԦ08b{Y;ӥ\[yXr%R-䠾 n:?RI|Fj.4VK#5.;-+ɵ.g-:TԱ*Хڔb9yhPsZ4hzri$%g{ov ;l)\;x4?Y*MxF g[6zo.}k|SVFJyxG=!bbR<쩴T gh춃JCNՍ:u\ c}``Bϳdˊ{{$kKUsAJV(tCxIzSZ:z|+(ͭ3˓}(;'.[Q}?7 W"IԎ`q(qeV F9TR2M=O:!}; 5uiGk~roUI?몝35ڝ7SWwCrWvxFK=q]#gQxdRZQGb% 4rPg}mZx9ŧ'sNѭ{JXNbTu[hìK][>'qgVv)|-zex:_/EYJLt-Qx\gStQ0l=m=,z;{>i.CRj6ƛM'7+ =SDt]UhVʜZeHB ө:s%ꉃS-gp}OxBZ*xË⾨Obie[Jn|dZ24 lSoJ~\X{as$1~θv:r5ZvVޤ_(WѥoiJ qB)ӂc^ #<9ٽN$˪)J2ޝ ӝߚ:Sz~8.#Mzw{~8|z_,]|ss^Js.eS0ˌ|t:;W4+(h8ԩJX+ymw{t5YZpSasuУ겜XO#RN{:--,ʭI|o>ˬ;!yx>տ~]S[\M/y/T"wE}*im,\\cًy^=`V|ƜqetJҬ9Ƥ[()E4J1\dF[jѭFN3M555ڙg.ٵa*Sqb4e:pS3kocb;E越hTRB=j[ևe/zէ4Weݸ/q_Ϥ_{gOk4(M^EߴTdt-N,~gX[oFѩbP0.< V->k3͵Ij}|L3C7]i4=VxEFoyIӯYfn_xu']1/zͿl#[F}嗬dgFpzԧOnLwҌSk<vҔuRzmg/L}N˘CHCt\FR#O'k"0+(et2/)lz/C)*{3 HkR1m:[3](NІ׷LN| . ܨТx0S1(SӎkQCT~ dR[+hN>.W`6n*ԧ֓ۡt\׏2D7"򖟣]do sjUח5z5&z]V1{՟f=tJmKU_,,xh(Su_9}5ۈ6يKvM-3VdJ;عk:aNJ!xKPnF:2W5 %啷7H/2Kg}N?yܺ_q(kz7 Xi-7oe@=J(Ӎ8,F)%ܹ *s|Y=muzP;~KH- 3\[,p%!qN>K~xYPMe-<ٶWٵgZ+٫|~%͟ulU9>0..C#F{Ǝ T[:xfRQ}jh>=}2~|$$i'IgBhm*5𺴞沾f^Jz3fRW%A3ũFK)DKֳV2 ~L \nŲa5n6Nx^~F?К4m8,.CwA83btY\Qg0{}yơk-Vϼ^[g;{NE3jO~V}ޛg7S#F3-Fѣ״_mE Ŧc5oyo^GVL^ӴmY4T✧^Xzֳ뱼NosR)lvNQlu+Νi?״ӣoN(F(EFŠ[$vwqܨ_4L׫Oդ>!KcUIxB+ſljkU]J|aim[ox/i )UJ/obGFqjίs+F^[^I,$$C/-'wocVv1UoH8QAa%7V=v]@C_^XS8gOqk+ݤ4JO }bJ{u-t[]]-_c^Ėb\;<^TrXJgsxGyI@ZmZPT(Ҋ)+RI$W2ia`CyMFpz#wtHݏcƺy;TݾE%榶XGV^Ӹ _5HqN\5c$Nj-?>FG[f\\/<ׇ&ώoU%N-GC({BTkC)O5ioގ(8.(+SSk)ɛƅMٴLOO5 8zΏ F+֦t}6(a|_~e8lb,cFJҳqQԫ')>ŐU ~C\F$с^0ߡ\)̖0ت ?## fdpئzH\Ɵ^ܥ*fEoMS)rc%OwI2sBۧC,cI-ͷr;fx? 5R/roa7r}ρqyFi IF'ɏ),3ɸ⫗ƒTjiu֒TV2yQVyJJ0]Rc{.^,7& l{˃Ụד"+ǘYim)TQA4zJ:R*pPWK iKX]v8OE@59qcIQnInc:8NUmGM/[<4]W[^7' G=)pǕ˚t} GVY[{TpU)S[Z)Sc!J%Jf2LneK4t0fSb55HHƛJo1ȍq$iѝIF1ro}QJiԟۜo,Z/WgÆ fpti'˟CE"ϓ4a.y6"`C-SfS(Th5Ktpj43-[mZrc*Pߡ_b0kУ;mdt= z:ndcqSQm1kkPۡm{786Zֵ뱊BT**u"ԣ(8Ѧnխ{{~}6Kye.(-w(YS/eu J|/*ό]dg+|wo-{Dz1QIviwmiXv="׮Ưwm7%+$y4{S\ty]_]֍z0YI+>OΟُdZmB_]o^َъ^mn8JhCIҪ*USbv#HFNtϡwE|b@9W9JJ(-QJt_Q$(בŽpD8S)ri7eYS8i]5zKoї`:c;kI4xM7MÎǡ锱G3od۬cFJ=:xҊI\*= aH3) ;lcQG`XTSk%qظk$9}K9e. ^]KTYJ_wԻ܇/x墈MK\^ y3zMՖ*A}[E֭YQJP䏮v59'Mti%qq*eQG*g'/uTk)YTN-'L'gC :[ئ﹕-ߦ寪/\#7*|CRQmmKd/]uGeWjҗw؏Ah6K{OhW]k>l4:Ӵ L'*چ|$/R rkU8IsG:YY2F4w6RP il/#cMū^Tmx-:Ժ{N)tA`ƇQQ© *T*2RJ0][4 qfdZn_}VU!iZlE/9]\znꇬzҹi,'W(R#Zө79akEU&PۡWd'nE$ oSwƙOбGfr[J̻Lq-o:;=ӧ(V_VMwR=[.l1й}[h?CΤ?ԗ/I=𥆋QtU*1~m[fPoI%ysI巖i\}ð.)Ɵ=kڴKxA^.(ʔI`RּkSxqy8OÎQ]+R-W﨤Q|*XKb*eN\KsET),H5%11J+ b@,슩|QQ,|K6AG̨}H8.Ky<^L/>rE"^dx11vtJbUyrn;fK$S I%yGg[J9/c,622FPBPwOО4S-wȝQS[KsNGdͅ'CD% 1RĻD"p4y`VpoP_Ps_6ujN~++ qt!}vS8~)=_-c ˈCI7VQ5+tSvE"^Sy'HDA$u{$Mm)'܋gN_h"iGTxߗݿ͛XQV<;/{|p^oX&k@񞞫я~&f_},`ew\[?i7߃iR1F;EmtR_5m}vΛ^ӏBΌzldi7t.%DlA,w$XE/aEu;R(d$J؆Z:$ࠃ[|f$IR(;p xyDtJRX:;-%Nyv]9Qw) NWYm̛ w2:}.}N2Ԣ/e~)uּ:~GUZf|Mf'WVr mtm:8i~Fr>i4N/@L9} 4EoVX+v2a/>%ԙ-\D2$qMvX$@3QMl2I}ʑAئ\$K(v&v"P-#([9;#,Tc3sKvoR5{Vk8-JMxGrfr3!”a+KJvҵosVIwfL.C*o/>[%<?밾Wfp-02+"9d "v$[t"W", Y `Xd;%kčnPVAbf)N SK x*yb4= J 6Nw3\.c@nuC^I%ܛ_B⊯nKxS {ˊ'u9K&EGtUqyi4ד!B$q2*[#cr`["g~b:Y4z e*? R%KtD%EQ.-nT؋)ij'(ZԎJ]X0a4Umô:ԗϧX{J_nI| 1Pb)a#nШNU_Gu_U S]a ᣰDʥUߏ%1oG,]|?us'UIGF(+ JъTW` -]`14=\Kkz~M5ߟǤ?`]K,XDNNgXBwY!Z+@.cIJrEO dYE^5ԡ%G9.`˭"ߚu ͌tkޗ̻%]6^{*[X_4#?ƥyo8y7.EK濖 2qE}rXLjsp(t{nD^G'$$I|P*n^EB53\旽}%)F1.XS\{t,()\GN 'ԋS9OPqXiEx9NVZ]cЈm'gp]F[+PIY!;$HǡD9%%*xQ#Xd!K]rO%waOUꭾ,S|{~ER[2_1\Cito(̘}d'kZYe}'`[ 8rAt2Խ-ߡeoO\ݙSxЬw/7Z՗x-@x+{.P->=V][6+|~m9nRˡ!R+D$DJNA,ɃS2pOO&)&bN1]ʫXEi{) si'\T\'4K~pL/Lh(tsMEuo)9<#%k[derA$fFF5rRws%E";B&XA[N r!5`RpK.^kZOHG=y`Lɍ&H*{{ߴYU~1Y.Z)VOHGr5rx|fʝ`6/ȠW6/ȠCUR%udTx$H?G( ?kС>&נ~/掊XH1W?Ssl_kG/.(ų舧B] s"-~}H GC+Gh,Mz ocK7R~IŰa|@"eԁRDV[oСQ ?ڴ%_Ҹ0bM2*#US_F\Qw%D/| P8| fk,Ֆ=x:첡F[ӗRBĀd++)ĉ2ߡC)k~,4_TtK$@\~?2&MOh?Tex#^P#@p G8#jyT̡%hR͎:e_x ţh-/x1lj>W}Eu Eu >!&JHƙ 7S^ŢKv.3^ 8O30adVO͚nǭ\@*|>`Z?0Ԟ.)Fdv~Y{|i[o-ex׫/L}/CKwOn>E""@DToQ| "81KwP~T "ߒ0fŽG,ۧty04\@>(|)I36`iEn=.5#Z&j e ] _0z6ߦ AyKɴmZw(\ y932`J{\ "A|B)DIW$pAW38EA?5$ؚk(ŀQ#^>#,Y>/M{` FDHFןW/XߔYgS,¯h;A,ք{ty2p D$@y0U-m%vtL5=m9v/502˧ER&Jd7wSN}m(E -QP9@x|eͣ-m6[o럸̘xotc?\/ÙK׋Db]oRK͗Խ§!M`xqDK7ɐ1Vʒ^S~w[^~eU fiJ^K$ 9[\TT'>Ȫ+-#!$HH>`+[^R7H%Ԧ\b hywzvKB(g5 diA]IeE0`pr>rqL89&带iY3*G̴ K^r.׵50tOÈ  P uRy@'Jͥ7(M4MKd> À ]Ss=V^F./u6ES]Xz"cyz^lr/6z^lr/6ztVAS`(*1rB(ӂu6f@6% 7iw)M'aS=^hƜTVtc8EEIȽG"`ȼ^lȼ^lȼ^lȼ9Q*ݏP2vep Bj} { pysiogame-1.30.811/images/tictactoe_s.png0000644000175000017500000000230412201770070017217 0ustar tigertigerPNG  IHDRUU+XhPLTE,$%3.+5=51?8<+FBC=J6RNLFPBYTROX]ZSaX_Pf_g[rWqgnfpbxnwnyivo{w~x灏釚߈ے욬Ꝭ⣵PdbKGDH pHYs B(xtIME 2\IDATXks0`[ݮ[/xCC u[C Ag^srJxzSJR^AUf7 KlJ਑ +F*8,Pz;ZvT^Wa%XԣzRG +AfQ%Tf>r*$R5*C?RbVΉz>t6É [yP.e0p,fj!CMZ`Pʈoh~lԢT6~6\uzE.˲,WR[Z}y}d2WY^-$I+U͟gr^HQ~2>[vO0H];+UU|yzD U}2H]+~V | TD؆U *6lDz4Վٽlu]@%^} v<=¶i*{tK:Ӯ!6xUw,閹~>Ⲿ+vܺf>U ϟYa߭7ݚ0\ Xk`Ba+\eqoSMg\0_h,ZBm9Tl4oI-V~rXCs!Cx]Lљ56P3V“Ū5aoȵDU6U݌"Ǫ.ݣ8J1QEAN'T P_ ꂷ5T҆b5@* T+!T,!uVQXMJڳwUt) T;wgEnBEbd ӄq9 Ԝ"rKm쬷H0:XK@C+iɍe'7\ݭF_`;ՠ*ͼn<@nDjVqqn>*/Wjj3ݷ nޱ'IENDB`pysiogame-1.30.811/images/paint_undo.png0000644000175000017500000000364212201770070017064 0ustar tigertigerPNG  IHDRddG5B:8;0D.A#G@@>F;H1MIGFP8XDPONIVTTYUZTPWMYJ]_Z_\FiW_h`c_g`ebAthb`fpdifklljniH{cmqirlpnxmS~qptnnrzrZwuytrxyzw|}x}zz|܀fˆ؈voȅ{ΝݐԜީןݬܷ02bKGDH pHYs B(xtIME $*jIDAThSHp!5`Q pE,Mmi)V,jkUBzM/n gl6}2f"&b"&b"&b"&b"&@jR׎뭟@#_U+~;~r9O#Ug_mն4 _ l>߄??K HfQD' G{dN|#H!Npw4"BĠqA\,=$W0d做n( Cx!^#E-!J"q W iUW/H@IrT,%諨]2AnGN! oIuj'H.bF4Eex`!QIrW#DEN P} E@ȢC*!xr p\Է…MnKb*s8Y1w{%Ԉ2b<AWܑJ5V GXoѐuk 2XoLP U0_D]#Cc21,;(jBUpP$&Y$ eãA1OXv5(HWD\b6!}tt B,."+VJ [pT]糪q GC,Yj5%Y$RH/0 scnq`*j!nwpECBQ tHrjg0"d&q^u9nqb)4f JE%uÇ ^61*0s8B֐ҭt,@@(5R tY%Y=qD9B41†D1D>s}X :71N?Yq:%tu(ؑ4o13!>ryE b<|8Aq6epuTbF:ff_x@66TEW ץ{|=tGeDmlz6(]0e3f5D&lyE t!X_,뭍K>`n}Zͫ;4  94]Jc_f=4]EX ˆ 7?|HoAXlQ+f> r6IIaR4yǧϐ4il?4=9 YB Z)\\\|I9 % cD!N]\\:_5e!{De;vLV[[zGQ1C$xЭ-QYd/#VK@9BQrJVLvoX"{;e#> EAʏ!9L$ )>zepjQ p8h 5BBHPóXKi!cc^joLDLDLDLDLD~&?kBrQIENDB`pysiogame-1.30.811/images/flashcard_solids_72.jpg0000644000175000017500000002243012201770070020530 0ustar tigertigerJFIFYYC   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEC !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEH #H Ă~~yx^bH3D<"D@/_&]-$H$ v']xcVῠS?W?J55yݍ/C654//`>{K 7{g<^MWM=u۠ozy )4X^L {'؀G5ze;ڼik t n z^h#Mtrp[}3tKS_ mHz92wX=mzszx0k7qϾ ;Rm} (^2}5]he4N2Y=_W4-!8Z1|q"˵dvwK\t%_| 羟=[NZ?C1Sc{vp%ߚggkVǤW3o˴oU6}S`sX(%Uj$[BM^ '_KĽRߞ((ky2^'cuA=xys-o+H>r]rfhE=Վoo|`]|UUfqv AV׏Nszx0k6oѣ2NY}|"ANKz,FF5Vۖ{1݌-#ON^OR}[Ųi;׫̬N\$v^Sڲr C9No1|rު\_yꭏf珢d7g f)f<,3]4WֲsLe8[e9dU-|F;oDBӺ˺s;2OA.#ٓ̇X 痈Qy842l]K7`xϬ{wCOe`duWå,˦ȹE2('NXk]E[ɤg>@T|ݬ)k,>g +|*Ѵ7ޡ 8ݑNb>yu.ERnZ6<' i|fUl>Shvjmp'N?\Օ`2}3V2i>7s:JWؖuUxuLfcDZ)fy?Zj8eZ.]Lns?-0UC[ʼ_-L탑=Sw^4؇0˦ܿ_w<呓I2k횺jwdf4*@'dODYXXc fbunʺ1p D^bl03Xuiˋ[]@'[!ӑl=o #&k7u,efY@wE|klP#'zթnwL\ jzl.G1նל\^p̬AȫY)ܷv  껱k&(c1Mq=5uEYytsӘ JS:M)_P,:US˪SXz Uq-@LP;/QuX-dT?B bi 9(0BB45[{%rkvQwگ5\Sp3mJ hjWRVGy0R/z-(:6˖.Y=F.WN-0+J[VrPo :/IoA,"9VjNzIdR$i(;=_lрw?)!1A Qaq0@?!EuOꟻn;{Q?O`zq?ɑsU4œT<~T=S=L$;ozkc!̂}DP-ZrOǤ:Y[\yQ &ڎO>,B jV 5mu N"sr$?ߊs9$ϯV)KjfG|yX-9FPmbbD⻹!y }4᷶},"emO_|}OÈ׆9 98n܀Պ*k,TJXpls7̻wc2t1hI{"MT=د:,H Ak7dr6 qin(ͱ} N f@uÍ6+.-ꦹa@95[yZtӺ$Pvo M>CEڌnL4?Dҵ}8#9J @Σ9Ҕɼ5g7K$H|JV53\o/MV:s\jRa~@.sf]u͚fٟ|mgXs5ˇ>oB']?S?PO 1a :ÙUJn,'"juZyVMw=m/x>7`pp%!fvs5y| RH*& @(A(pO@@.,8I@US2 8|r , ;Ra@cgB.dI7;Z(@ &l ;kW?* [ }? lNG?@x}Le@`V8N# @'1|8PC(<0y׀ ! 1AaQ0q@?m?ù7~Ӕo =7?wK| 1an$>/'bfXZ)o/hG/_&7mtIs۝虒0=]gطcsbfk̻o>yrBfN=9x.=oi„zqLdWa/@>Kaqnn۵pemWfqa9{-Ks`07?.T6QNa9ev W0a1T=-Łɶ'^eӟ[o_^e6Y+agg eE S.[F} 2vu1sr 0u* r5qφȵDM\?m"9r~OWyWsl18b'5r7[5gsue`͢}Ofu-gi!Á(5pMcfOrjDuUK" J0\t ƪ@+nlΧ;]EEԹh'!:`7d& K]w HiC/Z]ʉUy*T1[sdrԮ2^*ZBruH3=ݓܚ8\xЙ@[@KZP;% 銭 .Y[=`>Jb]l$zBY13;%Y jUQo Փ;O'Xz`"T;aV,YZ:mgr=p:'0.;8` k.{swQCE@/},m~БlOB$ZQձqq(CU4 f Cnäz031p@/.[1^1/*Ɂ܌ 'p=ø 8]h `y3U:A8e8 b;bqHDžPx[L\648듧qyrG<>803Kq=<+k.1s.X? +1G+}'igRhKܔGE36L+qYѦi5ϬҰT70t!"仱?goIM9,dW<)z:3/ 7b;$`JufS%6`KU2mg# `ظ93>eq_k =dk-h40hLɐoJS0W/z;3?ռ5" Id؂`]W/Slu2 PL]fR3 ұYmϪ"r&&>U_Aa ,ٔԥv#y#y#y"V_)09_ #&Q;SzE:1Ӟـob*2汇:>qfV27M ϘGL/j[F\>oBΫQR+fFJ U ::jLpCVcF雼iρXX6ӳ'Ȃl-~wlA+5ρ 0[ Se|?q2r"p?VbF ~ bZoG/@5N@k,/9hgǍ))رs)p5>f0QP5>/:XZ Kj ;Uʹfß4<:_u$Ik1$.@T|KܾIO%f<,+$rx^3^HfmAj r3[ qg :ag#S>\WwErР54>[hp^c `X YAur=) ^o,r,m2Fs+nJs9zlơրz+Ђ@H/',eG.BfkZ:YL5`6 0Oe'w:"O3 t{Va9u7mT64lnѯjonz+?-0@:ia]_^h0 =w6ơ2m]ˊoEax/[7aM}fI./j/s=k?NpZ"vb}n7|EwX>u2X)Lj  F؁%\Qopysiogame-1.30.811/images/facebook_icon.png0000664000175000017500000000236612201770070017511 0ustar tigertigerPNG  IHDRAAEsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<sIDATxoe?Löҥn&4@<GLo>y)ۋ)~HHHHHHm0S=r!".>rQjNm <\[Q< C8! $xOl*m8TY1WP*X/" PUgh:ԖV98gGx_ytd}e5`qebl W0=^'ƹJf`C),.4jBkL=!SjO<O 35a2|@٬ s?`qcC}k0N;&L!{`:+v+?;̑ҖVVйaPm )j8^4Uҹml%Nj(jXͰcL!4E(' Lá9pS㺍#Sqൢ92uL\im"⸳'fNX(!SX ͑lym)4||ԗeE8E;6 E5C 94{?};DQYJP:.;rD81VೋK)ѧO@n[c.2S !`@ayT ~l0e6T:=`;JSϏP@SԼ@)$I. ‹JҔV ˯"en7Q~: ;rkݫv} 7+o&|m3F$@B$@B$@B$ kB$ 75M!Idd:Sgc,ʹYPYkzzBp]!}WJ/#!`tHu}&+u33Ues? [63U-u gUNSk27_|w}ӷzO\/ϟw_nnsZflc;!Aл[iMS0 *C:un[c]W?ffpP@QGQzIq]Ʌ3S6'<0NwɡnT\:T;(bDB$@B$@B$@B$@B$@B$@B̘yoIENDB`pysiogame-1.30.811/images/info_ok1.png0000644000175000017500000001775012201770070016436 0ustar tigertigerPNG  IHDRTBGsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YIDATxwx?3UZlٲ;ĔPZ. K 7% I!ׄb 6rխbIV[}yzvgrΜY鬳|%I qBb7) i )3D_uҫ9ӜNB.r|ӗ8fMUi1;ILLEAAAŸ2ȒSޙͶl %IRIJ գwC*n~[5Y_ӱ2!GAϜevj:y*]R;Ȝv! r"#.EvC4RjVB͟ !k :X[K%V \[X64 \KUKaoCa@2i6$W (OM>PA ! Vd݁ds!9 iJTd^l^pBm l|-E PQJPWf*O^WAv|:)'{N_Ft2cWhgs7`R8gxMUc EM\Qe3R)! )1ٝ j)$?΀+?`ٌ»}\>~^.#cֱ-X܉GRRY>$N};ZII:%)=I$ZuL ف1ɓ̨:9Ə{@y7T7^~C>7x78}6G۷(TvO<),I0;1"B8)CT(EWȢ Hi2!лVߊܿ{ cSPU^u֌bp owKƭ?dӮOy?ÎIl9ѹFJ<`Τd&z)ԜhCu~ _o|c# vJ##baF|rlB JT&T?b{}Iu*!7( ˖?fm `1 'ћ .f/nbd}TK}"0^ #0WEbn„'D/_`;Iqٞ#{ ɶynۺsGl8=NVV}-YZIq*y!6&3qɢyR%(ngcOJe7]摑#>%FJj?'.*bF'[eǞZLuB  *.ɯ Pπ;"7[^Ot$9PK#O?0h%b&n<Ú8b4$Q.9Ya0:jtLD hsf- +baSRXʺ~x?rDB,^?[][doeEf:=0 AN`Mj:;ϵ"TFl02FET8]`Rfa q0afFQ 3x =,0w)Xe5Hɓ B`Ϙx9WVuIg~+o|Eꢛzyb}bfY0&R d..ZYp#EG {mR>USkY@I -+ xOƵwb"7xJO-ݏ0:AM>XJ2i!4H̸X&- Z.#Iz XaZX) $ܻE0aGIiFKJBPKNc[C-l48U>"X+ P:D|}c d0 z\B,4̘ $ Bp4@aIIPbm7F~JQI"zb'&c"@o݇R8t^^nvJH7-ymW\;n9d;쥐ҥŒ S,.2[c1Ў8fc31#NKyK 0jNN3{0.ӭ۩aE\b ]湃U Kx+((&S?&q@g%7{6QzsULجEXZ|e䘰_U{%婑}qc mC*o --Z0#\^L΃7##38.{;)tSQZ\D^FW3?mt/FۊhDX;dDٱ=si8'Aـ{Z󅘵d_Cds/|$u~y dOT|\0-Ib&铦mӧ;"CU|"l aW ũ9k酼GyKu73\@#dsY&!cȹu3s>7rZ˼~=lrJɮl -^!z€SsNႂsyr:*w# )SL $_?[:S Q~6<(<0U8FOlaK1D46l,!N^k1Uf Jy6~?"H0Zϼ8{6o#tiHQR:h}lqPXKVIy+KWɗv#}x`8Q ߇:`2j1e7U5Iqך.j^壖Q5ռ"e>\7~Ŗ6!R丮Sm:>[ ON-8E n7wqPh,8R}+E!KzG.otq͍?bŷaWoW]5 fL7^@b2DY^0E`]͵_YlmLL%Wj:>6̑dJCFf в͘b(^f.Z]"7+_C1æhI%u>x]&8yhV36LANj[p~BuIb*R.ۆGR ԡ8aL[77vpY55)en3z~ l'sBx$GVsk3A$ sd,:-/ !uT9|_ޚƉd%]3g?MmlQp|" :ߝǝn?O/,ETN YУ8Q^k_p''qޒ|;Ylٔy= lczt.^z%mlc5yDEfkXyֵ.yt gپK^{Y2n)2 ;;c,yKdS8&yN'ϼ_ ]n!l߁٫y xI1?ݨ!c&A,J@/MlA Y_ hpH|D PHsq9Pzd?^r.9 @7dWfkJ2sȚ8"Zoו3i,\¦/0 U5Z՜7>6 h0 ص"EzA1 81V>8c58vuMUĈ H%Ex|P@_P0?ql^%U0sT2 jي{9P_K.058fK6JSK+8k㳦&> +bx%B'.6(;oyܬ^ 4|4z^QZNTkmtwuau^9{9 ̑:]h?c\Zaa#wR1v|#eΟ|[{v|q?ڽ YU$žݼ'2`dkޚj7U:V2-Ue 1ܹVB~D(s9ub"Nf!B@fKpL|dEh VJ>S`km ,Sq4Λt ž2נ&!T,`Hߣ2(1`Ar3 X>8a8bldūk6}4pVVJV܉4Ra:6AI)YATB;/039@h?^S{ůxg.l٪7(U~]I\wmܹ~UbO^.Fmhf$4lȬ^p#IGq/A/&&sNhÀw!̈́VN*X2{a&NFäFw t;I/qYh_P eVI%IxWB:Sf&S/̆>$ġ~T2$n^}YO V䘰dW r? 5Hہxj j1JY[6M)r+= wS[YK/$іQ'tꩦ _r7f#N{}7"1|Fp1-c2?q7]m^,h!dO:' uκJKZMF]\vڐJb9Be8,!ؠi /:؆v:ܺٳdٕ&#+;n||~ u -9s ?4~ꇐB~"ٜk np g|%9Po E'0t&uL99sԲ15^A6|Mq)pSپ_m( esꄓyq`=+St֢-@9ϷF+lЧH2~򔵅. R|@m أN+RM(.!n-D(9!er Gя |U3r3 \cF[Q)H44ΖvCc5kJуr& %X{sQ} kr(rT@G8f4g:o-m!Xb8HH ֶ Ԡj%c8"4)*  ܥH0פ9R9{Y&aо"!~tJ$n;c5l:y"Fq̴0~UT0r\@ISkoȼzYn1Tz::xk\021,8;Hײ8mw~VM>;S橤ʱ0hp>fKi<^۸l{ *NO_Vq0p;vp@dh#c9 Qd)cq^ &/4WY'l& J6vDCPNYvleI! ^ ̙yqDrvb?=ؽ?eeT ´.mO8>];ÏK% T"[5vvEORapR[UƝݹW├G6 FUi6<=1{.=Uϓ,*`ƨ6i1':74W)SwF0$9ujܶ4GSV9F?*lEG#CԗN Z^ZnU#2 )Qdm;@ݞrKOS1T_ 챶nl%(;$S2S0Zq < | vwoAp|#yg?.;x晟cu^QY2 aa[N?;0 &[%~^G-NٙRAwYhTӑ /,`SPuK]@N>6ASy6[eU3G2Eط3TU+ZaMQMX3[\l"'$GwA=oeL }<<>rT^E]B.:Z;wvt6YfBR27ʳ@K%ꕐa5LϛCMOg?NѸ!% S9a+m<$OF| qS; 0|RTi>率𑜑lS衪ϫ+_I?1W'_ xɟz$O:JF MYN4͞mcg0.u?<3P0}ؔ ==4NrF:y`=s!I-U)Yt1˧-cSU'Q&dGNEr%3ԼUr>֮)%YҴKHiuH&;ԇӈ>1 AgKM58^RSzo}/qܳp9<WpɄ"?q^H1Tz5TVMik<}c9 _v1e&IENDB`pysiogame-1.30.811/images/tictactoe_s2.png0000644000175000017500000000225312201770070017304 0ustar tigertigerPNG  IHDRUU+XhPLTE dbKGDH pHYs B(xtIME nqIDATXmw0pZ[msSԀ[ h' &= yk 71.E* ETWYavvέ2rFؙUruWe.WjTe$KIUɰR**VJKMʨSJ)L9U*uCMVPežVEM} >Qkq:l6T+ZDa,-R]am4 IjZMr]lMMfbU״ u}z~~y]M'HXC?jU}\`u>R0 A}aIխPmaCNB(cGluWV<9z︺5gf[غF hm$:" &P#JI*YNE5|# D^l&@Q6wv%̫A[Pq^=+ oR&ڶ2 5Pc+Lne&TRWV}.X^ '+L0}Ӑofa=ԅ0J=x7LA]eV:LB/g4Y++wnRqaz.*J%%/{j)T"\VPx\+<-xUT@;yp!PTAPK I[HbHNTɩj7OohPW6=~v1UTDuE* Ρ4.0 mJBȷ߷ nxky8)N.QP}c^q,GAE:BxwdI&TS^eBA/vPmy5s\IDY`B{Rqөi5ͤoӝJ/_pQG7\0IENDB`pysiogame-1.30.811/images/info_lvls1.png0000644000175000017500000000444012201770070016775 0ustar tigertigerPNG  IHDR!BلsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YIDATh}pTsM+,$L|i:J:VpR USX)U;u@کV;h-C XJ" Pb 1&?.d1 87sg6ys#&M%n8^z!H"^c4=.dջ/'CDPi.ºaud-AH.=zES0V2oh?o}zE*rmZ\*D+c;xӃGٰ݃ ]ݽ,e񌙋 8q s"Q4d109'teޯ19{ ;1 f n!wH(bH6$ {e\aYFۻ@eAP鳏 | 'ԩĪր/.+cTR<O}z+f^Ф}!2@YXqx\9|,F͇Gv*ԅf -k*i8r|r7j5|t*{qOp zwup(ztCoYnKoPm>wmDut|~v[uwszv'z y({QtNsIyisD{K{|y|$}vAzWyO]zJ;}R "huOiUU_!LTS[}t[Yax]•bh Ĵ&Ǹʺ Ǿ ±пƼTǾ?žm ǵǾɜʽҶU1~ i bKGDH pHYs B(xtIME  Y6IDAThݛ\gSBԐS~v5"dZ(lS ЗӱuA$JRD~y.*veOڵڕR.5{,wug& kg3}?3y`^JI/D`/c8$)5)z~!ɩII1RA *E2t8D'Hu\ ??eZ2 ?hDIHyRj \H{-GO2&5u{96ABF)oWcc_ ~WDWF$VpHu1BY:n㌤C!f*$MS!qL q,gt ʬ!AfK5d qՎNXHŭoo"^|q>HG Z8{4n:vρ3@z:zBޟ Cyq3A6;rs n.w&VAyہWrg&Ȼ 1&նxO/7㴲qb~{ ?YC^}d֐3@B 95ٿAN С›#d`UCV_|-7$:zAnΞngQ!yݵ׏9m'q/KٕY@(ɞdv@} ϐ䂣7g|Nh\^ |h ݻm'!p ̑ѓon=nB Z)<.]/{{9{M$ߔ -Xɯ#{>8r3v\Y֝C=iܹt^zNj'Qw.~y0$D :0=Qʽ􌍎 K/:GP^ {f?yl//q 6ڵgvE&d76nظa׎ {vS-:6ף7Y ov k+1uzSQ\T9z4Ϛu,[2z٬7)!1 ,wYc;1ցT7D{L"-2F FAh= Lfdc6F Nh4@Ȓ@*aY3f@zheY#&D^51Ȃkӌ\°lLfYb:ʨX#pe,KtFDk)˰fFJ y#<Ĩ.hPV+cdJJ]eU0Qڲ2$Tl jYFh0dꉎ!B e*-!z-)u(:UF]:-Cr:iRӫL-9Z4 M1Z1*.Ʌ{KE6 A-(J(VP\H &I!Z-~AԪ(!i$aB3@`2$`Pj`RK1aHGP@H)UiV ')T I3j5Mj j&"֩ATji"1"AT$'R9;E3JE*P$0h*$ h$u*\J螒x$E+R_iAP*)J2TRTMcj#տ ?WKqZJIBuJ(Td$AFFJ*PIԄD  qB "\)HTI䮋T)'@&x.BIHLF"% 9TR%)J %p!CPˉ #*ČTJQ$n'DJ > ;ErI|d.wn&.\$*)b*H'x170 $RuN.OIuAR%KD=AP! wVȝr7-^$."ITa#P1Y en M!uN r|mS ?c !H}%N 7g u%L$L ,Q"‚ L!d2_'_g腛\.q)$D"/ @d WI zPlD/eBP+ȼ} ^ s-He2-rx e2 8Pe"I&vCp"8|H,su| N N-UA TE id.bgoW "\ qZpq]a+=^/ZE.^A>.y/Bm/8LJw/µ.}Q Q>(\WHqQTbQ.QQǢ({yz+'#Qk䭈w\#""<CnBb#G$w(@"hO{ whD iii))iiҠF= aaiPEdeľL^ qa8QX&d[8x),32e!HJ&68V-LMmR5)m@ؔ k4)fh K ;&6C gɏ@YOOФ.#''=#?geNz~Ah225+s2@|TOy yYYņ¬+N/.F%}_zq^rG3d+2JbslPg@Z$Pc.4 l!""BCpKEaPXYPXt&PSX]a؟g0*. DD_ ~_YPaeiCenWS*Qi@r$88i 'B>HQJ0*`ڪMUMjlf67VU5sͨnDqALmmscni9R Չ-\ӹs-PZjϵlsH{\ŵZ>qj9J? ~s.\hk?y -mmP`;n{/.t"хko g϶vl{/[ڑ,dQ / ;;uAu 9]v3tY8m:uD׺lGHՅb>D]H|[Nܼ}ۼPyBnr" mr.ٯ{U;p;9ovlqgB [ ZC 43˵#U8qZ8eWK+?`@ -^A!8 1|PpN_ 2`nX! @brZp->H5+kjC{4VKXPAf5A Om(/Zb$7d*Bc>c,sHa&Fe!p&n #sWb0Rd0Di0=l.cd68r-oi -}&crHv9g_z TivHXv9)K?kE>\Jae|~XhjLD gor~ikleVopqZPɀt~uuzx|zz|{ta_jl~ hZkb"t/ x&(p1sn:A~"5,}l= E%L?08G(}}3XQK"D] .?&L9r] †X^+6QDlWf2-!ĕR7ͼq\@cHT^y:nfD˟MnT[vǵ}dͤͱlrzdÆĂИoyȘ̆ʌ͍̀̔˕ΜЖ҉ܹԦޱ,bKGDH pHYs B(xtIME  ! IDATX{XSǽDST&u6^P[7x=>I:Oxd)'D+PCq\ 6 pkZ ¼`AAxiͪ(%l /_|}{sF=x19{fd Vi~=gQ׳ٝyFހ}6[_/i7;ϟ1sT֗} =Bkۿ@~@rv(3Z @c=:^}_Pָq 8nt/q{G0mp̙la6hA@fB=z̷%qOڔxb)S4nJ(xa<~K?OY_]]&ϚX*+|$˜0&HACݴNS]f{@98pbǣ^x2JVm߾q/~߭\Tl~qPM?L^;|T*Q1kVdɒW//oj~`l}h7nݲ 7isgxoOHdEzk ooe(-; 'uuYM2I$I2Rhw 4$Ąl/' B9e-Q-]&ЬVKcj5@ +:nv+Apޑ"bZ 4Ne5@TFz߶_ kšh (t]l]i45Z`{CeE%T*X>&ct QcRRRllĎ@Ef.J (ZF:FcFFjjj\,U?$$ŵRb ґe6eeeE *\=@TͬVd?'ONKD3RVDbαJ݌0=>LƒVVeE4J}{06 d(LaLL2ŧ'++kN*JN{ e.o%mAɸ +8XVP[{XrZTZ跅N OQ &Fh(fc2!)PXPwth괅UC" P7 F#:s9aB$(+  QJ XPzt6_oi/CF҇l``1_F\ =˨vBmŒU5uu[WXuQm$!+I%a^9j_WV^x>7!WaA0 !cQr%(,rlʵkKmW-rQ:H`02rCAv4@&#MևR..O 1؂TWZ_lOYd8J+@2,122KS+7]~ҹEI8 ~{V5IIgKjJ[Z_t\~N?0:-c;$SR" ݑw2ԩ.^ $˕*>(<=R_EGF;Qlm{5WAew,N]J KnzJ 0݉ {%l fyNr_EaI+L,*}vu붏||)91ˠ2 &*Dž TcbOBH^k ^2'2IX( vOh'NkK!U ƽ[XzAihY-aARBD oqoqT*4&H#JŊ1av0/p,*w- )Q:%7RYXXTD`f]UJSB" '1L3f_HdCYFNDi$"e~? %UfR]QiX³ CG>?2ӆJSLCYDLr|h* =;kjΔpA g+8JpIkd}Wss+jj a}Vl#\m#{y>3ة9a:N mA$*1J魈CiYI8ùe%$F T5=DzG:NntYS$ҚͽEiu Tw;.Sp qիmW/[^+m";2\IENDB`pysiogame-1.30.811/images/b1.png0000644000175000017500000001171512201770070015226 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ AshtonIDATxkdWUk};f&d&N^\Uܞ{{=ku~ v{nBPDs]=0n߉[|`\X?VLƟ( 8q#V3TϑM=BQ4yc/%֮'J ߥ<ʳs.TH+ BjI*R3$q@ ;.|-^Ǜ `/8T< TO9YĕBRXjAGC?HbTwf3M6 N9+pEWtЁЁ@V=8- R8B}lQ27]KaGcǯɏsPcΧ =x>q{G R-fB@Z"eU!F v=a=o\eps 5*W=9[i7CaAA0D1I[Zv3"hh3t{ċsQb?v>'Q'NJ ְ5X@S+BhW^XNgPig&#!9Ϥ;ߴd.. H egi F266mAy<^ `<ƚ?3! ZX?Lʥu.-OH7:qGxH E˵U׃EdqvgO>WUX^^ЇNگvh p?kUgxkp*XchXle&{l:S@T3X)e r 4;e&'zQЁ8`u/a?^=kugOQ( F!D:E !XJHXq,luvsU99񧝁ul7H813wƕCXJ0p  }5 ;Gx\Q}XYA^oZ#sL-T}N@4!kН*F}0+Pr`; I$kp;,L@)}i-6tqg&@7}sV*3pƑMS~aF)d~^PcJsWf:ag[PM+F2y 7ܺWU!bXkrf A(Xn%4 S8,|޺ +(~u_|DX?p;. qJ[;Z ,7֭0ę*" (xå/L)7 t"$yL.:YU~Jcdl,~F> Sr6K a[Xj J\U{m,/Jgf%o]7+g֒+s`jdW̙Xr2 8C|rW4.¦ּ 6\tJx P?|wVjϒƴr36Iv$ ¼C|$S,*$l.)#&(Uib F~r8ȓrmy4+g'tY~C ,RPHUb.TہNtntAWVhUf4]rH3YO31eӀJ$[/) U:XQf:yHZ$7sC7fl<"[H'.66 $AnMi8X UXUbN;n23_BH~i30gRٺ(;'mOK$lN'HHr(DzHlX`B mƦrhX$QՓ>Kg?7&l}&a*"++C`;^HUiiw×!["pb8!_2:8{GMo3Wk|ρi"Ԛ(#Tl^[u3qt+ \pwӄ$^G歊L. y=se6f3F؞TH2%ѶB#JS=媓ϫMȻ`Pcݤ=jwm!H.x0v\:ݎ%tk[OHPK`A&ϭQ#<!g#cE8Â=pc$Xndu4ms~=b)+RPu(EYHm#o'8Eabn:@c_>j ZlLL5i<"::RMfHbZ#Ti= Gѩ:g:|˟MWxZ2FncR>i<@^C}lWq0[hcZ3kuMj)S By/~vOB]\QKW/,"+ UMDG++h_H+6z ^AYt\ڴOxUc@۽^{  _hiQ5#aiiZDITmmyԻ5_5 Gm%RtP\+{HY\~{W@3D#l`Ul4TO^T6Bd|ֹ鷻g2xz/0_B\Wy"$6p [[A1֌ ]x]ysgoeg(ޏR.U.h}IVWhrb!)Xl4kn;v /` ,p"w`g2Rʼn_~NύO灃voX׹ɨaP8\hw tN=}>JG/Ϲ%w8[Mk_=8:.'}-NKAS hqP1NQ>' ,:/yK׼ȡv0=w |or̛߽Kݞ~Anz(qw]ի;L%7}/~]r =)vg'Ck` [:9pU,҅;ϻ+̗Yȶ+95+˭^m @}p{?~v3ӳ˝lk'rm,=p4Yɶ׿߿xDٖYx*)Oҭ^#p'^bX`箭^#ʶÿz+l?ʶ;=x,,ӟHݗ`O٘l[ _p WJ^mD&2|[^FﲯGm3q+܍S~3sܶy?b/F-TIENDB`pysiogame-1.30.811/images/fr_plum.png0000644000175000017500000000466112201770070016372 0ustar tigertigerPNG  IHDRLLIPLTE    $  * +01 2$2 '9);)<    ,B&@.D0I*H1J1K2L4M7T<]?X=^>_:X@aBhCiFcDjKl!JtFlKuQvO}RwP~LvSxTyQ&'RS*T+U-#!$/V 0W "$!$%#X Y7Z_')&`:\]a*,)^,-+c_-.,`AeafDg020EhH342ij463KklM786mOPRi&;=:k'l(m)Xn*@A?t+^u-CEB`v.x/EGDFHEbeHJGu5JKIw7jx8LNK l{:NPMoOQN;PRO=~AUVTEY[X[]Z]_\^`]ac`cebfgehiglnkoqnsurvxu{|z|~{}|obKGDH pHYs B(xtIME  Ki:IDATXõ}Pee $w#661ZB6ZC's;2tsٵvrH\r#^b[fifKeVj2Sh4sw{{\?7x ꩛/: X7ɓG!6n v#nxW>4X߷\Ú&L<;/Mяw̓0wƧ`W 94/B]wØsڛ#5`ΟȀBXQ=*t^X?ZEtW+_ 'Oe8tJ9x fKqne͛`c߹*$%@~k k]DJg~z<@חW}cz 9 V5bbc ;Y(mZ&ό1PeMJ ౖ~ aHh=x31ֶFʽ/gx Yi&p2 "cegmż8Yvf,- =OByMv&xкmARq\ [20@HSJtMq$f0,dak@hNL5 B+lz Fj#2 Z@x ˑ; L8! ;hEnkM% C+Bys02PEQ!0+z:`o$v0iNZgH_%`7DW(ahTeqtIf0ORRlVD4+Δ]?f%E3,g9Du+Xܗ+ra/7>R҃YIŬtUbLZh$lo E'tRQٵtq)p%xe^+ֹine!WXW%]\khڹ{gcC]%BQ I}!6x7b:W}{]r(_r%HQN\w5޷;fI8 33le]CO,[a,y{XUNWcSY 4(PIG䴙s9\ :l2.gZbD>!6c]騭_W_, 7wĢL8. aRFYr͚5ll5_qjVr6~a R}S Z#cX,fc)$8 |E31&GAlQ}%S(Xa Ne2ןI| `(U>VV X0ljonG?#v]I@f !\JaЮ\B" pDf@*z%=r. clJS&8",g A.ܣHeCʉ0BU~,bAE"=KH$eXY 8׿(2X7k 8p( 6.ˆq躬v |>f'>kp %JXX( c ,u)6 0ZQ_$QۼRsx~;6668J9,(}QQ>z}R]2@Uqm?@,0~c(z%0R+_{p-Ŋ^0OOI'jFrY*N@% 0BEsIԋ1H#|3y7ѝiǶ屁8[M:Mt>6DFH8qyQiЀ$UJX*v?{&=1?r_~,{|0ـbPRe,UAY9,+RXU H7`+1^ W~Moit' D?b2:@:B!7eXӡJA\ïDTWǗ^EۉeMƅL'Đj{AB T\v% g޻N[-?!Ѡ5J;>}2,aqʜ~/)щҞ?w/e)C#0#,+.{~Ԃ]_UMHףooEѸR6ӗG| MS}?Gߝb!/P 'Z_=ȲIve3z:C3W&/őX tIZB:a]mpX74?}V [A pav?94y`}0yx;FcS_i&{},=x|=8Lz#>tGV̤g0?t70D ,9 TiJ;6xp/!d("b!ń'= PihuFYuy\ JRw.7Q_LB[҂^U L{wϋg!| ȧ{X6S"<5B!p`ѩįB;Ff|\dW)MքO*^W^OӸ#3:!:X,:\1] xknݺgd2 r9fGܳuh? iScbe) Đn0m<<D̳) ɀ NשcdxO!.FӳD\"fb&^Dc&ZӪ$Ls)`]t^IM(h8TVQzP b2$|h@X!J%eBfH I^۶yade.+TO$OKCV S@D#B\PH+A'0R`*1.#4Dta&J(-=F[!Jb׊*vL+@jB R@@SB,C0=`>4vT(E$Z1)ã] Tu(pJ0a:MUq^5Ky=="~}.\{܋pr(EUj|>,gjuX{vS1b%Jr2IūqJ^葡2q<5Z=z>i' 3TH*W:bqoh +ccF_Qd3u^7uqe9ayC~Hg֖uT,Uk@X2H q vT Nvyt{vTPRG#^YePVCUPj1F:LitVDku[[.9ͦvqvB 9fK*<.)4leSe씆+n 󻭭xf6M al,zÈNJ%r  2P 1Z#$Cfk4PR@dDRl;5L ˆiAMՄ+XBKPrrb-, 5[&Jץnsq'`߫gq`si ͝T_ma:v"oy֜ѦvvBS Lur(EO97(:_#A65lo!mfR7Ć.`-#O`>) t 3>LOd|fN$gy `[u2DX 6s, :[2;..;0yr>FgQ΅˙7>`ebC$KCEb\c7yjU彩}gGы=q.^FՆRnHĆ7*xx+K.e={zuQAi.d4Ý4B@暚@4mՓƢps]t-|ktto0ҍHQr/}5hܻ} ~NCL= 6IbtPY6Hا(>;zA84J7Oa~{&nCr\&S*kC}pLB ܤF|Ov}47DtZ}OgRJg4WL3o,O3ﰹ|? e5/"<(ʣ,K/{'4wKL={zz[NƃLaaiI|cƊ>r{j ZMzvw7sT۞2HaX-mbթ {2!(;: hol#;Ɂ =n,.γ?)20ΎԄL,6w}PpED-Q(1@ݠnh7h~↪=<ͯ*w# MM_ǘlyll ,gg[0o.Y K;FaqvΥ} 飄ޗ9T è׵ifJAʹG\_kQ98685#?zܐzV#)Փ|P?BW9z47*<]gā#pXr+2_ey:6M$׫5~ߦ)G5lۥa4x.д?6r.vIENDB`pysiogame-1.30.811/images/flag_uk.png0000644000175000017500000001052512201770070016332 0ustar tigertigerPNG  IHDRxxPLTE$}%&)+, 195 +9@!=C+12-E30H!9'K#:%;,N&A.O-A;R/B4V1C1H7X2I:Z4J6KD\:JG^=Q=L>SJa@SLcGgETFZNhH[I\RkK^TmO^WoQ_R`Rf`rWfbtYhZidw[j_zgy]l`lh}brk}csjeulgwivnjwpjzlyrmznqysq~{tt~u}yxz|}ށ߂恍჌݈މߊ剗዗Ŕ⍘ʖ瑜ⓜ㔝ꔟ无ᙟ䛡̡✨뛤杣䝩흦ᡫ頦뢨䤭룯禰㩰嫲몴Բ筵ֵ䱶뱸泸赺근溼輿@:bKGDH pHYs B(xtIME 5 % IDATh}LTWAX5TDzU0T"?0*DAJiEjA6*Z+ kЮTTJ\y gvf u$ 39wa<`Ï/j6 zNo0赽Cj->e,# =RU+#makOk\.W\>Ӱ&P/9noy`凡4l0e;.I~qOnY}֝;̭q#d0Lݦ-,6oV546]kiu6͵ƆM a蟱 լj76͏kF˃ C Ҟ2a<t1ZaƬ e~؀c{`<ÌUm,"?:/f8xѴ 3*˚݇]lTf Y\U 5Ft͏p ɫlm9 ^ECz"g0:l'݁c<0±6p9rukՕ"LϦ\9.-SX8j]S2ݓBoxN'^2 }x3#[Xm+8w$Օ9a*UP@Y; 6jtRIa=!*V]S}HoASi yi;Ϲ،әK\+JEOd84 \*ϕ_#.)BSҹKQtN9FRhB[PXV)F U[QL`}_eKm&Aa`% |]YUV[/} pgvHD"1eڀ fs(S|yCv_8k:}jawI& o7VAb2Te%Y/&G#<nw]a={2dB¦z"2FqKu޶eS/F#xpg*!_Rf(3l4v@VKʁ l #D|dy!/Xmgۼ^^9@@Rn-2 gdmLtDyPi7ߠSæG?/gK( 2.J-zxy&qM| "|FR55\{+!,bw0[ \r4] yfk5q+"vj22m[rKk_[ӿPkeL_/egg曥0hOKםKrk~>;ҤdFH+mkݚKdb Qr UZkF#k rk (oO$}_pxk$)f@4:%,J ?TnF~~nnaMgXEL`Ck&ʹyyf]KX~Laq l4>| O(-=Qq/]E]EFfVV|d2}qK.|zQZZzѣG>x 9txbě n .w`#"c׬OLJښk}(g砍UHO߷'mGjrRu8{|I'joo/0/#ŋ0]>A8bEtܚuSwٗӘ-wkR"Z1q R *Bś>F>B:_p1ki;ۇ2$233g҄ɵR O$V,D-(}$^CSd@sኸpXi{Xq9V#MJSSb0Si dA^K^%l? E֌p?Ļ "vL=l CkJ BQ.L;{dnֽ'_G{%s{u\~X>4~GCEiD`Tnkas:E kωht!Y,CW{lS]-7a_[]ָ\`A{d'3 .tKJW,̸YD36l .ArwKLk4C6Jgfhmax)xɲށfYvH~r`l|ć5Y ;DtP x^q1.>#7\GFۏ/eߜ(0~2E8c01ݣ᯼e 8cPP薛SΰfF)6 G;-7Tz(Zɺ7ӹE).[-av&#'?('~@&q> N e[H!aB?B1͛ 3 oPm#:i%B.C4W١n6 ^]A'9Qf8$"#Wq>IQwvcUZǚsp#^K&)D>HnC({q)+y\$9>q2ۂHSbzC(-LcC2V1^è7-62JZzrֶøY5XNV|6vmegFKhfF$#q>{WPSQ^ФˎG <(~ACEy2\~ Xsh,BIENDB`pysiogame-1.30.811/images/t6.png0000644000175000017500000000222412201770070015250 0ustar tigertigerPNG  IHDRPPPLTEa _c!bfrmBktt]o zzuW%z,F %Һ[ݹ 'Jrqs”"!`u3$ЪQ|ٺs9ǥȒџ۴ȼ-`)bKGDH pHYs B(xtIME (9BZIDATXS0XB+LH VV,W{ Ҋ?qR񻄄$GT\n . >>x60xG:4x00x~70}p]U[T )W/ݼrR#OA@^po(p^eWޜJVX͈Pyw?\B(K//r.2gpNDyLJ8Mhe\!ϖON4XB$(JLX!sC'KC (J/)"1Q:.sBRN?4 o ^Qd[FBRh`k0OKZ0$`@fhl% ,#'@q%_D'mdP7fZ? IQ\($7@8ġҟk=1W繘 !"G dpuWr|EsEQE tH؀΍8}*>b46 G{xN;`%Ta2b]Lo9-xC\@=2>х~6lVP7|a#h-TO/vlHЏ +FƈR9rCgxt eDu̠~8ЏNqaT3W/kk t5slo8Q lLCM1W h3]2dڌq8M1YȿKݮ)O]kбДA5cWiqqA~I.z~NƒqN<lꇈ+gN)M]Sͻq_ $F+088I`3Kۙj Gxb8u@ra \-p5ѿF N-m4!+%xvp(A2sR<>0Z CGY jsGd`(7!!.oBNU6"sB<ŁLE䗐ÀQj:ew~Tg `[.l3W4tMQ|jhÀE?o) pXRebq"0Zbu]䣅4aFu|ةtළ;(6;krps16^W HƇ^Ek!c;)R3-ޯ:YuD׼%̸]g|X7pP9 3n})ulgф{i|8G|ߣP^PbUm F8LD|7o!\Հd E <x\DzBFO |"25 igINSȢ*g 2> NޗHu2px7p ?6qV"0$α kҒ ~l4[LH>NFc wk !A-yUq>pMGwYӁ)bU4AꆌƁ -EX.|/0MT|+iy!@bu-[I2xE\ˁ9xڗs##U?_[eNX\g2YU `^VR S38SY |MM`'p.z 6DFmre\I٨=QEXK 0: *Rj=Bz :uB *RA?o=(# RwqLOtkqx#,Vb3uxZ]VKl^NYA%6k!ᤅ) 1=U|OO"}Z,Vy46 qu1Wa0B-̓VUU >B R Zd0+ :MRWa0BR*`R{a< ր^r~UNKPAX?Ja02BP3=!!>j_+ Xh0xu EڸD/{ظG8 X(7`렅궭? uڏ1GQʫBvLV *]-5T)4G3Vlڥ(T (VXjGRTl7LG jTc) aBNtӾ!W~ oh}E0 Xc08.kp'emD֌@tnDhʰU4::FD%*,/#geG'⭸[˯#L@Ġ,&VuBJd0TfE{Cx:Ư뮫ڎ a&B[}ۂg|^İ fgD^l2MXt v?R}6״l\ثI i!kncgWMD.-aq 4(z''/(p(U{ HCid2\,֪ [s!}lybC*Y R1p|QhS#}&x8O};9bS-c0E ppҧXf7f@˪n p6;.xyWӈ@hY:uIq1J1b|/;9`0uL&xVu> NHwXbD#4ss\Nva t0q+ 3@q˕P @׺8&-U NfzZ'3G r=>]kJ.=S'^M~][GB$Pesyoĺ&nɬzv6a+I '1~J h4D!.|O:uЮ@Ucڰ)cu8vA8n]\|6W T)@}/8%@s64UMglcdܚfQw[{+{ 1tGӫx:wshIIENDB`pysiogame-1.30.811/images/b6.png0000644000175000017500000001134612201770070015233 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ Ashton*IDATxk\Wuksq߶cDZBRC}-jA#4R*PUJT D*h+&xI`8ul{g朳ZNDڹN.hΝ93w{O~ruᵯ˳#GNN/;#G|t*4 :qxi& 23 | <pҁa855ʉQdw^q_JGvjxj} _~Ɨ~u+p^p"8D׌325xSxy_fo.l;?\d~%/X.蔎 E!ɫS5{וRֆ 5,cs+6بqӧVъBwdwb:zSe=,@?g+Ck5Z59X'+17/yJcw^)t (xIye%0 Q뵱6T8?a_-PxN5cqύvxRg+,tp.VJR݂pLTKGƙq|-s5OჯڝlWyxM[qÅ.Z.yz}G'AAva2ab! Ђ|; \.kA/[]g؈ktzI?GҤbI]A*,f隹܂ |x5 +ֱl6s9.wٿ)z'4]gp|gFz2agkT[u'Bz<8W\wAU:~gOAC+8\@uJʎtaP4#تq?0 DK_R_Xw\|߹kRW%~VWP+STYk:u~ku {JJ{l6-_J~IUxށq&&c`>ߕg<&p㩟 Wx|mX[lL79>2K%tj*Q6daK d,ۻ|ev[2S*u#g-|?xܴ;}?:SuEX uF@JzM57xP NTJ10e㶓[Fƾté8}52u"|bmRgbA5 PIV2́Jc? FckL_N ; ?2`v> FdC([M|'y30DZrtL8e%PPg%UU fveqo"h?P )0 @gܻa\0 q8C x`MiZu)<jrfTk%Jpa nA;>&ӠKSlOMo)ɌPKy1EďIed,2 :|H O `F4Ii^9RSZ^nj {SE%XRgW$n¶;VINbʜ#pH35S,gMt|X,bc Zs(:(sIwdKo͞;ibf)0r?|Zh&l9x0SZS>.d;Xf;\Jr vCơMɨx2;5]bO>Uob..9hƔ%&{T=ة)]l}3|q8xZh*hD*N4UK'ܰw13#J6IPCaT]o\}eңjߖt9nB2^n#r^DQTJ MӠQ !f@t=%{β*[ʛT!㒕iA!"D" stʂ7.S f_ ʂFqQs#$"QhӀBNiQ*I\#X䙥O1_c]/Pk=)SfKF;xp9AJƌF#!DB4Mi*bYG"J0JХ޹chJ4#5Q#Ko3^Ѷw]јAS%HFАaUVUƴ椁ʤi95r1AF4!ь(LV{?%vp A * @MykZҦ,/KS2 PvV9Ԕ zYJh*ŤΚ \;o[6W-WSPHMT1RGRn**U$1l5a2u)\cNH*jbTbЬΊ-H,u`TQ5*DF1Rk*~V1PfǐRI%IRP M8QW?gkq.[>!DF1aBRJ#U461>2P 6}4Lu3!p1U[EEyM"r?| Sc}VefXඇCpNel9/|Wec"&|Ν^LzV> ;pXk3Y;@~;/3k>7 ذy&kvef|~%[825p.7<̬i=n "nȑ;'o왇gG/M)IENDB`pysiogame-1.30.811/images/sheep.png0000644000175000017500000000562112201770073016032 0ustar tigertigerPNG  IHDR_v0PLTE$ç>@=7i\^[{}zQbKGDH pHYs B(xtIME  ;QL IDATxMh3Z+ 6.&M !]icL| K0Ũ R[)xSk;t)kˬgUz "$!"K9ȖXͼU h4~|!hDA"H $DA"&jy?dMĕoON]y\^;|]{\O/gȃrk:+ y]=(o1(oS=^:W?0.ya@v|rHÈw3V䕀>z_؁م% A>Q7 y_KN_*k=CV4hIHA w7\h\ݘOIAl'V;E 9EpiS4(ېMԉQк&%DՍΝޗP6ng%%C ).LyPX:k_R8dH@ VQN:$vI>jpso%M bZ^@b,F[+D]uZY )"8!7|C$MY ➟`,$(=X&9ۅs"˲YD*iCKb&a߿dˉK@hD_dDz;t0/4#\R@J*ܹd!s]dY͔Vbj!U2(!e]6 w=hMdޅMnˍ'ΔnU%Qtӈq ɑq3QHvd "~@T/ vuI'/2M䪕z|s h'Iū!1*ҐIn$YAZ ri nߪ~~ٮd!ąPYofPW4k+ʏ¤WQĈZ3ƖG,3 =>% K!$a敹ZMʼn[e#EiɌ\qQYNQ4+l9cR .E?@uDhi{10 'C@(4Mn\{K@ 1I%̮CnCVbXӑD5j3 $-Bmm# CD e 27 װ7()P-үgkxBKD1QMT6AJJȍ{g2(6d)$BB\_ y7ͮP'aeIǸ. #hQ N T s!^r ? ؟M[.IsϸGHs#g 6a)s~tQ/,,:1匄ke 3txva;j/g$Z48Cp8~!x/=p5Y$]aipi,I'^w}{YQKix)oS_%Sw XTY&1ODo=~d,bOzqK1򅬃fM ϣ4a@ZA5;ktMZb pF4R#>Ͼ&zL$wbYG`gHjorigDVWB:_jrK̅ 1aO*@M%]Pla2G } ,GtM@?Ʋ+m}IZڴXT_wkwH h04{ݬ Ծ,`m9[>($ljIK!n:$D{mRR҂MkM;O*QFdwd9t?4x Q CPV/Ȗҝ%M 𨮸x^!O >RW$q' u IhF,f/>;|]B2zq H#ӆFG"Eg8?]wOWWx辻7/_8"H $DA"H W.Xgw)?1IENDB`pysiogame-1.30.811/images/t1.png0000644000175000017500000000216612201770073015253 0ustar tigertigerPNG  IHDRPPPLTE     # $"(,7<65@GD=ROJan\I]]yhl yzÔǚ0niЪQҲ_ڼw源Ȓџ۴qg bKGDH pHYs B(xtIME )h5@uLt =* ppU€\2` 0Kj @pK.O%Ȫfܾ$k]v  I d iub42 L[a vʠL:kG45N]D+l 4!I٧0Xz]W7 Pw;mMWD3%weG")QD 5n@z*fpE合i!S@ZUDԜ6 v Ք&Fi %XiX<&r#k@$ZI%TYt S^gh#iX<6rh9,YRBqǾs=DܑlMMswăosK__=VVBœ >q.{̞ ڞ,>&a2~H" -1gL0 M4IiMhZqt߿X a3Θ1eƙ3կL6i2UTkw11c&iſ9 DUMRXQ&&Ovm L}P!&\ʏAQ8DhmW?(U*WJ)Ҫb*&b)Ns@# )%%_8 }N KVbml b;xRb_vU+)o˜C: |-,Za~ll3}33c mE.r2lCl?@ANJZHGJJ  tEH"Z&A)mDGT@ 4媦PlNY9QNJpx_k@nҪ$arQI= Oda#B< ;ìJSB]8y9 $4tJ,A3Air| }GWQ.JIf&6tⵚ뽄}<"$ڙi]k9I\+3g3ϛWxd|rt$2S j@cRU n컔#lԂԔym{4=+)"'m+IYeOP,JbNj 7V+W]4S[r0<ւjCW.BTX:Dx%Aul_kZUݼ \ G*O7QqLjs^Mz5k/UhZF)K3vH݅v8&dvV647z<{AFo]S t<;:u4gF#sTƑ G\A BGF.rbaZ}]S.?VSK.V7NA{iuidڷzNXys`3u|+(ۢ}8YQړĕNS#OSVFM:$e$)^mu7I$m٧@.*^K5s.ʼIumu$׳ڞUi;a7 ؈$˺#*w8m|*oH]>^鉛8SQ&;VZ $q*jWjiqQ nç[\iHGQ s%4U6~E3 rS) mVwρ`G}TP\s-݄QcV3Gf)H 蚼\u+,^/Mr@V%EE(,D*=fKfvF"@5D#/C={aBl-ۃP5>\DGuy3ʗy^j@M+FDI.ʥa J H$8ꥼA4UPm7f'SFvF"$uInmTP ׍SL]~n%b؈;d7϶bR`\&?zAB謽O9O\4~H:# RIÁf[U$p@v! $ď-ݭ*&( tcJqD<ݘqk nH YYOQc?d+xgIeTx!x{؏fP"AznQ-tZ1~ΝHURG&ĩ;a tIZg{m# $ѩvu`w@@il8c:]Ju-- )|`SX*xt`_stjjHI$DB%vp <$rfUR^P'b6B  T1[s&%tt@4yھ)r#@_\FV E*JAB٤ثleTj2oeMnPg$d\7o @vJJ ;/> nD\5`J9?]%dbHr* r]i0[Iű^(ˣǴ"8ҭ$˫)#oChvʶcZq= k׏ѯR ^4aV%CK97e|L"AFg}rr)W'Q3"ir }[,ŝ(4~% $lN>}7m9cף@v-UM4(BTZWB|œ]$" S&NK;@D H)UOd_≶g(&obz*Xpwy1K+@M̙103e/U\]5~j\,;:W3=d-Qo$o1D_(3aB.=c^@aƌ)FVj ev(%?9~&Cc0dȌ[ [ *Z T1NC>thb!ϧx6[kΜ!lq+h-8SN5@Mhu}> M!Crba,)7.:>㌉rBJNV2P"({t ̙sRXHeCsdj51@-6M/ jt̺nksS3eik3C^ysZjs}k<Uk%^Tlk|mkxEt3 ȃ:]2 /ΉrjxA%SO.jA& պ^ZeP`_ܪi]jׂ/jeY r TKq\ PGf<_3 ʿu>ތKp;g+7yznW <#d$%"[Wdv rk ٺ.)wXk@>/o-C ٹluEBd+r[ -% "DstlVlO!@WDDQ I)lݔ( ;1IIlm˟ !ՓO /ɣ"[-c ȥB(V" *_Rb="ߖ_OZWFIENDB`pysiogame-1.30.811/images/flag_fr.png0000644000175000017500000000746612201770073016337 0ustar tigertigerPNG  IHDRxxPLTE%&'*,-0-- 1 2395:6 ; <@"=#>A 1BCD E!F/G&J0H(K*L+M1,N28/P0Q!9:Q#?;RTIi?UPiQjRkDUSlTlFVF\UmGWG]VnH]WoXpYq_qZrO^asPebt[wQf\xdvRg]yew_zWf`{a{XgYhb}Yni~j^ok_ol`pmaqnopfrqgsrhysizj{uzn||o}}p~~quvwx|}~񅓌ƒ򍘖󓜚񚥤򢪪塞򨮭ӳж=bKGDH pHYs B(xtIME 59| IDAThlTU/mcnHj`hI+,jJR ? T(FQB %($\֢ 4l,j\W]D]vA".0g޼=yu2O37|=wr& r | EH8 )yr( Ɏ尟Xv{5}7O9XRm%er4~)R|Otg<&SRgb}R8{^"̿A}j2Ogೣ!10<~P/*\5| ~P BҿDj(`ZDv\?7dHHvM`0=.x ?z#0\BV?,t!uG#,ڛ`v@Ei8Ǖd]\UZ? I݄Xv=0}o=NK-A^`է$e+׮߸~P ޷u.W቞$Fz՟2mO|ྖ=MAdzn@\x5ޱOZ߲緿2xՖl :c΂Kfd>͏\s/R=8WƒQ3_tjoPn Г.RO`vW=|/o7lA ^kokU-.BO,6{ޢg#xW{ ԰j!x{u%\_OYV˯Y d{zc-V=0(Po H~pjU5!^h1W\ ?a%0XЎ!$k 'B&Ld\n !NS죝%$cF ;88#Xd+ Vx.Kԗ 's4(1AB&0Ӗ0$UĔI=f| `"sY3\[kA6'b 9V!Kn fdCPj˴3x1׼f2 !f`9=DՅAV|^^LDhv(-\mE K ךH6 {OJ J2B:`եy|IY*!πg"dv=f=-E82 ?P^+lC+ঝhu\,U4M]JyBMCy8p#nji%J `HbAf]G,aq C,ʚhALƄ_j*Yak-nif=V= Z&?{F2qoQ FiP> 3_C Ay#v\=]r]_-I2fr$Jn6=$HK4Lɑp"bYBr/%Y&I͂.pctD'=f3yI:YgG4n ~봁j ]✅*)C dܯpe1N(t%qi;l$ȋ\1sv5K\ɽ 9ÐeNki0|/׻I~>6绒fԂ+/P1,ӽ:edNKOG99U ؎a݇v mN'0Ԁ[n 4qx%\Nr'ش/pgc³0 Sd۪:[aw~%0d{n~?mU^{JN2ܵ4nOk$s:W~퀈+JղuNi< 8Z?Gq/FyvkP^2fAEb}?~²TzcJC(뫨ş.9iBXQ,ퟪ.g(ME y,^b_-ɼ߸`E{W~' eLck?9@,N hX!A[Qj 5'nT֟')8ȪMg#IENDB`pysiogame-1.30.811/images/flag_de.png0000644000175000017500000001031312201770073016301 0ustar tigertigerPNG  IHDRxxPLTE      ""$!#%"&'%')')+(+-*-/,02/2415647969:8:<9=><>@=@A?AB@BDADFCGIFIJHJLI$MNLOQNQSPSTR)$UWT+,WYV---3Y[X[\Z\^[^_]63`b_8:cdb:;egd@;@AgifBBCCjliDIH0kmjlnkJInpmKJoqnLKLPrtqsurtvsRQTRvxuUYxzwy{xZY{}z[Z}~{][]a~}~bbccddeeidjkkllmpmrtsuwvyxzy~􋌡񦧵󧨶󮬽ÿ&(44@@JRJ[ScjrybKGDH pHYs B(xtIME 1*]X TIDATh{PTwv0D"z Ą/FGU2AQ!(^[e@AP2K%J)Pb4@IMjVS> t=gwn >wnߪJ?}Ճ~{~!F뗞~3{$U%9%Ӄ{E53W0;ϵբ^{qo(vQ k20-Bpi÷e6^oo)I߼h>d~G5m㩢sU.^jzBuEYJ-sݳ܅jGj KDy[jt=%rs j̍JZߕOdg, dξ`owAyݪfV57|=hsKyyzӂ덗.\Iq~.oe  f@`ݛ^po3p :_Szzkcm*87Ψ'߿<\;oW1pzv’x g8eG/y[5PJGNs)zY.-t5BTnV: {'|X@S T y=+,.-tdViqavs1nCpN^A2lZbuA^y;7o tQ2jh%F'>_\rFE\Yi: 3sYKH:IZm^>DLr| .LM-frF[ՒGCCg㜧xK 56Օ4dN/_ h,iHN  F$NSNd+#7mb( W?_ \&h +/y ӦN}Wp7,Wp4IdYx6Y9'2J9tD65%2d; o${(`V0 N&3ѥ ҅^E2TE9t: -1?7o&'9W)`Nh+g /&ץH*/;{lgɯ:I*?(io8G{x+Mm2x]Heeeg`b4x5;9æ0`*C`l0O3eMF | pA0<[jv~eG;*epҷ_A dkl2x$)nQLLEC`vC q)dkln$S2".Xrz)o\Y<<%;ljAbMFr\TLq1Z6[<CU; ?Qkdu:t r)C=ix;[ȗeBI኉'HtA2Y_*/uxuzkqvz|4&Vj [؊`1]`k*O,fBib/qcm_JWFpn9j8O4]R\@2`JYPc=j$TdVyXtAT2 \Zٔ+ FI-lX!U:U:,Gyt^]S͋r`X=0b--G'2p?!,5ML2zM%s %9 YY-ٲ0x=.WwZ5b͛^CdFȤ}w@7`biF[> \(?1:jt_K"VGmIHܛÇ9vɓ'O'?v5'DE.,4!oOvwsuq#㥒;"E{{O򛔼bh oOܯ9 -cF71!!>&zMDXX9ӽ\Ap'2ULm/Ś!!aak7'f& 4Y>\7 nYzER^_b`YU;ӂ@x5;,lj6HNBɔ|8cI7EG}Љ) LH˺,zG%'iYQ4.Xr:P4} 1D0Hv6YKF,\4zN&;N[ dtbzOMwݟd>JFsu[,SJbxKE2i?8 N[,$2Bt+Kr?悗ϑVM|k.dLrN`h&X.UZBTR]E1\&hRvZA+;*X~$`^KTseOM n`}CmUu0rf IX].5Z.i\3Ai\r(J`@!k`m0%#^ٴ(X \j4li/ `Q2fcS4Z.7Z-e =uJp} җfHF6-'qѢ` +.]J`tfCP4-#͢Nȩ`Ռ5ċJehD`LU^/ۻ^S`6hw\|3X2$&& 7vW8-> +\tG+\>pw0f (¼gn[n򳃙SioVʷ7f?(ߘ$w|dȣٜb ߛfqi0lG(f1CT|\=6-ft|kW29Md! 9azWwLm&×ĉKM4ä+g!ƥםzkU= ط^%Cߜ1PCcl ˗._?G5XPؖ[uzOd?)s #;Uk0ZۏɈm/_I8Om$۪H)bu*U$t): Mb` eB 9X2Gp(,!S=A% R?03%` WW+=l3dDz3*F-V L*~6+_v=F2`+= 8 ir,tZFy<Vކ!,EƝ@q{ CB2C<`_CUd7k Cf(!R?,'!PO [J?C~u:%EYǀ|~ Fƭ+ M4:U})h0B:Φw0T:yࡌ$A!!q7ƜL}"63!r!Ed 3 R.@CC`\, U!` *2ğ Cʲ)i pש_4rdYNC ,0>^M* @OH؀N`. C X-&l*}%aw 0C0 ;v׹KQnYv$1SF4E,VDua;HuAVcfx"4d񻲌TA4>!yl8.C BH%86۳ņE !]F3Bm clS5L&X!چ ԣ x bј CVHEcz24_& +BGnq-m!{gse޽lBm'e&0x'dfg; 0ox!Y6AM6kC82,/fr#9u^,ŻjBǁw_ !砩9óf13SXSB?C]iPrϼ>d%YyL ,@S[:Ljb+ҏs{Hw ;.Q34ѤDOYdQDWL? dx͐vWٗ,Hu2VHLl[΍F#[( OG:`Rk %d&}wlBoIT|MLm+N.Ll!k #1Ms4v%"M7a5ŋGH 8dDCw Bƭ{ 8$z$fIy%ԩ!]Y]\ơcS'_pn1#<6{+!_+cs#@d iğo!A~yC#87蝨Uʧ= x#c500d]& CܵURDBLJ.a)r;Pd"{ȹx!cpFLh}b7w3> H ù[OY@ M{,k+2bxcE/W6%dC8b=Cdz,Mm28v݈$_,< |J܉4}2ӨMYvrUhC`W+ʛy uuzK|w4s+Cv[*/:Č  "/`e?u-9Ң!#m65@Hl܍̌X^usG@tF_*BI񨝨=r8=)Fs?o'pXo!y%`Q`Fj3"d#"E`!UC^|z !=ĐI#{ᐵ'BHm'SԳ@FaƉo`(JSD ,Jp,VK*֮Ki-NwVmy-!&LXe^z qnك_C$T|65ۉHnU#ϗŰՃs/6$sunDհeyj`ն:[!0BH!VFmS畨u#B7̡ ;\gF<[,H@jj*~{*=O#mFm3jڨR+q.ޠmPbC73}E{N7'N.(g7j:4&DC6r3 rCm\NC$ tm6b@h,ݏ%kC4׈uqnLP]o4y\w{fհ2v_2[GJ`6"O4@tTP!ރsn`KmQd1t.qT6 QYeݬۻK`z[/Dn0Tb*N ;T5xPe4b~k& x :re|o@`r](}GE)r r>vq\}(-~]w{6 t8Y: I,˼=PJ''1M|]UzRS~veYVHcU%za έ؉fވ+ 聤rlSHB$.wZB3?Gq4mpn '&Ftk(UNzOVʇv ӒYsv̙d /Ia]h!u􎬬̴6EA),NзcE{p\K2Mz"l4ˁEX_6U'ݝ28g[oD*>49`7چ>Rl.-ppy/nE)u>8YQM@I.!6d yf7%&u%<*Ϗc\ޑ&Ϡ諁(R ew]1H:O$F;L447h]dFq is* 9G"=|"m"h/BQaB ~/wMIENDB`pysiogame-1.30.811/images/info_ok3.png0000664000175000017500000001245712201770073016444 0ustar tigertigerPNG  IHDRTBGsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YIDATxsy=3= H @]@$%[4 N$T'tr.:ɗrOC!)XW"E$ }}zf===e`;W{{[Kϟl4S)B4UuH@ĥ,j".vgbخk pdf%d2 {uĊHU(uu|VWǴ׻]YH@:M(Gffhʂ[-3lc~?ASKZWL*TfyyhQs5ɀp pCe2R6RSKiERs3Bұmmò%t򽧃LYӁ߷ڽ %GrA u*'{!ɖu9ukmj"g$z`v?{OM"!sڂr4O=xDIÿuΎ)Nd@%;28qP׋r -v6ՏRZQmmg["˾>5=]Rej:OP}ث'"L 5sat9TH^RmC3QMH})ZuF4e h6'J&{}QSmD0!0;3jkڵ*5PFR\!H_L#F>z9gsd6)ky~Qdx$3Լmh AWCi}S[WZ\z r!Aj/Һ5RXzc Z/IitWA腣EU[C16 ~Q[(DG6GLρۅ5OPpjD{<`0;í$uCي ԙ;w' VU ini. ;oyYjibjj@kkp=AfkD*P[\Zc#95+d?gUxANN|cGljFd e ҂B-s$""ss,.,F{:*~tjPhH$l΍ڠ GGm}?k\UU;}ߡ:?Ӄr11Y}5JVI/?F>px$o.#%Z[&B}4WWoFQ7;ˏ-2@?sڍIkFZy"e򭷘|m @;ȡDlyOii/JO3q~?=ȯ/_mtWRedt;tY|OI:T֌:!yuuaf% @|Z m(ԛNs|xr禦gI&,I/_flrD4ZT;|5$L,뾯IuY0tz?K,GGq= 4v@z AK׉߾]]tjS)D4L۸Ј[ԙmK[jmsU1Avd\*MU&۠S_$qJ,Wx?bq0P 5!#iF5:~/ͅbN xр ~` XyE0T n~%ɤ1]HE@uTݶG{R9M7 s%DNy25D!) ,$^.#{i`1`8.1(۽˷ȗUhr"\g*J& ]PIBr\Z0+~B?H$ P%.ՕB fe4q(UhY6$)?jZP5`9+ 3/n/_f< LkiKWn]MZqI[dیd[h< NlD㩓yhiQX0k!z*E. PG$2-m5r(h Юe4 *$p u8@Qy!I K2 EJQI uM7"/9RGS#V=:\d2,wu~ S-7la*h-IO=_.a'6?gad0QWè*fgX0{ɓ_t0HBd?PU+Y4(C\#'].fBa4zƘJFp455@Y  r`0D{{7{ɓtP&uE{Ԉ0]@=aijrFCaX& Y7r~ܳ{E&u 0;;7xo>p֠vvP}>c ټo2't[+!2pI#V;kL}>^}0/^$RUj3Wyqɬyt[F^~z\(,4Ʀ͏gQ\}p6pc\&c|6X᭎ּg S}m/J8dd ;bIz%z:OzzF8)֡JsHq!fؖUZ;QSYGO{NaߏoU=?m2aBq{W N4[dGO,EዦMX@ʃfA.cݻp4#iMLjnɅ Qk[X@4zݻxff۰hRnA[,L1{v!I҆ y'3ag'$Xo/NIycDL|J3rrduh6+,`Fng+ح[_f~8Tmlho/]vq /șe6mbsSQoaPd~j;_WN|vk=3ح[?/Ys^QM|5vٸӊg'4܆3/+čEtLO@GgΔT2 Hgcw@0IOoYv՟62ӧ~U'OXf#+>6n_ukAZaYQ8]5ωO&p Ju5[XC%y1\8L9|S»|޿J.[Xzmml/dV}{8MgX)@ +%= Z35 $8ۅj e .T0`u}=YDd͝t;vgn*2?4B~޷iv˂A,}=`* xۏ`1?D]e$sGZ.e0~,pjۋR[Enq٘g}Xj~3EKVӥ\N O=s7t2UUMUJ6Z:}d2Q-zqx ȡ` |v]/`);΂mbe 'wh~:_<^\1ƒB6^ȪԈsnc+ r_071Ut>ѣD?@G.K}}E )}{uge)Y2c1E"J$H[Ez=PGS1k&Lc쫧z>:x'2RREq(4=΃!9&+,=5z&t_?#-.6Fkɦ?3gv'lsyqjj.Pl_SXo{id~d 2:zqk,FG9tVɊLzj¿׃kiDqj^~Nk^ȧڜ,84?M*qU%$sf˩/KO IENDB`pysiogame-1.30.811/images/congrats.jpg0000644000175000017500000004614412201770073016547 0ustar tigertigerJFIFYYC      C  3Y" H !1AQ"2aq B#Rb3r$C%cs5!1AQaq2"#BRb ?z(((( ((Uh`vҨR@# saamThM9TSEjMQEEPQ@QEQEEPQ@QEQEEPQ@QEQ@.K ft#ޝJ (tKTk@YԿ(JO8W5Ҫcv1)Ysқ,jQVQL5(`Sd}钊ڨ@4H#dbNRHEPQ@QEQEEPQ@QEQEEPQ@P3 .*di䦀JQO>Ԥ#5vbi :CY8Q( 1JDodڋqY *bҮTv=Z0"vpj>@CCL/ڦjV˅!ETg+\g*q*m}H~V=0O H"R+*Vo( y4Ri'A)Ih(( (((( ((&X}*d)&RSWFOڨPmVArjYf8C1+,\㊸8⳱gP,C0+,;VV<>Uĉ{RM ڧ?ىRPWq-@f R%v-n#sC? Zᮤ:Hu*z^3?ͬqec1'z|mᩪ`@=]^rtNG\$)R> @< is=IDv՛>ՄV81\jhj>^^l*`=3MٚLjtd LFqCP|ҥR@"Ge{~3lgwⰲ!w<51+|gTDL`dEx!N5jV'<~(*IՊ( z)5p`#֓NSd`Q@QEQEEPQ@QEQE@TMj)*JȲHe{V]P}*^{\naMqݙbHEH1q\?s:\WJd.}+qV[}I27e<$`t5a;n1T'qbvEve7!/ͺҊVzѨN7j ޢۅc DzIж-UptHh74ww'g_Fۊ~x2/M[mJfO5KqVp ܡH6ūXغͣJ79$kM$`)%IIV㝻O3uzOB4f^"iJ*|+{;݊LR㌖;:%W/=Ƭ[;΂]:EP瘘kkHu! (‡;֨Ix=G->!zUJ # ցj-HQ$t=>XSTwBGK=ԔCPb tWJ$KL`+xecחyoF0 m_HHʊ X\ %OI{jPlEGV0H\8KW jJQ_ ˝23\qz'kRzO]^8y*H+nɇߊѫcGkúkطdKuH}d z%C<gڳAׯr<:esT 'PMFÊmIQ;ZP_t)]Cwnʜ˪ eD~iQ]Wr--osolՆdRqEK[KQI<5^->KE@8:L_nlJIR[[.4T'2q8Ԇ;\oKޠYONEut1*ON9,4ȽN6"5:Hk7a[-5qi@ZRHP U#@QEQEEPQ@QEU@KOj695p@:W'[6+$9 +9GcEH"( F;q\n-0vl`=(Y22;(?pZ-Ѓ]rI\M>'% z\Cڙ*r[z6Rr=_ޭurI-imLij-D-[-)' AT=EvH=ɬݵ9v‡В?'Yt@ӁS'z\1BQkqrسQ26FDPC) ɠ|i՝1-ugcJyĶs':]]Z*S.rI=VI8S$% Z-ƘצeV.RߏL,sMOcVeH^Bv#OM]Fy|E88v=<q^eGVL`ejBTyjҋOM!iFRCE9(!eKm ۿzMc}QMӿMYi鑤|y.冺72Q:%$k~[1u#jZ9_ :YEE4սw46cP:Kae_J>K[6ԩT~[y)uUL;cN:q[sYi][RJd5aNIAi*YV))QfG:AtXn-_8Rp9r:FV\h go >,}2WBe iRMlry~+֨:{:rԚҒq*@~C^'͏xՖ[gӚZѮ(MT#. Qk*Vmo^ $?UL<ſ1q (C%${Fޥ+8ߩҴ"1YӮ3O-g1¸,ɳQABRk֫^8ͺ 5(D+2+:НIҙ,MozZbD@ >SؼG$(.fk^GhTiGet mPddz[ϸEh",6 6$qF}+4z;n2a?5bH~zYDvըIv$l$?2HVJI$W/n]-&+q!hW5a[\Ykg&sIa?uG( :뺛RkCRV7-X{3U&ߊLkzСNޒMlz5]Jv@5c_UE޶ b%!pMH#XGpaUhWX-꥞ %^h(( ((IzJP@l^;P짚O",gc'T}? <*W #n*Y Tz8,Z<0ޟ;j|DQ$z%=v\pOH욟U${ٛV(W(T0Ns^;js%$%/qT pugSkZ}O]Ye JRڞ;qJQ BvFI+B*T^dk.BDWat.RA?7ux_amCzyjbu-/ڥ[vLP{9JqpjZ}qҙwFriU )M8k2A#G#*S_?uZW`JY[.]9%2}AnBJRO'9FQ\M ֟%Xt!@nF7%d /γYKQ攄  n$pp ~Um$W%pPLS*[K+$X~x#=_nYIE/_#z'$z痞o[PkU,^"cJD[%G!_lx IuQ<^:w Dmu-yh #1=-.;ija~evdi@ݒpr3]ڧltkƔ{pcKӻK~,]sm'UCL׮*V]*,JW0XWs]\]-Nv9wrp{rs2#L.,yORA J"R5\\=.|4n)Z0PBIB4וVSm,I}ZP)Y ,fI,bέm7K\ܵ%J)BڬEEW&˷P7!{* J##֤*dGmۤy@ `$ ڑf:y{qm@ed$hJX+}VKIҪlo MAEZǩ. JuP)8P*(#tnsF~ä0n㾡-K;dqZËOtòRw}2ꈮ*472rD&7ߊoqSyhRj;ѨAޢsʪo5LG&IGz>%M`$'tw d=c4ON/"n=h ((((; R{)I@\үd@dߊE=v$pj[ =/ r*[( L$\4*5p*W}42xtL 6+K)li(`}I޴AQc6 RX% QVI)^9%Ԟy0T~ˑVT帥'a(S9a$W[$b}". O-ItwJShykQLcEjv4E}CyXNBp7c'i4u%K7}^U4[. a7y>tboXy8% ڴrJ@RT99.tdGF[mR|+x4@'h8)R~bnFz8Pܔd)HB @$5>wNUR K<v\OveJ۪kܖtI NO< P1BnR K! n?aUz3ua8?=gl&sbsZX\\Qb(Z9Kh- *O?ك<}WnogDeO*:9K- cs-+ZGҰkZz˃L>r_4$9 rRRyW=MJ7t{Q;Eԭe;[LuKY˼z'o1!\uu|FS[bHP Ml%[6}])yX jGRZ'($ y 88Z5iRyGۊUqĴj+1=lI/(cd1B+m^q' j[&3S޺qhՂS>JYzZ-[Wuuo)I8~Z~cQzSyc)\iaM<N*gm#ΧHKr RS:"&~nFnwx- ppsx[KuTi<˃X)\;Jhuc5@ FU?UR((( (rRހG*`@fCwkZh)/6DeNe# ci@5{nfֽlv6$ݵ} RbMNRm/}mJu']ף86^ȴ 6;*qcTS{/_?u'[6Z8εƛY %\OeC)#[2楗kJV$Gԅ8}ҳIhiK-;5C1oOl+Kf jԉvJGܸPT~+X̳],[obS%D)+O‡cw P/[;^uS-"tGe!(Rԥ-(Y 8'$pCỪZ^5.a5Ɓ*K r fu)T\to .Y*m oYIeg6.r*{MrR@ܲ8|SuU_(*X,EIdd:1v.aՍCvf-2c $I$ͭ7<(͉qʐJF*}m^K-F|+}Νe9)r^^JPigs_Q_lzUn>>VӰZa)7ZYj4Z]Zm+nԸ'w-@6 l. vGjK@jzҘ.mW"%4i)8ZKn wmW!It+uMoi*EY}6>~-Ln J@P915xHݱe[zY٬|:DtŲ1(>Ik`tS7xO%Q"[É9 QWp+N:3(0OIk+o見WrFf!>I mꕅD#W~[x<˴ r~0^\:K[h]Xցg/[rkZ-0Z!E KD$P=P;&gz.p-JWTkZju̖4z;a}h\_JmN-a5 !͵$ 7 dfyRFT|;Mڀu$4d6 V@&c*TqI*P@'k(g\l#ބ >zdJ!+y8 lJ(( (((+ux}X/5ݖ`❜>2ܽ*;WRx1f];Z dW8?^,{J{'pq> ctÀ.[y4Yj `toSkk|ތkc-ۍVҹһRDveߋ%wSn’㋅a.[[dpw rB\6|*2';CgKiy>CNe!@I eziOQ[6n|vOOz]$6>\N?ZG[藆W|!62O-*W% _ ⯨I#YfE=Գ1Z1Q ; {H5di (qi ڼ[D`i|Y]3(-TA px$znE۝_7,:-2Q% UJ;9٩J4 g^.Vќxݜdz &J=Ks)%Yʔ#%~k-pYg^)Uj[Dgծ W6'aFrzz>ճ<^qS?:ΕԥK'5U $~0Fr=]fYIT|\\< D{YIoiJ _ܓ}ZzZشN]ܙCl*psBR{94X;:Xߔˠ)=i?R>R)&5Iv&c$tR]uŒI?t%.D:ѫQs{/hO^S"};QXniӚGVV-$|2jj_}3)UV][?:fY>\q]ŅoruP/Xm9&[GCm4p?JXBŏ 2JI@ׄ27xjQmo$yZyN:8)r0/Kʾgyird(H\Nog&3;*1ޣ@*o0a ޼~맏~/]jӫ\=+k1zoNWE8 T zTU&)ԍ5k]fN-=Qɑ] v!#%!ϑ?)W ݑ⽫e-ФL]"J!enׂz:w+Y v驓.r)AQpv{J@J@`[w|Q8dU~F.M3"`MҰoT=-,;ۥZ<@˜™yR򒡐3$lڊ%K[t%ƝGu#xlRo~)? ٍ֗ȺV_ œQH#J*?ƥY$D^N҃n_|DKV&c*=$g]ꔸ!+(R@Pk7Woii-NcNωw8ZԤNF>SO2.y>DoAS5K,.mgyǞ~%+{ )B_ x z\K^?W.'i̛Vq Au5+R Ydj[fj<4TQVZ{q[hQ cwWH| :=CCs͈ܘi A\,YZ{nYNyېynڔ[{r܈[NĻZ|-t~K!k{=Fm.%_pAW?㈹o*m}) :=Cx4Q-:Tyy,Ia`+Т(( ((!ĭ' I#^ˋwh/CH+=Nkqj=Ck&C0(-(JԧB J3Iz]D-[ӻ>wy _ԂxR*J'%jK݆dr4x >nѝp'`kmt2;z{616ċם JJ+@ʀےpN3^Zף־'Uvvho7e^[lیrkKծרt{>2̈w!6${kK::mr2&igz6W6DIJ=RXT}ɬt+ST9mU7>(/--G{vH1)!J t2Q[I.w)ޚtl5L6֤hH%@3d;zԬ9#=>5ys_s6c&xj;!) }Ӄ}k\xۚN;V6tᴹ) nE,sc^ҚZ~'i|; u;~zOJIj4j.;RV76q⊧VVū@-+zҫ-r'N^&\c/*[#IRBK59۴ R&nW/obߕKtq$qsQ7F[%^Y )';J~R?h.y}BpJaOwdA%KFږz}OO+B 8˾Z:Zk0Jқ@P}j>oNy]@oҏK+JP+mEWSKom~'2=%KVKI?ߛrAT$w/F.=EV뎲ElwR-5l)#[tZ[^MeQJ׳|Jt6 ]Eţt_ LҖOmRTL7#o9ZJwp3zZ(((( ()c"q@{K&*s8:>F_ը8R|FgFW̆?r+kn%~gy[ʔ;dUw$-oޣzI:BHjx< ^}w1ܓS!!26;!kP@ڴnV6%KQxiNk|K>Y`L\ 6LR1TܒRyVom t s7/$gsgF@9M35PI&2J'Iz;:]ii)Z@A'N'<'sNVtVLjwf,ZrJIehcC)L̻hE1ͷ%2Bba qREN7}@_nD2qG;U rJMtUwi]}1tufͺ'{K=zGto]J@PqA#LYzQ T%XՌp6D:QDzU*QKUiZג*r}ɿ޵KRag⽝- E99D́)@5ME\Grguʿ-V>79r\8 R|S\Y{V1u^StDaF*k(r~R%359Q 7MYzG\uК.ʒvI$rIHRPS[r.yDۛ9h[;O0H*>[鿅 矡du 44oϖ>:BJQǩJ @?X͎ʈ12chr?wfFOQM>!뤋SQ2C)eʹR3q[˭*n+|JH䚦몗/Kv};Ue̊8FPdBP찴BF<͠Ϯd./_:6Re+?k(IH)H9UW}E&2 wSf52քTE9ʄI)], NȺ˴|\F\PБQH;8j{BsRsńkw]{UmiB.ɴug=[ֻ$u!-#>bm4Ȯ>]eIP?5WQtnt V;!bKf>9%[ tԣ'=-T^J*I4,gh M0Ry:%8ڕ?}A9indJLTu$i*J?pA>&$h|[R} A&W7ޠl& |t HO":9}%Z/]xʌKJAii V \27Ez&]h:pp}D|h{r-vm <['2>c\TjɗArzvH}YQv YPUJ xTmUMEƄ8y/ 继Q៏O?)@]2NMtÕz8@zTQ@QEQEEPPPN"(O^ ݤsqWY\["Ti]Bv,dczy'oaKs=Jq_ T I8=kQTZ&=ZM@J-BpoeƚMys?j;ON5㧜^h}oֲ]C乒7T$ c%=kTj]r}W;es$HSaAM{ HXR⽭QYys&tj:5"#4MIo~[ZYY.RRa¶J y یVf}f0C7P䨥k H#Ϲ5IĴ8ǹeg }C%NG*87`Ս.pR̩7&28B%iOdrqrq\z,֌{$[P6[,oB\ uT//{ΨVp=֓EmlöI D C%Iϐ9Bmx@{JEo *TgƞT* O/7]ܴ֥j@x";zI=†AH5#S5OK:A%+Zs! sĂ?EzMtS$D": .~mW׻v`FFa%)ƛiLr# })>~lmZto<5}ӏ}1˻5 m;ϖB>]ӭ?0ec([j J#y6uOsD*oxl~b?.U'p5 ,um6{ Uzz-WJn+WC^kAIkwStsQ+ePc7f\鎙C뫚G!& 9>BVyFyYQG-RN_ELAu5qQOd]V5ehGSV$ lqmӝxKӽ.{)WR̸wIe^`㋝їݎwRlI$`Tu5vi9K>RI MMUy'ƹ#5\ժ_Gz.d. .jUnKހx'S@RKE@r*EPQ@%]48P7NRAJ#"@ F**8}ƟC8Br>hG=뫺çMNJ6q:0]ZNTJR[W]^E-ɛf)V+%eRA2Hɞzߤ_N2n0 p;s*-1*29VB;*{rI DfK*iǗ H V*%Nnj*o/eF\;Ri:2 -7c *(-Rii]n!C)TȪY-bG Bʕ X?T|p6yO(yTÊ^b2 #fZzgpTtې/%9Sn?}›RGP8RqM EN9)y4GT4ݷT>x19*}_7q폜'#Kc L~3c-^5Htbub 2aY$()K/jIA9'1ެ:Va:3|pesXUЧI'ᗲ0`-$f?Cm]HmW-N":ҒIr3Txȭ}ץLJRY*x%%*W9id9 +n56iydŤ꓾pI7ߜgaЖ]<50u|$X޻RU=Tu=fy´q.T~3V:rfg\;d)ҁ~N&..4ZUjYRy y@Zr0pFG1GGaJ Sm%@c$ gM#qEvPmg$䟰5YPs Kc8L,rm/>i!9)a 4PCdcnxQޢj=#k\91_ŵ=ĔQ4jҔg?>?gΙkMVLv8>uJ+zok109-S'+^ N2qqW & !\Ƞj:ŅG:U>$%|5l)\Km;Fx%M)G4'kc9>WPM"@8Լ’(ZR@@,v( IHPQ@QERHQ@7E,i$@6E$ӵBǥ$T~?jO4A>vSm NҏCOj+X|JĖOpy*u[zrV1ww?f*qǟS8WԵɦy#4IyΥJ;o͏&[RzqVUk!y9اG}#lKNwMsM^H=$)9HB?j\R*5Vb[uZđ,>$nVcZЍɌ䦋 8}8Lspv~'O[[H-Ave*t `!I%\e iU]fE>^뷁ehbU7ծ~鿉)]CzҭCDӳN{BG* P5h:t Jjˊ~/%zPWʓk)R~N ^:lހhW%<P S SqF9 (' U@&T M*((( ((MԪ(`U)(*Q@#n)Uj4A".ޞըP p+VaҔnkg=rWMTϘeR hTҹ悺lP WziC=eCSeY(zRɧ94` lK4F9*0jiTPEQEEPQ@QEQEEPQ@QEQE)A^((껍M(,[W#ހt.}(ǰ(>Bje_jNIp+E'uS&Q RI&EQEEPQ@QEQEEPQ@QEQEEPQ@QEQEEPQ@QEQEFOPQ@QEQEEPQ@QEQEEPQ@QEQEpysiogame-1.30.811/images/brush_m.png0000644000175000017500000001142512201770073016364 0ustar tigertigerPNG  IHDRdftPLTEU,;|a*Lwn(X"my*E^58'S̒#n)oa8Ca8J|/c|/kn7Gs80)wx5Zn9Sp8Zy5d+ QH(+oA# iAKk@SlC9*kDFmI,(~?]7~ǂ>c8wlO xDWvEa'%Ao?vDhD]ޠ7,sLM{L79aV$vK[DeuKa$Ƿ0eW7AqkX gXsNW=';JX#+&Ͻ2,aZ0~Lf7zQHB SBC3?HAe_=taSe5|VYMy~VUOr9Hsb}WfQnTnYbHqdBQvN[Rpe2OWkpf,zg]5hd]]?}h]Lpg;^G^a`^|fKeCc4mGbUc[oqg\iEj;zqNkmjKiWnPukAoYu5wmT|uc~v[rNuwszxJrSsC~tOtJs~|}zyr~n`Ƈ]zP{K Ffj5a2a&3]-Z$m\vιwX/ч{{~{Ͻތ쵞.R2zs ӛ&RRVVVXU3| b'vV b?,}֭R7Am osIH߱0BȩLY~B@z1# 1)R+k[_p%PHm!D@Bjx4HYcY0wHnlm=!/n y[!Sǀ#dXAzƂҵp,l XA~;8yn2ɘ!&aNƾy|N:&aYdc-?2c7c$yX Y'eG7~A~;<[x!~|>b9&ez97cO=Q&S7}.~,=.sAktylUa#k*!hv _G7 ѵV{?Z0L2nֶ'@0=^+}ʨO6Wpzi̾MZ}gvv޿/tv={v0PrWŗn^_+]]}Lb׿˺/]8d/}'ObٳتVWfbnXgOG ?ٓgaju5Tm0XFXhMV-߂v|ljnn656,ՍV+JulX͍uةAj6[L֫W f1:6X-&Do5s fL!BD!ȿbeMfdj6qdբ3kjF>@j2YԊ1J &bFc0- I0,lZuF2ZpMFIu-ʘǠCBdv>bF^Oz譌1^50F#"! D3z11:ƪө&Fcf"?ҋ|-1\dPWkq:*IŘi1=gŌTkDKΜ0Ic43Fވ)/bס2zt:RTZ4z@^ a15"CEZJ0BT~_SbƠi*kzV" 2  #))TdARjkUzGz}9 rC[)׫TZUNAƠHJ+bѪ>iʉHHѩzz :'ԥjx5bjVў8qB@JIT.GDjV\հDA*+*KK*c*+**J+*+7VSWfcΦMTMy' ,%(R2V+CEM/ʘe^^2GQT(7UTd)+s*Iyy$Q*7)RA S)Oa(DRQQNH!]Y$)RibBS(U(RHHDpyPcp iQBT(*b6) -*BDB(,H))+)E1ҔH*BDMɅrH_tT "-$-h)G^ ʥRWYyL$fʓ D)IrSRrI(WH]r9D2We"HRV(L#B:drW YJI@&qHBW$3Be" yRL&L* HеlD"dZB%92HeIII0IRȎD&9ܐV i$T 'HIL(BC%IPpD*AגyZΓC]Bbptp8PkܕDB>K\\\ y q@"v "@80P:gX4'Q,HKLLD@y⠠ I 1H" V$7K L\hQZfcZ䔴4H\1>-223u?Ybd&|cZ"G:FPDIddں"HLԃ8:<蘚:%51w W|}O=+|U"҃<*:I oXjË%'Ó2mW7lHFr6p-&"JW&9$~;M;2?..|8oo8oRy{{qG^>‘#" )gE⼏MQ#G֮]kGώ?;:5kQM kv~kAwR9衿?KgÓiR%yDKwX?5Rю%sy; ?b.eX?.  ilxsAGcc/ `QQVí:EUVEFi]͉^ͩm":DrW#ڡ(@~/b\TTDj}۷*"m>VElQĖ}QnsGɅ(bվhmYe !ŠC0F={6nq{Iٸ*^^^8"RʉzÞ{Bl܋1 $lWX~+k׮]^Z( w!(- F򼨈4"g+Yaa uw>w÷ y{(sݱQ4|3ڷoK(&"ܡ w|s;ܛ;IUf!4sg[h'}A,". >>>}v½ 7ޠn'''TN>Fʠi7M"y$HN>lQ'ܽۇl'{8QωpTE  p9PQvMD<)|y؊mR!⌿a"ÃD\ >3 ʷw?thtg˗,_VclDy σ=.Ӟ7K_AaI ~1KMsܐ,&$#~md7$?1m J`ʹ+|AkVȈfdq+=У/c6ەcWEX=i)ф6B?Ӝ0*8xo:j=5"OHOO{w_b E+Iz DM"ze&~1D j'Hf.TȗMrnï`I߰.@X(iFm%w: Z?;AB6ijLU/898/!caIgeo@ (iEhB)@#9JVlKщޤ#QS\Hn1dEއ=[eYMϐW(5?L{4O9;2^Fa]S/ dHcwx*Y׮Xgl:)QDSC)rAYt&~ HZs@&&E Xe5h =W$JQoU^9)Ac݁+5ZXqχ@~Q|mKe:W#L{?PB]zݖib)vAr׊3O M@<Ԝ&`d#/%^q̋l[{XJ''nK۸ EzsѶqFF4yjp=iUPs.(>#6q̳gVb9Vpc/w@P*;oGT2LjO J:=I4ܻFE3mJ|o0]⏖NsblFQ`y{1[ޑm0[MibZl /Nd>YP 2U| FmuA)r0MZi~+BG\bL_7<!.XH4;lX+r?=1"aNC@=aF8"_B$(n(n_'ez;!VsHmahCgA@upG[5 +R5P*:eT0l3&V_*@#p%a{|@ڸ:xSZ-*sDҞ6VaݧRޝ?Ah .VP>r1%ܛj)x됻g9a[lA 4RxeST@4|[25cξNzNp>gjyn*eT2@@@׽^#V"ll+n[2* ef`n'șP j-V(0ebMOaL lB܌(8o/+3ZM$ >JAI&0Ary$ry#h בA76!rE0d 0&Ž "깹T~~J،#R)EmK2ӴAY@d"ZP{1/"i!kF5D]Օp:#fkGP~'oBPk%;Fˡ E!uiLl`dzFk8FQj6jF&!b1cƣ^0XG^ZY*ٺ>9:X bq2ΌQXrN5B+IZ{g|d8p0P1U}~hnA3-d*-#o#_A^(QU[Z飞]P +2v5~+gND:hO0/赺[w j%;7vVhU=|5 <=Brcc=Fnvmk ɅUƍɶeoSCmL% qE2g>|qil5@̞8Po߁qPwz-N౱ Q2,ŲϏSx> v$(gk*;i$y!]ye ?w?y-mE}g֣܊^$ h6L] tvSoƏG8Gz2+jՍzxbO0@RQmo iECJ};GzK73E׷ܗÝR --7vd(F}7,ݜ_ `S7ĎV!A%y_eee.ƒRPQ1v룣Haj:õ6P p#Z+ ED &)-f^_t'A fO%)ݪQ̾'_+{Pt8g~JKs]ϫ=ªsu}7X±`l2ާ_$sWlcy& .պUbgsFc֬rdDi1|%`yzҹ {K۞ dw|i(oLt֤[uA  *|1%O\4e~v3OvՄJtb$lL6O:'WǪTV(W`6k~';V8~[׆>w<e1C˓ fJʍ =R},wJz_ƘIns y)AʳZZJj}Ȣx'7ʙ0rHK`)^f K[P?hj}m AS?0x'a_eGubM{R,tjaH[@0 ۫3T_^lM ON 1dܙMcQ2Ҍ`o)M2VU'eI;e!_=Aٖ$WT;GRu#ZHPIENDB`pysiogame-1.30.811/images/flag_fi.png0000644000175000017500000000711512201770073016315 0ustar tigertigerPNG  IHDRxxRPLTEacde cdijeklmfn op$kq&lrsztu v#w%x'z){+|-}/~124679:H>J@KABDEOPRSTUWUNVXWYZ[\^dfghijkrsltmnvowpqwxyz{|肮}郯ꄰ䅱凲戳胵鎴㊵ꏵ䐶呷撸瓹蔺閻뚻囼杽瞾蟿bKGDH pHYs B(xtIME 6'Zf IDAThO[})~0ab(IT ~S2R"6 A!R$hHHB`ar)&u{vk>vӇ?9{oL?Q>?R"FH4OH|JXT +NF ߗ榼 |ʯdqYMGm'D""P8{MO4WX*Լm 㵞*N拗o޾ B$ɸ?:7X$!"Vڽ6{ѱ/P8U<;(7:p[ӃW? 1QOFR+sxnϪg>ւ!#"_<(vJ[nMp8#펠-W0tݫC~JG"qD'I8%נP#?E;< Xď?XAψw6^~mIAS1VAݮ '^|'-WGc ֩3eH|tjsps{$88NGD̔ /I&$w{O>`23 j`7[XZY񴽻3&8Cp\dK2IT73 4֛ y_4GepICaE zoNF{O`B!!+{\Cbv]@grx&1G3"w9{z< Lҵ%o5\#H/HV>@[`: i$ L]d*8T_wt}Z3Z7ъઊ*ҬO66eɌM>Znf\btcմA7hPi.VVe.6j T4pl[mWlFfhVt4Z*˹>aטK.TTY.]iqtvvuBut86f˫ӦL^棴/ ZeU_p!]|pcp5OY=*z^\}O Fp OeViꟆ0ԷYN=0iy>^\h|ߘk"fX wj 2-@bb}ؒF*8yI%'̋FX`!۲1.' @qB , ɾbpK(<8{ b}Ҝ\gS 䵍K@!<7FP8p8zMP)',`3>S˚M]&X>BV9сVZR\  %$Tu꽤-1~ 씇* ښR55VE}I)N"&+/if5 s*g_Q`{1R2=߁P,l&vľR={#os]ji +ƸT~ѸЯzhY!a%Wcym2. yY{;I1yv뎲{Z,f XJD?$(Qv>Ͽ9~wkki>ɟ+O%'Bggpힳ^IENDB`pysiogame-1.30.811/images/fr_pepper.png0000644000175000017500000000572612201770073016716 0ustar tigertigerPNG  IHDRLLIPLTEvx~, /g  94      d* G4K   QQ; .$%1J$(Y &  %$^%,-!,*(! & ( -(1!(Y*% (sH iH*k/*#g/d,56E3'6:Z;. 027$ q91$3*L://8&< >n:AFD)y>5u%NM>w J>\5@#G4xfF?{e/J+ UoP@y0GRQI&NLS(N!L$M@=(UIS!R51&Q R)G&A8]]UY#XxuVt;N5baYSWS]Y#G3[-_Jih=:eg]5`%ggd$_Rb/c7g(qpmfj3eEm*dhk:SsJ|x~ukx9[WyA|2}y{vtpL<{XE͋vH˔ٖ{yߚޡ頎ݨ갤൶忿ԨĺǸP~bKGDH pHYs B(xtIME   Ƨ_IDATXíq\g^|fx=d* hv(ԦNҌ)4 Ȭ(-͢6D6ljMv8\VS]7ܺ6>>{ - +{}f-I^}/^_` `F짙TY`eh46ݝ/e CՅ?CUy?}Յ6Ԧ?x&i%MիoѰZ\J<;;ƅS.ٻnݺe_uU-&ŠӔb~ԅ`iz٤(bE(>4ͼOLLܬ8mU%y?U双p& S3֟98{qOTU?K˵2J)U|9%63G#Nbֱ7_}ɟ7=b ћ-P= AQ5XPd,i9ŰѶ_o|+YU22B! Ï8b0<{9E\5i5*FJMKIAMw_x^h¤e _`Mf WabrMjQwąޝ0|>fұUm-nw"0`JF0 MQg 0 / -AF^(ku Fl6)sGBN7~j4/5wyc MKC788<<4aYM'6u懫63`Tc߂=8|Ds&]=C!2S&q#`81:0Xס tn>evmmopWTN Xk n#[0_A+$gRa3p#` 7y8*$ :ٕ:[lu`rĚbEEgùĒ&/p>q]kkceX$\eĸ$2j:Ui0@b5JU~QzWfW%%շZW_2C3A'!Ru{i탻\ f-xc&ba9lGDRA]Z{QW~=P:cn/zVO(,Y§t@%W1*o]χe4%!XFaղZsaŨ!jGV)bIի6l{ajIX&(B2 "ضZ5s1h7&!JшR(ذy[1UEa;63mјdFM2+ XZḃB ,LQpͥEɬ`}=MB r\lCi~\Y`TIPB *v"t^_PĂ%0!N䚿.jX` `jDM`5i?Vo$2Yw5kj\T`~qu&M˖]XlͽWDż=~H,777';[,Z.O :G,0W,RxHt%Y-;;',c{IٲPv]_&jZd-K˷xjd|ofl>xq'c]PڼX,_#gIENDB`pysiogame-1.30.811/images/fr_apple2.png0000644000175000017500000000700212201770073016573 0ustar tigertigerPNG  IHDRLLIPLTE50(4 "  $$ OB +-B:3<6='>A6{[KLF!D6G,E>zbJ`lMDQ+URN@T&]\VUX:VDXH\(\1|t"ZEn+ty a?_Jg1f0h8i+y;fMgSm3m9&kDo-lPs6nWsHw?x1yxsttTu\..~4{K+?y`Ѓ3˃G~`Ɇ>ͅO1Ӆ@Ή5ІWօe̊Q1͍9ˍBنaՊh݅?4Ғ6͓=˓C،cŐݎ`ϓYі8͗MҕT͗Sڒb98ΚA͚H՚4ؔhڐזcќ;ޕ^ۘ_ˡ5Р6С>ޚ[ϡE٠:ߛbͤ?ڢ2\˥FУNբRޜ{ۚũEߠ_۠pߡhƣ[ߥ[ӫEӫM̭Uاsۧnިc۬M_ֱCׯWਆYݯ\ٰfر`ڳP\׷?ַFrVض_ܳsڮ歡mӴ[ܺ`߸mټZ诲ܽM޹tVNi괛߽jXH㸧溒rTUeվzWńiR`rlUˎiN_q˞˸dnT\jga[daGbKGDH pHYs B(xtIME  % IDATX{\lM dU R[P Q Rr 0SAQR(,Ip-@ց,/y9CXib';k{MRW_`/yG~yz^] o e}|SSQQSkԇ3~3v&w)((8pgM^|?~5fik8S؎`efn0;}eUUG?E54hU>&3sMb"z;f+V!l} 65k-&1vWov̘`bsfu3wk8,/6aw8X?:UUU+LMMry —֍ð>:g}iUYYfl ̘L?L1m ᯥtĉ/Z[\i7ᨾ FM3Lf |}EچԒbfϨVPTs3nyLbddl *v`'dWiztYaÊ_l>Nٳ_|)66ɓǁ`mߛdJ>oIX}0-TegVdOeTf$+`Y2`.fr%,l*k 68}0@?+--XdK&{xq=$Ի;vx}Y_ Z+Ӱ%%%ii_|q/0{0x855Xb\kkKKsC [0fl]%R kjk<}~Bqicldټك"Lƒ./056ta-ݘ4mXl2r9^{R$ڍdukZ Zmi^^Z0 x';;3=疮b,PVge響Uk< |^GXz:fad#,?&wcJ;흝:9su:mV`*`2F$;3KW740+.}ϞًmutRuw[tʘ0D`e+&3Zڻ2y{Sg^ۯwvW_VݎRJ$wZں hЈjkHrAD">GXφR4_5C0 9L&9X/nlhAB.i/jFi-b2] &yOEL:=E.]Hh zcd!k`W HQq*n А <<0HA40K„nd/ӤM.=w+k4p:u٪ס0֥#6=7֧4PESiG3WfDbX-[ g#+P5(y0%jv eB۫;$PZR,pXKc?miAw%4dZZ^5m B&ONeϹ^"Yغy,VKBھ'OG6`k-+8-7^Lj/ B_)P0tN[hbo4J*R:*@Rꬸs`kQ2ǣ k=/  S}rG999 "uMF_+&7+OV>NN(tHOwۑ ` de6DC5?xƧx< >‚7 ʼn#%O4>wG?x '1xAo~{Aډ(x\q DׯKյOL5hp7 fdyog:e쩉Ξjkk5޿z8v!'IENDB`pysiogame-1.30.811/images/sheep_herd.png0000644000175000017500000004215612201770073017040 0ustar tigertigerPNG  IHDRXsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxw3mgi \:D 1PPC4`Ę'DlIHĂ$FPcA0t [پyrgva]g_w̙vo=g$!1!7w8hpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q 8p@K(OAAǎ#++l:uD֭N1$!hJ4lذ~?#GrС;w&''L=Ç9|0%%%ȲL=}kgzӇ|F9n3ݻ6SNN)))t!v|@ZZSNeԩ]NK!}Y1`zf(b…O>b͚5'|Rq}iӦ“޽{c=&Ə/  }QQWWwR{EP($?I&cǎ5wuBlݺUE5Z޽{\6IJKKŬYD?/p\t ǎ^x[M.))_"EIo8=ӧ_"OIůk1d{k^ѣb^hE(7x>}z\=zT=Z\s5СC*m&L".rQSS,uhI8 ѣҥK*7,n喨7~7xjG}T}]fiOkFw}]z#)S eׯofE߾}ŗ_~Ui6yŕW^h0***İaիŝw)F%=Պ;vh)q{nyw{]vӦM~eeebȑ⣏>jrgqi{bС!/:,})i9G+s]¶mۘ9s&K.m|SN:pB.rʚ:ІH[TVV6wUN%%%"77W]rBxWĉE0lvX7x#}巿m\uqa#AС ' 7req饗YfI"Ⱦ}:u*6l>u!KJJ7osΡsdgg[eSSS9r%6??-[P^^ΐ!Cغu+k׮ؓ O-"7W_ ̛7_~b."Mƈ#NsodoGrssM^x˗s5wUͩ5 Mz EQċ/('fΜ)mר8s5dŐ!C͛*Mӆ ۷oƍkk|'bؿ^K/?patR1k,1aѵkWѽ{w1ydqwe˖b1|4iR3QfϞMRRӟܥ\}A~ HϓO>ɜ9s뮻+NٵKJJܹ͛3[Cn!=zrϥ^ORRcǎ塇ގ?m2b^~ezѨ>}:r)mӧ3j(5!o?aÆѿ0( B.uIPM6q!.\ȑ#?>;wkҺ6N 1a6oܨ馛X`#Fhs( (,,^ 55ѯQSSÌ3صkƍ#99 G8ۍ,˘$Isao-qyyyyGxOns <O?4O=cǎeɒ%tڵQq7RYYE]D(" 9x ׯr q >VZ Xv-5֭[/B6mعsr|iAX_Mqq1唗SVVFff&]vڵf>3CnioK~2e }Yo8Q,_UVqe  BB!޽{ݻ7˖-cƌ;m۶1c n6\_~%]t/x[- OSSSM7d)üKs=$''vv ޽={ru1m4V\=g}k_T<|x<:ז-[=z4c̘1AjkkyYn:us/SQQ}좹s2k,z5kN~-A_zܹsy衇adddD: ٳg۷o'##UVѱc)'ロ3w><>Ș1chժs`۷3x`y䑨ȑ#yעaڷoO]]K,aҤI'\ǖ"7??PL>ŋ3uTFMJJ @@ @mm-藺:~? 0+rZ`֬YTTT㏟O>$ ,g?:t`ȑܹ B5_%KX~੪`ǎ,Z`0"##$~_rʓ- RXXHOYYcǎ%f8f֭|w :<6l|'< 6͉a?dȐ!3Ǖ3{l&OLee%|>uuuȲ$ITTTǼp \.~aRSSټy35jw܁:Bn`۶mM͂BmۖfϞ͊+B駟qFjjjرp8̮]xwXf }[neٓgSN̝;3gFxbzI]]())#2p /^lӾ}{\.nロVZ?RRRz/RVVoi\8-ҽ{w^yz)E`;TUUcyԛcҥٳՓAѯ_?^yzSOѥKjjjرc>|`01l}1k,B\p>=zrHOOgɒ%=Eq%Or-бcG2228r>{:N #^`̙dggfkv޼y<#ƍc޼yZ*78Ioժb7JJJ(,,СCL|8]v[b!F= @M9q\Fz2|>,'-Aӟz*͚5}2i$iݺ5_= ^t)_ _?e.\o~J.]ꫯfΜ9| B֭;v,}YdYm۶lܸ71#sc&I8&33km( wgqQ;Kekh[n!;;z-SUUŷ~K8fСNfΜəg&MĹsxD% 3((( 55۳pB /Oko-HΦwl߾Aѭ[7#/8z(YYYFرc fmm-z+|'NM6Q9Z/IUUU^}3ЦMFo ;eΝr\ FZZ~oH\K!SLᢋ.⪫rzzB!*++8BU<墮: W_}E]ϪUx9x ;v4tfK6mHMMe eǎL> j~^/Ǐ!C6QDĠA3ϰrJc|3:ψ#X`~?xOOOQ~[KB K,orz~?{ѣdddf$~}>Ȅ (++cƍzInn.,( ߿Z233ѣȲL]]~)+W{M:*.\Ȗ-[x}~;6mDcJx$++_SSS3b$կXA57x-Vm!`Т䐛K޽iݺuax`ܸq G ٻw/9=իW}#0sL֭[Ǟ={\.EO\pWn1=!I,}stM(E$Bݻw_~d|G>Ͽ~C%H1A6mڐm1*}>W_}5/FQ;۷ogذa^oΪUҥ `={6YYYٳ={zj&L@^Yv-;v0R-|>}W]um tؑ /?bqlذ|>^/nd͛NjKH+EenFWb"G1OGXdeeG$6nhlKKK#fog޼y\. Bݺu;5N&N4i7o殻+9x _~9mڵc׮]TTTg1vX6oYgdO5; ո\.JJJ(++]vtرfn3 Y9s&_|g}6Ŭ_<(--5򷲲ի EΧ%B6.ws1{?aЈxGÍ- pG{ AѿOU{vY\%%%lذo˅$Iygi۶-ǎ,0{޽ۈYӥK{=>cYlqדlr1***޽;/nN}*\^͆ 8z(.f{eQhQ&}{ߗKAm%Ki%xלuFfRRW^Q8|ZRRBjj s݌9뮻Mzz:&;;L [ѣ۷P;;#u$''S^^΁ѣIIIXlSLi6ۿ R 믿,X@)(!H $0T-"E V}ݕ<,>|{I;YTUUq3[_4 k6@ 깞$7Yx>?\9ҦM(/L<3ժ~`YYYFgѳ[z!HNNqΝ;ghժ9YIba߾}'ԧGZcMN y[,T]']"LETAxc}oguIF 7of蹃q<1t톟@ ?{pxjeX9vs}KNN& ]ؓt?9yO'%%Pt t֍b#e&7I>W}TWWSQQa||*}2-ܹ.B5 :(aP#~u0VWgEynhGJ9<=ۗ.D$n`lt Į/yFGrr١F$Fe$;BJYHb'`(x<tBqq1֭CQnFmj#Xc#RͿC6&$16mʯs֯ T)BVԾ/2\œey鉞6OWFH;O?<"ƕ4 AE{Vpբ!$g@:bkQ>?9Yt*Ə>ߘ'z)9´iXp!oA3v7̜9sXv-9991 /o;v*,˸nS~ Z-[Ƅ ɡ~^zt?hk;ItR $<o^"T . Uh겈l6S'zZKaY5j5 >TTBaa!]w۷o';;BټkٳMӉYb>v}||ξńa:0f{D“t)Bdɥ@+I•$p'+EBNVTy$a!0(*qlqgZ1?pSroʖ3q:~ c"}#ڹj4e\so9QݱtR/^_Muu$ոnOSf̘(3z!bw䨫ʫYIä"B ӶW2;7' M :%"Đ*=d7^+I '._+ݚB('5.Y !k|fE?~}o,ĈE)(Jȵ=_]{ImErK<&E*+HlBH WRTjeBFZK$I?b!r]Y['}xh EEELBߑL*"i9rmzdڦKuKК>BjCk[O/gܜ GOV҃veڵן*vڅ륶ba2;'!OvY5]+!kF+HܺQY> W;IƝ,%JT[#IVsjI*y\Z)zu[,d> ȶekS9ywJ a\&e3I}!ɪa[ϧzU!PTrT |sǬ,#0._s|$dkulx?qzGÒ7g֭<)zDv˸ {d> O@vɋRIb#Fa|dw $Cea~k¥^CIS$EV%A8qÎP G&I= =Q0`6">d /m NVB0 uAzbߺ=̙4\}f/玊7hoѣG>l I^}U2sT WTTċ/-uVyyyF`uh4rSq.fڭ JElٲ /Ϥ9xSݖFaNHĨ#il&Y"Bua*CV9槶R"_ˀ3q%?x$I5k;n!֒ B|sڶi%dʾ{rzG*кk-+!SU"O o O OBIn IVԀh*IroUJIsJRT (1 #(CQ|^ B~vO9Lɺ+QR݄C"Y9 x,`H#;IAH-G 7!DXA( B ܕKqQC faW$^%֭[o#wrGBM]Uvɤkys8m){i׫ꡪCagx\xd2dOV].ٰ0$9=ZK/Ij$M3P FĐa󟯹{˭k4A=,UfQH \j1Q63dRPԞ"PcAj歑0n|x^=\Pv b o6GY$򒞕ĭBTKrW$\tۊ>iHDeQ-.L١*Pdx4ړ%EEԑm Bj꺶@2#!TDb,xP_`I"f7ο<%_xXUQQYCdDT':T{/+WW"6:BGUVN!P2@mE uUA5aB0B&H񥒓ݙ.9]ڵ+;wE$Q|B>[)g )[Iu檒:v|Q~t4OT o/͍7Mƛ•G򣌙F1 LW Β)u?miԧޔ8~7=)߳Qy?Me,}bx"tQbB6*R5UA5!~pPA )(aAͱT.PY\cNt܍n]ӡCHMM` WWWٲk~ V/ɐK;ʫ= dΝLx4?F[$-{]U$E=*lO}Mk6aVoæ)O ]1cզjTtU1MRǐ"j  B!ANhjCjkz0&P4(*#@;7!5Z >;WӪc ݇ǝMbKm$zlTυBO$-VU:ZOwj=drƐ(RD:xI 1e$8E kz顣h%'2"ȡC8g`&kC2Ǿm(IbHD_ȢX4BA%$ KQPTrD`hKr1$@5+ɒ*54\%pw=HHn=m#n!ElG"ީf'p9N 7=XBV{#1KhC_ueq ]xa\_(;H% y7KO &ȼsƕd{o[w3ii0CvU0"$ I(HZgWQ%n=2ᰂU*D(qBM\WZ'E(a N Q4QjZH.=4撖:Ņh~Fv,R"1EHa%@U.I-4i6d[gMvB &KK.C$oʾuH&)4eK \&EI}d9FLpɪ+bk Y55*"AV{DͰW{9oTuu+2q1Z:I"TbZJy`tM^=TE*%Iɝ@~=3~dгOKHmq"+kLlsG"BQi!J"B"Mtu,A/?<4GM<&BiBh=W*NoFlݡn62UbܞxC ~:0VudB:xf: %qE8}O8"6Z"R;Ɠo1A|5Qn@c+@ETɥk+$s0`m 6VsJ[Kq~LnwD:06/iZi c[ 4DFX1f&Ij̅uR^^^)-A'5[nDl73^ckH|S*13r|{1FZM%ӟf bU"%"oYۯ'KUKh*qw&;luJU $A^yzSoTN!I7,>I΂bf&cۍXՒuj"(&ԩlL,k(jK"l DunVr(D3/֌qO UMA5|޿*kGBFgwj csHl!7]Z\ ET,}V&IZAX7ndklc7$1b&E&>Q"VAm/L;a"[CXLK*;jDY6[86%0ocැ4P T~Җd[q?|I_rW]{R;4UTO0.!b0DxDіl(ڲvXEwIb%ɣc[DAJ4!G>PYo7#GNh=0 9 TطAaDB +EL$vI E)"ic:,#ԈEXDu|rh[Tqk3~~5Ojfłtߦt6@~1ե,-ǁM@L!MT^FF6M u?a!Q$(#=aIrKKaau +3h`:.R_}hlذ:ʔ2ϫ<ꘑv.i$HdVb^jqlh;lJmNSƺM%]%-JĒ"ٿ9浲#\e%PK0fOaĉJ 3 S7of+$2ϫӹ^SVMFBV^EGy~uӋ,G"؈!nwD&dMkHR%m4u. L;>P=LR'+5R'EbLhg&v٫Np9}B d+ew۶GYA2K#6M2*= Ͻk.#ebv(wNoڌXI,"طEFoQd:ɡ@v˄veR;L޽4a S x'SJ;l߾/e+guRZ%?LIDBufhˆxDD/YlmIXa[2EH"1bJ%06U:mnܽ2ʁ I/2f8pÇn6 pQV^'+>b),,udRBR zxëNӺQ*EK b,EЗm=Zi RE#PcD9 X4Z5\(3^92q8\ BFFFhq# {nn-߰TVIDATulUUUdvIR5Hf|xS@}UB"DEԬ("ܻǑ&q !T 5P#>Da*U̘9gLjj iKC'Huuu2ܤwk/p A&n|鮘JVDD[" Nh5+1̪W`LL/J%t}՝~ogy&gyfm>(++3?v'o7#ɐ!)Í'95+=7Å/Å/݅fYJܦN[GmJX?P[_*)\PD 4K!쎝ӝ{rӧzjq^IPRJJJ,"sŅPZZFMU1YvI<2n W6ͫ.M$@0H 2J@B$_[!U:IH\.ڶoCLtJNرq: ( uuu2z}|>O8p 'āpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q 8pA8H $C! āpA8q ?<(IENDB`pysiogame-1.30.811/images/light_b.png0000644000175000017500000000711412201770073016335 0ustar tigertigerPNG  IHDRd(-FsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx{U?½\.W.O$VbC:T(%Ah6iPVؤH!plGf2i,2F "ؿ ;kw7=^߳k fЋܠ%kzQ^BrY+8Dc `V/ogY4 !@~ )p;;OR4Π rpѿGσxÝZhB< ݝ`.~4!8+LTR`u>Fn5rJ!鉓d9B ,S&mBNp S9& `XVKN W l+j@ `Ql ]b-GhX  -<2wπ9n!>¸=Og2Ƃs҂]opH  `vṅ2(6 ;k ũ}uoZLoE#.`=1mNֿx#!k>pY̾fC:ŃYֹ N*~a-;h`W~' i> rv=PnrT(/l*]k2L0+R9YD6`X3gO㫥dDH;[ \5{`kqP r%0ʮ!hV?BZ`&/oyܯ(5t.+;N)~6zУV(uHȪjSi8 [50tq=tT_y LdazOEMKӅa?Bݬ.vw60G㫻<Ҷ!>bCVM F4LH|/o!xuP]I> 7;?Jvox6c}MC,{qb~ 2/tS}f4ځOBcOCC!Qu l{+k/:U`;px .8 ۚ6` uBJmW:~n&]6n)to)i:z'p `4ݻE`\#-dB r=g\3н^Ibd>[  zŨ#!ܘ] JsRfZx1 \GBfܑU3X"()t>`Z6m@BcJ.fu2)`^!_#ݢ)"笃SR?C$QR.4z2Zvz{ ?.Ot(L@רC}4!)"x4U ѨLG.B2)ZҗT=)]uS,:4P BHSػl B:l&)҂R<i(y܏#QAMPZ#DŽ 4N pqHq +yUƷe}$ HMxW1Bb z"LH!ֿ͜s ȯОy)2d =HC[jZ`j]yDpsća35OyXG5@(OUOΛ&8>8>jJBF,C 28g_#EI[<1@RmC6qVU")$ͱ]x}uZ2D؃ft w&~;!!M\h ,-a"< <%:Nf.k*Bӱ]U821 |^_.0Q/S"K)y!@-qEj"\^SuZPWpе.fx:pC];ŞG"sq@< µr^ RB'D&q0W$v9{B%j(Hd}]ԺJ:!2MO+Dq2 "HOT}2ŨZ2ĭ G`pBtf^C#p-nYV:,Q4c8 (ʇD BoekRrNyHANW@Uw@~q'wT$IB.z #IAi_2BeIJȱSPFCӁ>2H;uq C\if;WٍƑu:Jm^FH<7+SGXuY!kuĔ6&GS(eC2(Mb>5l5XnJ]+6ٮC%6/'D^UpBðx<a;鳚)ݫ |it[Ƅx_A4RU:nKռAnvB(BviO6dAR=/AyJ0Gm6LEry{LAʹV.A!cR4R6ra>j_K o+^!|E6feE{f*3 \C BU*Fc!}#FE6@1E?uBu RPyfgHljUm!bshga&*t@Ůy\*v{̣i6e^T+^Ň['ɯ$Itx@1 [ #B;>MAF+M7{u % 4N@xز6"~kt;<7d*Z\կdX$]b(=ϡ2șqfP˺͋O ;pӷ? AYCgX<2U@#P9; **,ҙ@E,Gz j0E(^Xt8Rs0G`H]cNUT&"F`8XJؓ8 Pi HCEid4.z{Uu-Ɓ9Fnlǐ Aw(iiLf>_#J$>r\BQ"T{xψuXd4.\~ p5>$F AqE]E1VY^bz]($B":?BvS'blV)U"TIU Os{OVeIL$htݸ͝e2H8*puu&}g~> މdηnTkIC2b`ʄw10OX^Y*FVM9{?|H{8D-3SsO>{e/HEHlF73?[؎FXK;hFB$قg|/i)3/rٲ4Pd<A*Czg;tOX(qyiv&4;v܂x 6`Y4+m}ޟda9}3j|ӋP;86 =WHz$G{N!_KF,} /ߥq(LD-tǹ{,wḩW%VLL R 8ߧ VYciRԩCO2HK '7X;^O?0uNsDUTTVuvS-ӻo1k17[iSq'1eQm'0ׅ&eQs 2i( TcdL*uVa߲wHRIÄLOۏFLߤ\AZlI5F]L쯻?u'J)`| {.N{wY_=͹5V{qw0ojwYl_,p[]Fu-}2IENDB`pysiogame-1.30.811/images/tube_e.png0000644000175000017500000000531712201770073016173 0ustar tigertigerPNG  IHDRdbKGD̿ pHYs B(xtIME ,q `IDATx՝ˏVk׫z&h $fX@Bb (,Ab& & % @ȣ}Yls'.utU;ڣv79K,֨&?1w:}Qm*_fA}P)h dòqǚ_ @cڀ֎@IP%TZ rl!Z>Kٿr` sQW+mR":rI.~?aߺG_ku|gA&|$GXZumZy sê "7-4Z:JVZuNǑHuyr8F%ہ<2Fb–+UDæLQ5ɲ2\iq*-p*xՑSD/!DUJ (HTL\EI[E:a}fܵDi:Z-;LKP1@ Q(U5D@ c2˪?J,-DK "oJ8ݾv vWu u66dѩzV1 JCId:~ 1+C2Ώ.JR>z$2ȡ"cvD91($uj߼VW,2 "R3yMW2!_`U7=9a7%ipȡq\ۻ(jd<.:\$pDqht@`Qwȩ$lE`Q (Pv_ NүvIªE<$C5׾cyB&B"i$eͬEĵJX-}/-ge`kNJb:iZr^xYtR.")Hk Z ~@VEr(eo%N <uDl?JҤ#1+A%0IJYmսC>(-!1Ǭ} m#y3L.[hb\*rv2H(RrTmɆM=Iз:[.@q6K-))I(bv%D;X.ȵ.:]   A kv"^VA!RW%ktWZĶ/Y1 a֩ʟnX̜DT&~RR.R*M+/P ޕDvmCoE$`WZBic}{(IC$E|H$Ǖ֕_H$uh?#~(m-C1Ȣ8Kb$Z'uՖ" ҫHJkcTo)k!ӦQb}bxT4I \  r%q8ɐ'KA$jA.H,Y}2/rʠȵo,-rRTTT_rQk'?Jba)k`H$ͷpQ* W"] #B"[}b bQ7Zh4 P7SQf,ޛNG3AE^>a˖ [6)LϗLN$$ر>e͖1Fc@y@ X<ǘ%QcsIEORbvذfŊ #xoKK<Ë  av&VLal2 &3fĈyJ`` ~+=&%Q `̳}[.ά:b„1# x /Oz7<͸d&=e "w[֬YrQD7s~Ixbeŭ61"A\dN5f_>/9/[(GJn!B (a1],H=@x3cRea!CB4"n22Ր7-] ,/2%*}Ĉ!)1aCҼηy@RG뢗y*ʎ9 `S.YgGa)z֮Ubz)J>uⶸSP[:#!Pٺnk5؇-o=k7ZxhuO{؏$-:,l@bvgo`Tʢj ZELx{qDQEEZ;1J"S EeV=*mDX1T&RphR)ID((((5JXEZ5OZy *5rd(NOʯ[o8∪*4HʲG8$3Yf"Uxݸx+ak,,ljvnu"T4U #4El _"ʳKBn/-}MД7'}uQJcD 43nm8H A H@'e3M5FܑhWaz靨kmH~/c#9℁Nr}ڲrʰ:ǫ? @4@;de_%^P Vqi+R\lzbWHm0ٿ/א'1rvV}{ҽ Vm 8xf(JWݶ8<'#q`m8jK.,HpdӦؕ[O0׊cAI1f} /@խ} p6T8]O =f׶iI܋>!!K `c 09Q mEQÚ%+ kfG4MZɒb͂ m%l<G[VL>Wx~ы>z-p n2ל +=O1e*$I-r C-VGJ8⥱H%f`ZT:TNTvT^VǕyXZL~VC*y.?~*9)Q5XjM!OyMaVZk$*IDV80i4DR0jDQEDU@K ri3DO!95|2E[+$9Ev}9Uv "ClS--4-k8J@OaPaז.'( O=?r=E*I!9BԁIIN=sldK0}j7bQeF vc!:p ~MH%JSCެψZ~c=uxBA[GKY#[ly%m'r*)I?fW-?o.hyKEE!={3IR7R19V=q6L4OJ:sLhM6 2&,]}<p-Na&Ĭ @mk/ 31ztboj(3UI]di1N/zsڽ-v>ج7]+%i-iyiq HYH$8 (fis j{&7١<뮏1-)G%A8 VRl5 x ~Ad@܈iS_h? 2--X? Ӻ &QޫH .#|ˤrAF-Y\\eSy7abˡiiO6Z[ \؛ ƗԺí)*Ђ3_N*rcYmTN9$~Qde';T3R*I+YQGOnF7/V-eiSKAJʯO5$h݇Էtj lf_Hجh+hUc5;)u-+q:ose~CjQޒ@mKx.cGiOm#*ZHvt~.hu\%/TNBwIri ($4^^pB20G $m箋}M5tzJ-+,g#)H’]3c: ֭^Q\GH !$ਨd{G ^ڟ% J (C(sQ:i#`c߯jf`֋xv}n ҧ͵:KkNR`7j?LK);=Ǔq>@y΅jn]XvzwӓVS-C'q'>[ے ±8+F[h1"##5+Q[oV Q@diȏI r~o5$'CR(zdgt궡YL0sԜ1$gj{7U|0At#pT؋YN7YPv>wm"g5k^ۇI##ӝ;JR])5Tէ-cFZY,g,R}TI'6k\+Q6F={_[Tʃ)3Fe7ɩƻQimֽD#bN rky,C U~(ސ~/֒J"MQDJM+֨>(}"}U|DW짚O"1n+;=9U EG'RHQ}[ GRhQ5n=c[60o}i'g:RcZcd)[,H'IU6Alm 43V}xzwB9o&'WpiQڬʖgN> g;ZCJtO/Gu,#jy)?KRRQ,Zϟz |!9Jc֢U\xh[QLfϜcch4yބSܘ)-qa|n2ۆj~J\4ˤ#\)h@8$jȶQ$OJTI$mm( #M'd7b 6PK[*Y=)J$$ջizgBojcn\o$8Rj!)؅A6HAD.|X=uyV?˜1/K-sIMya6\> a/' 2JJN.2=nmŽ>Tf3lZeH H;JaUtv~-զqI1qeM%İĂ YWrG~m϶jEnG)RgKCEwI9Y$V= y`9e#ZWfvNe)~ gPDnNƣ(z%)a\՟1 6Nq '1ҹ')Vr9LuVre#:[RםPܢI)RI^9)$O h]ӈ[::Hԛ鑛a i-zg'hӺcmMV iJw1%+-DW(V ,a}DSC)lE姽EfMމ)&3lMGZ-Zp' jjXOH#5=֛-#my)Պ͵৮sOjm_ճI&vZy5;ץqgP$%#BqS;wܵ~t RSTEKÓzǬ|u&-rԗ뜥6CoX[@gYZNj =[v3IHKQNTE]7Nw$JZ;)hDWH+"k,ƈ*O ]VE<餬!?,Zåx$$E]7 I~G`VYv1QJQs)8drExVo :BdOjHWh[ORП}.zԐ!'L&_⭛#]jHԆeRH#XٓwBBV pp QPx6pN]'_k.{'2)BWޕMk)V 3Pw$ I'Gp@&-xjκ>UJIRʒۇcouE1<5u?X7Qm,x!ۥHx%I‘N `$)V[xv8 L "9% ם=FꍏzMg^$%_ xQTXONړ^j/੏Odm;{O5`I$j]mGz 7BGd#ԁԒL32aOuyRHn멱 di g}h(*p.yk|XoW}5--h/cHlHP?j}s۵&!p‚CH##Q$p03W$M9rWԒږtSM2`鎛e*M}Tjj>Mf-Q_KjMoGm(mZT*%=OłI<267?Xkꇈ}?i^ L[8-ǒB!(*ZJE5~'^vCmʏ {im #JEaT75-w1*L]pΌx֚?pyQ[R8.d髵IS.␯b#ީ۶F=G{gx7lKAXq>ʜWJ};Aj4-di qS|O51h|IbZv`$v%? *&[U*8qVH$I'کDHq^Pg[MN䴵x-v֜iDn}[EK#hbC*ie*#5g^k3dsHܜ%"$/ 8قx-TtBЮm3g,7yܢ `=("+~hNxk8۲-N!'О٭]>ݧib TTmJ"^{}$[6 HZ[b9Q{ɥdDZ\h}nMI"2!ƛq iiqD));P}kԅ C>Z#9݇ ڴ|kgu c˿0+앶}[?{v~JUoI)#i;>?u<'[1 hzy11\4TGp66(RqNĎYܥ(`KPYdU[Afkx!JpKmIDć=7k28W.OIWr6^q.pV@sA17V X1-$<\\tiyO~i^?4 .]ǭ1ͼ9&K-l-E@@Q]S! hNJ*rropتnBoI[qHɊ؜$RR1*V 2u'/6q\7I9$2I%9ֳ$=X>aI-}yml$r-x +ktKZ=\)(2HFG 8jsQ `2=׸&Mŷi{PZy*\5 Q MQ2mC_X*c)Jv6=d 3p9; [S Vá`lQfW^{f]ѽe)P 'Z[e;..@ B´?뎺{XBܷ^U*ecUd -2`s^n>׶*Gq&ei#[vЩ\ԍR5WWX̶625ݍ4yC=ԥ' SBٞC ]Q]##xb%yJHJޖ˻W]1o6Ը}(Wt$~t>rPlS5).cc-]ݡuI,zHL4> ) % BJRkچ4ei%w\5?KFܛ󯴑8[( q"-K.̎u+L=k3!YN18OGiMtRK6r!OepHBCHܢ-o&L+~oe y䫗qD ' oAsێ+U_P֒^tS:poEs͠%2^vp HPv#KntFGLKmP +{mƀRnc<㫿hE?B3^]C kֲ6TtOt"dQX =5wKu-{m*9ֹ=sk̯bٽPV{4EWCް N-F ;ȎVcWtI!j#@WccvPs:Vom&j+dKNmi9Y:w46-ƸLS(l'ڪ=#CSY1ȼoM22qx5͠.:tv>:s ӌ@R֢!!)I998HR&鋛##,^%w~(\pie _ǔdqJƖik*`Nh~]XEd]F}otX\MJ?̖ԡ\kGϳ;y(n 0!%E(@=0Oηl$ZësXKvWF7\+Y,ę ȷBa %a$fk'2|ɋ3*[?!wZgYSzc4MW[adHyC)XkJRJv+xd+޳k[Mt m;1' A%RpkP.Z53װ&Ak /7O#K:ٳY-1xC<1Ǐ)F}x\=MV^-[Zۙ1|ۣTk< -ʴ*D0SI[\c+59uܧhr+nE+H%-(zsDh [MtHB¸-)T-K *ZN2q+ Ow2"i[.r57^ pA =} 'Lꫬ{}˃CqKb SmJ= `g95%eOYŶX?:X3#lyRO2N); c8$L|uoamVXL&rZ[^V˭4,r> k.tq Lahq9d#HsÞ1m7Iz{qp5)m<œI'l8\(6l2rpH5ann# pg)?"TVMgXYyE CCsuEVlGz%P1& C#RAj"zO鎜ɵy_U4S:jABë%5TCUhZ Fʙ+PiN C Wb9 v/OL}mv&,pkIܵ C j9{<4&߂KBQ]=Yp4$\amt$ mմT@'fOּcW]YDܢĽ1#('*JZRO;wc<5oyŵ ;(<ֵ4N7OVʶCHmAߞWCPFܶQof[tWԩNKjڧCi>k F}qMswjuA+AI[,Gl!4mByڟIVI*$GE/W S";q}̾ 4A)HV I#Z'!߼zq*rv-. $d#ZNqߐoӉ@TGaOzx:Y 'mo7Mӗ NA>ĖZq9~ j 'EخξϑiAHa1@$Upk|]ou̓`lV{% dIZ~%V,maa(#'nw>V^;FnS^cGM<;u[% Hm$%)HHR=R5TY-\-9 [^߅I'h F.޼̄q;kh*p|cÑ /[Ai *#QRAR6n*9M7]z Pe:RS n·(8O$r/]?wo?3Zۮf8 $g>}qFqZ0'S^XM4oCk߯37xn.4 /Gq )$l% RFIWKRYQh][2]6 KiL+{AeՌe%" {-NZAL/q!0fMK˅0|%El~UߛzOXWKlNƆܾP?SQ{R41v[g(:֝c~𳯭dY| ڡ|Kt2 KSG:wC.)j Տ2=V*UP̈RF۽y#EQK"@W{.򋧀=qCءdtqwo6xjUؗ)Xm(~%ߝan3F xҖniDdz$xv[0Ef 6S#m씀JdI.ު.q'EHkA7QWxlҤ_:S'ic\D˷/n=%kM޺ѭTZh[WwO O[zIwZީ[?RV1Ω l #KOzI} 7[9?[nPqZΥjEq̧زwXǵ֬uYToU'&m!wfn#_$ oJ橸!=Rj]&g󼯢RDI [UzޛnW%5V{SS\;ZrFH2|M U>ÉyS,Bs '^ꋟuLOE'er\}\o(lzSR+-ttȐ޻8Hq2z'Mj%1ӭ?gm5i|_BuDTmR$kpuƳD5vV'F3p}*jd;AN/ҷ`5xUTF B'maQ8 :gؓ͛5!LF+ҐrHH'5mzUmjrMJD[s qM2@Hm88*9}3M=rh-ѹ#C݁@8'`TJk.5#͇5 5T5e$6[D6HIqhK{ @V2O[A C֗ZB؃^T̘2y~#t͟-Zm̈\V#*V$xQΡh1>HHOPXNGN] 6 K{m` eEn\B˫yH!q-GV{W*xsDty1%KJmV6B8NR=xqo1ܛ;Z6{DJ)q6Đm*u,){ߓ!{  8!Ӽ(;Sǰ-`{ȶb݇Kߗ-;P_.:w|M`TMUK0NMtS߭P W*ED=hD^x-농6Mݫ$d)UrH'n(:okl;)S~tET  \VZ5@2Fާ7)֛My$R zcq5OeOVO+ķ\d[tVc@\vT$N` `!z]Z"/Shx! T@#bI<'A>Dv5jg|Ћ|u["d34]s_mMHcXk+5)!l ` p;G Ig5wDReNBГ$~=3z .l0e q@|N'<*9V8V@_-1y-? %mN79mfc:D.!{4 HN+jJ[C'J^!loG$):ీG˟k$ 4V=~4_77LjnzxB6.궪6UM}!FLye wuKSy:F.n78)qL0m Y?JBy9K!/6ӷDr#R1[:/4YMIb8ҝ;)[c6:^d\d6갇FO;=~6nZZ\mC)ZAח'374B$1ܷgZd G$qo<%[mJGsDȋIT2_^5n ZRڬI*GQ7gh^1zmz.jN:Lxi<]X}(zʏ*=ϩÂS0B]??+l~Ah e#z㪚MwRFUEʰHޢc> 4"e|^=l`}wx5?Z_D=nZZQi~{c'DDdDԝ[x}2`v 0@*$jΎr3N-, |I]!VȇV[u-=抏܅%++a[Vq2:R{LyQPծ6],d]M%IH\+o=8--g<Fpt-vwq+vd}^RTTXP'$mesLߦ`=9AEk]%Tr}yerD$#As{gQ33jLܓ`ߗy&Y'Ľ#Z;'5`{׫r{Vs$}i\3j+'K DOdMK҈EQMӔ0hBNM(G#8&ȠZoD_#*,LfDwCK iR(}kpkנn.W1;^.KIDJ `G<+h-=63{Q"ÈlYJTG<=sw~i;׫l֤ܵɔR+ $6R2A0u&ƒi (2q F7: Xq>+I#0M-˂]6P[lok\`.TkEl@۶P#Q.*5GN-:ˊ|+伜O Вke[zm6+MG>7ٹtšR SJCcx-QҖCT'v۩zem?9Y\ {cȚhV&Z' R+^ujaЗ1n3vշꎠmCcNӴlJ3 *tN8!°Y=t/ )Yvqhk\JqKږԥ{pA%[[vCGeFR[sn - q5;}l~+}+N_)w>+0QSKTaE`'oGYt5b&;-' A,o7<Js~v\h~lI&KgV*O9b74ڬ>rRpR>1E )Cf=7PF]m>ҷЬwdrk*+K-%c?GG\^A@3P#;9u,/k4JCMz!3lg%,#-mO qn9xPj=!jҬEbnV@Kl쥨2~! k5Nأ8֙bV[BFI u3ǩנmqrwou+J$qN0ڦ#4}{{syzvZ'JXdO4ۮZZ5֗Kq5l%D}e}Ꙥ, aJ)4=hUDK(Fi$DMI#4Ph~tŸh#ڈ, pکDT*Omպ҆kkbQ;mPG@1S,J9$-5r^663v^I$=a2 TۃX/t?jⷲ7'`Wh}8~up88hB%{ַDN-7֜K Es>hO܀6krhVU,5epi*條Bl^֝I8 R:KI{> ]D[vs~>J~2Xg[i'<1Si:j?MR ޼t褕^#3č/TPkc]*{d[N{FvTx p= s9Z-}RGM,rI$z} q\ygV+Jdպ?d<<ڱƂsښ.U=$>tDL(R B} jQPʳDI8Nrh&4IhK0}iTQ0*QDEQDEQDEQDEQDEQD@8Rh'(껍9Ji«DNҷ3E?{ 7aLQDOo*_4D*NIp*ITɢ%)$T(((((((((((((z2}袈(((((((((pysiogame-1.30.811/images/paint_wide_brush.png0000644000175000017500000000314112201770073020247 0ustar tigertigerPNG  IHDRddG>G7O|EJ$T6G8L.UDVt?RL[;fGf\enSgYafheRa[eLsUsnqwlnrtqpM|tn^|ftz{ymvZzz}p~}lbWz͂iw~P񚍚xŀ؈ɏԣΟTեȱóڻ`ݻjǪɜlxւݑXbKGDH pHYs B(xtIME $!g@gIDAThSHpUϗVy3  FKZrZ* x NMݛN/ <&KGHGi#mwDR$hJ^UU,ErY(D)ϫ./D2bm8#bD"D`! RP!aحO"FZH^CqΡbftK8>$W]Egd|HV=DS?~2"AfDČD#2I I"#(V|r;RřoAD3[Hhz-֮R5xI? [[[-//"0]W+^{nVlR( 0ggWr / pR~wT:__Wƃhǻ!e  }*XI_R] o P[ywFFV]jhؠ1 D?{>n)XuDs`pP무|' 3 =}aZ@ӣ_X4[An^ww>J_7{cF1HYUN?|p)'#7{&coדΎ<7^)(4JC%n299>rd dֿ5mث4=IHf(Zxk,K`FyT0{{gtj% TZ@06 h(60IENDB`pysiogame-1.30.811/images/flag_red.png0000644000175000017500000000761012201770073016471 0ustar tigertigerPNG  IHDRxx PLTE $%(#)$*++,,2---353747:8::;?:@;@ABBCCCHDIIHJIKJKPLKMQNRQPRQTRTXUYYYZY[Z]abbccddeehcidijjkkllmpmqnqsrtsuvuwvxwyxzy~ﳵ¿=bKGDH pHYs B(xtIME 5 IDAThK[$$(DZ:ࣣZQT5UXk$BP+j6wkZMe]{srRۚ 5t}w>;_(ӓNN?c'߲x$UpNc_k?֟φ&o>>qVvrݳ}v3%%w~g3qz^㜒ٍ6rc״>XExQdlcWcMLΫ7;/7V %n׃?H\GO`,SՅg+ؤw|J>u;>/ U388nbRma0z4 x闃[Ԙs 3BZXk}[}<?~3<^N/CmFV5rp#? /oggoog{s}uy> X78moml^Ac>L%VUMv$-O^f1[dI.r"OM#^]|,uTi%2s* 6o# N-[ۈu2tpu{Z]\郌sتe*k`O`e&^榞 *d_X%R5?ɐ/0m4xn=(BMӵ3ڨ+k\ {;{4YXy}cP:'Ī.+-Y$=*0vJ9ϒp1ٺ7zjz&<@i*1LMp0XQRJ'˜S# ["2&t$2ψ4/jj|;F?+do[mJ# [SAA;K\(&`5l>d/!a=XuEVFSYgq(Zb-&Zo1C䔥kC>*X4p#2 NcPZ{L]h-/~"|Ćb`RnkVךRE)fj#ey;q~GS`P5Rƈ,b?O{Z+\Ɉ+E {#*Iu/2iK)N7,pؐI1]TdvOHb|Lpy[ _ӃcY](2:& c: R]ҕ 29eweC]du;f"FxL {iz%ҴJRkִZa/J >?<<Uc MVIpEm9q3?K-ؚa/Cs!.aK 5gl+d٨jS(suM-x^(ؖoIRӸz'/9\enrdW<\ ]Vh1gXLW[1Y wUG"~uvbʑ.uf\JpAq^bM[22q0IY9re(`se g%iYo4KS}/bw0Ƭ{k? zW eܗEs ~-.39Ac]弜Ȁ~q&0@ad/,X&VC*aJT555N'q\uO?ž@zMZg^bY[&&j~#vQ>9U W\aA_ootaʨe)3⻥G5c,%í+ G`"GZ_WXv'އwwvv_FYVï+|/h|ӯ|w?dŎdғIENDB`pysiogame-1.30.811/images/info_arrow1.png0000644000175000017500000000765212201770073017162 0ustar tigertigerPNG  IHDR@BsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YIDATxyU՝?޷z4; 1R1Nf2NɨdKI &:hGe\hEd49]땥[eNխ{{{ybѢEY=kR?{izhv07w8vSa9@BP|{l-G@G B/=Xx b^7bB.uJpLo"P6eϢUʔyh37~'@eD= @/U\xUjw@6~V2IP %erS!4?@` Ӥ>} $P<$`ڐ3*ʧ:'> 1_5#>2J` EK6#H݌Jw"4aF^)QQMqN,~h8Hj@!(i~.M؟&o-]w7>Gv>4K(jFձ\]k!2"u{p ([v  Œ,;a Jv8W !@bJ_r\in-p#H #?t, P +VѷS 4F=yC6c"3)s6BQX1(ɪQF҉:"4&BZIV6^ xO]T(4ֶ2ƲCp')pK>̀BH 9J))axPBR$WBDf]8S||#RC@H篠FMRs] 4Rf濙KT@3A׶}%idÅp0rk:cOtb0=~47߭v~}V߇&UO_Χ$I>?ua(-ʳֺVѓܗ}FnhEP76-/~äHIH'P2J'H+v4 ߏE|p蚧yVFʊ;@߳EER(/ ~5f쫨tCv ةFVĐLDۡC"h|D|7 l K|~pL/ (/j1Ab^~&r֒;qlO#}[DZoSTVFr "OF9v<a&-k_#tI3#mwIף\GR;N夌4~_y Yc 8,xwm+]e~x+{ q 2WJf~vmzO<ZrY Ս 8Fu6]6=ޡab"+"!":ѧ{%-kuY_MWq"PHض.uOIth#ʪNeuԑ}% JoKh~^-pN׳uݴ߉^%bwl@H|릆EXb5*?IJ )l'ɶ?͈h>?jH@~ti`_wvEFZ4ȑ?t?ws-/Ux8`oHN)/Ϧ DL%ȹV7=J >SzF@KR 5syp. z.UTK#]cΏ:ޏOtKm)jj _Ȭ'T1\G?B99sx!|˽MLxsjSo| +q-G?1 b@{O䤄Hʋfo#<;z>͇?:!Dp@.yw9Ok~6dgNq}X%5AF6(h9Hk9-"y9wF`ADUx4F$TgȭׁVNe;,ZJݸҿA =s$g5uysiԢz%B`W|8l"9܆?Cz/_Ӈ?aw?u_֬G/s6J Ogwp$ ?rv_5ZIK]|@_M!x76-I$:ضA귾q}*g^ɟAШzW|ty+.5bUbߛ_rSR'%s8l_gş/bAnj=~Os} !4 c(C Y\(۪*i)A4풰~IENDB`pysiogame-1.30.811/images/b8.png0000644000175000017500000001130012201770073015226 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ AshtonIDATxkegY>έ3mBKK -(*QJB44jx`DcLF1HAE`+[z!-a)̙sk}?rۏ/{yr 13_jОPׄq'3ATBp_\yι|G,me;ekB z U D!Ԁ2~*Sq/b[k6S#Ɗ\͹UH Atˊ('d'ZE[VkGyCbpa%_Z1w~ v5#F`ԽJ(rKe\+K\s[ jg|9vgp4b5~O`)RQ p#7Xq ў2T3'GZ:g=[T9y0Zq 5^2`qN#!A Bq3@j@jt+F{Z9vG-)쿾BM14Dž7 XHK pA bALˑ![6ړ7Z־٢r/eӿwge0?_XSE( AuPLlg;"9 C5.t=-˛y~$O1a8gˆH7PLՂjdh#B0dA@*b-<1/yMٻ;u8! D(N !EP5{2a lBWABdo5b!?n}e6/4{f@UW, ȓ38#>* J`,ʹ9`W-!_4m#|_ 5f׍nex8k `Z[1X[ov9>O ]ΫIjf l } &V5DN?vF\Ii\7-t'5~N^CSscd :r$u\F4f+4GЙ'R U!M 7H*S Cd54]A4Ya>F|ڸwǼg|oWBM A^rE )X"n,Tf cQWFqV)l B1KB=<,6?8vEu䱏%t)CW +b`baVu怠 tQ8kbU)Jb3uٻ &ܕg20C~xciG 1iCS)l( usϔ &Mӳm> ckA PnM9ٕ 3 )TCqfp lP+l+ߑ+O* RP* %J6OK`N(nlO`$32^=ɭi D"!R~-^.afhR,yL߲jC*@d)yXN/l/Or 33aL1 ӅMM@ĻbH9qK)_:[]鄩A Q0h}-ͳc b5AJbrD ܠfC;#º+4irdBUKgH+2WZ1Dw^!5 >P]z[9+cE*8լe7OCФӝS;բ+"*hPjQ* !V;*q? qߨ@K1CtDZ&wFVg'dP?|̂ya(A$[Q.Ać~*CjAjde5PjS)Bju ^dDzc.L{3xe\CJ3n b 0`zH]Ɨ`[`Ԅِo%A83>p˨ 59+ (]qЈn-dQJz"5Ӧid.Ee<.jvS1P" ՘)YsM!b^yc }~G-S&Jx[|º9l[sq+gt*t. 鰛 A/~ x򚸞+E h, ;ܪ+P_T- B CK]XQ]=1`lluS7!SR,۴45/}0Vfoǩ箻T)) Im be{Fdu+`2]T|3ҡf ` _VX$>]VtЈ#Vշ\ eV9r4Rjv9 %T=4U4g:;e,4q3VYH5 Z h}# VI^ȆdTRd ԃK2[g>>t鸒B&h(-(ˆ䚐"ƴ#UCAx"PiHHC'(x&,ASn="(6g;ܜ1uZ꜔eRgh)R&w5EH( yv7LX$J~hYlԢ9cLy;Y6߿zыM7'#%S,9К3ݪЧ09pJ?gٰ,t!i²A46^)VC巜jBBrʅkklЙ0(> )K 򒨥4ҺZgR7{)eϵjZn9*frX'&M2StdΨgqwbJo0Q6yfhsC-9kh|7EM# mkc[C%O Lj tǑҭDo5f&4MkܺPQX,plfMY84GJnMVRrIѭ)i^cmuʘdqPv2i'혶erxUN˦7Ԁ5B7Ɖnƙ46Ĵqw좚- gmG?,Z0*И-ө&<ol7E"}bmZ\O?׺uD*5޶ j(QUCPS"?zǾ-c[t"5Gox#{R1VXPUr2,0n{"8E [cߍ~oȈOg>CC}?qA΋[ ݷSc'_q3 Oд 8x%}r;:&;@gyî<.$oIe9}T|OnHP(`K~}O}G9Rǣǿy ۽3eG2-{O}8~ԗ^ lnȎp[qv퍸gi͒< K~ wX  ^s{5g `/ݳcp᫶{%*;>_^e{^??ݫ9X |w^e? \^w'|`(vX^_~;Yv,nnj ÿ_8lÇOl"\0mJUV>ig IENDB`pysiogame-1.30.811/images/b9.png0000644000175000017500000001122112201770073015231 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ AshtonIDATxkmWUcε@qh**)4Q:K6p%łP+Lo`+$R1yz"8/nr·Y+ .__BQHkI%#I<)s(>t0Jf}|Ux' /Q1(+W)Aor AK>[s(. @ 5 J2XK_rߩ,ɇߢtbF ۚl`bSYg K&]:f_hrx|wUE=<p&lƼ8=N2 MqzG>FRyk8_3V\V(v\ ާz , S:{ 4P\^ T;*4$m :wĈ+V`k/{ /t%W8zu#X9s柍sPŀ栵@0L G+p)9oWuid$#K9_'4|bfd$ʜɱb{:͂nïċ l6Pis8ż҅+cM*ht xZusZ; vx< )Xf xi#\Y_z.bN@[)` JfdZ3Scʮ,ib_?>:]۞{}t@J\ :#3H>qV}" \Ql>7j!3.9Zq4vCR|[|U%ojuD93@8{]P6c{״JIvrf 9v/# lX 4Bf_[zpr9ge'ov>1]9e߽޿cRbIMM=%P, 쿑C5l23輞Gw#샘;(6M?RamCOVL10<YΒN.8֩xYa:91Xq.oq㾶#"b P e)R^ Ҡb su]3*:yPQlx׶SaD-cZAR\uCdU::JA [SL nqށxB>Pc?YbEDSsGJ(`QMab)oV <قB 9',**nv˵ĺE T(ýnd[P3D#&n$2SR) mf;>"4`F7VXD v+tҍP_7ݚSD u&6( .9cgXRM/6$YU60{q63չ㚽$d G `woj11F,&]G- IAzOT6.A6c}]נX1jK6!1Bshy6t *;ɫ͇t ѰHL-DJ7]~{ o=TAԁ eG. edW@vʴhJHNBjW$:(4"ek03 8+Q)ئT+ZbPBR 1FΫ%[hy.к wUkIߵ 4ņ3oЄ-Ua7nׅx/dۀ%%BD\1b12Xj{ $BjƬʩ0a%?rQ{]2p\xMIdBH{4뎨bsIH8D'EefYP&VG4jI}o W^D1 jDEZu ԉN@jYV,h5'@s$-&˳:4N1g b!\ܘXhb4q@*b5,bB"SM92 P&1/*0j?) mW3:J -a4}!kꀎF[&;c&c1;89)jʴ2i&L Ml1BZ*ꋪRsqs ҿnF:@Zh0 IC4$v:ĝ0ikATֈ!@ gq!ǟJW!]L zq!iL:I @ 8;-q'#q;&NZXԓI=%m건ٓl^4b@5RP0oOw=}< E%k(rX|83\ I!$0ݞu՚HqEdʴ) IL42t\603|E]!]Ñ{7y.FOspm/"yn&*ڒ5&MF$6+ᗌcųԘ\m y\L*隀x"&Je(CD'݃iȨ^EɀO1{o_l0OYfL+.?(ʺV_|9T˺@<{8P3'p5:>mײuK`'?=sSWAKruWq_[.'۔pb“|?r;\yeށxh,wg't G<O׆遗RR{ pmgOr(_=[\߫;GE}ɇ3 /g|gGGsٸ"6-r_UdyX?q$Me-,/"-yO_rɉ+K/<~rzN9~~/C˹嵁? ow$oY^HXz`lԍsdy|dK, m5#~[:N~|4|s "nرSo+?{!lpرST IENDB`pysiogame-1.30.811/images/info_k_up1.png0000644000175000017500000000354512201770073016763 0ustar tigertigerPNG  IHDR##ٳYsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YUIDATXߏ^E?swv-4Pth1@HIP/ 5&^T7r5Qј1---㜙b~9bL|̙|4T/éJK`$2uAW 8"/D:#3Ǿc_`phBdZ5 *${fgUt;WZg,ҽy#v3G_`p@9x'ȡ}v-3ƀbIy& >mݠo71zjbSՀɗ9osZº1 _ :( {.D6/yEJP(ҽAyU>{U≓C ^ ?~̑|23D!+@C|\ؚNM >ܝ)/Fk0/ZƮc;3ڽ>u'1hs܍1 Z>:Ymڽ:){,`2+k7 *٢9D#h6~ Ō0E#Ť[i1N*B%ͱ}b6)jDVt 16:S[M,6,'`L㏷[,όY[:d021Vc`11`L*cJ|XxjC6eF=CSwjѕ梳ڡiT?'翕{/u5Ks IENDB`pysiogame-1.30.811/images/b3.png0000644000175000017500000001062712201770073015234 0ustar tigertigerPNG  IHDRPN͑FsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ AshtonIDATxdgU?y]BO !H, !&P  M4A5!j$McvMZhh#Z~([39?sgf4y1$73̝|>t#n(OOϜ9/ffTv@ƒ%ƗXWABdPp׻@+ݿaz7CT ,@Z [P6ށal!VlbK9 ,ob;K _l*ȱ=g@E/i?R!~aAz4?.maƽcОhOc~p{V? d0sqP} ac)|/ v3I X 4?yԱߟ(L道X!u]yv:z"Npw@{-凉</uyo`7,3%uQ9V¶KYX`6,eV8܋ P>.H#NCX`B4 aY*z!HlH(bìS!V[9JHd&#%dJPvRnͲhi U݈bY`j4ڌ%덢;3WmZ0Ui0UpDgAv^Ojt4D[ڝ́2E 9Am5b5Hf2$ӧnf%wś2w<OSµe7'^hX-NMd5 EhXl_Y0(iYoxX9lNƥo\^5Rzy]tDz;HI]B4a9rjrjC@3b7,bǎnJ =)6VcV*K \Z|SušiGj[ry uhn.SHֹJc``B;f4'uT3 }J\>)E%w mȩ!uSrגՆv:AŴCd>#D$&4Ѷ+_jRm>,XVp29Yr5iʘoDLT#SC ln,LRhvZT39'W_1ȥg! 'x\^|/}{jBڈY$ XإϥcPEA;2vL;oJʘ(dS͈A7[9qp-'^> UHAaA鼩!C5hjL&XnthLN a0a|/=٭/&j 4 T%Q2C$ 2mڥk8`)!9a%޹)䨆ѡRuv׫_7<o!B)FP'\/n{0ElZxaRJhȈq7ڻy?٥5U)SQ"( }aN}hJE\`غH}blv>ʗO0m5 HTb@A2j- h)1c[jĞ/wr $RR#BU !p &PF< l0$R2F\s˧}۱~FuM|k[*$MEK"1P50 >k}τuy=UbTHlH|U<~n|B%JN=Q{gwgJ´ G ^/c43Dac q{¡֞h/}NK&%vx$@RܵPGcTCnzGnz߾}-Cw}.d`zGPG!78?a =5>Ͻ _v&ƥ 5]lZÑpl 9j}]S~跹7w9xj8O?9gU%{O.08|5rϹ?NiؑWsKimu+) o_ī_.X]}z;v/v8knݰs~Tឦwz{1T˨޻ ^[xUp{%ߖ3 ãoK> -/ݟA< Opi};Yg`m``i|lg5>T~e߫iwezQ>s~/;A83CѻOIENDB`pysiogame-1.30.811/images/congratsx.jpg0000644000175000017500000004434712201770073016742 0ustar tigertigerJFIFYYC      C  3" E!1AQa"2q #Bb3Rrs$CcS4!1AQaq"2#B ?z(((((MR^VUJ6vVUh`S  7U6wam4DߚN`U()ʦ"IQEQEQEQEQEQEQEQEQ@]P*RsDHӡPOaDLW)kYϵ+>ҲNv,gk*#Jqڈ壟zIlV\ME(VQLS*kE(E_)>i" :sM"AS=4QEQEQEQEQEQE=fDET M<y(#?j"i sWHdmVAEbFQ{qY҈}"vTA`(r|S*}f'5j\v(jw0vǥEjH|gǸ=(L)[XEEcRTaI$H)$zh"("("("*d)``Qjd=i&IBr~*(YVZ( VYq7n+;'n(Ř}3 =ec>-暹ݡ[pe) ~Df@&Х[FS~ky% u*5LhAF2m4Yධ$U ub5So#nH]ëP5I?kyV [JB@'e9\>Y9:ǫ? @4@;de_%^P Vqi+R\lzbWHm0ٿ/א'g`50= q\zKiEٍ+ʚ[)aJJ}3jkSt]/cm;1419JAQ aл{Bhj^vw C ǮTR})'cb,@Kݖs'o];]:K{y.i%)mC)>g"m::g^؛kT ~vT2RwA)9 m<'bÎMe,UIq) [+8\AT]X =rZl2?j1񏳕\}9Z[uJZOE4Q씯mpyNF*p6Ԗ\YM*)T`5+e# LC7=HM]}m +KGrg9 x]Q63OdzM~Y XOo l' ̎B!nP5Z9:|Drᙫoֲdص`hv8@ [zVՓbzu`j*w~[L@4;cc85Н3ܻڑ-Sd3%kQ(/ilQ/vIYiQ;ZPj ;bZD||ΐ}Ciʈi}Q]\kJVU!C?qZ?-ෝ'rRI5^`!~U19n 5~%v*7g rxr=S(o 8GG]M)TXK,AĨC8kwⱎ#ԚC\+ |P ժY'VjOz"8I&誑T"("5JXDU)Oq"y ɫ摒*ݴY&QȢ+YvcȩVExJL'T@rnHC?UٰqFܲk v)݋!l83(QIohZL,#W~͹w~PYQRBʇŶ=6c`=]-zHܒjF'-AuMuД)' @TG-v?Md.)vT?FqOV-cFőS6wсrJR1J7de9Wޑ- גxup̾PI;a 9I&ڌU)$m{{hoquFH$ -㇫4׆ӫc*ڸ4 # Iw8>,͏ߊ[Ɯ?/Zy`XnJ?Y (Va56oDSD{.:JF>*#JHXm5[; 8cIya=Aeϟlta䶡Ph-ZNOqr+|+Iҋwn&Q C'q`gnH#8' )$SBx-} ]뛠8}JܯZ4dL*"7ˏK!DZ߮2ұSfjq,I?D Π OHttkRCOa$$*TjqrLJd  q)PJFcWuݫl^_Ӷ86-D%9O;@}csBEx)*q^ƶ:g-EXmFIJ5]5.Vt`ȶmy+%Ǫva{_rKb@p/0 ^K67K˳k+-CV,%cO֦) g6tel[d@62P B$mۖk%3#8F}(?y?ZB]f%dsm8c8}'yGVLWYQ\{&᤬>'[9ڤGP(kyMgAº稾 :~Η:An%eI7'iʕg[]1r#`&J_wLɗv{PQ(ChZRG{֪"kzۊ뎛+LVXs? 5вS`hlB/])!1 pj+5X 5ME&#Tj;Jb9J; jI)=m9 qxlk!$S^hk/Q# O'Ct)͜goA%mRRR-?ΠcDgFꂜ;C.+ݗ$} d,-W>jC7I˕}?ٜ]P2 F t a~@q!)*@+lynmieJJ€R%C'BnqneBV.),V`H2@$e9/]wN s'konv:#y";Ro3Fo!$+$zeqVː:kCNIY4ti[%)ĔvJ<!_)D䄞x`)c/"Ke*/-=+5=nIOy1wcd5AkK∴ikD%%c-?5#ꨌgçZn<:tkO\纟6mڿ}gI&vZy5;ץqGP$%#!8nZ܌?]:R^m)TEKÓzǬ}u&-rԗ뜥6CoX[@gYZNj =[v3IHKQNTE]7Nw$JZ;)hDWH+",Έ*O ]VE<餬!?k@j#DDȑwr2$:A8{V(H1:VGa_0 I'$X[N\%fӯ&DTv셸% MIp֤ ?Ja05lu/5"RXuPI# ʭcfM Z^%¡·$(<~"O,l<^٬]=ARIHY+ޕMk)V 3Pw$ I'Gp@&-xjκ>UJIRʒۇcouE1<5u?X7Qm,x!ۥHx%I‘N `$)V[xxsU~{ |wQILĄ}o?{yӬuךƣ*c!Gd${q:#RkWu[QާH9u eБ pI[?FX,7o*@W┌Tu6!Z!nw瞛x^ޫ !Dy+Wr+."ZGJ-,p[eU,=讘@.Ej5 <(>XX04Qznsഓdt^7"]ȫ 5w\c.Rхk Ry&6f[h 5HvSYa:ЉOFӋbC J]la'i8CLem<{b)NhøZ[ˊb/׈qNdvQ涟G|ޟk:QKoQ_8qb;,%N)'$]fZ@Iſ*+rIHSM > ǥou, Eɷ+C᯹^}k }P+њiteWryHSD5|%KIVv@o<ڿt[QcP[m! `;)Ux*vMZuC.~ 8x/0d^56T|iԶ~/ (uzjrRq˽8+fEFݣGzgx7lKAXq>ʜWJ};Aj4-di qS|O51(|IV1-vrmذ; *8I5RIWjtZw rSm$*4Ey)$V*_Yu5--9g8Yj"FDŽ]7f:߬jt84%@-d$d`wϫ&k^M#s-H\ID_+SK)P:^x$ާ霫%F)8q'yxQǥym⣢uGKih*f?sKNR>l({ 0t[=nSw?mbr 195J"V>ѻܛFdDe2Cm6RRv=)!m J v}7]7p*Fr;i)8=e6Gm.vŠ$VlFwm)V5j)&H4:!hpnEͩ i;ЩD|e'HR% %JS-WaoKu])Õ-${dzݯLO@j%^P=%_I"8MywGm{Z8 MTA@PRL]A;Z뎟/)|!]]\X&/홷$q #kw|Zd+2:w<\$ aԮKq֕C!I9Xn,LE+r2R=@'q[gwc̏-^;dJf,sa)$ ԛ-Q1"2]^^t 'Oc90# &Ā:((~UMy]C/?=3 :1":Q $+e#w`_7ˤ&a]gBguO $ O}1PO4JZf#{V>|GSK@g0b.9wTY=i% eT:Biٍ~Vr8.({A\?zS/7n,N:| ԝxr&M9n{) K -_mN[~ nkxE,&@$c+=5)Y@mdXU[tZfu^[hܦ.)v)gj_߻t)]TI!ck|ޡgw!g%- a֪= m⭨f?\ӛ. $Z^W?u/X<;j&_oa uqөYBIn vpq8]MY.LKfjaq-.KͨoyJF>hd Xu3 yt;vL+A‚2Jo`[!-*h?)?μv/}z@HJG`@r{Ztnm‹( ǠQQ]=`R*-˧|Vҧ5&SLs葓3N;R;Ќ{@r&7 \L !ҵ`{MtErmm(DF􆑁s$/U/A+[d+i?u (ryҼ\gZ+*)~4fui{Uje ;n+|:uQO~d[댹6GR>Ym@ p82;׃s)3|iO}? wLR̒[Yɏ 1JG1eu'~jls޼V =q_{$K̨߬.م-RRR8RIqIa9#2 .Mҏѩ2_۞GވӀ9uH)l5J77( %$xSo+~S*UIvtP^q2yQRiTpY!o= y2N;,zwRG-~7zo[:z3 ;_O[>LVej`Pt6P +֦/:;x,P-ERF̂Npt41bZiI$NM[c$~>=Hc5qR.Fq拈K^h ן7 2ѯ,M+fҾr#RT}{ǪNvK0 7,2 /$=j"W{J(KU %$*=X[x\,4OB/z(;)*y1IUNQ֖*Lt埮M;TOs9xBثq~NkiQs֤K>7.P% 渍B1'rp9P%>ߚgaS|.kVH[v!%'ADӳ}V<;1w-Q;Tl)J؀3Y9nz{Zȴ|B{0F{uXlMշQcMeGX$m*8lwKUO϶lq,L ,ћae-n,d$rI7i kSiP\Iӂ_l]L g.M֏=b^ǛJPOҐ3qGtYuP5f VKkqnVs @'jB[X+$^4u\NV{ah)?_0w=ӫfn0^x)QdD[d8R w b-.^uk>ȻFL]$9 n)JܒAIpgthG9딝\J~4Id:ڣkk- DJrXHlSI@!>xm:fȐ›FґCǧJQ,1z@]␥6$}jĻzIwTVQ$ݩi%'Fϖi?HOCu>K>m]$VFT## Z{WBkO W-:m)RdG~)ZZ@H9kF.t'ΧMK l $aDY!\qVj lgjV=v^xyk)mT[}-_Go=kϣ1,}ql]sv[n1 gҔ6'?IY8 uP2W9 ƐUwkaǾR5$Zd%#/C^8\;ʉ%g\; m+ugROI kU]55HiZKeiJ'ghܞ=IV=Ȱ^'U~݃MȶֱnM'ԅ(3{~~V&aR*w'RP H)rrMmS*k^ߥIHNA䍒]eÊÊEqĩ0{ʼn#vu}\K( H*'P(cm-B)Բn0#vE)~# *=Xk nat¼}xy95MƱZ>G]_na؍ϓW :IXuni]zJٞRd Cˣʕ Cӧʴ_v@O]y.!z)oa,ڱx.)8 iB R]VlOᷯ eM%Tq.ÿ=rUWOӴpe(RJX]߳԰r_Cp}mb%]-PU:Gr@.h DbY٢%W*5:lg_Z1Ȳ>*j---Nu Z3dz5Z*Tޡq2)+*=z"F("E"J"]Oza."Bzm>4s/2RۈP%ߚ".ޱwZFfψgc(8i%; n,W[-۸mXwriՇ^@hFߥG$2OՌ3y?~u^z]OZuo=Ђ娜Ǩ;?Z43*DBCwٱHRџ4Í.A ߕYi}1;bDXM%,!I RTHN: .E!ݲs;ssfSL].6HCKĆЅO‡&2ԈHyPn$)+I Z8 9gC.m3prZEդnJ$qCzFrF2ZN [;ieSGlM s~Įjr[[C5&mxm};J'$rIWzėWt,BښޠJԣ2@q?jhj1HxoeOd ;w`'$?+nOh^EP V[+V! vq 8%$d O$vK+ZcZ~Nj"%n8$jڥI$~mgE٬kԬ(:O`gq8'$U1?ͩNxSDu 8j喐͌66)(rA>n{ F >Dp6sjB\ҐrHH'5oNpӶ%_$EH^YZ g$6WjNk9^Ly}e#w`zIXE4Sk.5#5Z 5T5e$6}[C.HIqhKaI +'涚YC.6%I9 <UZĖjՍOmmdGBⰗ% 6FT0Ir3x-ESc7߅lF;CA;i{uՖkjlNiCC j 4ޤsJN~Ե$9uҹ!69sڊ fsn-C))H8QBn2_eѰcHLku՟|$'j {~d~Uݠc`TV,Bqzh!I? jONh?5it)M uS JG4>gv=gIZ\}MtJ ɗPYR&B-gNA(t,`7筴?ETq6xKi-auYڂp'ӿ[kjX)rke-ZjUTU2($QE$J"o\4nm.X%3!M3A8?xE:_QN+^ N?"g΅WYO`խxWM@gx R h~u5_4zcr 3^0ld++|KӫEDm1sa-X[q9iQʷ|d eYoHǒQQVt#pJA+ffS4['Aq ٠\G:cm*un:sWl;=+Axe0hS92ZIC8 U>4_77LnzxB6PG`S^u[Ut^K>#&< NՎFOpT?ӼEl7?x6 ,%!IO_uT{SE{ÂS0B]?>l~Ahe#z㪚MwRFUEʰHޢc> 4"e|^=l`~;ռ5?Z_D=nZZQi~{c'DDdDԝ[x}2`v ~@*$jyfP2J%t["FKqYnBԴ{*roZ.8K/ 2ӸmG'%@`VW=4vnָQ ;"h!!JJGX!^`嵷T<ҙ%,s\UzܷZ,3pW:BdlR!*9{irl3*kcw[`.O!̮?qJQmJ %-#s*9?UcܖOo,,77Ygg<5rժW+|չs'=N A_Ep4UVM/w4DVM9}(TQE9H#O*҈Ȥzdꪅ5'BpM\GiIiamVG jϽTWA /X<6zz`~-$X*(3p^Z@hF債`򐮟vDH DK!e)RrN2Fk8uI^:YF|^Zkv9&ShKiK(IH«WK<KET0Hwդ+gJ4aA$Xju7s. Ί+wkOoچdd}{ld{jYk\`.UkEl@۶P#]MenY+nQ4uyv;4*Wmy9JzMl_RzڥC-#}OSJR=JsVÞ |A YRwB٧=GDˎqP9`Zl cJ`D91FZ? OYo'kw֗aBk d,Շ dOKSx,(dţ鮃sZ  BQ^5ζ9uwۍm``- G~\Nu^^Nr nfFf?Rf;k(É%zV]0ME`'oSt5b&;-' A,o@oi#O!))iqC$r.yZ%>NsS:^niY|+' J '}*b-V6{n}oiX41*TVZKaGG/Fv\^61@*shp3U=X.c3<)Vhwi\1m䥄eᲮ>8j=I.~U;mX- mݔBFO35zN,gK3/Z\G TX'q҂>kMm[{QO ^薘3;s+j$q^0ڦ#4||Vq 7Im?(( fQU4EJ)[~h%QEEBmQDHSQFFU"@N)Uj4DN N|Q{Ӡ 8DWaT_ȫ0)AϚ"ǥSp_0?(ԮϙƐ\%Tҹ %] Jl>DH Nrh&UpNsDH5Z^VUJU"("("("("("(*E9E7Uh̚VMn\z"t.|S4QǰxDT+暢⓸r=(RwU2hDI$("("("("("("("("("("("("("(#'ތz("("("("("("("("("(/pysiogame-1.30.811/images/fr_strawberry.png0000644000175000017500000000534212201770073017621 0ustar tigertigerPNG  IHDRLLIPLTE "+!# %&y/'! # # %""#%(+1%+0*-B32wH"7"A.|F?5#3 8!:%?/5'3;,:)5%tT9$~Q;B.I?~PKPA>)<,;)I@C2G6L@N&E/C2L;hg7I;H8^UN5N;VNM9f4R;LgEi8g[`Q[f${Mf-i52hUeVm0dY{xkIiXl7`r*at'nCj\{ws!g t1t@p_yHu:rfwHXviz5Vy(xRy^n|pxi1߁C{qςs)߅,v߁WɅ{ӊ2F9t݄wi#݆n{K2w~It;"z6nؕV茁L77%ș蓅|}I  9i` ^晩'& ]_йoz1tiGvt BCal^I :6 SscdBhPI;?1:<4V+76zJoE & ZL&dv2, 4vŠ bзST@[cƹd Ҋdh4X@ Ϧ0,& NLٴMz"ˤoo7O<>vazJ 0%@)o ;7@ vnBJQT*?r8Ʌ 'GߧJorN[hRVov8^!ޝB~w#+ИڇWl.c@+pkWݱ [z sիTڽ:lOmwI-Ȟ].'?vԮPkEnڶjjUڶN.7W΍F~S))][ss}FkG>6l$w|pCpٍ?βkSVP$N4O!wINJ,NqݼY A+Ku.h2Y\Cg x&0'wzl J7ӏk)j{}vsÅcTMD=ńSZhڗvGkᕩ3z2܊PJI SsT`_IstZ+Jg9.ݵb>rxh ́͐yl~S& qR9J$]vO- bvc#C4' %ZY¯&bQ9TN'GHA<ֆ LxWW!դdtbZz*!%>]/WS.fLAK;X=/pSx ;D~ wt81p!\&pyowi_qMhĉ2F ]Û1zu|%Xe8Q%1w260,չXL,*k_곏sa}_le^,48amAY14ڌ`(>~ 0qZAu> J^RCU]VujEgvs=.q#^讓&khՙǹI1Oq lҦV5o}%)F^ざ-Yvݓ7##l9Iq$ ֶЬq6,ݨ9ߵ) y4"F T3е];$k \ hՅl.4 a>I k!ȊK tCi! {kٳ 0 Z8->gd,swg] ='T,Y~mK=Y ěXg0д5n eD"|pА `= ۧü%DV}Wa?﨨xxWWr+Ng!3r4IENDB`pysiogame-1.30.811/images/info_lvls2.png0000644000175000017500000000442612201770073017005 0ustar tigertigerPNG  IHDR!BلsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YIDATh{pTsn݄ y#IM Q6`T@iŒ:HVij:ikǶj S"/< $I>9)qofg|{w~w=Xhs1ǘD8$1&1p|1%k2{Sl^5.r'֦]`IZ!jJ%үPw&Q3^[Z4٧)uSB399 ETcA<׫@Mtg+:Er~1#1 1hL/yȖj !nC:z?'*=`Z0Db+vw-$Xu,:ZޒD,;\aPr$%S3q՟c't?njJªI1H]DO'f eAwcgäˆD8{r;F9*4 (R>$5k.)^D^5=nJ"Uoc %~zA@P h`H몸zNKy*"J)7!cʘ 2Ww|=(_gW I jk kȊpIxZ0{4uޣT}LIm0Y@I J!$t$9r܉lwt0{PAIw1AflځӆXi~VJ)A(%Kvlmè,'xPO%QJ#ӽIֺ!O~VǢN0LH$25L)\^dU!B)E)Сsa}L~h~{Ȧ \g, ՜My)X@őI[}2B_@`BR!@J?xG ]( DKU5Ե+8*-t=15_lh'F8럐-5|F7@X`H8s` ^zK o2 %zl]GsjC -ZĢEّLCB]Xt{ Fd|L0Z1m-BNՠYz42t5ppzIY_3"k C>jBSBP7zZBWPXVp m( YIoEĆfIxaN=##qcòo'&y`5JTog !s]8[-JTp6|x ni4/n-==$(A]o@5n\i'>1seh!iTku8wbN7ڤi4"ЫGqޑG*>R&tda=FY^Ν e4=2;TD8L\;;'hu-_(A`[ >llu9uir4lª5.H`^^aCۊ`_ZO= 3+xnndYeo ܙ?DG~^˟B$ =ds_Bc8oDL* J)^U[$bd5T[ ND=3\*? $-/A57fnDjsO`-v؁Q V`9o8!NY_-:l&| VsXm%\l 1XOfqzl+FE(0;gQxn)/)[ށYrtؗu& GZ_Lci?I[ 4X29ǹ|#Z܄w˶D5_Dڍbl ϥwoȾRMַ7ohGa>Zk0}c%-.vzAjbFĝEGQrL^oj]wn@︙4W3wj؎jsg17ϺM{w+1&1pIcL"c԰ x#IENDB`pysiogame-1.30.811/images/info_ok2.png0000644000175000017500000002036012201770073016431 0ustar tigertigerPNG  IHDRTBGsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YIDATxyս?UL8Ȧ,AP\p+Q1j51*Q1\#5Ⱦ KVU?zu{sԧZӧKsђJ/N7A_5% &`NTR`C%V<5ZDE4T]k&Ҝ84vWe_ #Nbut9cE.3e%Os ^z1.Xtʬb^zz}Rd!ӬJZ32̞CNAT bfd?K;}ǓS{*oPgVeFz ~Q4c*++c=JE~ͣxs I5Vu"#mA).XV-Sյ"i#A BrFrD$zh-9`7,Uֲ_?ʛnӯdE eaߢ C(d xYXe#`[0m`fs-u!13x}ܴq(u (^$fk-J ȵN[6xG e.P`KgAFbZ'Z3y|/e2bc ?!˟}PqD:D4q#.*^sM:\A"] UvS/DUE;X' Qͥ!S7Y_ɖ_"l6"+5 -2L*KsoZ|%G3nd}[Wiѹwbu1l5:C@s2;H_b+SXuU ݄0KaIH-~~]b_y*jd 1zVj>%)ᕰ:̙s3SGĚ V|@RBBR9#rDD_3*rsP=$%(Jř;ɴLI'h*BtKȕ4`ŵDA*E*e u:J/Ĩo<@@Bhlm4jjZ>7V` /ş{n+a ȧ7tԝzbk!c)KV R* ξX^wAu+Ӂ,mϐ!D'F?y*qC.deq ?cꈓXY" pfN }Bw vSIR03fcZuy|AJO<ꤴhޓNօTA*EJ 8NZL)4-E;r4#M˴_V>VnIM~LO/OcA5H)B"D*I^@Z=Fk] RvH03N#L+(Pyڅ\ϝM!*VjmN O}Ls [yfʛl_ٹ2nDJiCL=!*yѰk 3h3i)rؑ̽=G@n~ݢ{Z^iJ~5RH;2T*W=k6s?R%R"abcC2*X쫮e*L ī*zV4f/e1@Sw&=Rru' p'LLw[O&ou{/uڕlmdq_4Ai )LGgMebI1PaP_`>;/AG0}9 Ӫ0UJiyUpS 3ٺjye6{[;XO2hؑ@7ʙgШ7٦(ў, U!̨Y>0s$;^-!L^o6n!1_0ٖ*^l!咤aھӔ?Ӌgċ/ɥQl9xS[Y^c-8L^sfؗeWnEef6э|7:&`D4BHJC ^xO|B*QLiOPz_ #O`v-k(shL6m|O}Utܦ/]J݁v L96IS+ϭ7KYQ94ʶWp` [Nzdz \ū _bo1'97T> R[1Y^f6w!mf.ze13 (+y|E(ꦒ2[wɨwSdʗv࿫έ|~Ff6&>UI )HJ r.x-}oe=yI%}XyH@, kDP\Cied2d*d5ADic^©;v 뷯Ö:vq&CxSC,=E"#S|`mG's6mVFwr5ָKB4D3E̬%+>gPNJU%mfCZ~[Q̄cm\34/w1eU,1GfI8GS0M5lKF̎Ҏ Rt$ y~uU[g^}o6̧!i) Ӕ6w CM ~K|~y<1$~(^ (TT `W‚i5sQ7E#g1#yG$/׭ TE &QP5)$k;#Z'-*,}aaiSd'ԀŃccp!kodzzQVҕrYD d'cl+SߎPtW(]ĒI5ذF_)d^s ^O<0w' pOoĒW4Rԗ+52uK7.dRgtN?ZV-"ބ.|W4 ]ag\8R,|5 cq_!{|ع GMRo͑nu[#*R_X>D.% +ڤ!0bzql̨މ2ÙhoqA;޻qWj36z# ?/`%Vg'̦:&G_ s8YFRu`&$<{">O\q{XP+L4-t0fA`*Q~~3XJ80|3)%p=e1PS708Jש޸0#CAL xY %?`mrnq+V\xTBk3l|nƑn)fGJ 8 B|:[9 KC ?v`&0?;aR(ޙVoiq}4I!kϠPa Ά}V1BKW8x~scrD@^Kn.&v*pRaVi! ҐPr!<0״55ˁ9[? ##MFFQы@158 Ń]^aoo?P(% #^A 5(2|k\v=JΞ|u-,9RVԟ^c{bf*4OLOj)fŚ0h{W45} ~`:N|DaҵkZ;tYNy) 5k)7J+Q!d(\fu!N~;»ב0Dz{|Rm‰!N?̥v{ YJ$hG4r|d=X 9 nQс9hcBpv W˄T8Le{h6v8q"ujmX)vjr'2 =}?7n,v"} ];7b& gV3}6uk8T@ԯғ oD$HƧ SέNDtAPFgjt2Ψ<=׬frݚvOJV<#ck۶ƞ޳Vyvxh .`EtAۍ$x4#sGJPe:`n&:F7nv$Y#8}ɸe:Ԥv7s{5Ae [; }F>\@q}"c:uI}˜49E]+/gb0GWSR#9 C t41i0y?%I. $2vrO]hw|'1 gHR<B$ &X Ngd˔]`{ Ӟ4MO ΢0P<_d VZghgs G˔ o3Du}/H4s3F 8p GJ ߼Y';&/szJݎ\K\LJoL&yLPN?N5@Ϝ^zxXNlyU+`sGXgVpSk7B1[023/I.Yfzxrn!YcnU_@T;Làh~]qk G$ӫzceH07&z1+zEHϚ[+,dҾ4\We3SQ=\z̍ۺgy\^,yBV9M|˾*YرJ$e~UF,m2 HMA$y0S\m5S0}Z6ӏDLNOP.;hc |L!o0<Zs6m y\k)DWs>aX'qXs_Ķ$LL:7"}^57O<4Sθ:E7OU%jY|뢝;V۟YR]>z>qh~;70TX{UUcw$[WDLv`j G\KyEIPs|e* S*#Ϊg'@)fI`xoQI=Bƚ $X5+):QvDnFEy]v8p;m7Tp^Ȥo݉3P, fʫuZn;^_8];hVsx7n;@'Џ!:<|W2ge+K27|}7:L7 !Q9l5ăA3} TZPF`ǟg=coxn>Hi+^ #k^U@@FݫV$ȭrk}9nTZ%_o^˔+bW nu^yv:`VW?~&.s&H)[~C8ʌ+^ UC) K #Dc;HNxGf9[sYloFi/bP~%>r;m-{5yiJ w8&0b<7G$[slˌ$EaA)L8D`):<=*K܁ XgWQV1q'KkeQEcoޯh+KЊ< Lw1h%(.w|K7fdS5b{̿{gl5=ڽ>#N;'L1'@ 1ﮧlǬn؁9t½~Ş;|d1[zHElZF";++Y㿨Bݥ.P@/dQӤ~[5}%e|TbpۿRy >q73c8hAzּ26lFіfdI(6g<z*%U]{! z>v#B>h*}815猪yZN9g. '#A ]CݚݸH8ǿq׹l8+jJYGvj* Z[`f2xxX%Eh{p&CXSAWf"{ko>K<%e$ ZbJCabWMĴG_&xkD52(HD;yX LLPS#F>E˃,ъߌc&2'۴nvj~4?QO^vi io IENDB`pysiogame-1.30.811/images/tube_y.png0000644000175000017500000000741212201770073016215 0ustar tigertigerPNG  IHDRdftPLTEMOLTVSZ\Ybcaikhqrowvnvxu|~{[<:V\PL2:Bq-idp^YqTA3x~+PKvF)<6%!60!-,!¿2);, 9T_G8mb t%3?L/;#WWOG`Pv}pjx[dLUzltV/;_GPhYPw~qbjyy bKGDH pHYs B(xtIME -`bW IDATh޽{TTpTP(|C%E©Y,Sa%\tiXrM2FE&>ӴLSS0_&H*/Wz{3gΜ9{=8\K=pЉ%/a^'oBK<4 d Jƒ uu mmmnݺ}ݻw߻wG=l_G^ [ȇ.In̎@.RW":''tzw.X"cY EE%%&զ& Wps0:꒥ +A  ׿GHC.YT{?h Xa 7g̎3gܹ€_̙ o[ `L0a*ʴgRFZ8080 8w27==55ڼy֬ rv}NT4|mY%H|@Aܵ+ 8d "%4ь[#%LEȗ$Y'X_1N0< DMO-,Ƶ]|FBAD!:xU!^doW"{-tdù (K|m> d6ICP<"Y*B Z7X!$"È )Ie'5-'DėQ,ʗ)]2igT MQ>/B[zyL)z|#Bv)AFfG!"#ED:.+dCFRP*A1CH(]dRź29(pbeޔd(J%=d/s-E 9bxǤ( x\ b{ }<dXJ9Aֻw* sT*q ~kd^TABtJE)BNT,sJx(Wo޵|YRBRĝ@|kAZ}P|. ǎ#@EJHAta!JBQ֋fd?)^a( |VT!䑖y~BQq,jTDsX"\GRDFEb9RSOۗUD&3/: B?|2X$%G B*gܸȧڗ"7\.S YW;,) xi/NRmfxEKE@q9-~Ѥ|E!G.Xn\"S ^ĢdFNJc((+7m*1㪖E^̠@| d*)' (BQ R&YDͷr|`r#@L<I=hZBQIv` As[bVf'Y>4HDBQ bA~CeChQ?HILyD(JiCME EAHIiKBEI!G_A MBFEBje(ydt,(1 ;9a'y9GsW)rIT|!Dዂ 8$_Ydf(ir!#9Z/:$1_ՙwZ?{$di_CcEI!I#BWi_CFዲZ9!'*M CؗEF /9#fQ"$[9!m_N0W,(7ffQxP*Fپ`آ,ϴ  Q"cEY)* R" EOHd\ kzZ(lQ bChآ:9n h`|Q2#8dc uh*7>.νzRk#͉ xUjO@`h'kU[^=z:QyF'3PFcRbBLtD(311NTqɩJhdDc82"T:(HM I⌔$dI`1.= Dhzj#"CD5D9s On)0eO7@8>AA9?B@CADCELDJLMEKMNFLNNOOPUVVWXXYYZZ[[abbccddeeffgkmohmnnoopvqpqxrysvywzx{{y||}ȄɅȅʆɆʇˎˈ̏̐͒ΓϔΚϛМѝϣўӞҟԟӠԦէҭԨ֨ӯթ׫ֲزجո׳ٳ٭ڴٴػڵ۶ڷܷ۸ݸܾƽݿo6bKGDH pHYs B(xtIME 5/IiW IDAThS5<yAjK,}Br3*0,@ `A A&bX[6+X4lK})rawiY}|o\>?{ś8q9I/Y'_<3g_(Z{e]0*Ut_d|ņo F6싌d6+Vx`= {}=8AC(YZm<Oc{hD4扏7:S;1@{cB^d;qo9XW[>. $mpǀϱA0<2- !j=~z%`ow+ /a0n <Gb4%^`P_~8(ZQנxs'=AF#; ;|ns VC+[;O-6#Q,vfho,U\Q)s+~>:Bf抈YsV9S3k᭝ȏQ(^[ JA>NK6!- NM/۠^@MSề,@ 9)9.yI1>7w Aidžܩe4%oo <˂QΞ;fAEv 5;UɅq`7:a9mX/BCeݝ- uoOg[KS}-{ m|&1ten n2MJwwwwv4^o ^ 9 % vW]TWT7p&6`6á5f G!Y)y 8`!]NCPWr.+}rQp6Lkl2x Cf8<[p\3rcu`0V昀i׳e XCah1f .'lKH ÄDp!&ד y(x:ͳC( $kB%ÂN.>tuvL2L `8N(cxtONӃH!Ε@VELa%y2iC$Q_n*ځTOW{=84:fO-c-LONG`̴b5{ rz|Fbv& XK BMw| fNlS0H7H" %Xt =59kr`4J@qmxzfNWEkd5J` )aRVZL`9! S+*`%<]5k.':1D.Msˍr,,Tp>]VJGGǂq`pht/8M[̳eED#ʢwڃۢkk.A(}zY$:-L?tK4n6i h*Qﴮt/HP0y>N4] 6yaƕ ӥ4! (900h(Enw*XL"$ 'v=87(܄lJ -`i ;}´$`]UArGPRn:nk(6I.*dqQp-c)B[b[E^ MVIn6дR.4c |0gKEE> I{zۍ֖fj`=RbҦ|I]Hn"E(@ Wsb'I9V )Z']Fl;p(WUdpDFX[d\r } h`CuvvQ@]_+ P&sHdK+y%q`ӢC.R2u^xr4䖶6`cQl3phE0sZbAL&lI6c [*XiRudef hdc͘gh: S's)h`Ԩp˩ъ`\mT?_̽R$+d/Rb4LZ}AC%W膆FZ_yTF9vQ0MT?49X;$Wf6#h@C\/BJN D0^FrqudK@$~kl"޾<*9*u2eE!dl') ,v^a!P}-Kҟ}p眄1Y%~t?,oZc[lMoaDz`zӖ7O+m*L!ef~cy"ff+.|f32M/vZqvLfܙ~Kf8N#jݚ%UƸQW"WnCwmY]hTf&< ,L_u` ?E4\jx2oP͎etGn_ mM`7~TO'd[In~8c\ֵbl3?'sFzL w{:b­;y(ͼ?าRnGn~kqbɼ2bǪb[fo|yI:rr$;"(Zau݌x|A2vtFK𮞤uVIIɗXżn=: F5VV_}UV9ynBUyyR;D>x$?J6,^rUUUeeeUUV555_]KKΥk|P,ˣJz@ 4}j/P&8%ߕ+oxj㳕m_w\RCۢOH9v _5BNIvPWSZqQ㟎q7qx~\S~@~$ǎ>PJƭ#IENDB`pysiogame-1.30.811/images/flag_pt.png0000644000175000017500000001156212201770073016343 0ustar tigertigerPNG  IHDRxxPLTEcR 88 .q=IK@=TRk$hM#a{IXY>*)$++Gf-3baQN_`&^f63;fg::ZXVS6y2oqjn5BBspgs'L_LDIT* KJvv-LPT+}~]` SR2/UY^\W[Zgh]a-wwT=qp'(dciQkB&jkt8uz[46oltRruACxwGMNΉl\Ǔ{})ǡZZ{{e\ar ș|der@xppvQ#gz{^]°Ʌ=nαɇyY`A>Β[yŐѝ򶶾zѠ֊k֬~¿|Z9\Ѫ˂CѺʝ̳̾ݾձץ6yKޜi<T~`:uMYlwmbKGDH pHYs B(xtIME 5tIDATh{\SW5aÐZQtb2͐E[d VZ#ʶ@CEFY((*4ET4Asoro޴t;~$F7ss=p@Q<~?3z+ fPujeC}UyyU}RcأUmvT.+x骑ڜc܍gq #9γEH$wydJAREv\ UzilgN *ZWij"R@ W:I;1۳N*H#2o 74+}pCԘ0Iw;d ֚8uΉÈ 6yjEsIGc=aq(i,au:gNs/;(7ǁl̺\džQPp= 3Sh:2H$9,`%E $APh=|(T9 #Uٓ9vT"Mΰc%F:NqlÁ to8#М۔96ddKJJVS [C|@ڒ99Vd 0tI##CB0Zͱf,7S0ZEF8K0,G޺̱n:[t8e2+M8 f}>sq$4LRF2 \iVSSdḺvB?ǘ` RUN4T"p}^d>;a艀Bp<)Y$Yo!X`8hTV3ۺÔ 4'hXa- @$:aXzr(e",<LlYlEh-`j߫x&)tŒ!6S'%La2"a(t 67-hop¹c&C̘May w-mjdkkKK˅s\vD`(vyap ޻#kwcwk+wѣGZZ!04bSSL/`ilӧ\R7z{{dCuk kٵ[ Sf1:8Zh g}=$ x| 5}y¸!f 8ZY~~rye[uwBepF!lwj&L*+K?./85ԴcǎYY˗/ M'+`ч\K n΍=ellwgּh^bĴbxi@>0lljq_7 'G}1?n]|P$Z2wѡB~,-11/-1 9/o_CqMC ,Tbm$6kJR]@w?xrijeߠR_΁:nƛ76Qx%<,i4ͱiLai$|zlbb7y LC+W> bW7TGCX#[ϷITSmEµV`~Lj^VeCB"ur_ ~Bu* :_3QuLGs=ǐ7[ӱ܅7&:tyzb>~+.~3Ƒ#=2X&M { B<3_M!?2饚^8TvEBǰUKdQ20UEܷ掙r9~g6,t]2WOxp֒uI5;YڂǎYUVu٘qsڶ-*n:V?e2kuʹ\#y3f gﶶm\)'}ˎ] ]Y3T*˝{z(GhaBۂaͨ|as8g`ƴhJ~M!+^6+s ]nSa=a@(K*=*yKUq:[0(Xvջy_?xݕ!d9vZ?MOE&)/Zo,;O;s&>6X<'lش\Cb9ȃr%u&:lQhFcӣ=aJ9~͕y;.]n0eNh!MQVdUbRKeh| q.*/"j~]Qj_7ꅂęETټ)g’Q0W_APK7EIdM}I\bcU;U׈XQ҆ 8o(/׼sv.Kʒ% ɲS&JKc%YD\d6,Y+$$2m&OI+۽PNQP{(V$[l4񱣛!9X+63\巜g#%' H$zm7w$qrj,Zz2O,B+:̴sG~zǷnxp1蜹1ک۸rz'o\a>.58[X5Zp v[yaC;؀JR,` Wd"wfG{Ëˍ5|H#H0<\7f[Ob1$>BL)gm$U-O?} 7/mQrOIDmDPPj ;lGv&K& KBFE$ 9m7'텶$PFe:O7| X;9qf@":i hl55>A@Š0[_~62vW j-q3]-u )Fq3k?ubQ@.J 2/He~o7~_Wo^7+)?я/=(1=30?03@+-C"2B"1B'/C-2D3I'8H(9G25J#7I.9L =I??K0>K;:O3;P(=P#:P.>N8BT8@W)@W4CW/AY$>Y0GW5KUHGW@G^*D_6SZEF`0J`%Q^BGc9Hf0Ke5Kg*WbSQf>SfIPl0]ePYhCMmO=U4'-_wV,8_ " SսP0ځ'%-_~` l`Nlj?B?Z$ƃdS%@XJzǚ^~ܒ+HKsJѣBaF_JT8ٞrΝ))kh=s\F4aͰ)4*UyeNXzXJJzff^ޱW{z-kvR6x,|u42hgTJi\3w%lh,c!YLehhh``@9 b>}a6^naoMA 3 "uwُq7u{Q-.+c^L2ٔ`aȬ /u v{SLË@Z0]=}@srֻ)Կc2+R&l &lNVW_@O2d͜5k׷`0G}}`X3),qv90A4333L-jj!UF[*LKe&NguH6m pr}`™c&ksr*r KwX$,Ja֦q/_k3`b4zٸJa<ede09x]]&?6#~a~d+arO'j/-{!\j%S:@mjHdi^Ey'2GeNZGR ˨(6 J]=_Q VxM3Xò3E`9UH8l $oq]]fPfy". aOQ\!Uݙjd|{[*d~Oko^a:l-e %nblN~"!ԀfkRCiKߣ@BAYE,-mָvzL5&HzULu2NW 5SMؐLz %&#,VO1σ_e2zj K d^/}k )y^_6#35 0  AwpSF ΜfRJaVa^6AfK=TҔl%IV"73|ge-zŷ 0608̬Y(K}nF#H7kk"}Y 3lGYZ"Ijf_I(ѡwb͢soD)9m4IL:; ak 6#ijdW Z|:*%4[ƹ xl>1h6v1r/!2uĎ}˺^90.̨u&#o{ }֋[Nrz+M($#3&ݼ\~7cf /1 ǾFowWYiToWq(MKÉ}fWJ7#IKLL YJ&0y5ѯ?&gnLO b$b*Ma$1g9vuf%Z/?RƖRdJq=!&11bg:ad,n="/7rϰh|pvV''ݽ~ŷ9w%,L)^D4 QL>0\~63O܎<P{= 2qˆ:t[hx볬nT?i~Q@0ِ[mxK{T$V4X•Ÿsr O^H9L V"?KYyլn#Y_7g wJC"2Xi.Q"ġ)z0]w#K/'!>ZbBd8o61&N=rq.6VP$"&%4RRήʛa@ oFDFfPiJ$ߤ,v@uJm!mXLof qT an@m ##t)ku^:C6KTBv,xB@Z qZV_Dn$~^rSƩh FWe  cR@Hq7M}8Fbl-|ڦ[+ .v aѷHT._ƿ=I㣌}vZxٝۊ$cĹ x afO4HT P!:/li%[r:z5p'T =Lς4(-r  9;/6YXPIؐ|RFJA |q,N7w1=~ڦFiTg7FiP=z2ujzvuQ4ƔJS0l6mx-{okKo-|,HF`"8{?!ZֶGGMY-H/@ }{yW|oտ5? F;)Xs -t* nxIV=#] %zIrU2uM[NK?蒱H, .乥U8k(?ۨm2"⹓a{v+o?03֧$|Qa"oIDUK#''Xq]dR|D\^༓aߡ}:E>< e̮l;sNiot{>h+k=uinlPPB;/ 9D]Vdd>ta4ui5R#MI8ȔdҎ`wJ&o)#]fu)h=f㼲Ҩ"bTN﹢㼲VAfX4w!@ $| ,0"yyg9!qZ t".9L),2Mn`%z1`׵id(bG1S4 D~&0AA0kD0VАF!$&TJ` UDfd zxIkj@Kb%;5S2cTH@"SĪrP9Vt0_Ja BVh%){S%JUip):3hEtAte@V,i6뇍0:2&zsa&3rS#EO>kLcP%nIai V-bq]xJ Yc}dȧB~D9~x?Ǹv_|tŅ 4 8ø'^ Aw_ҽ|A:[xU> jk& 3S4] w4?H ї99vWh*a2 @\LU%eS?ʖelf[Ɋ@_A7bPьG>@>m\Eob&`Ϳ^{)45VEN>_)ǗlP2MR|VϝixYV6ko~g|{u|+c5V + _!+;1nz֗?a>Vï.Īc!splÅ_,~Y.gk^ٸ &F}5͌ ^}ɬkfpq3?ԹFWW]ŕu-ggA双\ cyL{E]ݜMcZ̞;~TyvUef}>W0$VTE;GE ffZz$Q0 vW9LX>0m`5*Ӕڽx4ec|It4Ewgf%ݰZ:iGr8p7gn4h՜/3]p IENDB`pysiogame-1.30.811/images/fr_pear.png0000644000175000017500000000547112201770073016347 0ustar tigertigerPNG  IHDRLLIPLTEnJ{K iTS'uYp_Z&Z-]'ga3d-h d/g6h=qt|v} y{|}{|tD~~H [.)!!$&>)!"%.%v'R* x* I,#5#..&%~8(2;+4*,5-YL7E/F/80133;<4556T78N8G@\A:9BX;C>Fh?@b@AI^JBCCDEtnFMͽMGGŔVNHHPQQxRsKSTTUiʡU]}΃V]WWeX_͞YYZZ˸uӎ[|\\~]_ׅ^֟֙،_``ֳئaٖڣݘܿߧ'bKGDH pHYs B(xtIME   `IDATXý}lgۍu Bykf#Ő̩dL'^CD( $r IV{g(X fev-QkSd8;9 T4nvj ұu$ =N/wϖ[xe<:؟޿/-=rn{[B3n[m]׭}ϵ;[g[=ݺ ϼJ+`xaW?z۷t~g`/|m^-c}^ѕ?1Ey]kv Ͻ /y~4&$`MzMӾO? 4A(0L055 'D!kF <7K11KE)H%1֚= 0BG).k耇 ijFY?,9_kvp`byUՍJ\6 )caѩZ||HbN rk®:Td^*JyqULhT6(53/a(W*KeCê,La;F)0hapQ>g4d ( oi4K I4 $[!`Wn{ѹy.%@R4-I@ R 6K}=6ey<za{wM從A9 i_, {icX^G8OR @QpbJ}0p0-֞^'d!¸(v\FX]hN)ŜsTz`/lXi2,]}gs `I6xi'l?psUrBsiM+a;7p{ ,/A%=J?/4hڰl0w9G?\J.B Z䔠Tuݛݓ0`@e(%}C Q5M?ւ}VdPtafDK%^Z,as`{J2S31E!ws*i*V r7oAX]c^/(#sX:fUqyRшt\H N`LsiPT(5G+Հ}Xis{}Xcs2fTDLtb.A.l!TP)Q7.u\* 0u;D3p<ɦ$icCVs <֯\M噚X0b(' j*Vӱpi2[0MAA!KrnQE,cE] :.Z<M=bh* LImD)9kmz#T57"K\D:vrrc1q<ֹ73,UMm RZ2:BavfR:MRH_kևvWVu !(P6eRj*n"af?;2]U@0FTBQt>_01&6xFBxb2lb2rq&NKUژ6 dYprrhMԺ?AqLh4σǨ +651BhI&$Cш/\k?5A3  ,fB&3)?]pbt]T(eh" knA=aW߮NKo;B1N&Zf}|5s>ߌj* 4=GKG<#CvV>?g`7!u`Թ'.6qqDZ=2MQ㽦=߬6u~o=|O{[rz7kn +߿~cW_>⫵o깧]_]]mhJWIENDB`pysiogame-1.30.811/images/next.png0000664000175000017500000001247012201770073015706 0ustar tigertigerPNG  IHDRV$'sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATxy\U;)LDQEQq-As%\)si̴5S^(i%(iD.  ;m{^,'|ߞT* <[Ahy"AA AA "A@   @DAÖ˵"f9 'Kv-}YBۇ.g^,-156 =+sc| # ߮vhk"@йcgYȟO yV> 22s%ϣ 'w{,̌[j"&S$_絹**W MW;Dv-xOBc\\:2zXck/#U MKz̜Bdw"OF7;"&s;m$n4ʪjҳIE U|d tb8? ʟ>"&?>>[`iP*d*Wp5|!^i%!~Nrk A 4*/?n5D0җS{<ӱmgNqIAȐً5_A 4M'y5Wĺ1l{{(#B]%kW3d:tdpR幤g撝{~ _FNwz Drj!cp~nWg[yn D܈>դgqK&P =0y!Df])xe2mL"g_&yDI?N!ra^=N2ɚ:%9wTTV́>2" }lNwBI`FW[[G[n͆aj7$| &`bl߈;Mj-2~K%™St Y p WFhA2<]mcUk @hvg/)WpO5U5Y4ɏtSW<6d޴pU*vLu0Ps.3xmX g'U5g=IKZf~P'#S}O"n?Ǯ#X(c| >{gtWZp[UլpgCa+$kjj<Y0kPRIVN.F}0q|Kd4E-BT1zZ1m`r%8OWFjV1a0izwwKX>U B1[nI%^O YtWqplwAǶwrZ:Rnd H䛱ޫqhU}0|Ʒb޴,Sr$klL IѸS Vei V\e03ƫ-mL$п+mL=fWW'2pe& s@W綘1ⓝӿZ2m-0c͖dF;f;6xueՆ|<:aei1r%:ʪYBҡE+8pGB=uщ3WV>:KjOjv1~"t`ٞl11ﶥ304cޭN!ntWGģޙ NF̟N٬ں>@cP-yaeR~`McBD?M͙17g"בRWlpL'G^ Q7$kLM Z՛rO_h!pґIK @hAN]1@?7 -$;~yGqXkܕ<9{ɡgz3KqDҐX(.DI?ωmjk%iO,Y8CN4z/NsX[J\yqp6|a]-ao:< BWP\N9Fn*p)oS88쭥7ܸKaZv>[we$Y((c8"׳F=t=J`A j3'6>2oa$3 7;ɚ2,exKo>R;3m½$k*j0n_J6˰53S_Մ*( C: %el˒=Wc8:w_Tٞw//[::CѸWndձcpvhb*Շ@Mmv2W^_8<9bOQQ;\+kK̝>RuŝbK/D#@hu +x ̘y +s}>YhN^ap [# fci+ٸ0'2avjK<J὇! sdfrH3)ٺvOBjԇ!>aNB4ȑOco-}_M/bfLv|ͻXJ_B_.(.gÌ 녿fQ_}-}@Uw80mnB +щl~k(];E+4i5~eU}`w9c#tAO'IEjLZBM;c@"Kd\Sdڊ8;>VT*n,xoQ_u?HBi4՛Y?þ5TB{oYKky~ @g^Sm;{57)i79Ci}jo!~"o3oz/B|b瓥t)"|.m_\f,u8fzL`Ӂ=%gpxu^J_GNY03c+ظ0'1.Vף b@h1K"돣};y$Y9)Uڜ1L2|eͺIl>?t/W&dI˸]8ÊONQjC@T[@\J|:/c±jC5Kfw{zygFbF 4E _[ >w#ï#@t{ad^ndcnbQwfvcVKupdKf7Wrvdbyo5qqmjplz`q{f^%h}q1zrAmp}zqN{luuj^rWDnppPq]{rw\{}]znDmZo?oJ W~ZsT{zpWj{rz{RrS:ygWy{wu@GRvRgwGwMY8syl}|dgG~TL/<[OUOUgm8kLj!?Χ$!C?k}oGIA?L rI㱞IB^zדIE4@v OGp|InᗦO՚ޱ6%oL !pB穘?k!~ a6[t>o]Hse"dսйvj<V!'<G|2d?/R|_.BS­7'j+\8P>/"[yCu *(6Qd )O$ǧO4|Ԑ섄ԄԄM٩T|BBv\*ˆhYvjHj*,eA@DA%lJ7цQIBV%M[0LJZ T%$`-5uٕ*i7.KڒD6lI%]JI#yZ2j(wG:ȕIwB[nʨQQDrwHppԖp˪-QI8˂!hHǍňb]FqA n\.yDC0Dqpwoc>7 ",!>39 {6q>l=Ppnn؜Ͷйl7{a0 vppql; v,6{61Řb1Y,x =8 ;{ǎbgA8G2fC͘#al"BҐ;e0l}l|l}3|]X|mY,$Ef (\R_/81xve@:}gz98= ~G\|\Xg{ᘽfxz (\l]~ )^3$\;^^__`,??Y~~H?G?{GG]G1?R[?.YP g9c P9Ά60E]Nק OY=銱kPNϧ\=~=r u_>'f'6Y4C95=s<]cB^ºu1 YG ))S^s:<|n8s{{/Ak[DsýCѢTOy+A a7=띜89ynr2zdܰa%Ħ1x6,"J^O.>di y؜W}卜 .p arbc͉]"H"7-:bc46T 8^_N+(DC{K]s7ц=ұHMOM_M/sހshQn,XD{6J}Y~/tO~YeEoGU<7}YohO~itfX9-\]VVVR8 Q x?sc36 6DhhQf^t~f"AVh#̴3UUUUiiѢh`H/EbU K]%0$m}RGզ& yyi"FZF b'y"yU6"Dr<ZHy(~^TM,.pX^^*O.'kզɋjZl-R.^(.NL7ir:!%Dn*+e>=XjQ/5nV_Xn=[ҥf h[!oX]OD[KKdW+Va+ZƬU6wh+-JcuGV=P .Uk[+Zm3"fmKuzml" Du )FoжQR+ J%A[a0T4fB4h5f=C{Y-<ZMGFa]k4jF߁ -Ao뵭J}^nַ+5J MV7h$J- P+ەA5(۵zHl4&Rݡ鴚nNoZI谋vZ1i5:[3AݭSJZd2!510t6_^*#ۉ+dwwwň-dMzB#"]e1 5!1ЅPmօ2m]& ]]:f:c^[L.>tDj" mFҦ^^2{I2]3^kmQh5`C,:xuVj5Qo/Ԥt4^kd+,{Gw kv> j~VHfYZޝO.*ƿvtIENDB`pysiogame-1.30.811/images/t8.png0000644000175000017500000000217112201770073015256 0ustar tigertigerPNG  IHDRPPPLTEÒۥԌЌɠڗ" Ȧ״ *ǝ2%$67+,1FNyHRhWLR¯h/[۴uehٺƃƘ,ƌʔђЪQӟ֥ٺsܰﵵ༩О֪۵D#bKGDH pHYs B(xtIME )l)?IDATXmw0` Qee]BjvZj7-<'$7Oc\-Xqaip|5 .׆q vmk8˲aγlILnHpT ޾GH0ƀ)̓Zp!`$Gzp#SPdg_/I!" wGᗎ ! LW``(q2Dұ9@a0.dRRum$WBׁ>;7Zࢾn Fv֡(`Υ҂ נm?+ h D6)ٌOT T'bĀ4S~x7JQi,ϖ1Yr | 䰕 /#m11^_zЃ^#3WƷurR)rg=1H+}R(EI&rV/ڂ^9L5}f@`z'V f> zL)\< `PXTڴ鮲S]!):AalDescFK`hf ׵`Gv g>z<yI/YH]%IENDB`pysiogame-1.30.811/images/tube_r.png0000644000175000017500000000750112201770073016205 0ustar tigertigerPNG  IHDRdftPLTE  "% ((/-)NPM2&+',552"704 5DCUWT+>86663B4@,LG:!EB=2\^[@!JIBL)]MC1XUM'jki]RS+P*fd\BdRRN`]UKcYkfvqp\;qspW,X4QAfeZ.eHnW]:rglg^X`0pky{xvpb2wqzn`ShAi5i;hcpB~ml7fTq9}r@stNoavHupa͂Ty>wلMMAU|QDώ\~q|W^GwR\tc돊LgnPYJNsyfo[Rx~w}qƺu¿}úƽɝϟҧֱܻQ(bKGDH pHYs B(xtIME ,2 IDATh޵}XptyGEkcEmo &ژjU4D$i<Ŋ*bL.^CI1  @=*/Hr -%tfvvowvf~<~of/>_Y֚#9+mK +==;;'$AݺuKT_ \uΝ u޽<2y.\Ki6ZL~.iN S_j!j4q& *ݔ-)))%%5[X)\R dk_2%,lzx+ba6!!11%%%333;;//k#d1P ""Xzulƍ_@ZADcTOz晅s2ُX5gA, Q=>[[kdP/  2=AxLA&Q$W,'j+6rE WWeJk6Bɕq|e%@.'MRD`g "55RB$d1*$;KÅHEiTn6/a$ld WD*R }6weB•!Ԉp:*Dv-l{uU WeT; F WH(^YRXI88yP#+ )WHI ] HR^x}$!eWͪTQ!cI " +!b(w\ rQ,!Y:ᵟ46ILney>-, ʀ:]$uY@Z0]b^^9CZv+B~)++D@'s#]?!]&@"6*02. e8+**H:UԈc4ri\vr-]w%UԈvА aN l-.\ODa\@bw[T+!_@ ]B"{%fS]N0N^tQu儊IMe; )U"D*DqE!w 䒄 iKd(NV]Nz&!Z.iU*NBH4ʃ4+)=GT(bԸ uKB0S(+]>ѷ.\A`LБ H9v]G[*4 Śj%Ι܀ Ze>mrBGBwSʒ^Ty5 x!T!8VR@"EM^}wBx%b "vAd JHCbE$u[N "~ aMERvQ_N*Oo䤰k26,ED#W6^ GED+N$9kA_'c9PIJ;F+\ Uwb&9C0αݾ ),,$W, R)P h&ɔ qbvU\N0~zR +"MM:>WRBf_y0O XBm]FVwoHq p>"uKh#Ȯ!̟VSW׾Ӱ[SEFꃅHV~z` n"|%LP )OʑbL]\Y5BGpPk] >GDDwR%!7.'L$F*r!S{@6hM3Q c;@jMS4xpe !ti\U:I B?=$q _^NHvĉH  f0Io<ǃTa *ur3z9a"ºL#D㧇'?ucǎ?w(WB^=cqlX/XP[_v _j QKN FL6KsS-&1lI/7dn!|?t CNnT]]" ]SƨӜJnIs $7 `{y2 :0hє[%,NĔ -6PæM9LEn<2r |?omЀ4A#\z,p pg! lrQFX@J+טk4@6^2 #@&{@&O+^.>W>&Lr'c~~FWnP'qq@'u|~?:z^Wn<>}=o7K@N<.M79 LILF}ywg!l~6?2sMMd$Y6eJeSgs]1o72-;;d96w;'OA@:y{|p>}Q@FxԽ}?[opqcXwO{fs00ʔ$ʛ0۔'_ &&2LI21&=>0}FDwI=C;(ujeq~?Aۿ`8x6ΌnWywޗ ëчe9>wʱ02ɬIlʔ2Hvz}WOU#U@ <\MXOcg-gz]̔8y<̥#9O䢀gAzm̀ Oy42>uݠrhy͘MJeJeJeMJeJa6IJeJII5OGX;@u<4;Gx@Ot|+,ʛ:8ކWns|ܐ^f[].g2=~%>og a6eXYdٕ)eMdkouҀ$KV:8bU;Ϸ.͝@:k3Zrf['z}ϣꜤهn կŘeMǯ>@<>}Tu0}]̀ykle~B&للTY$TلTddTdXOOu<}Zx@0P0@`by{w C0@`by{w Ѣ`b( _E Cc>tG89t<ͮ)Me;13׫˅@mVfV'}/_ohojL ,Ě&̩L*lě2)u& 5En$YIc*S,F{gw- >Wd&1+?dSlK`s00ʔ$ʛ0ʔl,ʔ,k))ى$لللT$ԙdTdX[2o/ɔ&VYwz{6<>}Ta6up==ގ̀'yܜwf5,lrZɣ6a6a))I)6a))&Y))&Y&$'=`G9L&I2&%2%20$%20$Ě]98lS*lS*S LS*S LIN[>{) L LL&2LNNNߓMbMJMbIIqY~@ 20 L0>h.]?3>uocsk,d˶|zwnn>yˋT VfTVza(&O|,l&&ɳ*S,ʛ1&̩+vgJ OO[͝ *kl2b12̩*lz=@8_;M0ě3~_ah'ܷʛ8a&}wf1|?'r287c;=gPTٖu1}=ގ̀_~oxvJŖINS۳麺4w&%22%2%20$%2$$Ěz~hg)ى&TلTلTddTdXO9:0ʛ0ʔl,ʔlkvqIg7gVUfSfRMeR[/wr܀3)&Y)&$لهS?Ir\PddԤ$ى5)6I6I6bqe;;18++uy1 Vd$ٹY?_+)ٟuts\_~˸ǀ229mbyK@5jaP[a6eXYdٕ)eMfTٕ}/oop2|&O25eeVc(T22̩k,"[12Ml/^+ӱ6q&6q>vl(DZr4XfW{^ϡ߿mgPTٖM~}K`N'x2ɳ9z=^ͨP<.M79 LLIL LL&2LI21&=>xٸqxeSde21&̩׻zĒrrΎO'M&<&ɳ9]|=>[rg6eeMfݝΧ.9$ʛ2ɩlߏtz#z ͟@r'\ݞ{5ó)5MSg?^Ϫ M&للTY$TلTddTdXOOu<- 01$ʔ0ʛ0ʔl,ʔl,vYחXcf%2%20$%20$Ě]uw5<ٳ L LL&2LL8}wc,JxfOdلdTTddf'Okאll$1&&&&N:'couvyt9y:y5ܲS*lY$ٕ6qG=)=})\ɲl8`&ɳ׻zzt:р=9~m̦ffYٖq>rl%z\Xa6eSd6pgOx;)͆3XcX&ɳ*l,x\;nsffRdSfRMeRebMbz}=?Sxw3lē*RlS*lS*S LS*S Nl^c)߿z@K=3ӧ˘pe&6lS*lS*S LS*S LLLgn߭9Ttcɍ0ʛ0ʔl,ʔl;:\qeicLfYY&Yž{\6w@GsgW^] 02ɩl2 }/=w>\$r*eMy&Y6MSf}Owo|Ƕr G{v2ㄦTY$TلTddTd䮦>xkp6aebMbeeeeXR~û L ,&&̩Lrz|$&̩LΞsߓ*ll&Ɉ1&̬;tm4 ,:z~CrZt<+6eSd7&s*l"޺ۿNtΙG[Dyrl&ɲ2&ɲl:=.w.ٟ&Y<=pYdfWwt{;w<>}My͕JMfTe$ ɣgkkˌa%22%2%20$%2$07n症u<- 01$ʔ0ʛ0ʔl,ʔl5gVϭ<pyZ{Z83njՇϺldhԮFͷW[ rLL&=ˮ[q;6pg=.xN8dلTddTgO 4_ŔXXeM2nѩ&gmS=3<'_wV`MMRdf$Ԥ$un80ײMz}}Ä@>cy+ ,ʛ22̲klʛ09:6}ghx<=@Vffd&VYنY)z}C~??-02ɮ,єdٖMbMXYf$Y5ݻ:@7٤*S+,8v8IMXL1Ě%;Wh|n.YSfY)6NS;fcn_ihߓRl&vwey^uql'e^C>vYz'}>['.IeeSgSNx6eSd6MSg]crɮ^̱:S*S,S*lS*S LS*RLm7<}:;OGXS LI L LL&2LL&=Ξ3^yޞ.9V}]lMeɳ)ϫf\.aS*S kWc<}oOhy 9χ^3}xa6a))&Y))'{@i.5M,llle&WժqUџS@089.$$)5)6I6bMJMMN3NݞF;$œYghh@aeJeYdVY56eMSfWѾ=@0222&2̬L*kn&YٖMqf&̲klĚ1&ɮa? *S,8FRSfTى)6eç|7;deMdTN+f^/.llϧ"rd6q;[mxd6{}~BcܹPyylIцY&YIebMFSٷz:nNx6eSd6MSq^{ӧƘdx][zڰӕ6MYdl}gwww,ݬ8bS*S,S*lS*S LS*RLSd'_=xyUuqùw; )ߟ_Naل'{f-ZcJeJa6IɕDZo; 9ݟpj*lS*S LS*S J۟wtw3,%2&%29ve/+ת$9v{:{~N[)&&IIIjRllmm׫d$~HӚ@ &L lě2Igr)9Il8L4JMem;:3>vΆ^DS+,l02&̩gs\s2̲jl&ɳ*l&n{489ιdųOoϯӕ6JeYd˿guݠ G{llS*S,S*lS*S LS*RLLIOOz:rMeJMJeMJeJa6IJeJa6I5߿z@yky8scq&rlllS*S LS*S LIN[_[Û5e$TلTddTd{r|6a)ى5&Y&YDē+[@<VCFMMRdf$Ԥ$$ىœd%/vϴ>cp @aMeYdTٖa6eMYfYɿgwGO[ƜT22ɬL +,l"ٸ<m[a6eXYdٕ6beMfTلٖ{]_Iq(+ ,lʛ12̲L*S,1&ɬ;}pv<ܦ2̲S*lfȬ|pʛ0&̳=4x؉IMdǔ&z l"۸rΦx>\,V&Tٖa6ebMX[ї9ό@SfY56Mdٕ6Md;o"Oyeyv-RqMbMYdTى6eJe[.8qL}~Οd3@VffV&VYنYIebebMs iUL ,Ě&̩L*lě2&ɯ6nD38a6eXSf&TٖIeMYdVY5{snf^.ɳ*l%2Mlʛ0&̲r}W_h O4v8r&Mdǔ6Md6s]@1܀>Ws)6ebMeSf&Tٛr~οC=.;,8sƣ lʔ&ɬl#+}ގ{4w&%22%2%20$%2$$Ěz~hg)ى&TلTلTddTdX"Otz<͘\cɍ0ʛ0ʔl,ʔlkvInG9 ,y1fSfRMeRMe_o] O| LII2HɈ}woW7l$)5)6I6bMJMMMY6IIm@K<WzGSٖeJeMffY&YMbvvٖ'Owr 5>>Ɯ6m-rS++,l,002eٗK }l1W` x{|[a6eXYdٕ)eMfTل߷9@j IeXfVY&YMbMSf&TنY>ٸ33l2̲S*lY$ٕ6a6Md>ݿkJn} ͓d&ɲlMl&ɲl''wy\qe|5YLL+,,ʛ12&c:}ѣ@0ʛ9͓dٕ6MdٖMf]ѾU&7l&2ɲk,297g}} G{llS*S,S*lS*S LS*RLLIOOz:rMeJMJeMrlu LS*S LIN[N[˖Sk,y1fSfRMeRMbMbwޮu&\]|͘JeMJeJa6IJeJa6I5hț1&200"هsw8>ɲIRjRllĚ$$18$$3'yʮ"ll%2̲L,,=^]k9˾mgK LL+,lϟٸ>wG'o002ɬL,,ʔ&̲Lkp~wa6MSfY)6NRllʛ0&̲h϶#ϫPTųה6MSd6Jedٻ2YS<_W>̩,56eXdY6MMd~ٸs00ʔ$ʛ0ʔl,ʔ,kţf$RfSee{9c6IJeJa6I5߿z@Sўf$Xcf%2%20$%20$Ě]) ,y1fSfRMeRMbMNw;}[|//,kkRk+ LI{ۼ 00, L10*,lt0x002̳ ,,2&ɳ 'wwѧɚa)ىaIebebMeJ=vd; q2&̲kk,22̩lʛ27g}Ԡіd&Y55eefV$YIWO~ʠ|'?/6eMdT9I I*ll2ɢ@|O*&ɲrd6FRll&ɲl&u}OGXW{Yd>WJeeeRfV$Y5a6ew:7}_Gg->PTųה6MSd6Jed6V`#Ӧ|VdY6q6%&̩Ll2L,?s00ʔ$ʛ0ʔl,ʔ,k))ى$لله. Î3$ԙdTdXj݌L& ͘MMJeJbMIJeJa6I5߿z@6PTųה6MSd6Jed6e^yw_ww,?+,&,b&̩l2I,ɣ6a6a))I)6a))&Y))&Y&$'=`V-P 0 e#~#VX 0 vۼjë0R201` Ckf&@:\U@1RX"a6eYdfY&Y6eJeSffW׫u^,12&̭$ʛ012ɷ{}m@?ͣ|cPeMd$Y6eJeSf$ٕ9OS7aǗMXMffTYq李|כ&̩,ʛ#)6 I*ll2ɢ==ˣ|6M&ɳ)6 l&ɲl}Ǵ@GVfYٕ6ebeXSfd&W&y_Wo=ϡPgxs6MSq&̲Il2uwrO|MSgx)*lě&ɳ*S,&:} G{llS*S,S*lS*S LS*RLLIOOz:;КلٖMbMefTY6q=.EJ}O> xGF}}4w&&%2%2:visd&Y))&Y&$'=`0vKpxگ)JeM:ieYf$Y>`8f?;΀`PX+s\_ë*ńٖMbMefTYMgt9q9>xHS8Jrgt9rhy͘MeJeMJe2JLRebMebMbz}=?S!r֦f`ڒS+eeaɳ/ ׯ˯ϬS*lߟѷ۶{(#0NPGaxfqrիN `L0`0 Pwmn6 @ ׇ_^XIaY9veٗ{@1 0@!1234"5P#A`$pm+ɓ$><ǙYYYuYuYUYUYUY5Y5YYY]]OQ%ෘcu%,fe-cʬyU@L"ZaOӨQ aC ᝮ&!#Lm\yqtym7$A %Jzcˬyu.<ǗX]cˬyu.<ǗK&SoBy 9 !ZƳuQBA1[^gd-Xɑˌ" Q/AQc#ؼsun"vwN_5A osf}hSQ' CTDjUlCLqaFi ڜio>(2`b[Gsm󕔋jh@UlD[QֵBT0_u[R 0- .zK'N2S&+OJt83֪ڻ;hvbIi>OrTT?4C h<*aD^KVr1䈡;$`,wQ̼i kQ_:%ѕG3 j_*\#sjW:ԡ >\GT;ȎAG? Xq /G'tCe- y(? \%) GEAsLADvұXPB?3'[|ަ%[YD8,wڜr58 e:IZJQo %䶓*S'G'&Y6m/Ԉ|pg|zy,^J\#4O4vY89ue P)ekAIԚIܚɬܚȬHȬ:zΞǬjjZ%Z%JD\cm*Dz$VrEg$VvEgOYt=gY|՟5gYWp5wWp-wq-wq-w"Wr%FiV$>+9"+;":zǬ>jϚ)o[Vյm[H"a#F6 ?5WΎ9r1 14i#2 kN5l؃ܖU1jqȸҤʃct4+QiVN0R^AIjYbxskZGҥeWok5Je[c[!&1m% žƥj*I\;\?ojy.GO%V-NK]7 *  * "$:C&:+*X/A0Ȣb8Y\eXƥֽ6Jcæ֪K5Qɵ0"Z|amH)Sl9lD[SZ(IӉ_P'eJ%K]<20K:476ɩ[cICUؒ[k#%cЌ\;\?oh9~sUOÕ=ipm;^vk*ʺ*ʺ.˾X }\}\}]}]}XĨ%6-"ZZb"Z2ZVyǝj%cQEQܞ;AqmA};+DF'-R=K밋uQF%;棨2FF"aEZc)/_NޭB^Z"{tLmryZcSbkko9Z6UlD[SiRڋ-@qom-GO5-.m-|q10^E,n娗?{VPu޽y!Hgtﵡ߲A{=Au4k~P]kN N%"`O=[=]jE7ܶRX{6KhjCUtyl>ԧ$PWӀb!= &{" VY/kQUkN7!vʁtzh[Q@T0v٤Ǖ⾉2|-D l+xZ r=r13µi?sVi(vmM7U׵^QDBsws.4k,rNp Vߎ' }κڗO)0ܶRN%*!81#9jڏ9[HGYqVҽV[N+G9)y":0KZ iը6 ٲ7]W5-K,M-K(/@ݥ#I34'ilx*R=O*629, n3|F"X?oK?a`#W_\z.l*#_Ѹ:_R #!Ɨ79'“!-"8kc$xKZ5iy=kiWښeۃoM'?.K x;8F5zr=8뀶K-ou%iVbAQ_}zs>ka: n29ҵydmhF5`!tbJ~jC#2lfr­Ke[︩aX[ 8/g}Bӟ{mmkl F\-Bq$nrlG6\63xUi-"!<Ӿ·~˖5 !zO ["Ďˁi/?Չqh˶.j`hM|QwKAzO FT;.dħ"*"1亼zE&,rAؔ2-Y7l_!cODNKF[6BJ0@AZqowJdcMRf,3}'7h'7cPsUl|ڶڷڶ h'P+£e[m[m[m[ouB_͢=G_:؂_4jo)M' ti- ܌fW^Z#{g;}:ؿk,ؿ.'q[b`qbh_4\HA=8KP#ׄ*R_!ͦxQ%!}S[zOmĤ(ZU31s0r FrGf­>ҭjmE7f ,mkU-6 A&,Y]myiʹs[! ~NuTcЌ?;hw췐NZp~ޙ5K.@UKݞۏUTa{o' V-~mMmL)=\_Nk0 K63/"yj"Ӏ$" |mA)vȃŕ@V3rrav[uJ"-ӏjnlD[SbpmfWQgnSw C7ظүDvo?;hw췯/?KozHh$Óq{k|Ow lҵ뜗 Tz+xm#N;܏35hC *B_一^#؞+cp:-C\ףӌ"Q,M0vʽwD(e/zE.06Ck/ j,"ڛ]C`~ֹ|i /Îr"‘͓˝Ӿև~uްh{`~9_ǃcH'۪7tzi? ɢR%>ӫ2:w;}b>WWWWV:QV>}]}]%\%t6Č^}"6]Tuo UVki|?("2y&UG/86pr]+evynd.#Zx::#vz˩;{!Amֶ[Ǩ"!GswobJ?knKIyx?oGPn84vx2̲ kmc6XXJTJJ}*^'bbXAf)ȍP!Fj`1"b3 ""?q>p]~J7s‰G 0',OX=bz'z'OXs[\ZG|I?L7M2 W>*7|;E9Es-_#!E&:Ny< 20>A# IѷLO݌x!5v? ü˴1؇],Hz?e)/Qʒu^ bɄN.*BU&4t_ކ!?S(_7 ߿C'>8@~mI-7קR:R@j.[+u嚅F=F;U?4wΐ2A-Mp=4%C CM7|;߿C.y7,nXܱf9crr+0,³ +0ҳJ+4ҳJ+8Ⳋ+8ⳖzL;,ҳ +10³ +4ҳJ+4ҳJ+8Ⳋ+8垳*b73 +0,³ +0ҳJ+4ҳJ+8ⳗ7J*|ω:'japb #3Ѩ4tʦ^0I/'^*<Î#;.w !SĄ4_=5M|1w~:O~6v(n7Hȼ[ZYk-e`XaXVaPS2#x ws{eL/c=_S(@MڦW6,MBktmfw*:DtA݌jvd&>AP3w~:O~6߻݊YSzQˆTͿc=nm<5̫<ɍ&l ɓDGl ܫ?qbn9}yL&4yL&`@ _iv=F ]&% \Tt6 fی tEh@mܤ8NqwȋFǥQ-wG@I:NJ5iSZw~:O~6(QSB;^;;Hݶ ŷ>d<&ǁZNMbF F#u>t`! ndv\q4xxŖ٫=@='{shأͣDt7 N `~Ξ#"ӟ;eO݇h*zS &|5M#UG|@E`'I}Mny:E#v]荵Tww)vSsqbh@@귔ŸΪFEq:7A8B)E?|=jT. w솒Opz 6y3妉NlUEG<7GL!4p'iڛFڨh!0 i;!8LdN{u)XΗ[yN㾪G|BJ"5tyQ^|HMJ*O=Z ΂}l?S '߸Uʨ6G0'gը<ʨaǑ+dzL2ޮQ\$&1)4S0l{ĝU ߤOvG';sbuL73eMv&lN 0P3t9eOSa1غ0taDXNʡeT;B͊SP =1?<UlTƀjwJ^>m^wLz~*~GUnz~>t{;ߣmvP#tJ#]t;g MTN΄ku~ wN0BJ2LCIb0L<;!vHNt"Qt<A tհwN),2.PNtwx0@D[{w;@Zy-1?5ctl1?4nWctީ6?{s4b:߻E/T4T̋6u#ϩluxCH% W^@GTM:tF!КW|И]*d:@;{s:cGE7B:t"A|!0쇃i&UN<0@!4ZXscLl n{4@QP3ܦȵgMo0:!St`Fl0RoU\\\qwu(~t{Qm<`Bv:mפd^>?]6F[bRp60<;P Mlݤ$peڥOv)?Ӥ6WӕNve7t&?C=ZOm>AyޣΧnB~{4u;M,Tʕ=@X.%QmHCtYþh Y6Mc:sa Z(`&L2- R_ʿ5xBc^q6ꍕ7ͧ{s <&?}<&?zimj XV"%IRVun[* %a+ X VH!4`rOLonds-A߾&RmɎ.|'VH@ͪ5xBc]SL.Ib7QMC"/T%J*mB *{ u$"Wm퐚gMn9=&%5[{&0`&Za4Ȳ v2 5~k)tL~+wv)>,߿C.a&V,X9e`rr+,,+(+(+$J+$VBLs +,Xܲܲ+,,+,+(+$J+$VBLs +,XܰVYYeeeVYYeeVQYEeVQY%dVIY%dBe<7B#x(M菷6DԤ^2IoS#tGIm<Ɏ| ~k)tZLv+G`:T;Xw~?#gF&ɾF:s҄i9Cu9edL;d;"0  5T !HR!JPB Ijc]_X "HR؅ (*I 5)ROi -C᱋XVLz,iu)/(=VS\VPYAePYAePYAePYAePYAePYAePYAePYA5PYk-ePYAePYAePY!dHY!dHY!#^,` X,` X,` Xk ,` X,!` XB,` X,6VXYAePYAePYAeSVSVSVSVSVSVSVSVSVSVSVSVSVSPlkw(#z?ͨDtj6 땍cG}t)x#ޡA! 8J٦!$,,,,,,,,,+$Jhs["Z\dwP?X%J*|NPBcw>(pX͐@9 ,.X\9`r,,,,+(+(J+$J+%d&3~liV,/X^9e), 0@!12APQp"`a?| !|CW gxYgxY9grY9g,圳VjLuedھH_%|! (C{1&G>S]Y yL~![ lrz[(~/riK8jp  HFg`$!6t4}wߜIG)a wTRLxw$ҐT~rz'I^Q3_h\i;A|P_(/ A|P_(/ @&7sRu?s˷AS^Ҿh'NM8\lp9q?״R"CAU@~.GSo.z/Y& RJ]9KTsr'GίhB+0* 1]kL&E(ENCG…ǖ^K1l_h߄~뿘PlEM)z4~#{8 N)OI.ʕP3E]S|wi!C5?DRN(]y>L*Y{Ll0Ӕ0N~7皑7ƎN0#ԅW+ |:c Gb==hCGN Qa҆|]1K1yluyi|W 5|x_ , <, <,ೂ 8,ೂ 9g,圳VjY55exYgxYgpYgpY9g,嚳VjY5, <, 8,ೂ 8,ೂY7K8 9yjk^/u#U%FI';(߾\RwRJ28m_ji! HMȞOoOL=W'QiBS5{Mu\)Z)~-=O>-eYE3O Zx"a w^,'& (怢uTqW5~;>TrيL)ϔGI~<46\4(2@'XGCm¥/%kkT1z@<7оzlGbi7EoQJg=F4Ԛo?@} vpiG5|b csx\o 𺟯>-=O>-݉\vqGyx*V&RLRdALNזFW|َSMdSo=jB{|(,ICG4GE4 )P7ȟ$b907u" %J=W"/{$]g[Chvi|nXR wvМ|Тq:?9p\q )9?Z/4mz9Ua Gb:|jiXGLNߪo_ꌴh)َL)ylp (|ϋOS{ų+w5\rQ{ٕ;8m{gvaͰ:!CT݈-n]AECA<7EgS=TEIHL67z?5\g WY54;AH?Q؎JM~.4UraMuPHu?^͌bw$6-=O0}Vߝ0`im&[=C;-=GN`x7fm hw"ͧsZ,jd؝HiqZzPWS=8 (n/P#PDEiߛû (= BvL~.,%„ڒRš..XNOu?^#e}> 6ؙ4QICKDwmET~PHiͰ2!Tkm=_E@ҿ]WW/zzE@ҵj]WW-#M6:ww~J{M61A7Ũ߅gi_ (F)4ԟ]:]{GRaD c54L,o|>]|^+H"_T}vc}ou?^|Zz|Zh':,"A0ޝ71Ҧm;+DgT\CbFb k|Zd\ ]D=WG&q+fXD#TfJAN2D ')'PvT{z>-=O>-s|r";i& ❺P(cbv{5ޖC[=L_Aa8QGWSy汶v G;C;@uR~lh؍w <>]{xl}&O4"u]{Oןff pv,)[NQ8I=pi _D[.m30qY#|x8-f%]-4PE;iC֩' iOͰ<+mA=؝{Z#L66ԷRczoK 1k  :]|@x:~;2QHh'7r"!lޗW&6ޝxKTywzT+vчI*~ >m*N7gg6&p\ٵ+b7+r7ouRW-[1ac &I{uڗRk;Π>-=NV6>;QEvW#E 506i H#u,eY*!Ej*7 ~>Te[26{p[3C9&GM.K5<[u oqƔz NInOj_]I So#|Luu?^|ZzO>M)gQi&γ84Pޝ\gńzr9_ +$J+$+(+(eVYYe`*;pm;4xܕ m/\m"RB[km2:۞L!hΥ6#Sz?[=~u&fu5BRvz>-=NaA]ELE9{+#Qmr#7 VQYeeVYYee`(4aXVGco#;m+0KE6m:`}'DCIMۍ)֚M7O;;h{M4P>6A3Hٟ뭞Կn]IΩߚÍpcvSť_/ھ8Y|p , ,BY!dHY!dVRYK)e&j_ㅐ@Yd@Yd@Y!dHY!dJY+%e,Rk+K|vھ8Yd@Yd@YdHY!dHY!dVRYK)e&=Clqm;4dݚbaz<,f"o\mKr|E7x4PGz/ ❰E=@ g :Y !d,VJY+)e,"C II-"M`GE^_IYdVIY%dVQYnYeeVYYe`+X š)0F`#%6f{1/j_|p8_/@Yd@YdHY!dVJY+%d_AF_|t Fj>!013@A 2Qq"BarPR#`bpCSc?REn4Df>V?bbbbbbbbbbbbbbbbbbbbbbbbbbb-xF_x ᡇ5 tX⡏%uYU[d]$rĸ8^>CPT|H!9?ou[ 0*юދꃀS5!a)):P&KЛK ERP7R9J J3U)<4(9͓U|.wG4~Ϳno@G}.ӟ@aU { 6yWyWyWyWyWyWyWV5HA2nzeHnmĪjTGΈ;y*(=~(͙QQF錛_(*Z>wtfR >̓ƪH/G=nG/9;x9Wx 󓛪kuLWCCqq(y^/6WGE*]'xa*F#y u.q D?ubֻ{y:O8^٦kwxʳ*E*1+O })T5qQ9{~^]#/-#k4E _?CՂ-h⟟GUgYע5\Rx_#MX#a*TMZ?Ę-_BO5j7E:wWuXLTTxއ5c2 MKwy#욗cO1tX[e'vk2lժ~v<* }޲@);;j?o>nwFX`X!`X!`XAaXAaXaaXaaXm[U,7jQX!aXAaXAaXaaXaaVUG4 2MEB ,B , , ,0 F H- 5!>SgbYU3Qin2pU^Tc}vn鶠Ti^\T6ez7(Ѹ~+yv|:I'R6i.9UGG{#cO}h'۟%݋~`r/| %WV|g0r+ܯr+ܯr+ܯr+ܯ*D:faF< 4Td5%G6nI'S;r|E t5=i3HOt,~ vvCcv3C ܉n;UWxi8gh9d T9wds㕘QG\fk]lf|7#lsZ V+WuX]bwU*Gu^-*g횐MxD*wa@wVO#%hf76}?r(DHɗu+R7D.9Rpm&ò?xۈNPs'^cݻqe('۟ԆH+"u!xrAaa0k^ɦbHGyP /AS*QS*A٨;G*1eDi_ FED#wƶ=w$r7*rPmZTEJI "술o7(lJ=BUϒWU7YPB=tiٺv5`dx϶yhuܝwds㕓h(.d1{hܙa-&F0cO1k(O1rk(8\l*>GCu,fJhvwguXg[Ұ犀pSR߸n<2y2SmwS]T="a5U*?E#.0 ̢;*5~ǣhؤe\wds㕓rsF:f+'( ɷm{&9^t:G5PS(9UJ(|ANd'dg Q#hQ3}SU#ovlR7kPf N hDxH=̂Dg;GV/NJ?EfVa`n@|Tk)Aλ$'l :?VmO*ytNyǴX@Ee6wds܈s{nDv9&R1:Oaql]M4뗟`vV1Mw831fo#.:(kЁ۫M:m 8.P;- E*4UXKy j*;sld^|(U|SIݼ\4\P r lkN ūR DXt;@vǺ~nO#q: L ѥwds.kmтXTt#bT;[wL\݃(E_&GĨv~G&wKB"ʎ'wifdE5Sy&6FU\ vhGI[]wwnf ~rƑ;50@p~PET:IHb={ 'SzfS-U( 5Dfl/ p:(6n@;h>lј9Txjqe] W1 C}H'DLC[-D54B]Wv;۲}W(9mxX[qT6Cjdb>HP-*ET6CڪY6;K$@;^8kcީ+Iv@.=p*F6TtFl]F|!v^!IgMpNwu6ɹ`;cfhSi0:"ID9E.*=(Ynj P;}ӯmܔh7URcna4*ī<6FMAdfj^@pQo4,^ǏT$᪩K'9ZjS0pPpQ R:GE%ZO;Ԭcu`9xZ%<zN><2[U Pk !Z-; J,F>V1hrڬ OF iFaH&Ĝ|Ŭ\*C74,UL'sz!K&yR4dSy*dx*R3GLgXРo7( w6쿕g\SQQRlAn\zd&vf\u3u? J;A re#|v 4AO.0P}{#le(9ax˽/T;m%<_|g;wdsq K9XQx_!_{c !Vt?'b-ʾYiN{I# 6tto2UP :jO?h+j6H_I)#9m݂E09mݏY[+fJIilY6bG69BodcQf3ln@;o?jG|l=[W㣲Q*uD /UC{-|/Um?i!Yj[2U`8^2doqȅ]7Yw.kG>=3\/9mz2gf }Njf2i2l/dpjAݏ%Gݛ)@VB.εTXn,g܃tm.6|#^[saxҏϻ۲}hpO7գ3&Loqمh@%ȵR Pp2?vނ85Q&7[ 0xiNPsn6t~}ݓώ[UEkxl09mUI1ղHj-7'^Ô^4*"’vM Pζ}}St Ϛogxw[uu; 8(xwe,i:u>Z9 ؎Lh8e;oZOmܐ;Qv]gG>y/-ӫnKg{ei=xMxկҒYIeaGKT'9>YQ~TIj9sAxMo} ʽ[3P%'Ryِx9n6Na|Ir)f<E j0+wP!Usm[.qC{Ӂl09lDi ;^&ˇ kMgI_f^^^^^^^a?wE ,'tSwE ,7tXn,pi,5@5343DwLۛ [>yUwVeWm޵tug)YT7>j[$qNa+6pUb,H[aZ}np@=lh'ېFrm4sav`rm4ڌ!,>[`qZVUjZk5jPi(e&ԃqFʆYŻ^槼[UgL620 oj1U2dQVtc#FcY'M2mpMbb3|,Fυňňňňňňňžžžžžžžžžžžżżżżżżżż\.3WMkVU MKK. !10AQa@qP`p?!~@?xOϕύϙϑσρϙύϕϕυϝϝωϑϑgb?ٟv;ÛO:?#n+%|_GϷ?'%os9J+%:SE -" ]<^$nS(KdfNrt'Z|҄"m0gCAkDNM9y}ϯtxtNPpt.QS)(a~>g˼" 0q꧇H#sz3)΢|6?Fv8qy47oO?2|~1*&{/"sSQKɚqg _HJe:X6ߔ)>2|$Χ:l}-#R4UX FPrK5z[Ӟo,xk/h,v[q$߁*%Hy_,_-Hu *+/L<2} NA,3# _:f u<)G~wd]51e"zftUƃS3 hTt 4|~MWhK ' ړ@~ :mP630ahĜ<Oޝ~#jh.Anp8ݾ>DK[IZx3^=GQQS02 9y\(ǤhL&㖌Jzz°)Y/G| 3` g^9jsY>F\N< =_=`??fjsPC3T;)OXUrt٣h̖>:lOXUrF_Ϟ~ ꔋ_]qڂSf-`q<p8ӯ:/tH!{N츋w8nyi͝wߧrw'twww{wYwg~gyلUwI'xwywguqw=wݘJ]P[/9'pw9w9yw\;gwS U9s%9s)YYd̠P֦2e[ WP'ƞ5X!2>+nqB4O C繴S{z>U@gAfxso4['܎dCFk%4ɕERå 4ʑ[5EYt#SA6WD,=y '2">Y2;Xx.e*9|;=C1O(Fsɾpq%w7nR!2{ÎWb'q?O'w;NNN;N;HQgWYZg49ZRؔRۥOc8jr|"5!L1lJ)Lv[Y{ccGJVu 4MHX3u{S <gU/z!:78nyw7nT{86;7\Y*y]v;O}iW:r@h:XkSzbc1&0MXK]B7(Ut59x4hCX15t yKGIjl٦̖8'Z6jN2Ayxz{d,&40h1g[ *؂rnԠ<-Y'jECUczS!nkbtoe1􊆫 \6hygA~ e2ܠJtF3 l#>(XSO ef NհP'7c֏X[WD6qzx8nyw7b)Jz;="$fyW-f`fop\jDW~C(庩 uiYۋkcLfV]),G 얄C,Z8r:("Yf}3T٨߰_džrڶ:yA) 6xFmyb7,mIz+hEd9CAlpIILʼ6u>Z37Ha/)Hct 4eJK@j3XZ+WH~Bg6>KgPP{-K3qB)?=?,e#; .rk_6/ǔsyxN U);•ͤvcYX9Sf߸D gM;%E'bY]g0B|{Piؘ>Z AEʅÓ8Z$#BȆ)B(B QW(*-q/XTTÇN.в!P(Тk(*-/XT*R۶i u,R*f&[ʢ c.$弨z1/ˤK[ yyT~}W ˴e_c%.(6h X݌v82VRbX7 n ,ea*MS3U(#9fvw.\vs3LB*jp5/=Q?eXv1cV̢t'8>Zī<_xӜ| y3UȄMM_/ku_tIlf24Qm㚾SOƪ}MZ70 _7c0 맴9+Nn376׎sɾpq>Rl7Mn?|[텵ppz<_g3?= L '~P6;6~?;Xv1cAR~خ"+^[2tel]>.oFʳk,a)| ș))xcqRؔR'`f p|8\T Sc՜ַhI*)z_ c SVfW2Mdk7oM;1 * `yyaVpn?|(-U]+npp ,7dtGz,`l'PK^-ޟ*c864UBd2fCQKgŃ;Th~Ş ½|CVgY]%}AV-Z|n5g@ Z%^] :P6;w \j8AB4,w̳#7 c.Pj;K%[XJC($kӿN;ӸA:īv8X!<֔xpydh,p8ݾ7&{:G17 ";17 *w8"ʙ8oz_.]o^ve09U 8.]v1&f f@iC=9{Eߓw@<\ ;G =˓s1 YZG\N7II2eQ 'q|ct%cww͔0>}g.zs<1 (>dz>[]g3;7'9vc鸁v̫1UjK(:;Í$W-.Ez4τ~7NZaK-0o{·kcLfV\"~Yn+k(5]yBx6ne -^/Fѯ(Qk!ξ~P-h5B~`jPȓ?xv8X`*iz;|~Bv]r.{#>3Q Y,vI'nv)ۧlv 'cvcvgemi|F|F"piFJ%J9J9J9Lq*NT#J9J9Jrrr)Ȕr"%dξ+;o7~ɨ"jnh.e֏puٖ>Ǣ҇w v7Bgc3esCw:z.4qRۅ| c.$c+w9S^.+q2wch i;ЅX]KkjӁ%.p8ݾ>ݠ֐TҟBtJ*[*o6 RB '~#@WG\g])Q/twR.Q[*[Zqo$flIc¹L < AI9Ð՜T\KEJu8G 5ǚՎBsPCoaЄYr˗.\xM ̙7*:08 o8cZ4U,qȗWHwt'ŖK*>͝}Wv!EhEkkQ3b} ;vLR##' Bmר'22ߟ\xXsxScmA] Ί`4 fyˌ }4ӿߏw;N'~?ߏw;N'v?ݏwc;N'v?ߏw;FLҳnNNNNNNNNNNNNNN'}?OGw#;N'r?[aM* ,xNɝ;.v\se˝;.v\se˝;.v\smβkXiK;v 3g`ѝ;Fv3ghѝ;Fv3ghѝ;F</%3.K.K.K.K.K.K. ovwKZ{7oOh@y;!L:> J( d'rPISyĀ޿Y  aY77~pYvY P-Ao!PX퇅 #E.!p,h]'슄-D!8p@I⥻"8ƋE+NxnȨN?@tJ*[*Ьh]'슄1^~0uvwz(%g[AR93ETL= t~C/tЇG8t~!)愇K\epe74Sǡ+ἾH\Ams>H\Ams>H\Ams>H\Ams>H\Ams>`Jh,)Kx evgJ:ЎT2|tg9cy}yR~t O*UΘ1@c 4> J( d'G1@Ǯnt> _ \]FC .X@I6P L t$0@ $$@(MO*3E| _ 8 1\TC .@@TfpD b$@ lP.40@ gl& BOj*78.J 1\QC .`/l&l`0-o 0W[!櫸p v3$c $0@UQc*@UU&0⫝̸d UQc*mn*@ZT< j*7IBkPxB@ 1\QC . U$0L\QC *!$08mQimr Wfs)txSW櫸pzzƸJH-}`K?t4`X$0@>\QC *iU$0lF\QC -w9UPxRsg]glZ Dx[kj*7G i)dn9;:[ o 8] 1\QC . U$0lQ\QC *9$0Uq#E5ՆuWU2~9,櫸p`?2 g|?8x& /z $0@>\QC *U$0lX\QC *8crҀPs]Xg]dm/T \?W(poj*7VWmw<(l:ŀ `WJ@/Bpy~T 1\QC . U$0lj\QC *@6$0^pq.sE5Նu䄀*;C@'ǝg`<櫸2/l@e[(g|H|\ 6@ TT$ <@A@'D0@$0@>\QC *I $0 \QC *lUc9Ps]Xg]Nu :lWcΎj*'gaV|TF*4 (:<IT$ZBC`$YFrtDX 1\QC .F U$0UA3 * (E$0̀Yc@E5Նu>Q*|SO]9Gxǘ櫼bwTcE:V|Iꃮ>|S̐I'bﻔ$#ATm/F8@$0귀>\QC *@*C ֝𢫲QC *@ 8Uy Ps]XgVFW1s1P*૸c_j(c4 9҇:[[@(Dxh I[y@BJ \ؠW׎1\QC .^ U$0. *x@2E$0Kꪌc5HnE5ՆuUDD/StU1|5櫹†> O41 xUT 48p  $$Sx:$0`>\QC *t@b}M~06+\QC *$0l;\QC *c1sPs]Xg]G ֘=Vrw®c@j*7V>W19[:[ @n5"vۻjJV?: 1\QC . U0l\QC *xU$0EUqÊ$E5Նutjq*3-yWr;櫸phc#|UE$ ?$1R#<>n HLN`B3Q$0@>\UsC *D+$0lB\QC *⪬@4Ps]Xg]GI eqXh|Vp܀/j*7V3`ubq[:[R@xjur;*JJ>T39 [@ 1\QC . Ud0l:\QC *^U$08q}H E'=цutW#V9"Ɩ|{h櫸prP3.ո |U$ $&h0\]PC *$0l*\QC *@\c% Pc Tu =duj*7GCΊ3>櫸p) ו|U@2$ $& Dž@r=Qҥ [Q$0@.K l&d`/K[l&m7w*?h]gEX.-j*7@J݂[:[m@xmܬUcW ^ 4x(X 1\QC .5|\W\;fp̀`.*#I.=93K0.Mz1ck@6wpeΊVXlt0@@1z\Q8a1j*7hI$I$I%<~d~mmmmmommm 1\_C .p׎(z@   LA)!I/M7@'!1a 0@AQPq`p? S?B?-oBF3a0f#c1&U2R=}n B&f#bp[+}Er_@4+ݛ q4)b-JܻC8V)ni\Z_D^Tdʗ 'V2¢ wޥbdn~%ᎨwNj98(JAVܓID!Xw޲t! ,kJ 6ؒWК6Ir E#9ES.@1)lxWnz,'+cqE[[mi%T\zmWS{} nEh,e.shHrI}Џ HHp=0V;ҸTV2mz+N % z>"a1Fa1f3`1F#`0?_ '$Kda0f3`0F#`0 D/ɬ&c1 b0piD @J J JC+++~D?Z![.GEd{BP/sKPI$[l Ne^BFczhiS\C5eX U> !5trFA./Q PSNJGJ(PzE cяJv*֚rKvDA#sh4'epBJX_g5n"΋2@ C!d2 C!D}?D s9 }YR4ª429,$J16$AW Ss+`y5{%2xS&I !zI]Iu!ثh~曱^ۙOE>cA>VX $BK$KΏT ci*TRԯs BD![Tm7^Ш<$jGPŧf&8E+!`n[sLTm$X!8nBt'F|rtfqCzкHHKU[G4Wo= [9V BB"PBFNx|ZLh]5* 5qrGa"-taT-[”\q}B}.:V=sv2T|Z1GLю5+w}5%gc4å?&riOl\f/R0^{.cħ5\%`D^ ȆxZLm9' C+mcN}HZNпGhO dFǣB4"m<LlFbSDe`0ġR]3C MJGb;kvf sDRB_l4>mhRWoƄJ Z8RŏKkPF=:ju.<): $G*{p]|m#9uxA(EIu_1`RyzUub4p:(kbnD;2: {n5زsC'm rpښ_YP3}9u&=ˎE>Hz#MocM> 9NJܷeEmTG=ll)$MIbLe<>IDPMکM?.X@-E >wN.yi=5Q j\VZ=pGu\[Y$S{"2[GdNׁsQR[muKoF)DDF銐օ1m.g\i2"=΃DH ocKiHyi-}`$2$%0\@bI(X;JD*TUQ"%Xcvw>IBV@VLjpD$;=op-$I#mh-2NIۑA4jˇRMLlw2%]Y i]H-Fx[^4A?:w=4)RXI\{Z9 _.fqB.]DAQ aބy#( M<\JqF2<T~B"j^ԇ| Or#&wop=쉡G eyF8*N9˅VCW#JDSkpuv=%\X7hG1;G&yB=g武GWDsZDR$!)Ԑ.("!վ  x0`Tr@a[=DVuEJ1O`'JCKղJ-|+:ieGRnBC.@.eiڰ>gA`|oN2rHT]ǣARc%$EW}-9Sm.{ L[;Qaw0dl#Y_ՑR̟٤=yT%z-%22 $Q"Igd,J8V]z"wacgWѣDC1A8JDH=%iпy2=Lյș棆dzP-W}h>64%js{c؝9ZaTs«$n5&蟢>v}7$ҸV$_v+҄1!zDc@ϡc2sƫ65(z'`0 p=,1*-HI\v?H.) EB 9?{VjMO4'0 %0NTXDv"J8 "1(eWY8R6%5+ /{Se.fƏsÕFT*3v煺{NP뵾kcYEX{S~Rt|H+JӇ>^1A2bo!T b!1pR&OI!f .+Ib tz=srq@t{X_# Jsa{4kNi!jmor"X Yu$XTlIX2dgTkbNa1`'?#c0U&C$uf%R-rNmј;,KR҅,Z]R/I[{^G%)ǵ7.'{6=;lJJsa{`IpA-ʥZ^B yۤ!%N)$ -)BDŽ$K%ʕ*C!$O1    Aʮ5 i< >hFXJ\G($>jY},<^"W̑3pՅ{XIU$<nA{q {Dt%C@̦c1f2Lc9e2zg3c!d2?*f f3A}LS1g3 C1f2 C!?`c1Oe3s1d3c!d2?<@"""">A u}+eqBR-sm;V_+z 6=z>) vnHhyըSZ-zЦch)\?ƒ+| &YJM-DsMvjGE,enQh|?> $ g$\A Q(J%$G s%C%Cdc6b$GDhI D&La([xb;#@I#$HlKBcB֜1DP@\6I'̊GOX꠩DD>+sv{62J"  kNKh7؂鵗C!~ C!U "oa0L& a0L& a0L& d[a0L& c0f3a0L& a, UU[2$"`}t&dM:p^@ T-e(P.RTmC姚UkJ-ۮ 1aTHDyE:Z1RPI=UE!tUIu ]WtP_a#6Hzԯ J%Cɒ$K$K%!$Mx5%Oi;VKJ~RQ$3S)g3 C)e2x}!!D"B!D"$-B+=F"q{1 %W)! 01@AaPQqp`?ѿ߇L1ggc}o>(z_bH ?@5v{.cЗИq 7+,Tݓ&LAZ;Da?gn}C揰cj]>$DN$=(c^>~&A{BwM,%b_r8-MP :Ȃ"}s}Ϲ>s}ϱ2^ ;gރW`"(xlnTkJdJU#eMhE?V7O WrU9qxpwDVO{S!D0̂.(xt1 j_z=YoPdכawT--*g1륾jIf;臝#0U4=,Ny7D[؍m(`i_ Gf4kPN}4O·HдrNݜKB0QOR"Mb\W9Bcr2Z"NXnQGLUAF[[TAmmE<|UA [usTTTTTTTTTTTTTTTTTTTzh!WѮ$bk%0{ʈLj Lr={Ft,ŕO/-n}E!cgDKn*b1< Θ:E]~!+>}C1  )2]Ba{? efycz߾|޹,@904͒^Gy YWl1)SSq37{sv5Nq/z Au+vhZ5TQXQΊ"ʆ 1^ 7D$=htBcTƎM|/OFz}V|g~9"?9MT5}#|>lATYv>Ay4 *XcpCIz0 gcAlT{޼4X.Ѿ:ZLKX.vۊ`5uF2ٌC1!x(iF{-<c!/"geա|?;7C?pdCA ",7[ =,CD :o8ϠDUF'fP%0A&2/&n L/ Ə ]x)zA-ZdyYqDfCZMB{VkF)1Ʈ{_wg=w(֍;[hR92Fb9ZSfjsB}^'b]U!ŤӁxRpr7A_A{mhK"0G͓2A|P]BЏD\!wPcʩZ! hĥ-4$g=wGwOO<Ƙ~x2HDJ4tp7ҜXߞ %Fz c3W^Ъ} ma':bڏC3-tk 1p4t/&ECa궽Z%lZ.z3ח 2TН2T re<lH s#}ɹb3N h[_J_QmLkUrk( +*[4{;\ܕ<-mZz5QRMB&3U{F-/DlsR9~ў*e3ߊۮ;G];×tsQ`f쑔\O`G8e7婤;rC v! cB4I! H7T{PkD#oM8B.$|`8voGhBژ=ډ`z-ak*EtmEb# ChDJi} .r-T!ZtTw>ĒΈgH{c?e ƪ{Q)D3]h΅TA_5¶-m45]P6VڵcF-owдeá5CP[P8$±dE;tg- Df47HĖQ_pz1 09pb:?owiЕeGDO5.Ȧ ףGL'-RA-7)[巺 1L1*BFrsF`͆F7ɑI 7Е!5 #YC<0?m1?Z!HwV=)ǫ$RQOcjk\xf]C7:-'?xI+-XX" &[TL > pjFVȸg IKtBGxu;cMm߀8nڼ%%\";YŏX#7|/5 DM Df,r%ĮV\Xb{W#B UZ*"8E9{? ^o}פ53f>EuG߇O_c NB{  pQG*[WRm5TevC)%O!xx`?Ҙj-O!Z! E}BdZW޲!p!!|+%-h y;? \2uﹸBJxD-VIx ;@Ǐ6=<QlG\G$|c2̯ekxBTGI^5vAsS,jBZ! D4w⿯ 163(j mEtOFzh߀!uǡD\ |_cF[~Pk71epE/ܹS: i~"# ꉒ9ÁxRѶl[ k[P|(N4E9ިBBZE4~kÂ^±z.?bӬjc7!~Og=떽w6XFSW2M'mhp%0> R\rE pY8шzNF,swp5D-c1c(JI\(F 6%j=bB<hŢZz "&! !!\j9ArR1O;oE5,^RzNvދ! _bR n< wjE bZ-Sw'!x+ X=/qSm'$H鐼ZŜ*zưAO|x\BW1x-QNE b} Sد_E~+QEP;Bmhpy####bLI3c;+G#|>3|O>G Xv-iW>G#|O>Gla7 ,)((##!Be.e 6iqa*$)φ3[!ҨQ;W FhaJ{Xjyꪪ  |uUj8݆P|>|>|>G[OᾪG#|>G-_#堒\=>g3|ϙ>g3|ϙ>govs*14';ƅqYC9ЛZXQw$O%.USctU ?鱼Hl42е)???EiOf$O}oAQݓ&LHݚH Ngψ} mk?v/]|>;UGlKIG)0Bd"""!Bƍݞk%4$:_5- !1AQa 0q@P`p?u`*o  `qhfVOokygv-Tf}S Cˆ@pB]#I;C>LCtEl8EC""(ѧL\bFaJG>Ln5V}#UgÏ:lO,F lk\jeJ XN&)ŕ=|!0Z$op)\If}ҿ=!c1cJ u; ca<]V RP0޿^fuw$mRxoY^ảf[ɣ}ɀZ C-חYqc7'io 1c.9@+;~p2}&BlFb>rU?B¥=jep_2*8oiuL0 Ձz֡ļ c9=.aX<1c1M xNVT.5l#1c?D"Yg҃ i3?'W=)`?( JDJԲ~Zǿ3YʵZp.3|I>>>8)N?J~*~*~*~:Q3TLjn'O LMCP˪fc1c)@ԗu/roZgQ3#| 6a̙u3O~n7WEҰhHv48?<Q ӈu {[M`yTdin: 죔[*F304o%7˜[ѧ=1c1=b7ű7@(c1c?焢e?&&tk-z+pחyJ+ 03c1. hM鿇9Iג{EjP DJzo.meV +SY cy-h?1;+ @` EsjZ #ebbE-hN?|Q@B.p/B)ݱc1cb9 d3㟌>n(?f@v%^G#Շhh/Us9xcX3\"Xfs82ı7iX]hƕ&Ɵ֖Fgf3 s?Hc1cZ64$5Fe`xD ; ca9F18 + 8{wLN0U~8fr)<"#'.p)A~/w)Y]y-`\[~],͛f>X6c1c( VX уK77?= ^urhbJ,`HՂZ\4zAtshJھ-&l)sm[J|cha-gn hom,я*\0h+;Bx z qBTu ?1c1c1c; ,t VWq50|qS8s&6.CM F {2&oR (wm`p.@bW( 2f'^zLTn`Z,d/35k7Z,k1\ ˖P pNåYpy(V<4_sebŕy/GO(Yx&KT 1c1cK%ņv5#)szaV痜eS=I _5@ʴ[0 W,aDn=C0Z>I ewYZcT痜 P.8ckT%01h! ^f?ܸ:G%,S# =ŠNӬ(l&@X,c@R%yz-ܸzܲ1MahŢ>4p3“REX[q c1c1c1cǴyԶ||||||||||||>gg~?M~g3ߙiWΟ@+3ǻ#bk-(in3_3_332?a?q?A?i?Y?a?A~g3_/~UlP9 ʒ Vx?m?u?u?I?y(33333337~0`\ @!w4pgpg pf2NuF7YSy閐oy::'8 5MDo_IaáJq*Kh{E xn<%B,X(s&;?3c(ٲ(Q B 2R]bŋ8RI>{R,= 1c1c RŘgǼ6ͤnt9 _"%nTpڥ [1cl,d1c/qzv, g+˜WHhvTX*h1t #ۀ8:AaSUPQ̳6, MiqmXzTcƛۤqXb-b pUzuF]c9nbi5VRszǤ1c1cav1##1v1v11oT| o8}H^[11c3wn#:.o1c1c Ifms×|x#(PBQQ/_!!_Ћ/vl]7%d||||Y .f l',ϡ)edY,K%fP>r qq9-]s =DQò,XX-Z y8ѵc/t+ߊFbK{,X` qb !'ܻLc1c1c2l"hUߞ7/W?B W屌c^ lGfF1c|ѸQT%8˨Vy/\XN&T[I.,+}F4 3v}Swp+ c)-/ucu>?lc8|=?j Q/b2'; f:2|1c1c1c; {@|Ќc1c1c; c}qWvWW11c3wt0*ֱc1c;F:>Ӫp5D%,XbŋX ɞ>Ww2ˏ⌠UY~?uGU||ߘ=b?S!<s%<1nKb='P-h \)G/H&3ҨjȌ&}XbřE挍T]gXF<sK2f-cבep+ vbŋZr"DM-ݲ,K4ց;lc1c1c7jj"{EbZ>q*UexW1` xg$1cckw|g]B8YyR6xuc ""v#F:{J/2p( WHFպ}#cRDR ZU ,K0ޟN0"Yc0R&Q\aO}͎*W?X_OwK6s/*ɰnP"X{>!~^5<1c1c; cahc; c; cacϷf;_&:)nuX1c1c1c>wu|h}61dWv1v1CmS!xY`m0b3 k],Xbŋ,Xd㏔U}cSAuO4Ώ޳j68c2bd3"lk<2$,L l|'8zz_Q,Rr o c*w1U?Ǥ1c1cav1+#1v1v11oR+_^l˛Ym$Xt0bŋ,XE%'\jQfmpNZ˞Xc1c1ch+r>xHr8nߞ 1tLQLQ.b8h1c V-f>Y QMK1Qߞ}#5(42Qhf}ҿ1T7إ> )c$m(4c/x=kj܂go iAhOig,=1pdUX&I(7 zߔ ,GrieD,I1vjl01N-+}[( 1L),iWF1c1c1c1c>wu#28FG1c1c1c>wu#V 11eh^uA ccAu,Xbŋ,Xe4]1ŨwB1Aau{AKI;F;h cXCC$ϱ4rd@q`(T=9/R1J[1bŋ,bńJUYϮ bXH̓^Y{|IhPUKbŋ,Xb'2S0UʉŏmǴh&pkǯoApaQ }1c1c2ńKIb81Jxk1s5{lc ^59Y`X@ʒTTqc/!UBcfUU|1ae1<0:wz*'+d;h.Zw1jat͊Iv̎0v?0pbDO}(1. ڳ! L;kȷLsdjat͊Iv̌c7ٙ1.y즦qLcݵdkMbRo/R1c*X#WcڽFX@sJܚ; :zѠBO9/i1иGsðƞ#oGO]5&0[B1uRhnؔSp };,rF1cy1<" #, n͋,Xbŋ,XbԸK0 j_5-&9$f,ܯLv!(Z(]R*/ 7a-" М%p=ۂa_\c,R#1c0L޸/VʁyeT4r󕙨O9/hj+:L0xlcacMp@G@%6Q%-ȁƪ[l0ηGY"xug3B|-hh14uG=+`h t(X* Qj>,45h˽Hc1c11c=>WF1c1c1c1(a28\c>wjLEF^D .㙎HN~2A6@A 1c1c16PǓ>wk ho|#cz(]%9XQF ۴˃; c; caDrci;>t=MS,A)pLU^HoV%ӑݍy/BQlrbŋ,XbŋV5(***,UIýK*>8~'G=1c+\eBC1BGSd/YEzDpU'=V'scرbŋ,X,Xŋ -OwiӴޓ<]C6-vbŋ,Xbŋ,X:'s0T[Lvb>]1c3cK݋enQc %= g21cfDR Vlcy,yM5X+0q8j{F16/=]ILc-}-Pp a\᯿Mьc&+1er&&Y#.5xcan;uuSB iHYf,rh+h;bJ$Auyi0b;7MCw[_Ǧ1댱ɟwR(9Tc1.~VF&ꯟ8pZ}{G(pRV;ьgϰyz==q[2m̑%S#n%DoV'ARř( f/ї-8_WX0*aюŸ6^xf1=Dx& 9+EL#=L:wa aKVpc1c; c1`k%7{H|Ќc1c1c; c-pq(1ÇF}іP|1]T iЄTc–cnf3+)Yvacb{^B1v<@̚p} }ݡM %eKY&5z, 4g!axch] c; caao(.@ߴcz)1ւyf8ʢŋ,Xbŋ+ +l`WuYu,bhS&Ry81"9ŶywN3\I䎐K]1V'2yarJ#3y"@UޥౢhF^UݬXbŋ,X,XegF|l|/O#C.CL:k,Xbŋ,XbŋfW(G%78=ܱc1c3$.fcMrIAm/WA, ʠ+Roae186^]b>pLRً4٨Z`nmeh_6b8x{Oă@OqnwU#1c#HA,2~wZԬ51vclF4(6x5QCU1U7HFpV%[ُoiFX1+_(kE1`4V=qݒ`w1<#>=!1v-dؔ4o>wqdlp%QFc*ĢcByϩ3c1c1O`WNHJxت qq9W= E,XbŋML~qumi-@eטP=i2Z[Cx7yTȷ|oX uUn^^)UKxc.7'#kc1f7U'@c!5efbC2 AA:}o6%rbŋ,XbŌXXL灋za=b&rbŋ,Xbŋ,Xbņɠ-VOcdX1׋a*)2 j@`DՖf;0¨#'t$#B U(P0JZ婼^gøc1u95\wZM,֫  "ȅ[ZT3j(5вaU((J JZ3߻vWߡMCl1cJ( 8&.yTYq`c{g^Ȁ04#%YED-2pLՅV g` kcofuǛ,o:зE˱3"=?YPn (#x9'y-n C51e49zCU)YVRc1cav1 T7=F@c(˴1c1c1c2Ci z}]8vt5̻yƲTN 5rcK qT pJUzIF1&dX;B3 )}ݰd-]#s.{h1"U8jp|IWB1v1&X%uAX8ƳmurKw{s\kL1NR,XE,X&@V ƒu*!9g*5,o,YM 3/SuXd׬mҫ}cȓ[s8Ӆx&,=1e([;2] 0h̒+ǸKlx1q<)j'9F1c1a0J9kŸ>p|׳c1Xwl츛 n~H1.ǟz=g c2]3Ād]zC1c1vac1B1cacac1cx^s0̱~9F1X1c1c1c>wo+sfy/(1"c1c1vS5cN^UQF(iJ>bŋ,Xbŋ,tqCH4bŋ/+9 AS,#+*Vii%-ю;@Ycƹу }&Jq\,Xŋ,bŋ1bŗAbƟp˶;:}flMΧibŋ,Xbŋ,Xbŋ -2C};^1[.c1c1c 5} NG2:1c1c1ctD0=};آyCc1aD¸.W vGJ|*WHc1hy*miBv!D¸.P0B?j?%5aR!`#1>j.;dS{XKMq.E<,EZ|e&_7Q0}#1c18utj`fyϯfa; cc5PcĩW7 57 F1crcfכN>=zC1c1vac1B1cacac1ct4-4F1n1c1v1}ݺK_yy^b׍c1c; cu}{7\Tbŋ,Xbŋ*++n1X[ŋ.bDwma1{@ch-FFes\e9=)P,xbL Lj 뵋bŋ,X,pqckU)^y dv,KܖYt,Xbŋ,Xbŋ,Xbŋƴws8x\(;Opyh21c1c1cwE-oeJb#S9S״1c1c1c3CGsy\0|]61c@&J1vdkEwXEAQv#hu@&cז("^TLJ`ݵ c*kc1c1b ɩ.#zwsٱMacg2VGy$У/|řav08*7 w޷yǤ1c1cav1+#1v1v11on`m[ \_ׇ kc̎; c; cacϷڷ06-./kÅ1bjRaqc1c; cr-% :14,Xbŋ,Xig܀,YC r-. H>v2.~ 2ю;Abc-Qw319c6J'Jڻ1¼!,c1c,b,XcWb"ի0D\~c~\ pi.G9;Se @ŋ,Xbŋ,XbʋrȖyt<c0 5l8aÑoy{s5=kp1c1c1ARa5 |E5Z:r4ܷN1c1c1*9燋ӹ# 3`c@~/; c0ћTi̎; e6(;H5xIM]^ c͌ItGa1C; <ǻ./p8R1c1c2Mjf i\ѩ?????1;k!=h$MIS8jl]Cc ńc1v\*Ϻ_'w1c1c1c; {@|Ќc1c)dk1c1gfoP֮[cs$v1v11oEdgY9CcZn1bm#1c1v2zQھl}.@s ,KXbŋ,XbƩC;`xE,ǂSގv * تpW.cԎю;ABфc˨A̳{{i/"~,}ieXaO61c,bŋ1b,X"ׄbU G (pb^RϬ$Uh@[e,Xbŋ,Xbŋ*n#V`h([s\g5HG7 kҲ綾~cc1c1cR ܼϸ^8\e; c1c1c J^Ǟ[aܻ"Ư :8[1Bځhˎ; bXuu'}C<[Кl1`j.;ю${f(WzuF1c1c0*c26 \88ywAc>s>ɰ1vb^ Gy0gwn vJ#1c3$\#5}y~q c1c1c1cǴ1c1(Pir` ~`d"1c1c>wjC133v1v11oSn}m!cn.1c1c1e-O 'Ͼ%j֡+A̬9E,Xbŋ^ohS +*,XDlnu98w;F;h c8 W2-v~L9wšO%/3F_j Cwc,XbŌXŋKQ@[0󘞑c+O_/7w4Sx0$B\^k,Xbŋ,Xbŋ? r7ˎ J9W1ԋc1c1`'@\yyCw6373qLh1Ebp5XVyǾb`y>1xVqc1c.):{81c1c11c~c1!J1s1c1c>wg;2e3:[cf3+)v1v11of2{-V1cXAjVqc1c; c[FۑedI̻~wԋ,Xbŋ,vv (,YG&h؇{>=CD97ȃ0 !.Q__oO?GWyE>SyEU<Q_zE[yL[0+e/2rls=,bŋbŋ,bŌYz"Vj;Q˺0C06$OqiJXbŋ,Xbŋ,2 F=f>N `)FY凟`=YS: $4Ga1ۀ@x_u{+fM`o̤Qc1c1c0.,x0 MaccCrj3q[V~((#1tF1ca5-QEuxϜzC1c1vac1?B1cac&i B6[Ec11oDOt̋ cޒ>c1c; c}_=ӣ2.*1cT4c1c; ce:5=o|-yA"O|o|3+1>ci0|!Pw=BtEtzE)-LM<}DQ(J" S" Y(J%DQ(J%w"8lwvbŋ,Xbŋ,Xa]|F=mwS/,Xbŋ,Xbŋ,XeTdAݶA2Cic1c1fM Y]J^PVzjgA< yF1c1cbchb8G@+v(Gj3ح٭v1c ;F$$Gac;T*.HLsU29f'>{v14FUtlXwv [|c1c1czuˀx– 7rw?Ac>s>ɰ1v{o!53QMy1h[c; c1ظA cAHc1c11c=*Geq?A?i?]?e?E?}?m?u?u?I?y,7~?5O~':~$~Tq@e-kϸ|ωOω~? O~'??*8\WB]g|O|O|O|O|K~W'ij|O|O|O|O|O|O|O~'߉o~ ?=|ÿ㤦')p'p#4YjsP:*Xܟx' p'p' p]'@??/S0HWd6q >5$ tXbŋ,Xbŋ1bŋS<qz׾.+'`?ڧ,XbŌX,XbŖe@]81c1b^p qM]{ c1v$PVZ٫aJ8UEUcוkTmJV2iE3ۅ ]r%.>P1&՝r q7#8]G#{5nqbŋ,X!J͍^‰F,Xbŋ(z 6bM\N,Xbł,ĸ9osa (=>,XbōHb˗~ {MUOd1c1c( O[ 2 ((0f(Q{ӧN:tӧN4hѣF4ӧN *[wqDܵS:@d$HP (@D"n#XW8oGxo1c1c0l܆l'3K7P3T-k@ՙMT-`hU%Ƀ Z5aAv_\L9 ϼΡPVg5Pt5W&BsBkZjnkB.&L :Bִ YAv_\L9 1c1b.@[*/##<1c?1&$ڳNP<[5vg rg-0|ŋ,b,Im8h#~bŋ,Yr09yWirq`-ٱo'Np? V4 T{[fkH4u 1c1e[ xћOޱʵ*l6% +@`ʵ*l6% +@`ʵ*l6% +@`ʵ*l6% +@`±ʵ*l6% +@`zC1c1 TKU[c1c? : Cmpbh♔/|_>bϘR2`z2|1oWN+AӢ-D_GcJF"e Dss 9t>+^~\tdc1Y֣)9g #? Ϥ2`( GX^F '<3v6ηn GX^F '<3v6ηn GX^F '<3v6ηn GX^F '<3v6ηn GX^F '<3v6ηn FlfokyUgvmTfS Cˆ@5qF nn%FFFFFQJn%7MIMΓtIt26svy:tb. #THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) #HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #standard lib modules import os, sys #make the window appear in the top left rather than bottom right os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (0,0) import pygame import threading import gc #setting the working directory to the directory of this file os.chdir(os.path.dirname(__file__)) #local game modules import classes.config import classes.game_driver import classes.level_controller import classes.board import classes.menu import classes.info_bar import classes.speaker import classes.colors import classes.lang import classes.logoimg class GamePlay(threading.Thread): 'The top most class - subclasses the Thread to keep the game and speaker in two different processes' 'holds main loop' def __init__(self,speaker,lang,configo): #Call parent's initialization threading.Thread.__init__(self) #Create / set additional top level game objects and mainloop variables self.speaker = speaker self.lang = lang self.config = configo self.user_name = self.config.settings[4] #message said at the start of the game #self.welcome_msg = lang.d["Hello"] + " " + self.user_name + "! " + lang.d["Welcome back."] if sys.version_info < (3, 0): try: self.welcome_msg = lang.d["Hello"] + " " + self.user_name.encode("utf-8") + "! " + lang.d["Welcome back."] except: self.welcome_msg = lang.d["Hello"] else: self.welcome_msg = lang.d["Hello"] + " " + self.user_name + "! " + lang.d["Welcome back."] self.config.google_trans_languages = self.config.settings[2] if self.config.loaded_settings: self.config.fullscreen = self.config.settings[3] #self.config.resized_size = self.config.settings[5] self.cl = classes.colors.Color() #Create variables used to determine when screen redrawing is needed #redraw_needed = [0 - game, 1 - info, 2 - menu] self.redraw_needed = [True,True,True] self.game_redraw_tick = [0,0,0] self.flip_needed = True self.init_resize = True #menu scrolling speed self.menu_speed = 7 self.menu_tick = 7 #'global' score holder used in one game so far self.score = 0 #As long as this is False the main loop will keep running. If some action sets it to True the loop ends and so does the game. self.done = False def create_subsurfaces(self,game_board): #create subsurfaces & set some of the initial layout constraints self.menu = self.screen.subsurface(self.game_board.layout.menu_pos) #menu panel self.menu_l = self.menu.subsurface(self.game_board.layout.menu_l_pos) #category menu self.menu_r = self.menu.subsurface(self.game_board.layout.menu_r_pos) #game selection menu - games in a category self.game = self.screen.subsurface(self.game_board.layout.game_pos) #game panel - all action happens here self.info_bar_offset = self.screen.subsurface(self.game_board.layout.info_bar_offset_pos) #offset - empty area between game and bottom panel - if game is not high enough to fill all available area self.info_bar = self.info_bar_offset.subsurface(self.game_board.layout.info_bar_pos) #info panel - level control, game info, etc. self.misio = self.screen.subsurface(self.game_board.layout.misio_pos) #holds an image/logo in top left corner - over menu def fs_rescale(self, info): 'rescale the game after fullscreen toggle, this will restart the board' 'could not get all the game objects to scale nicely' #pass new screen resolution self.game_board.layout.update_layout_fs(self.size[0], self.size[1],self.game_board.layout.x_count,self.game_board.layout.y_count) #load new game - create game objects self.game_board.level.load_level() if self.game_board.game_type == "Board": #adjust the layout to accommodate changes to number of squares automatically added due to screen ratio change self.game_board.layout.update_layout(self.game_board.data[0],self.game_board.data[1]) else: self.game_board.layout.update_layout() self.create_subsurfaces(self.game_board) info.new_game(self.game_board,self.info_bar) def fullscreen_toggle(self, info): 'toggle between fullscreen and windowed version with CTRL + F' 'current activity will be reset' self.redraw_needed = [True,True,True] if self.config.fullscreen == True: self.config.fullscreen = False self.size = self.wn_size self.screen = pygame.display.set_mode(self.size, pygame.RESIZABLE) self.fs_rescale(info) else: self.config.fullscreen = True self.size = self.fs_size self.screen = pygame.display.set_mode(self.size, pygame.FULLSCREEN) self.fs_rescale(info) def on_resize(self, size, info): if size[0] != self.wn_size[0] or size[1] != self.wn_size[1]: if size[0] < self.config.size_limits[0]: size[0] = self.config.size_limits[0] elif size[0] > self.config.size_limits[2]: size[0] = self.config.size_limits[2] if size[1] < self.config.size_limits[1]: size[1] = self.config.size_limits[1] elif size[1] > self.config.size_limits[3]: size[1] = self.config.size_limits[3] self.wn_size = size self.size = self.wn_size self.config.settings[5] = self.size[0] self.config.settings[6] = self.size[1] self.screen = pygame.display.set_mode(self.size, pygame.RESIZABLE) self.fs_rescale(info) self.config.size_changed = True self.config.save_settings() def run(self): #start of this Thread self.speaker.join() #join speaker Thread self.speaker.say(self.welcome_msg) #say welcome message #initialize pygame pygame.init() #if self.config.screen_size_autodetect: #override configured screen size if auto detection turned on display_info = pygame.display.Info() self.config.fs_width = display_info.current_w self.config.fs_height = display_info.current_h #check if there's a size available from previous session if self.config.settings[5] >= self.config.size_limits[0] and self.config.settings[6] >= self.config.size_limits[1] and self.config.settings[5] <= self.config.size_limits[2] and self.config.settings[6] <= self.config.size_limits[3]: self.wn_size = [self.config.settings[5], self.config.settings[6]] else: self.wn_size = [min(self.config.fs_width - self.config.os_panels_w, self.config.size_limits[2]), min(self.config.fs_height - self.config.os_panels_h, self.config.size_limits[3])] self.config.settings[5] = self.wn_size[0] self.config.settings[6] = self.wn_size[1] #set screen parameters based on configuration in Config object self.fs_size = [self.config.fs_width, self.config.fs_height] if self.config.fullscreen == True: self.size = self.fs_size flag = pygame.FULLSCREEN else: self.size = self.wn_size flag = pygame.RESIZABLE self.screen = pygame.display.set_mode(self.size, flag) #Set title of the window pygame.display.set_caption(self.config.window_caption) #create a list of one sprite holding game image or logo self.sprites_list = pygame.sprite.RenderPlain() #create the logo object and add it to the list to render on update self.front_img = classes.logoimg.LogoImg() self.sprites_list.add(self.front_img) #create a dummy self.game_board variable to be deleted and recreated at the beginning of the main loop self.game_board = None #kind of a dirty workaround to avoid issues with anti-aliasing on devices not supporting aa compatible bit depths - hopefully it works (not tested - haven't got such device) if pygame.display.get_surface().get_bitsize() not in [32,24]: pygame.draw.aalines = pygame.draw.lines pygame.draw.aaline = pygame.draw.line #create game menu / game manager m = classes.menu.Menu(self) self.m = m #create info panel integrated with level control - holds current level/game and some buttons to change levels, etc. info = classes.info_bar.InfoBar(self) self.info = info #Used to manage how fast the screen updates clock=pygame.time.Clock() # -------- Main Program Loop ----------- # while self.done==False: # start, switch or continue a game #not really an implementation of a State Machine but does the job if m.active_game_id != m.game_started_id: #if game id changed since last frame if self.game_board != None: #if this is not the first start of a game - the self.game_board has been already 'created' at least once self.game_board.board.clean() #empty sprite groups, delete lists del(self.game_board) #delete all previous game objects #recreate a new game and subsurfaces self.game_board = m.game_constructor(self,self.speaker,self.config,self.size[0],self.size[1]) m.game_started_id = m.active_game_id m.l = self.game_board.layout self.create_subsurfaces(self.game_board) info.new_game(self.game_board,self.info_bar) if self.config.loaded_settings == False and self.init_resize: self.on_resize(self.size, info) self.init_resize = False gc.collect() #force garbage collection to remove remaining variables to free memory elif self.game_board.level.lvl != self.game_board.level.prev_lvl: #if game id is the same but the level changed load new level self.create_subsurfaces(self.game_board) info.new_game(self.game_board,self.info_bar) self.game_board.level.prev_lvl = self.game_board.level.lvl gc.collect() #Process or delegate events #mods = pygame.key.get_mods() for event in pygame.event.get(): #pygame.event.get(): # User did something if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): self.done = True #mark to finish the loop and the game elif event.type == pygame.VIDEORESIZE: self.on_resize(list(event.size), info) elif event.type == pygame.KEYDOWN and event.key == pygame.K_f and (event.mod & pygame.KMOD_LCTRL): #CTRL + F - pressed self.fullscreen_toggle(info) elif event.type == pygame.KEYDOWN and event.key == pygame.K_F5:#refresh - reload level self.game_board.level.load_level() elif event.type == pygame.MOUSEBUTTONDOWN or event.type == pygame.MOUSEMOTION: pos = event.pos if event.type == pygame.MOUSEBUTTONDOWN and self.game_board.show_msg == True: #if dialog after completing the game is shown then hide it and load next game self.game_board.show_msg = False self.game_board.level.next_board_load() elif pos[0] > self.game_board.layout.menu_a_w and pos[1] < self.game_board.layout.game_h: #clicked on game board self.game_board.handle(event) elif pos[0] < self.game_board.layout.menu_a_w: #clicked on menu panel if pos[0] < self.game_board.layout.menu_l_w: #clicked on category menu m.handle_menu_l(event) else: #clicked on game selection menu m.handle_menu_r(event,self.game_board.layout.menu_l_w) else: #clicked on info panel info.handle(event,self.game_board.layout,self) elif event.type == pygame.MOUSEBUTTONUP: if (pos[0] > self.game_board.layout.menu_w and pos[1] < self.game_board.layout.game_h) or pos[0] < self.game_board.layout.menu_w: self.game_board.handle(event) else: info.handle(event,self.game_board.layout,self) self.game_board.handle(event) pygame.mouse.set_cursor(*pygame.cursors.arrow) else: #let the game handle other events self.game_board.handle(event) #trying to save the CPU - only update a subsurface entirely, (can't be bothered to play with dirty sprites) #if anything has changed on the subsurface or it's size has changed #creating list of drawing functions and arguments for each subsurface draw_func = [self.game_board.update,info.draw,m.draw_menu] draw_func_args = [[self.game],[self.info_bar, self.info_bar_offset],[self.menu,self.menu_l,self.menu_r,self.game_board.layout]] if self.m.scroll_direction != 0: if self.menu_speed == self.menu_tick: self.m.scroll_menu() self.menu_tick = 0 else: self.menu_tick += 1 #self.redraw_needed[2] = True #checking if any of the subsurfaces need updating and updating them if needed #in reverse order so the menu is being drawn first for i in range(2,-1,-1): if (self.redraw_needed[i] and self.game_redraw_tick[i] < 3): draw_func[i](*draw_func_args[i]) self.game_redraw_tick[i] += 1 if self.game_redraw_tick[i] == 2: self.redraw_needed[i] = False self.game_redraw_tick[i] = 0 self.flip_needed = True if i == 2: #draw the logo over menu - top left corner self.front_img.update() self.sprites_list.draw(self.misio) if self.flip_needed: #update the screen with what we've drawn. pygame.display.flip() self.flip_needed = False #Limit to 30 frames per second but most redraws are made when needed - less often #30 frames per second used mainly for event handling self.game_board.process_ai() clock.tick(30) #close eSpeak process, quit pygame, collect garbage and exit the game. self.m.save_levels() if self.config.size_changed: self.config.save_settings() self.speaker.stop_server() pygame.quit() gc.collect() os.sys.exit() if __name__ == "__main__": #create configuration object configo = classes.config.Config() #create the language object lang = classes.lang.Language(configo) #create the Thread objects and start the threads speaker = classes.speaker.Speaker(lang, configo) app = GamePlay(speaker, lang, configo) speaker.start() app.start() pysiogame-1.30.811/LICENCE.txt0000644000175000017500000010451312201770056014557 0ustar tigertiger GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . pysiogame-1.30.811/__init__.py0000644000175000017500000000010512201770056015055 0ustar tigertiger# -*- coding: utf-8 -*- __all__ = ["pySioGame","dictionary_large.py"]pysiogame-1.30.811/README.txt0000644000175000017500000001432512201770056014453 0ustar tigertigerpySioGame - Educational Activity Pack for Kids Please note - this game is playable but still unfinished - or rather is being continuously improved (not so much recently - not enough hours in a day). Please let me know if you find any errors or bugs in the game or in translations, formulas or other game content. pySioGame is built with Linux users in mind - written in python and tested on Ubuntu. Sorry no Windows version as yet. The game is intended to be compatible with python 2.7.3+ including python 3.x. Some changes made to make it compatible with older versions of python as well - but recent versions not tested. In order to run this game you need the python-pygame package installed. To check if you have it run the following lines in terminal (Ctrl+Atl+T): $ python >>> import pygame >>> exit() If you have no errors importing it you are set, else you need to install it, in Debian based distros run: $ sudo apt-get install python-pygame And if you want to enable the voice in game you also need eSpeak which - if you are using linux, is most likely already installed, if you are using any other OS - well no luck - I'm afraid it won't work - but can't test it really. To start the game from terminal: python /home/user/path/to/the/game/pysiogame.py #or using python3: python3 /home/user/path/to/the/game/pysiogame.py Should start with double click if marked as executable (Right-click -> Properties -> Permissions -> Allow executing file as program) or if you like you can create a custom launcher using one of the above lines for the command line field (obviously after changing the path to the program first). The pysiogame_icon_48.png file from pysiogame_icon folder can be used as the icon for the launcher. ---------------------------------------------- The first time the game is run will be in normal windowed mode (not in fullscreen). To display it in fullscreen press Ctrl+F at the start of the game or go to Preferences and enable full screen - this will be saved and game will start full screen next time. ---------------------------------------------- Translating: If you would like to help translating this game please use one of the included files within languages folders. If your langauage is not there yet copy the en_gb.py and start working with the new file. ie. if you are translating to Spanish open es.py, French - fr.py, etc. The es_di.py, fr_di.py, etc. are lists of words used by word building activities. These are partial translations from English - English version is just a list of words most commonly used in English - you may check these as well if they contain any words not necessarily suitable for children. ---------------------------------------------- Interface: Menu Panel - left: left column - list of categories right column - list of games in the current category Game Panel - top right - the largest part of screen: piece of screen where all game objects are placed for you to drag around :) Game Controls - bottom: (some of these buttons are being hidden in some games if they are not needed) tick button (ok) - used to let the app know you have completed the task and it's ready to be checked you can use ENTER instead to speed this up reload - used to reload the task, or reset it to the start position may be useful in the Connect games if rendered game is unsolvable game title - displays current game title (optional) when cursor is over the game panel and acts as a hint text when cursor is over game/category icons in menu left/right arrows - change levels or just some aspect of the game (ie. photo to piece together) left/right - fast forward/backward - will move by preset amount of levels or double arrows to skip to the next type of activity (available in some games with large number of levels) level indicator - top number is the level you are on, the bottom pair of numbers is usually current game in the level / number of games per level if there's no number of games at the bottom it's up to you to change the level when ready for harder task. close button - closes the game (2 clicks needed) mini arrow pad - in games requiring arrows to navigate in the game the mini arrow buttons will appear in the left bottom corner this is to enable it for use with touch screen devices (running ie. Ubuntu) Technical Stuff: This game used to be optimized for 1024x768, but recently rebuild to work on larger (and smaller) screens as well. The layout is a mixture of fluid, elastic and fixed elements. The menu is fixed to the left with static size (doesn't scale, but is scrollable) The actual game panel is scalable up to either the width or height whichever is smaller, On wider screens there will be a gap between the menu and the game panel in some games with fixed width, however some games are adjusting its configuration/number of squares to fill the whole screen or as much as possible and often number of horizontal squares may be different depending on whether the game is in full screen or in window mode and for that reason when changing mode (or resizing window) your current activity gets restarted - so don't do it in the middle of working on something or you will lose it. Images on Game Panel will scale - might cause some visual degradation on large screens, Bottom panel stretches its width to match that of the game panel, but size of buttons stays the same on all resolutions (and so do the menu icons), so on small screens you may end up with no space for game at all, but anything with width over 800 and height over 480 should be fine. Sorry for all the mess in the code, but this is my first and only project after reading some books/tutorials, so do not expect professional product - this was my programming sand-box. It was intended as a tool for my son to learn. He liked it so hopefully your kid(s) will like it too. Enjoy! Ireneusz Imiolek pysiogame-1.30.811/CHANGES.txt0000644000175000017500000002417512201771637014600 0ustar tigertigerChangelog: pySioGame - 1.30.7xx - beta: - level data and game preferences including currently selected language are now stored in $XDG_DATA_HOME/pysiogame or $HOME/.local/share/pysiogame depending on configuration. - new games added including activities to teach kids reading clock hands, one more multiplication table activity and a little tool useful in learning various types of shapes. - some tweaks done to the way titles are being displayed - scrolling categories/games in menu now moves them one at a time rather than skipping to the very bottom + added support for mouse wheel for scrolling. - quitting game through the bottom-right button requires two clicks (not necessarily double click), Esc and in windowed version "X" button gets you out of the game without confirmation. - paint game - brush size now being changed by slider rather than +/- buttons - window can now be resized (but exactly as with toggling fullscreen on and off - changing window size will also reload the current activity, so don't do it in the middle of working on something) - handwriting font redrawn: advantages: one font for all languages, no more unknown authors and licences for fonts, more letters available including accents, tildes and what not, disadvantages: it's not as visually pleasing as the previous ones and there's no arrow guides the previous fonts had. - and many other changes to the way the game looks and works. - PS. changed the version numbering system and since this large leap in numbers pySioGame - 0.4.1 - beta: - added Spanish translation - thanks to Miriam Ruiz - removed a bug in calculating window size pySioGame - 0.4.0 - beta: - added partially translated Russian Version - thanks to Anton Kayukov (Антон Каюков) - sorry I forgot do do it earlier - added new activities - 3 math games split into separate games so different operations are now under separate launching button - made cosmetic changes to some of the existing activities. - optimized images further - now it is possible to change child's name in settings screen (just start typing and press enter when finished) pySioGame - 0.3.1.2 - beta: - corrected some area/volume formulas and changed shape/solid images - added labels - paint - flat brush behaviour changed slightly. pySioGame - 0.3.1 - beta: - changed the Paint activity: - added short history (undo/redo) - added new straight line tool - changed the painting functions slightly - changed 'circumference' to 'perimeter' in shape flashcards pySioGame - 0.3.0 - beta: - levels are now being saved to file, so when you switch activities or close the game - next time you come back levels will be set just as they were when you left (auto-save on activity change and on program close). - object surfaces are only repainted when something changed on them (ie. colour, text or image) - helped to speed up the game in some cases - mainly paint and letter tracing activities. But all activities should work faster now. (unfortunately they are still all blitted to the screen when screen needs to be updated - no plans to change it) - added new colour creation activities - Hit the Mole game still not perfect but now the game finishes earlier if maximum number of allowed escapes is exceeded. - "read game instructions at the start of games" now disabled - it turned out to be a bit annoying - now you can listen to this text if you click on the instruction box. pySioGame - 0.2.3 - pre-alpha: - added Touch Typing program - only available in English US and UK, Polish and Russian language versions (sorry to other language speakers - I do not know how to guide someone to use dead keys, etc. in multiple languages) - this will remain unfinished - I have started it and realized that it is more like an idea for an entire standalone application rather than a small add-on to this game - but still did not want to throw away the work I have done on it so far - there are programs like this already out there - ie. KTouch, Klavaro, etc. - converted some of the largest .png files to .jpg format - saved over 2MB - completed* the letter flashcards - added new words and images (in some languages where I could not find a reasonable word the letter was left uncompleted) - done as much as possible without any knowledge of some of the languages - take it with pinch of salt and let me know about any errors. - The multiplication/division games now additionally accept numbers typed on a keyboard as a faster way of response (type answer and press enter to confirm) - added another Connect numbers game - but this time numbers are stacked vertically - makes more use of space if you have a wide-screen monitor. - corrected pronunciation of Polish letters in the alphabet/letter games (ł,ń,ó,ś,w,z,ź,ż) pySioGame - 0.2.2 - pre-alpha: - added multi-row functionality to the multi-sprite object, which in turn: - fixed the problem with game crashing on letter flashcard game pySioGame - 0.2.1 - pre-alpha: - corrected few errors - added new colour matching game - colours stacked vertically so there is more space for colour names pySioGame - 0.2.0 - pre-alpha: (jump to 0.2 in order to be in line with upubuntu.com version which started at 0.1 instead of 0.0.1) - added Greek translation thanks to Στέλιος, versys650gr and other members of the Official Greek Community of Linux Mint who helped with the translation - changed some icons - categories colour coded - added further support for multiple languages - added new flashcard game to work with all languages supported - currently works with English, Russian and Greek - other languages will be completed soon - fixed some bugs - corrected the error with triangles - swapped the descriptions over Obtuse Triangle and Acute Triangle - again thanks to Στέλιος for pointing it out pySioGame - 0.0.2.1 - pre-alpha: Some minor changes to make the game more touch-screen friendly: - replaced the right button click function to skip the levels with additional 2 graphical buttons (available when needed). - added little graphical arrow key pad in games that require the arrow keys - not tested on touch screens - are the buttons large enough for little fingers? - in the owl memory game - the "in-game" arrows are now clickable/tapable Other changes: - sheep maze - sheep movement now slightly changed - now the object (the sheep) behaves nearly the same as other movable objects in the game - holding the arrow key will make it move till it hits the wall or end of board - enabled the game to be translated to Finnish. pySioGame - 0.0.2 - (0.0.2.0) - pre-alpha: End User Point of View: - added preferences panel: - used to select language - so far English, American English and Polish are somewhat complete - other languages can be enabled - but are untranslated - this is for translators to test their work - now you can turn off the eSpeak - if you want to - as well as enable instructions for the games - uncompleted yet - you can now select to start the game full screen next time - enable Fullscreen - your selected settings will automatically be saved in languages/lang_config.txt - make sure it can be written to - added 2 (+1) new games: 1. 3D shapes - flashcards 2. Another alphabet completion game - but this one includes special characters of selected language - no big difference in English apart from it being now on 2 lines 3. Letter writing game with Russian Letters - uncompleted / needs a better font / no arrows yet - changed few games: - made them capable of displaying non standard characters, ie. accents, Cyrllica, etc. - the letter sorting games now use full alphabet of a selected language - added little word lists to each of the languages that I plan to support - these will be used by word builder/word maze games - added few colors to the colour game, ie. brown (silly me - I forgot about brown :) - first level in colour game is now indented as a learning tool rather than testing knowledge of colours - shopping list now has limited number of fruits/veg in each row to 7, and the basket rectangle is closer to the items - Hit the Mole game now moved to games - this game is in fact still unfinished - no hammer yet - and the graphic could be hanged - some games had it's number of games per level and number of levels changed - word list has changed completely - the words in it are kind of more commonly used words in English - renamed first category to hold game information, copyright info and settings, and some related stuff in the future - changed few category icons Technical changes: - changed coding of all source files to utf-8 - enabled the objects to render/speak and deal with utf-8 characters - and all this to still keep it py2.7.2 and py3+ compatible (let me know if it is not) - fixed scaling problem in older pygame versions ( < 1.8 - hopefully fixed - untested) - cleaned up a little bit, removed (emptied) some disused/replaced game files that has been left in game_boards folder - the empty files are still there as placeholders for new stuff in the future did not want to rename files to fill the gap, and the way the games are added to __all__ does not allow for number skipping. - removed old icons and disused images, renamed some images so related stuff stays together. - changed font from default None to FreeSansBold (which BTW was default), but specifying the font name dealt with a problem of cropping accents at the top. - added loadable/savable settings - as above the languages/lang_config.txt needs to be writable. - now most of the changes in the Config object/class will be overridden by data loaded from file - only changes to screen auto-detect and screen size related stuff works, rest of settings in file. I guess that's a long story short, I hope I haven't missed anything important, if any of the new changes or anything else breaks the game than let me know. pysiogame-1.30.811/languages/kbrd/0000775000175000017500000000000012201770772015647 5ustar tigertigerpysiogame-1.30.811/languages/word_lists/0000775000175000017500000000000012201771010017100 5ustar tigertigerpysiogame-1.30.811/fonts/pysiogameFonts/0000775000175000017500000000000012201770063017110 5ustar tigertigerpysiogame-1.30.811/fonts/FreeSansBold/0000775000175000017500000000000012201770063016410 5ustar tigertigerpysiogame-1.30.811/images/memory/0000775000175000017500000000000012201770073015526 5ustar tigertigerpysiogame-1.30.811/languages/0000775000175000017500000000000012201770761014723 5ustar tigertigerpysiogame-1.30.811/pysiogame_icon/0000775000175000017500000000000012201770060015752 5ustar tigertigerpysiogame-1.30.811/icons/0000775000175000017500000000000012201770062014062 5ustar tigertigerpysiogame-1.30.811/fonts/0000775000175000017500000000000012201770063014101 5ustar tigertigerpysiogame-1.30.811/classes/0000775000175000017500000000000012201771611014405 5ustar tigertigerpysiogame-1.30.811/sounds/0000775000175000017500000000000012201770064014264 5ustar tigertigerpysiogame-1.30.811/game_boards/0000775000175000017500000000000012201771040015207 5ustar tigertigerpysiogame-1.30.811/images/0000775000175000017500000000000012201770073014216 5ustar tigertigerpysiogame-1.30.811/0000775000175000017500000000000012201771637012760 5ustar tigertiger

744зNʺ *g?|ID.R+R] Zjǡ&Hy)ԇʔDjWLɳSgzS7ZLzY?h40>2H]0ZKMk )#0RFOhQmV *I`\*ERL*!6zĢ':H5XrJ $<Q HRH"Fk1-J: L2Oh|z|-K>Lx LeĽs@*oM$J$ai)l׶L LAu;j3$(?FI$tBVT['LXq` #x@KMMe>f$؈X p ǘc"Ȥ[B@IE4"A#@ $ԉv.&*9ojpf1 E1"HNiE@NȊ|D 5ىNF#U3"#iZwE1IGnKf%ȭcap;VgEvd&%rN?OGK@XH!qǘ"݈m@ڊΣjs8A|ѤUWӨin]$NT @!s:Uua(__oLuEG:&ziގn9rq#iܑƦa)*9SvIENDB`pysiogame-1.30.811/icons/ico_g_0311.png0000644000175000017500000000766212201770061016324 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org</IDATh͚{]}?9޻w^#)8$:M@x$H6M6j)i>V!HQDĐ0<8k^vmmݽsfyܻk?{V3gf?GZ[|KXR3 ~>ZoPUzLQUjJԨ5SfjTM -)::z7\3Z[c߷@Ԃ0MxsQK,TuPqhU&"*Qu# 4pq&=MF [5.ǹ 597', % ( EpXiwX};c0XhQ@Ix: <8>5;/V %(Ҙ# (l7p8l:9Ca}өf ! cs1yNc (QOn o;?2 Ά?,'\7܍%- ;] "?ANvuO߮{D%*4&[7#xPb]1dÏe%qVh)1%;A:J#i8uG 4 S\0R({fQ<R'&wKd@2# ltGNwk.:]i12~>F'瑧HS]Xim:U0{#?@0}'Xx$|ڡQ^öoV  \bwÇןS^,4J.L3Iָ`{<[\{} on{f;?zYE+IEN6;9܎26\h4[ԛ-ɛuSS]viSWqNm/1vεd҅\r}5ŻWo$K K+~kTA򹗩lY!z.`#͉RHlfQfƧLԛϩrdqYdc8gygak{ll߿ WOQ*:MZ~S[XQ+hmRs[n}esG)Ω,58DnA$ͣS$AZE2R' h5ȼV&& is`%6z`:p3 !ϲ!gϩ+̒3m#kЫzC>rBBiN%G iY{NPm$b'f^Vq/D-_{gȄ6N}qd=]Gf.p5u)XԬXf3~"PΘ^F_9Ѐ$W>y#Q%B+} y0v XBwR qRh]4v(КP2P%deltEk$$|U:q_:|vQ$)iV fxΧ3R.`@{;#3emΑ}"2vQ຀AE_2m;i>rIT 'SvT#êy.7Nq8~{xx+/ieD  .'yg95\'=\GdGyWeۈjtmFʱ${۵.:KbC ^̃/?:I˝pZ|{GKVr]/PHJM`m2r|z SƟ"comc&_!M-r޲A) kI\z:TrԵ:v~RgmmӼ/J+GӍ1Fq@+Q71ѹ񷟾.)pq|;Uj6K=eC<,D׷MҾ6:@DsۥGN^|#F HhpKo[1||2reV rEhK]`/sS_<ȸ `\Ԟ$(vCZBߴpQQ |yH8=eͱO:MvEHh1Jm> {ntq U $x.Ag dX~=:Dy0@{fR3UbA#!ٛ~S/>d^,Z1XH.@xv8eΓ~0US%qk3D^x'pt5EHC hKǤQ oODT8q Za}7`ʚ ZUA Gr&|h}U'3~@F,]7H@7\{&nRUQ[#,-zټ6sQ xqeρ\j C';mLMWƠħ ]Ev7\h)2[X>;bTi 2tІ!.(h ꬹL[OP(^%C_MRa%:Kt*Kq; 6TyEj@IkD4UA Ԑ߃ |&"Q~/\l/jYמy.4ZBJ/$ݨ2B|(xvWn r:ܯBuԌO2:*2N;HDmnf;:6Jf-ܖC+Tߐf0`afs+m@(QP rw;Rm!A6EUgsEZ;ϭ~%甊,)nf)H+]+'{3;?󫯩(i`qɉ3,=. ]8H^IENDB`pysiogame-1.30.811/icons/ico_g_0313.png0000644000175000017500000000656412201770061016326 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDAThŚ{}?13z׏1&&Ĥ!@ӒDInҦ"TBA&RRՇZԪR&Q$@#B&- ؆ͮ_{9qΙ93.8fsf~;fl  J*?1egEXc{lѷ=Oۂӳ}p p Vp BVٟ ;P߯8)0jSpXg SP<\=z6PEV9) *Ap qdȅ!>#7AA#A)DOkc߃vϜH)FJ VByn ~7~d 0s ܱx!QM3kڵx21Zv=4FlJ1P"6YW3R3[X,BD#hhU*8!)~^ג\ȴ%66Le&#׆dʒ)c0UϭMNy K\yTYAR~5KDbQr g#|&`Į/?G4FZkUjw3g[6]ADX3:g ^'vo_߾6O^miWK݋̼|-:m9p2g><]u9qۯat `ȷo޷Ryh f|)x_jZIإ!'#'zQNN֝^ʑAZOK w ;LzBэ:qWC;㯞xxL8⤑H !ԏՎ:)'; `x~ŋ'ZûαqT L%n#¸r,G> ' W9UTҴgy/OFK"RKapYEm;m<{_]'8OOGgn^LJ}>tggA Db%rVZ1ݽ嚖r8DJ/#7mos/D[Y+Z\D3]"_spG;xi-HA$RgΡ]nA7Vp05pj5=lX_(&\n9~ ^5x[PzmI^Zqמɭid@: WKR'FlS I,oRI*n=w7 N**qd5bАꌮ1v|\(wUKUqQ"eHE|5@r 5|Pv* ,jM}k.#_UZPFJT+qvET78q,Nԩ7ǚ9ԙV2m)ס,OOTUL[h8a؈mrg/޺&I?GIۑ!۲"39JgMcmel2 gr00^2QB%^^ŮM)i9u-5QJ5msRvS0,=l~:L* |t2jڀ& ,]pYwr\[+I5M㏿ʥ6͵lXQNLkS A^6Ve֙Q&ɬ+~[Ke4zY'Km3PMF?~B\IcXlde+w"ӛC˧5F zھD&lDWR L4B##6v*:+9#Lr zC#ܑc;rkkϖpGNI;c'%NsMD%8ql ְsw{u;py"*9QwmgD0CC@YC@J(eĠr.,[{iP%$]┡vJcA"ڳ5ykIY*. I$"Fjd[$3A)瘚 ՖJ r{$ѻjErϒ& Lg1a1Al[\1Ttnc-JUc<[5^~;=9Fz(ƕAxL7TVg8 חhbF7xɌ/G/HQG9P=kG/Wg*+5͖]7- c-';iP6=l䭟mǫɉΚrbH~(naK^YzSluNL Vt,Hb³'q!Rxv?D=rSv&AlӼ'(1ǫG|lص; TdL[.>:|윭>Xh-V|b2Y΀F"-)̬bvF7pQp̛L7j7= jKazh[nl]DCĘq~yOow?zuab۷=*c 9WT#@OF:pZ Bk4DQh GPVi&Ǚ,1@! "Z`;A)SAUMLT2jϰIENDB`pysiogame-1.30.811/icons/ico_g_0806.png0000644000175000017500000000774612201770061016340 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<cIDAThi]ulA3ZF;D%* ) a N| qN)WVqpr+]$@aCl`a0daFfޛ'fSzV}_>Hi*?_ 8@đCpÿJ?;ZL\:&z|SJuZ<(Qnkm3~#PJ)T |o*(GJ񜽟2E"WBSAuN&| Gζ Кξ*P *AJ;GOްVjB58 N}32;&@HXP>J , Jk6hVٳ JA)TDraoyN A48-|v=J(R80b1k-Ƅ6kZj)y0$B<qVdsQQ Ay ,'3DK_s@)V^vW?};o-7n3}Di sҚ在=0EiI3!aAiܫuԦ}d5;@*, ί\IC,0^984ߟF˅$WZ%Ph~%8?[FsD%+y[#x] u=fD_x}J8ARAR:S9\VM*3}ŭv<WBpTT @ƞ1s< ~\NKb B{WFa\ zk&</Ә?hW|FytD(WTQv d7əvJ%|(P>d}s%],v]<ԙw'6['qd֋*S9!I0j$}7%կ3:SGy 0ysVp*4aufYۯ+ۈ\ԴM70Ero'rJ;%twdY s\U؄x8$Zch`5!XL%/yڈMst<@R!H aK% !E KtX)3} Q,3\NYlY,,Q qHZ'Q;@,wjb6H;Әkhvspӹ.Kab b-` * tt/e O~^s?6vC<ؑ")թ[Gt\a#[a1NJYL)&ϣ)k3g$ ճp=>ޫggq-FQsCZmg<91Vg2Sp B .;8_OU.yP.f8~K1DA8q -`7>{ߦ!n2a-vV[{;0ppxxO8ߑ}cᴾ t)*M=Ɗ%s2=3&1yNQ?V5{{0Q c-ʑ% כm-SzZTez[ƶ[FaNàz$Y30{9 lax)Z?t\bגoj?o {3y:g?z% 0gXYCA~đ Z =\kxs)ņlHyU$x7]4yXZ?HڸH=8m _q|T 6bwۗDyP٢<{p';[\ESTlZFn̕+@k/j@ x`@={tΈa~t,*4ƞl ,BY%Қg^\!`m0$ HAJޖL4ZCmgq` &j@R+Mx EJqeb!P Jk1˄ס.W;U`z :Ř+rU*XHWrc3`tP6`HyG){ARTw|LT*>kNikgHԤܷhxHpleDrF>첾z `J1@h4 +wO8zuo,ꙁEdžڪ"UN*0{FJ!u6eSaib۝vt /k IENDB`pysiogame-1.30.811/icons/ico_g_0500.png0000644000175000017500000000543212201770061016315 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚k^Es9{vPBBiH)%#I!Dƀ|hg@! ""M bnZ[n{?3~9w[آO2yswYn@JR5c@l01Ğgbhı{'cetQDGEtF!0$* **f 6 V1` 68{"6f=bm bC) u@) :€(>BДPRǍPc4B{l@Xc-Z?yǯIxx)@)'cc@'['{q o=k֡&f5Z>63O߬qBI %k*I%RB)Ao@k-Gԧ"EH=øuυIqjz2Z(֚@i7ڷM - E{"F%GX7~}s~o*Җfa'DW\{߇2aզ6yR.2y9}lj6j1/>M,#5uAE߰cH2Y<,[4?Pqn@䅷~.6B~+wZ''6Y}V_qZߘ?^abRm'e̤1^#>!2M 9-61bmwn)Z"Պ3Iicrv;'cL>pdr jǖ5Kdp$FZ;-LK.yi^&Sr|"j.b770*J+/XZ܋Z<]$=?Ls4=Czk«"KfSeԘ'y9'Z'vmKWsW.BhfZ`+0k˔??I:"Tc\8XĹ&d9[jpg;r˾{-3izϮ_ 8tD)SsۑJXZ΢-m2{rș1gkG]tl}s@)a]׳Ǖ75J'b5q1j6^ZTԢ{ :p˸MIH8N}dFPη%FL, G^aZ*ruS\Ν̲E F Uf[h@~PaHX/+`ַ?P29~/98 9g/%Z#[?vUҨN0nO2th""+'~ręT}ϼsS4+iM #"&$EKIRX"L: ҚgnY_9s4~8{v>ȍڮﵦCH!JWRQJB{J(WJ un/,ݲ^nD h1k(ccej3OBL Q v'})LRt *Q 5R̝ﺒ }mdѥ %,ԇ);C 7|+6: B)RD LD崡t3ƈ1ޝ6{/s w#BtJT 'y݌ 9xntK$2 gZ/@ZQ Zb#ukێqx;^@$z26ْo𽏔 Bf~󗤵8@# nX,B}; 3+%6ޟ%1rөlr@"/xbZ3ʴB)];8U_ĨH^3[V@ߎ(ձf]i$p#D1r]TځV7?#M, " rH׀)d'qh#E5Mk@ //܁#rIf0CgEϛ/HJVD%ǘ!}+bj7ϧ^9hZZh-vgG Y5f߾KIENDB`pysiogame-1.30.811/icons/ico_g_0317.png0000644000175000017500000000667012201770061016330 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< 5IDATh͚[_]?_^|/qܜ@AM"KZ"( B!J}!H*R*P(RAkbcmıcvc{wafΙX3g~n3wTY!/Υւ[]uu'o`tc(n`LiM%66сmL-] 4Q@'80#9pq󿑀ypZ0Ubtmha*5bt/ @z@G/0]ڧFZ<ġЏqnB%se2-"^KZ5.1Ȇ%}˛'aѱn̞p*`q\a2R<$B)FBҾ(DiTF}` %29 @g=/S8o`8=q|*s2hUA)RhӺr~AJiAؐ3m],BEea=#~Et.g_GHxNW@x ]56i TB>VbkqdÝMw. s cH!T! } mҷ3WחO0 b `E6EdͅjW_a,}I̍_ X69/.~kHNT|H\P fLC`ւR* +P3 ?}hϾRqD hb#Fz%\d>$7l "0ۗ@taXëon# JGO.2z))PT۸R&R@a;Ъ';B>0`|_q!Q-QtR Dok`Do<@@"`bvǞݏ궰1\(uG"J`HUb!AfZQCl;"e2ՠ^~#d6Rf$ TUFlIV%׉#-yDr9Pb/ԗ?fdq J@mE[,֥v rO ݖ #W8yNJUDQ|d_Uk4rmQ<;ϸE.p>)LU;l{>Eɒ:HT`U[!^ 9 ~I^Oh_o^a{9 FVH$QbrKNAV$1zRPTYcSHy$;r#}(mHn~YS_uZc%{DuC@È-}]Y>GY/ O|a;7R@!A%N:*ghMD`![P!,w9ϊ‘o]͗!켢Qb7tg oۖ D0{ {vq'V끥Q,Օl$W-$  k3^z  Kւrd Rlg/wNN2!?y}snoD J.'^~lw>0|> >޸ 7FFzdq腫~X04wUj*SѺ}'qڽc? p}e~.N^:==8({.S4@#|ȵ877؈?5_LkV] u 3}4{G柜o9-zfՊYNTO<*xT7̈8c-\BoG > j*^q wx8k*̦]AAA?ZBʲ3z-_K8jp\ܼs81{]?垇7q̀`;ǼW CaeT6X]h @\Yw~Lo\ LD@)eF\,7D:FUD 71Q%{+eݳnOM{mn\ʎ [)OMF'1dzݯ2\L-2Mu+J2LMxai~~]Ԇ._CpD"˪4%HQ TH6d1PڰJkXU|yᑕzYR@\wa2ֵ|,?LjrfS47MؼuxUVC|+NW ?^ ':ZyՎpL~qJP*Qq͌߶$v0@''~8:gSe/YIHb{?g5(yYFU ^Ek&6F"BU*\p<}9#^w)+jH%lܚR_hV6z Ҩn)jzRl7H5r U8Opd>,^}q2o.\ЇAKbh]OTѺƓsbۍ$,fף9>H{nS'퓛ٺgaXl(T^{ЪWپBgow\_byn噋4&o9X_+%N{g'+Ejje/]GG]kF{#Ox+,e1a[9zY>;j0Ae" V^K{?A9ׁ=E+25&l= NJ8H1 (T-ī6p\ZQJli}lJLJbEU.@G٨GCH]:1\u2Eti(c.HubG*kU66'>DB*s"!E]6>EL82Z" 7a&'ŏ\{/{P/lin #o-TF; ZF.y [~Ƈݼvj-O1u-JET-1"IENDB`pysiogame-1.30.811/icons/ico_g_1000.png0000664000175000017500000001150712201770061016313 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThŚiuU]ޛEH.j62 c &'vؒ! +1c0a;fBIF,o|~ތF1RԩzuV3!H1q1Fq5 צꤚoi_]Rq)%㹤|I.||6B` !'{ôqU #@0) `@> :[ 3&wRI|w|O sl*ZP Gc_ 4)`rC5 MjC QS_)5QDܥB9B$U ] 2y&%@am !I {z^0HL@V*4ĭX!82nǑH!pw)5ȶui˞ʺ4 0HWʭ@#ɽ28{]T_f㠔Dŭ oU WIiY)pL(@Lby6V8kc`蒖c0"TRٙXUƾ3m%&o*[K2A%o( ^2(el]43L N kfW"6&G{_0Hkf`5㘖c`+ШXjcjx``*c}ި !0~huiu[ ´軛|xա6#@H%@Rw5-p%-eJ1iߣq\iZ2I\26DsC0@nw W! щ *I,/ʣU@_utL- m6vl@Fi&Wd. U hM (alp8X{)a 2w'V9'0FWEAU<%R`@ (a0Ղ?ǂcHLJ 3Hג(. `y+?OЭĴ[̙13]ttch4 GMyx8>@ghug9y \k< o"ڀҽQ17ls ,I 8yϣ{O+Oቧ?%oNXS컄 n,Z6VrSxc;ubs=ZC*)pP(^1*QzXjj| 2>m%Cc_Aj8ROsor1ا:q܆lq--o7s9oj~s<.o$e1 $aΞP j{a)%&2,bNgҼh_MמbYv fe쪓4inm=r(ڹ[{Bl| ,]r iD~#I腴ӑߒTB;AjwxηumDaҔpzTTc:Ėkqۮ,+N!NsNy̙sl+$Jɤٴ!nz|CHYG_-kܹ%);*?0Nmqu d';;nbvOSc_=?g}=Lu`^sɤ=/>{,cǎuЛcqϚSqlEڄE6箦am݀,4=?\vM2GLG8=Zt vR N{ `Å?`֜դLRhBپ33޼aco0mo82ŬV덧BnfxI9l16t3~,Fi77^ET׎L)%7on8t0`_1k5cxZ;xG0s'daj>]@t"aDHTZ@Oa1#B3$ӧEE(Ron†7Os|ҩqd2̈́X::.6XRq76y/C^Hـǧ3{8 ®0K].qTeKk;>ϝ}&0(A1};wcV)  k> )v=@8f]VF. :V6c0qtǚ5uEPu??n@Sx5*해ESa;% y#nby_p]W_}kη84M&248#%ґ8R(6|;ߦ*cCaXuRJHrUb W^ TWQI.JrK3\+xgq]^-"2'4 1ҕ&iUPY~=/J;vrYkcTƍiuyƉɽam^+dF%jRbДw+&vJ,ol&m%&<9WOj8n-Q22I)I+ٽF~G\ 1 ]=Uq*oBVOgX1pO.`т;LYY3jR*3'?%r3D $W<+HV~vu53Eˎ+D29Qъմơ"3FxvcZ%2`y G,&|6ew&ll2ov%N>NyfoOvKD@NpvE6u1ѐcCi2fcqG"ӾQ˾=\Hu]:s3WIIuO{!hkkcY̛7G@"1;Q_zGg @<sBCSyQ9s^Z$3o_ǯW]MC{˩fʕ̛7|>Ooo5z?_ٿ컙%}m'wt+NJUBRH)PJN u#MCI9!?<=3 f$o='9׭{7B~*Ŷ'x^8]&Ɔ3v', ё8TJ!Pվ$;ߋT%P@ cPS,~6-cm=HO1~owf G^(GX(yy uL;a^:OgVgW1Yd2y(򿮦=tツp(yoQ|G (X$2<u֐e1J 3r Ŏ㰠YQ`zCn~P3PK&׀?8#>4rO wKʼn5h{R9GLn~}| (GAuJ}֡^$Avuz ҟ UT. ISW)E/9We 컎g1 mDYظ-[-t5"r-N]vvߍUs2*'CIDT~VT> YAg8x|roCFQuoMNE@0C$*(Q"|2 AI8P'QC t|ttLsqN`W9'ljWվuֿ=z# vPz6, ,)'b#=bܟC'%OGG11_a/-eM1Íi F$3R2X$%! ha,%1,}be r `f  /=N_ - +&V2̠{E% n-"q_{(6v|$vYt  fS4VKgl?39C (H@E/h@5VX# :EᆙbMLO}FI.E$HAh{!,P1A"" dyoE8[d}iKnT{nFrFl U0Ud#7wKLsT P_IrM΍XP/Zп3`W٘e՘-2"s6ަu?+)Za3fMr_%xGҊcaNr0.L0IXڌ.R-H$ #M^3Rj"G UR52I0aVOʌ SV˄򾞑y#TjiZ:]w`JR6 v4LxU&@`%YIz*1K&z rWj?$* }enE4?̥]o6@"1ͯ9R$*fggxrw9#EZ*e)9WȵWvM z_l7:.^w}y^n0vQ)QcD*NRf5o "x/|7qoy#}N- ̀xR2gW6ᅩ^(d`XλQy w6O,+/ёg3ګwѭ)6P)5SJ$hX3 BV'ЌML| P!DLX[@ iWV=&c)ai$و%_0W)+-%_U|s8{ `${u:=IJ0{d4鬠nb\xKWƈvz|2c:v KY*@=9Ɏ9:~ wG>pɮ#^giD%j;mW#p 񝕚GvY;@!2,DJ+D!ilI:ͼnxD560PqwJVʾO`Wj5SL"m&ɒo“ D$F`@u,*>qRFޘ)̮: ݏ)Us4;€'6p[8;Ģ24Pch $=D)cw ;@4Ǝ>OLsȦf7=4 ltD43ou`@Ji>e1}g@ĵ dEV؍js6晼`b{RjDdc6C5jʬ3ڔ'/dFp3hgq=wk@?;XKllz;FQҀHZ*R˫Ij[ @=C#ƸЁbQC+9_l8vǟ,ctH#Ę EB>{KRN\R4Tbɮ,ʐA/A>iu6쳍&LUR(@J{d4)))fe|L QT.[="HWsӹ]lvCaBXv F7s sڋ[֝;gNٞ?*8޾a 2F4>=s+> "HJJ,?{ox2fp^+FbXz_`x[o} dFDd k"iQl" +,BXN f@C/+˼'[]%_g^c(.yfOZb,@f^ZI Z;e$n2z5ۜ}YZbAs1`[tX! {GFZW 16Jmsoʛ@|}q !ܒw|'~+_k[r 0mCzT=o|#+|Kݟ?ѳqM<>9y`<;2X,m,p@IENDB`pysiogame-1.30.811/icons/ico_g_0200.png0000644000175000017500000001130612201770061016307 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<CIDATh͚{U?[U==L2d HB ATPQ@x\V\Qԣ"=qU,>х Q"D 3$3L2WOOz&s[un RDPck= =%H<VbSQ>Hi%J Gy[emm91jZRAup>EX@~O#m#8ߴ( ݠ ; 6@ǁPb^,A"lE%WlU7 i+4Ai9gb va@RT*=er)Q{,JQ QU^Da@3!X~]4냃EB1ȯuE=- , ,.lCKK3_BIJ @t`- 6Km 7\{<^ -e1)|^ŋDb{+&ze%O4=hyhF!f$5 Wow%_–W\7+/]Ύ1)-84igpQP|r 7b);]s T,Ab_=x>_.tn tQ;W/WpKiW7A =4XOA)_a m9?>%K[Ѽ5p%:;b\{:qڕF| #RDx9!F!~LPt1 - wn;jwliƋ<ͽp4b1GO=K?EPd^, |zd/y@UfB섂G]_8:x%oߴi>t.El][yx/>߃Xxj60(fXݕC2แy(#~ 3 , ܰz&-FGFd " B0 ~ ѡjERw!;ޱz^ij/Χ*s)(Ymm#.!mNO @W1:ZZ*OSńF /lW)f*QhHԜM>f{lz͎ h߀|ˉLN/Gt/`'n V%ʇ7^Mƫi[K9v΍ qo{x8W%Pc93=b֟ˠӆ1}1gƨI !ܶ֘-L\hRhqșm$Û@43etɻ.0&hccu+n1xlCfbC̬V+% I|qIڹf]6\+V}ݔd|jcNuVwp*SqJ 4MHKw%3'"Yh)|[VkH%bc㔴5$^3 Oχ_=_4~{MpuyXqϚŎ}XҴׄxb۸'[)޶_쿌dTKU3ɭ0 &YԔY<ڸMf)?$aYH,$yG|6L T6nNCOCfIA&R,͇#4Z#ͫɖ U/5:C&G*$Zf9HKrDņsy}l>4]ӈSsr>fĬK3抬lLoi,L"`!=#.Ȟ.xA2%!ˌ3{Y%\.o0-&VV4i!?OCbu`٠l4[d?G"?ȢGiǮv֨ElV-lE?#0+VPReFrĂ XRbn).mn/_WTC BgS(IJY>q/-f/` :,6Dk,S [Yipl.q$F"TL[+ٴWZbhDmGe+cZIp< 4x.]:&LaYD<$ˢKg܏Tdz2$es)coꋣ|kkώ6i(1L997?Q}ckvZ+38^v0b<7:8MMo7g'3I~?{^2ĉs,~+w||IAjg>. mpj(s,ZnB6HIAl+&ti_}9Oqrduq R\ç:6m.|:lGtap#58 ;|XnJSlIn|?7\!σgжkc-փTaV,fT!@(>ΜS/;pۮME/nU]6Xx? tfjܕmqk q7-7MqbòEF2~(waj,q<'n\~/;b8NF4/涵O[\r13Kܰ1R]Bm`ٹK;ϑf$(X;E1FHEk}*QxJ YM"NqU}%VbcŒ%[-zkG]w;oČh^>b3:6?ˏ0/'xhcSkQЗhjl`yq[b|Orf|[m*trKٺn|$O똓ߍZa֒dsY֮zߺrjؿ>.Q߲? E]ݷԱd>Ѕ)@d]Z%g<C}Mt)_ix/ud#'jWZaYN :Oʙ4N5ӛS/ :XUtl9~FWsdb8L,S16(MȫD*pY,\}rAJn+j0[\:>ڽ0QF;{/:ga6+6b)b8f4 e>E9 4X,YU`s r]Sh('^*Fc+&Fd61='ݽ>3QM6ұ9K2\YG,s]pΒx>O81g£Km@|c3F P5<˹n pndeb]LCe;gv?(yHcK1;G"c?w׆\B3XcS u[IzOuD@b%-;GK O X-bU7D!ԯ`!\ŔCIKl]~%g9k+vPƈưحbL_'yv3Д}g9hȳd Q0yHǸ9b3dbrL#+Vݳs :gd1JcO`|rÿyy ;60pv;pg3>vo NXؼ-{S1ydweSB4lNoo&?.I{=mq nü/S<0]wgi6B`[C0r]F,XV-Q\ v0 %puS2p-dDޥ->+g>x,9r BZecO<_ ȠLضTܣIRc+_íì!kk]]ǮaW0!#E \g="Mgpu%n$ }^ .7׸N[x4tb3l#cz},yX"3dKcklkJ&pFWˇ<}x#MUTsg~rӆ}hMO͉;Tӊ83Hǖ}p+Ѳ@d"v[~rLւUL99W6vy'}1%:616Ɯ;x0 MaDA c6/0y9, Z^2ĚG5U`] sE Lw6F>O}=daq@ Ǐ/>DNYzlam$6-MiZ2d"Cz=!PםHѦA9&D#.G|L^V-hAV2ܥ]:h9H4[;-bx@ U*(!S@R9uu`,qЃA^L@#zj ψ$_ F6/' mհAk< /#V]or8Ʋ+4!5+} dܠbP#D#d=te:{SLƤV q#ԧ8bm|ݲ;n8rZGNJX7z*HlMSB$.$r\])3t&BK,1s)p4h]EFR]n1xk6 wlHx9?R] 1IE(R,z-+2!7L¨ ԹK*zni 0q)2*(]6eΈ0#AVK jQi5pݚtl$BS%$dM."G,mϙK5!m67n9eIHXwb!VsX8`l #B`:My1Is = k9Aۀl+9l9v}%w'v)sћ!0=ΘM,3dF03̔p.9ˤ^1cbZA? {k즟~O ϜfcZ ti+QBa~~W$Elň'˄ꀸAqs!ﲱ2/(;1O{,1sx2;[#@BR!mTiii#O&BA[hZW#m[}K˱ӇHvH'?XPe.=pJQʁ\JĴJT$t dZk4$0jV5 InJhBS>[.1}^Sj鬰;hg΃xl7NbDER c4v. s0"ըj r0FFx6dMajL[Wc.??lKjzYdIf{_9.pʰ=j b CbD%NRhMu:Ie碘iWӊi0tL;b&~s IR.cYb'U Dve2DwwEbĘ b,B.9QT YUc RՄh 9S?x+H?/1# 0/~3N{uu_aJyI4+kč+0#0>`:Hy#tU@mlb8GCb=a+ޙDj^I;k)d VhٱR&Y4$'?+TtB3.S^TsgY0FȬ8$b?6!2Pߠ7!yh8>F-mcWgo MMjJ-βr׳?BR3۸nRtBBҼ13]_7ř7xbߘ%5&!P׭%6 .ضbgAn~){IbVGdUi6Rf3:c]oQ{/_ހCY_GiuDץE5tΥшU5y`~5 #TGLQ)B$0W<s.+ߠ}"I3&on'#77w;NY)6@Nj~ZfXVtsrĹf/b>FKqJHH'UEۊȘg-/՗i3솣uv 0V?1%F.G8kqְSqSx-{.9C[5Zd';u'&,QNؙ># )4bV`+kemz~ȒYˣzO=Eۭl 4[z/*Ĉ҈`p'@ǎ ,2ck\L 13<<,99r*TFsc# ҽ"xˢ8Į;+=ܟ.G0ۊ2M< ٽBq,[.j^vmO'pU]*WOǏ$};DIENDB`pysiogame-1.30.811/icons/ico_g_0320.png0000644000175000017500000000525412201770061016317 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< )IDATh͚M%GT}y2QDCT"fʝk ~ABDpBpZ0 L $a8LrsowUo?3XC?}[;? Q|MɌd0<Ͻ=R?.O&ŽcÎ}ܱ{a>n='D@q$q8X z @@|JE$$yѯ va6lنMv↭l[vaDD q*@y|x|QT/*?ί0 3%嵼=Sy cgysC""H7VTAP)`$ S|oDˀ=> A 2!3-$D buQQ #(GfG$`J2cӬR>GIF'$1a3+ۙF4^h`&D*55 3{fSy׌DB^$JfG|+Hew_r/jE2oEO@u meW꼫V2a<{^y5vjGa>za X@0(e"ju\c!d`b0@pfQ61Bܯb2Uَ81g0&'3F[MP͛׶{Tfl3r{@d|[o-{jeH]QlA@XUuw=TT 6cIƔRZ3]eshnP[2GQx%W:6z{ZsH&({5s{U;DW.&Ql{)%e8lca mXEwh;?x& mv&D5.DEYYiBT" NjNgF1㚎#UIdCyIڭ@(<X˩ܰD[n/Y"r=+(rZݧXz,~ Xad Ab],׈B~ *0Mx3HS~ Sgb<gtewltFR@_ md?S18f28'L⌕y5r; 2Xqw aSTK'b5½/}f_ p$JGDrultͨYƎg7a5D*]Ly@mՑdU{o[. ;eWWeTlɯA#ުK۰*/}1hrWme|u%|u/ż)]ձl̙fc:[ѐU'dCX0< Leb\my%~+>X܍oV-PGS3\/xj7 :3ۥLUFDN3/}N8~6^Dڎs :-Ufw䀑wܿIM7+6{aY:VWлzu?Yc[r؂庻j=XnܭӗE6/o1v^z^n~mquj]ܘ L6o<}zx4޻ћiaw jG.=F%IENDB`pysiogame-1.30.811/icons/ico_g_0405.png0000644000175000017500000001064712201770061016325 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<$IDATh͚{]U}?>BxC$b_U-RZ8->T-EZiV,RQFy$$\r}ZgKlg}9쓬~ϵo@38pת[0zuq^P:#YdzRc$a$SK,JpiG6m:C6ݫC%)g %*L%y"D`"lFfklJԨٌQK2jI,IhEO>tЦK.-:t鲽Y7E)Vவ4!*L$%]@KaVU (QJB)0j{=px?6,2~w-b%(*%.@UN^;A1ʠhNe0fp׵A+MNN<,xFYT-@A7"-ĕwrJiI" N֒XѤ$zjS`0tb_\b$A@4">LZT9Jb!3Px<Dʪ3ϣujtǪN_" WJ >;cr]K=|_sN7ŕȌG$'g9q?k֭e,( 6;lxUt>[s j(%^RI折R+B7M} /=އx v}dtw\fE_ܐr0=Ŷ7k?{߹l߽櫈vQP&m ~yZ4[^l4Qa3a*Pl2bkN[қW{\r,#]ʘW9c$X~hOVG)E;:ˎ;xczv^B)}ǐ@\0W((5g ?eJ:sF|+|63ϳD"#Gv|-(S@)D{־v~nd'c-=gnc-:\LU&=x*J6Ծxi}wPHmJjP }]G>3gAkq9gl»};?R2.Z߽+1χHROd6) 9AoMw<]#954)YƤ&!o1 =#f Ś-:{ 0c`}Q&Jeauj&,[O{yu /l[w+u?`$)$eLg o}.F$$:)mss|e9HM4ieùV8􈭑&iiC}" xi0l5G{$6cBj0F@npS73γ(cJWҚ>}<ƙœނS Qd8,ы (# Kxyzqܚ%xT5*#ɐ_wqV> GYqJҷ"F`m.23=CVxmב} eF%WUankdv N-tV9; un7yݱiv65|;q4nK^3޾AFFL&mL7\ƊէO>3: =z% }=~q̓L'qڳa:[ʇR! mZ$* 2,0J,IX5Nyf<-Jc8綋Y,&czmC]ҭ:q#.~0 qöPWiiKֱP>1 1X Lhbt:MJ B.]`Kf|3[pd`b;l!{1BĬ5+FvYjWVȡT8܅tF '''rrrbh0tPGgJTApEg|#-s]롎ْӲgzg{b B^X;W jE{מa;=9@2;{АOzIENDB`pysiogame-1.30.811/icons/arrow_r2.png0000644000175000017500000000143312201770061016323 0ustar tigertigerPNG  IHDR! ?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8MLQϛNSBb&s q!fggliA4DjP e1̕;Uu7Xc CvעRܜwR4Szio;kVN9.W 2b)R[ǔq*Bzu'=ͪU!LRi "9i1ZhhhI3NmY ϻ3Ϛ|䱕K!Ϩ–76R*&lNu_&V8R_Sĥ~/d{.|>K.eXjH ,ɭºy.yp'%=~?{+;vIENDB`pysiogame-1.30.811/icons/ico_g_0300.png0000664000175000017500000000722412201770061016316 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚{U}?q. (Q1)Am0%&MD`m"K>`-!8}e\Ɯ߲oxeUt:1c=@oHoXa~Lj$!BHB"ҾR(Kh&`p\"Q`5:aVbjljqWxŻ%KHT %JHƔ*!F ^'("x͗8(qH\ȜL77/G="ckp}~uЍ  q0][hL-2Bw ۢQM$fJD"bREBH MOVL$d|(87q !v0 [?nD֏ `hӨE2#YЇ6 N_794fs1&DȰyd S^Yt$og(k91al~k7=񱹫[xnn ;޽R$D zqeQ޵f2 ]DfB="grEcDoMmѱ %SpH^6e$B!DF3;nuKބ9l1c2,fdeQxhՅ̹`d\`mk #9!\drƉ΅Ҍ-U}H}Vɘ2VZU̚3gf٣"#" -0 Jf @;D cSx3Pm­zWQFnʅ0Z'ueif'C!gJ{r]*a `l^o!7&uݮorMSx$RQ+"e#Mz bOC,'zVKz"WKb֜S,pbMq(h$m!&A &biPww,y=?OLD)%6)臁 K?jlsir@uL5Vt;gů2q <~'@MUHdPFߦtUǍcsoΧ?wW]3*H7IhH':r?LDw!g.23v73lb(%`z _4h{%-ǸaK;'~Ϸ^x0߸m;OHǚ ;~BlyFt<ۗmqŇpwgkG-I~#swc L@:]&{<nY<>M.%B lX+.[/Mc+ѥZ(+ #0oPZ¯;k-[dͯYd>xK ـاހ;foS9!H2$2 !Np"k7\3Gⶶ@.:7eۘ7F+<X3Oee`~:"Rz-#  B3nBq?u,}@OH\+okQ#RYp.a4X]K3t!G}l|=!NU'%!/d{kH2(㇀"E!*e3,K޾.UtyMam >>2I142x|U7wɾCn-5V,d`Ȫ  (]A ==ۿ غӔr?R{I/f*. "mHrؐeGhdG(Ά\t^z(KŻf xj[4.|nhg`tl[&r(HYd5og>cuvwr7G2yJ`)KY]%%~xn#uXo0ɗo2|x˯,aL׷X^T63k=+06w'KHQd㢏 Uoۗ>'7Ni륟E*ZebJI0 [P˜qdJ(YT*3mz8e8vRzTRf̞;sp󭣹mlzsU/U*Gpywի,XP,(Un!euFcKHa,I*Re:~yb\XIڐ)#k-6[HP`"+ r01/ E)|kYwh. Q*ZU(a@*3 v,V\MA(Y.Mh\+734yJ׷%l4 T.e-`a3ѩlHBkdHG`E+aVcŘ0(UNm2?KGe!eE7 WKK0W?.W_9ʙg2@ڐ\IJS*Wdn@T$unnW[XhuKM *TF* ik1B>JH "ewO̮]޸VQ%mxZ2x΍~&OL8Zdl9!z9eȷӦ/gr졯LŢf*SR%DT_pQSj$4R(Rq`4o|Υq;aYDΟeiwj|v>y (: ymNx-|RW\}_uczzw>zB^ϻ\_ڥ}HhU׷ QhȔNyS Ka)ð7ߥF(!eHg#DxfI?&/9 Pц@邸V9&0ɽqO3f@x|΂}lxFjnpt]+L$z* bp{F!]ʸ?hn*gȳPM/kP30ڦ!$e}:' »D~dD c( aRZz3{B2$pğgX).z r>7vdjuL-Oyyc{ޟe tJoz3S*U`KIENDB`pysiogame-1.30.811/icons/ico_g_0703.png0000644000175000017500000000751712201770061016330 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThˎ$IV?Gdf䥻zz.=l+<H#oH,`XbPK=CUS#z4lpenvy_,`0H$DbJ$[ !3ILyl'uMuM4گkꦦ|DK!vzHܦ~3Sމe*n>MHB Ĕ#p&(1]>/, 2IuE*U5!Tt,,AF C[`?E `}}Nm~blɘ1cln  cu̮Xc_ w&!ؤ˰S)&헅'JOaZk-YY *)PHxϝ ` O(XXU!6e5=yu (WdϠ(ςIH>sÓI)b-HcM(CG]E}TJ ahFd m+8 HS`*}KVe] HJH>S҉)XJ <已'&f5*f '!DLjcyyHpP!Dwℵ S/8:TU1Rbd>BId$@I$bU:cz0@{BeP,)L)mGI1aňZ V$"ET"22V.ZȪA/N샇`eQxᕅZp8 Iˢh/=[4s¥iyZH&IH!fMb^dslk 157:G77XTC1Fv"on5--o1c92+Ε5fR{GSjru mgg4M1ڕQX@ NQϘ|&/>ZIbeGGH\__^$cdcMm{s5$a`{er8?DZ1hMIR͖N92|G@wֲlJPׁ厯QU>îBDͦm;$ UUvfCvxIdGF"?DRwA5UG!O$83CI-Pl[޿OG;n !hAi軎'j.wWqcnĻ}ۗ(WR. ܆p^oCndc꧜H~s~_v-gʗ S$Qׁ[ǁOqq#34B]tnnh-8iòI0k5%Flp$D9w!ҵ-]3 /|08n1U 047\]]uo޼a4Qի軞9?j#~j́&L) '`ցyԏoUyyl.Rv!"l@4lΪot9zfB;O.BY8Y7A BEZ[=؁g;HIZ2kWU$0 )b4SޤlJ9Z$8z`Ъ*OUD2AFR32'f299*J9@݃Q  ĪV̪H8gghyP_7cKgpNyj&?>q9~o -?z7?d\tZAHwDmO|-{4ba$}V\۹fe汇ݜ~-{=Ndycaŧ!2'KY0ȱY]Uz8 kSCݣyp<~.ԴE=ƞIENDB`pysiogame-1.30.811/icons/ico_g_1003.png0000664000175000017500000001145712201770061016322 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThŚiEU]}%7~Av& 0*h`e$0902 0 ( "A@Bn ,]5Osȷ穧yߥZ/3!H1q1Fq5 צꤚoi_]Rq)%㹤|I>BB6B`} !'zC, A`*=1жNH}]yu]Sۺ B+|1n oڛ'(B0_^uCaDQBTƔWh*JM&"R59B$U \ 2y&%?HÊ{6~B$4~_[NHa$ m$X1u+Gƭ#B8)c!PCvD%\tVm +V^.*ӯT}qPJUqJ*$RƴCaDmp&A#o RA˳uD#&B6h#(4SظXjU*yCY#ǙW2I6/CKj<[3Gjwµ`T3WY#6k_g( Eg=ތ0fdl2+Cm 3tSL!2 ͅ [YʒS.ZSjs?I2I3,_I p@xDrL˼UdZ%G  yj|} Pm#:!)0^hy3b֦ocꁵ,-fLk(mo%hk'lomPMP𦏡ƛt3avݍPiR1};[GPWm(]1•1ǎЀ',UBc?(4t >˵{xR|O`[ڧX5Ge1gR_sybbE8X[q|3fBB 1(rTmZ8'R |a5 ؋QhOQMIV!@Re~i[?8m/k +M167'}Y5vԳ.qUUԂi8£Cdw{(313Dz%:KOP8ir:m'.RUy53 &^Ùw2G`XrĄR';be˴=[@Gj S2PpiN[ѥ8]QxBZ}]y9zH3X,.ikk!)J[ u٘jNg\u@U5[F+b#D6د}ƅy%@ABN=hë E~@# Ӊ_^÷u硵fT`7cں!zg'g/c#D\;{:[-ƙ ZWXdG+Zn7k~l[E&O^̚I3f uf,2NkkL9M ܏xe^~/KaGs_-Eƺm~* i*6B%V{2.ci-_A*[m'ǜÏubR)24=8]w-!cD ,F6y Wٵl{WԐ36ƱLÖbXe02 qtp3{d[PKk:Bzza֬dW}u |z1T甥sxYHJ6]šP]~׼(2vu#~TVN5bMOBp ?_sb1rJke6s,!g* q&Mʜٳj`3xO󔇀Rdg-ud)N 9g]G3IQF6'<$]zBNC RAܳSS[SwH)oikkg3N 2ɫ̴m`܄ :;^@<>&-\_dÂiw! 9X#չ0& 1(B&b=jGLRW׳گ33ptj4d°ή..n%h']ޛnD!ϾNtdDhVPTVqBR^t2 4pRT6*—K v,9l'waFS, RWb<ȯ6}a lFHF! -w 5vEtL8RjmRU z=BG>f;:7C&5)?qǾC]}=Mc"{/r2YjTHzz{9b$m2zb dW u{5Ft%hc4bMd Ax3u뺼|WȤ:pD:GJcnlƺb!`Mtr\p #B+͒x!CH& B`AkK/5֌jp.8O#^d޼l~ovϓ%% [gqfs0 h^$L]UȺ@dK#vSHq]d]pj # t&S sTx#bX R ᤔ`RN(^1#Y;|6 uZ#c[b0D*@c޹{kգP?iM d!G DX(yy u0\Aw&:׎^SQAuy$ݼ{:zvQqJ%)ຢB-Ogݱ6dE;%9I?EînA4Dp's(KszmsN>ʙ/gwR|BkDM9 }Ö^ m.Ji[2v 8Jw7|MNF92>V)윊Bd "(ŵ:PR1g䊰jJ&36VQj"+r$)O%_Tk[.H{6FT"M6RdW~AXqùR+@WwcjU!UNB A5򬤇~^Ç)*@)NqB|roCxLyV{卵򳃣v^CF 0Q5w!e`0hSMe%7ܵ?LJldbϐ\=M>0O/&g2ZÁd @o0PBɛZ|3r^qH IENDB`pysiogame-1.30.811/icons/ico_g_0813.png0000644000175000017500000001161012201770061016317 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThyt\}?m3#͌"U,ŠcqX$8CBM$8d9!i!4M bV;cc#/-KF#H}޻7dW;w{z~߽#^4'Mi_$Q(PJx-B*xoHw5ݭKPX> r d%ddY^ig Mi_2,Pk@P ^ Up{PBP/>21|&ieIJrhhB\a[Iҝ1٥@RM,J`P :P;e>T[+q@hcZ_7w|מ'7Q&YIMX @s'4oe} ƴB+)i:&hPu !Vczfa0;En]/R(( P msvޤ$>膁a{m0 +V2XP!HQe@)wJP. Ew?}״aP1EQՂPeDP%(n)[UIbqϾ\nUEFvQ!O5"-'SÙ"',iSv׽L4br*̀-B ag}Vv7T)Xylaq<V?\p;KLAܧB=V\3%e٣8ĂcEj)J@(Db <C=i<3H)1M۶1 C5 @S_|SI*F;'Lh7ưV id9vW^ 3yN=ąm_(#˒hB^!ʢEWqާaZ'QdaOo aޒK1 {Wesd3> عM*};;0 6ͧ:^Xr(SɈ(@W->v9MǡڛVQipXMsYtbO'h `gJ\Hzýi9D2ŭM.5tą%~kŨ2JҲ.h]BKT6{PD1Yt"uEia4gn0AކH㧲k3qL?4{DlzuI4JNAڥȰL[^`݋|DMzIR0:N& DbÌ$bθty}ܺ"lgO@y'2yt(' WJf4Ƕ9l=Z'\Dž/C4Ce7~ ]ij/ۏp%&?y&,ReC̏`f= *(kI$v{RMMҨMhƭI@Vѓy_EoHnu5M F/8L3qrww `qi!6M7*lI$h6MyWqdFvIID#1b]]EnB $滘A: Kpx ?OX'L݌ Db6њ:#p XI㧺~*m,_?"O]Had/iCh:>2ThyzQ% 2GsM^xnݙ%#χac 9N>ö,/h`٭hz~]ac_pd,Ib m4vz[KίghH)I:& _ ʒa, `繋8:LWB0`-S8V`}+C=#G 7$d%7f2"#F2Se=}lX-iERIgHp7Y' XC/JH 93quƧ |xׁ ҡn,WvdY`u#F˧+9Fz㊝kB5]GϬp(Up"j+ˬ)&uf|.W,c|,ctD_ˇvrg>ͷnDx{amϑ";r @"z@eSYrq3dRbז]5w&]Vn)X-%@h6{Nu3C\uq h^1-OМpe543s W\Ilh7=':2OQ 5&Bug΍$iE3ovɴ80jamD:J D#q$yNl)Y> ӲЄ{U4-:_5߶?ur$յa>8Yg2P7&"@t\dDA.g{9Z7/\.R`&HiYh:e >,a/j%1ej#7l휳9$1BA1<ņyo}j4Yjv\KYs`Ⅴ1G'lT^.l^qR cQ>^\GyC47 󮕤q`Π͙AA.#cy 4-lg} ?*HTWS0յ⎸#9(!_ɕ7 L2Y1o wLjMu>߻r2;nN:?awO/C2ơ!XcVj,+KGSr}?&`>HFBB)4Klp7F *|~ja\QC֖|߆Ux/iOs۵RrYFGd4C fNM-MQLMȈ-e,Q}'[7&9#4#Xࠑ5Sn'`u݊~"yncȥvF~uv}Cc+Ǖ?$nzՠr]t MH,a7{z1_: ,rr9tG4IUI H*-a?o߁BY5'4»Jv$H0,e*[; G[p<#Ȉhx?e?s˪(]%}$ޮ,_K  4p$MП?ٗ4ZIENDB`pysiogame-1.30.811/icons/ico_g_9998.png0000664000175000017500000000646212201770061016361 0ustar tigertigerPNG  IHDR22?bKGD pHYs B(xtIME4\BN IDATh޵]Yk9s.gƓ2$-T-Ii C[jTEPQDBH| B !H$HJq,8[xxg ]Ɂ8HXL Aa˴-#´mE#4kWC¢ZPKShRh1Dܤ/`O9 8B.m3}w&5ğF˨Z8:ֈm`Wah  %͸*rq2ָOIhwNP†o 0-o1јd)i!G4;F`Ocvdl]0<qFE5 gDn|RK4AŴJdZxjn46j ֑VnBi+ciƈЀ׵"&M˙ؘ(>{P-VS*2H!\EFfqlRQ\dXcDXv沓Z*sP^)&D!F:Ѥ-Ni4y BcℭV19KY%sjgv<: 3"m7a"O|Tin^OW\zt*hcxXkhJ!bO(կG\k4aȔxID]- [h!QB-AZu:g_#X/~qҙ=NeXːdlrX\, IWFuWl=_~gm:VÐ#%'$_ޑUr9dCPB0D+rY=jtT;e)b QA;OtJ si=#BP1ki؎iEB-0H%Q-c{a_­`6Frps2|hv550&n@*ݬi6($퀿ͻC0K S.g^f3n)^"]0I]j zZvKf36ÕkP9EM2{32%/-"Zڍ͝{$]nۃ47=PJJډYy Pڃ5^`tDZTJ"%r2<{4I퍗x]ǔF ([qۼ^/7 ؿ~)K-E:jg+Tak[g &hҮohښNi:=Jd| 9<<Lڇe+UG tQl#ޞIREѹ|O#a~l9Nȯ/)~oD@~{]ZY 7'f͟իZDe#"4e y^gֿűT-~Z >hA'w͎xGʾM\j,(%N̒'ط"rhk7m䂩]z=kqe4`$_jGbebCNDSwn@tu֝9{ls%`#_-z$:rqSڒⱒ1 19?=+/28pAP+ׁ>Oy6xdb uCA\#af|Pp|ei)KXjŝ/xvEWoU 7,qN/Q0d~9,p>֎;-{fKN[k-7"V񋌖)EpE%[͊$;T  4BݭY``3\g6\mEJBmQ9/^,k sڡ)9u|v` :?gsOdq|gJ2__ִBpḭ]eo5*K-!4]߱8\}sl ${ KMmY1KEN< WJn.O\VqPexe2}œ0(ZP>O@cȯM3k_=%[x=SI3z%Uvšu vk1d> 8sZ^QWt?>L %%IENDB`pysiogame-1.30.811/icons/arrow_r2xx.png0000644000175000017500000000105512201770061016703 0ustar tigertigerPNG  IHDR! ?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT81PFg9? h#Ad 4&Ј+X['>|9_UUa6,ipidYxd<#"8~= "cڶ%2Ld84 eY2 m\.sDl֚$I t:)a ", w]b@D0 4M9NA$ Zkf"|>rn{Ҷ-u]k\EDFn׳]JhYV*t:l6=j֚8_B~۶?5uUU1L>s;[IENDB`pysiogame-1.30.811/icons/ico_g_1102.png0000664000175000017500000001133212201770061016312 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<WIDATh͚{]}?3g9w}^bZc<!NJ Q&PԪ*4Q%U[Ui+%m( M4ʫW]\6z>ϙ1sνk$F3gs;9W??b/` Xo c|9߻gVXhbڣ@[[\psQ@!$THƕOIBeF*dcjV\ւa  EhƏ 5(yjf8ІB1qSBbS"0""0RDhjHREsz$ݣR?_C ќn9ٖ͟{E)BH?לȖy`|WOMJ͘ '[lK~ 4dϸؽmcmNSk@H) $  l $RHR MDXu ZIc7 H+0iL mɩp0PJ!R(T2$ XM(# Z,Z6bZ q&i ʌ:~"㛵 ݶevoߔs \6k3=nZ:gWI7t <v8O316v7_wB^'=L 1TIDfუuVm2te[ogn`~JPOroi+`۵xݛ,q{׺.+=ǿ@CwxgxSb9{Y)xtt37~bi=xA(ٵg-q!`qΩ#˜Ֆ{٩ IC]UKKόqo` ;P#E;P|ZL 3%0 "%:iLgD&ƠSoM-ΜZ`p]\Ϝ`|j/Mǣ+B;9e7ʁ̯ ? -916꡾2w6g愠Qhщej@P?(Mx Bd4T~^K[eif[(nig|Ǟey7X #ՋPΫwss,M5Љeb$w% SzSI`Oc?(л7}%څY6Kuft ] HѤ9Zo+<pG/+8ȉul~ sukLO*̆M!h̔ȷ;CWo[wQj9h눶X;KmurcC5IPSvKB1'ˌ<̶kXZGR"̃OPw‡B4i#kYfE+y.YdZˆJE4{Sh4mtq$WkH)@[DgD#}7|^<&3 |kE 0bWgR8WoJ)!BF$uK`B l mHԿ*,70{I#SV u%@>Ulku'?1A8} THy::WlSf)C9ICe*~S.~ ,v*߻-yDt<8̽H,]//^TyP.ktR2@HXcA@H0L'flrU%ujh ;[. yJӄydGG+BS8?ڼafN`L"ˢ:B$" =1w5P8d%9Oge/rͥ5EgZ%/8.F/wY@t ( sE*$V!qQ>+az3\wG;4p^3o6+6[.J/@0zT,T /tXBɆkn&"x';p'ВǶҹ;Yf_sRyO6U 1.Z+3(UѥGbPyJkb"B ^{ iMz[oc0RBI`\cxףe*Wu3؇rzVK A  PAԎ+%kH)ޮT4k{60s̾fsl9G|"4OICsNF{h c@(0ǑV&UL>V!p{iϺܳ0% Ue#\@`x/ݲ _z?? ҆E0D58r {d-ј7 \UvF0VIALP+s7os=: 4N3qp]tobKыuVc>Uκ_Z4TX>qyjᤔ(`Ppb:Xf`9ёX3oƫi/N A=M1H >v-w{I\"Ϳk3S˞!W_ R#uap@ QC4Ad.P>_7EP{ 6ttIhl i$Pgx[QoDrαOBYBY`OxM/8F[@@3&!F.M}k; w= zxA@bsaK|jew}\y:6 V݊}=̝+ӽi_S@ =`ލ^ӕhx4cSt0wurdO/NTH(DܯV0"@@6^9 Y2gYmevNگ(1ӑWZ}[E݇R5R[H䥱R*pN1W JF)\`K@ Io"HCl. 𑾝oB> \ ^r.~/l`?ssi>:/5K>"u)}J! }ai^fZA:BRkdr7ipKtR1#\'QY&?F˞ZӬVPlߴ̶g.j+߭.T'ᣭ?/IKX!IENDB`pysiogame-1.30.811/icons/ico_g_1101.png0000664000175000017500000001122412201770061016311 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚Y$GyuLO;;=FB:V !$v<0؎06Ɔp [!`0B CcI;gUf!{vWȏʬ~U ,`-5cBf?gg7gBOSbz℞ȷ8qcQB)NH-AJo_/ihlݑ WɶZ Cm>~QgohmHˆ8Ø$ ULEaDEaH&)h C*4M2Zhh4hyq4mޥ0_c nycX[ٮgE)BH?Ȯq`5^OoF!:Z1uN5خ&سcmASk@H) $1(HdR  ":p_n^ۭ#nHc0iL )p0PJ!R(T2$ W2QNXHoZcAMn9uE7k=,"<v}tI;@k/>Su Zj6p_eH2ಖfKIBX3k;o=BZZaO1D1oG7d;t9\} ':mWUٹa,KMc4k`7ߵm ys|G //6zg9o`S_0[?rSDQtSK_=  {_A[CZkoMI~Y~ c+, gkL`ph@Mlw#G˜|5x;%wSDQArTv#cd+nE)ۂOЬe잨09*սI27ŷ? @+ڭ=Uw B%"]az<1&'0Z$]掸]\>Ykz0~> @%N$S703jkӇf==v$ #կ=O6E+c u%"yhc ߍuVmؕUfuWOܠJ]ZY +U`dMYT TXqf; rJ {sg?)UB G7Y30޵8 Xnq *՞«[5} /l>r+fo#z$M2t J-t)1Sm,Z҆La ˜{$tIt -F/s~CP(|Sy )m!Jj@pׅ^"3ӫz7 ZX=@x3sBnhԲ4[`x9YdO?BS_Zf0ݟ7=Ke1]qq'KLrZjpp荃zO~gͥ6:_V! D/@*HX0>0߾}ݾ]]hC&WrѶKXD¥o$kv *1ت[Grt%-\rHk 7$;h4aqEaOJt;tOFZhZd>h4+TRvG-gZQ PXenl)f6 -:6. d-76Gn\Hg4s4V6U MVPvSg}-1 68m˯j?s5*Մ??JO'y/m\Z!Zz}0h1F:Ak3? >sxOLkҖwH;(DI*B~,՘z8fMy(BJ!?8Aۯ"k-_K#.?b:5mQ8Z&'SZXC(Q.ӮpP}9i˧y9-/CZ_|,Ɇ×SvSd9> ݖ @Rzrsg\-# ]DaD<AH ~MRyژI#RS u%@f>~sL|EZc  *qlz1YJ|ws= 7>yb.<ڵEpXxs/ Z?13)}OmZM;yJ)815+߲- [Ĭ-٨5YQ 2"j괤a>ZYB\ZH[S~r;am‘0H $RJk1{{X6L" ݿ{ck{|[&Ȱ14=LAVx.hmhմBk)ɰS9Y8 ewɘT )fkzMLkI ؤ<0uTz} &_=7*!ሺ6Ѥ[i- @P1eD! Wk`&Hf&mY_ʐ R g(9ÐEJugZI2=哛@R(Q[ksͩQ8[@hzS ظ :}+aE 뤮l/[|4KƓB7bnYm2\%p|,toh?R>P&ytڵCvQK3k.Ө\I@zj$) l,8zDRў@IX9KTxr4CeO7PBm@pb߸ǖL2@d(#< yW| >ncKlwvh7>=%N3 ޙ׈# ]H$B"d8ƥ (Ub* ~*A55UdUֺL֥_Q ?>m3oWR'W$Rq:ҥ R@n[5dȍ]qf|կz0m5-ڿҥdBwKcT@d@_v;X)@]@wv\NJ[L$#goB>\^r./i`V̹s}EŮ ](0R2$ mgx'9n(r[sĶ%s+_gοDe^Kx<:Sz[D[PqtӬnPl{7oFҳWVdZq;덹y%BH\AQIENDB`pysiogame-1.30.811/icons/ico_g_0407.png0000644000175000017500000000612012201770061016316 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDAThk]yu{s}gTGzj+uES §Nx3:dQ'`%Uѡ+:C; #QSC 3dȐ fZ}݀p u fU[B"@ 2Y0lf0ܾvڍF$8y <p: J;ώ (RP(մ.RHƌYUL" WQ=HH'.L"T[PX$-8A JYP*)B{K QP $y '^|99Hp 8$YovNמ{6bG F1}^XkGݬ8s%DDi9bHZx@9A*DpffmfUUaFq)?v|΃=Vs.f73ϳjM$.r@ Pi3(:+Y$L`N:4wx[q+W_Q&bQs(8%ObQv|) q6]9ll3drد?qGޢa ԋϋs6vXy7p\񻻹#!p! 32ŠukMb:ۜ:{>o7i4$[ eOl~|(q`ʤȅ{փ>2h^Y5|xb\pMYg_:-gP Iy,tֻCrtp&?- l]}>o<3 )D?s<0.L`$ZKZ.amx啻MZffޛegkw,X|!D ӅlZz7_ǖ,@J("|-l( IlƋK 9ڃ-{S\] XP#W_p4|4E#F)k7,H~͘%L15Xl'FG 6$Dc Sם>Gq,uX|_8u=#{aH8B`H?D a0:sX4j[3vc۞),?,~$@8@j1#jf9rxЎxFoӓ#`֜9-5JhtX b8wuIvcqwc(FFg?U3da@ @ %dZq!.Z8 &wv XGYRdcDwssK=ShKVB Qoo.+YZ H2] Dgb߭G})xye@C'e8;ήGLzD%K;dc)9ZWTIH[k0پyLQVJFFڒ23T#id<[]UbD"BSjax<$EĈXns\4wfFz;L+{tt-uǫ^QQ/yOOΔg${q2<-gl,Rt.RH UPU3eߩC| %٘E2ٝ};ӂ,* v:V])K8pP.N $H/H#T ƿ>7(;cYZ#Q{i)PPE~/3 *snfyzl-}k3O~{̷fF/0+|-;iPR'f>“ƶK{ZBdQ_翯;лIwrOw782;oMsGvs?LJv:X>n=_{2t7+ԽYf;:OHR!j)}@4J(R~Gg8x8,Xbyuk"pdyiJ퉕>$o%9&Ʃݧ CJE4KKjR'J׌~L! _Ƕqh;dƖCgY5 M(6^2.dH-jT#U`$gh4Lm9_z1&#b= ud`:G-@nV6Ur$40c1俏z8݋ dʤQRrL22`[Lsn1֞2&4b[5{z{~E]Z.v,P6X;=ݞqlŊzE3wn]va4?my~Ի㌍A  gfsL1a™gxyzM\IENDB`pysiogame-1.30.811/icons/ico_c_10.png0000664000175000017500000001027512201770061016150 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<:IDATh͚yeW]?gׯgɤ{" bL$DDAM@Ģ@ !XBYUZTYT!Rj@UY $dzғYzz}{9zz0zΜ{T;_h(E=D t}Ot<Q|[.#J J«P*2`~0?C+`aGk0Ȓ9+t-f{`d׾JaS C`w%N 9QJh{|WLu`<8 (ڣT,DU[BJO>ϹXɬ%MTwpHODDIoS~)Ѧ=ޙEF?Ņ+hm22cJ37Cdi DՒϱn$"$ U'<~:ih##ڣh1k'w(io4 nS~ͅ 59lZj+VQBh&̮MӴ;5g1+nUdDH ]hM8ؚcz4.>Z{ SN>JuDFs@s?Plh/flv sЇ@FDʄ $zRd$i+dE{!x2ar͍Nc x N•Άe4>01/132_D!}k;cH[ϢL"]/]{cS9ŹNNZ*J)C~Jt@CT@OB:7V| ;a+,n(h[ʠhN/y QA)2 IRjD.^RY|}[?145f8lA15= !\˔]GqCR04f#uĔJ[ 17 n|cWk{G)#HpHbi9[\K =~5O =*2!;0PlTcI;1AR)$]+~WjbbI-;ХЧ=HkYFf h f22Rޏ <0 P|I>ȫAYnа}6ۉ(Iz60UtZM GlF%Oiae <ŝyQ4 tvg5N^L8Ji[%R]U񣚣`\e' wQ?X[($!Uryݼ[)N`/`h|q#h-)LGu )ɐ/#/FRMt%DHz}LڌO =m_=~7KfV?pvk/-~Y~ފ'v*RC+0qU\U`*$jHr̡P}(AB.Sw_ ` :Y$7Gi;!ָ OWoz<ת ]yJx?WI%>ǁ?u8}_lɗ[c(G"ڈF#*#MIꗡB%T?Nz=9aAW͆d\W*U^V46O`c7)ڏ:?éV+N)RX )N1uF"WJ8> U@@Y:ZT@}<H,с ݊;h؟#Mgx%g7Ȭk\ƮIeeH j7f'Hba-͒\1aۧιժbRU1Zd|a+\ =1shتcqߍǍӵA֋l)OJSvqfr͒n/WF}nσn|'?f`/@+'r4vobNӽC}Ga3**Snm/(7\𚟿ۮy;0NOr|7\{-y ߾v\4Tƿ3&qooSmG wk̓k\ZX;1DdH\P}S o(rƆ[b7.x뾃zo'4 z:[ z*g ^7-1F.咷3LfJa[tBV0:Z<> ai^bw-UaGJyМzsU챘lwX> (,ZV1LQ5k4W_[GW{/Pd9Ekzbft;8{=[3a>&O}+ړuri6lY,)2J@LJbjL45(;|T?Û2X)IENDB`pysiogame-1.30.811/icons/ico_g_0324.png0000664000175000017500000000705512201770061016326 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚{Uŝ?}cc@0ɖ[qVRwU,THU6-+kS$תAWab$3 *ϙs?cLOuu>}7HeBcVZF듘 PEH4J5rA*h@` 0H+o*0tx`-<cHXpJTH'PETGAyU +* !dȁ)qr`':q̝cBp…ꌘ$x &Z-{2|?3|ooؽ(2%}&=x}}xpؙ{oǮ.I;F0$D #6!r*\2KG"s0*X3OXa-[Yz}Ągfʟ«9|ɪ=#10 dz혙8Cqå4`%z(ֽLqii ^޲}H)s sBh^xuKJLB8¹xN3 -2vm$p5/# +1Bq޽,_s} s5b!`JhMה J2p0Y19c4njyO1Sd@c=a:|fNjEJS;EJǦ09^3b0:6+bRc[lʢ]b\M3[\5P;ZƎC/7ͥ|>y k:#3e49UNGH$s/Af"0.إq!L$M !] lC)2"ڀ׊[ƵIщ9=cW *,]"=}G"h$n1,PݘjZd@ϲ_USr*/ykGեQ nRj4m#Zk2`Y?@4nɭsҮy}?{)5` P*uq]Sc$ҚYvk\Ą1g1q̇u3`ʍtDXd ޺_rS5jԲB 1Hgs 2ӃCJN k̪dFbVjghN#`/c&!X|.B0X`ɝ?Ec1@۸6JD Q.] {ȶs mBW)O )`u:,I\xn#νq=G#imɿt6sύWPlHa6YIHZ㈷m ~[IC)dņ^Gs}+kD]{OS;/UXf^9 nw|JNdO k؉cUؘdTB;=l=y3ٴN`'xh㟩=Ysp1 Gq#b؇f>4rrP ZeD}z}ω9[qz?ظ;=5+6cSoAy)e+!:;( 9ḛeDk\y|/_5@ zj/;0oOV-@_f"MgiBH ?2HIEtp1moF6 O1T>Dkƺ`q;:̎=gq\~<@ 6Nia8V~ꐶ~t%R z?[`KCuA,=GK2Fl̦*ndӔLd2aዟ`῟ &8T\PCŌ ab^ 2Й@8⧩ FZ ?_w![NH04 6q"C+~T\ jƫn6 HRvkً@5 DlXI5ko_Jk^m$|.^؅Fv,APDB4u|3yJp~^\PPfPDABU"Jڌ44n_ 6K 4Jj "`>%]e$أ,t)PM-5s<T 2zUp@Bϕ@ZAS-^l' 0T/jՖpJQA%(Y`wgjqb<7i%*}+_a#)ɂd/mn#E*&L~a":F6ϛZ̿=8yHnañQTʿAH,iAA\BG(˜3}4w,$+!=XHD?PثG0lP%g6aO ?Q̷yNaP2nkis!@"d@ 456c2@ nΌsc*̜=7^F.i_p#LJղ/0`76ۈ}?lϞ 䖹S, )m`_t&(Y\jׯeA(#HP`DP:Fq4_7I 6T9_]tM y( Gvų/×~QaUKD%7 yr_*[$2X)b+k~z\hU :Dڨk0 BAݧq=  ^·Rv|6N4V.[Z8!¥OFG7 8ξ]ca-@j !QjJr~ȣXK/x@rNM~ C뿬_dPlcqN8~0;7x `P(;5z\Njo݆IENDB`pysiogame-1.30.811/icons/ico_g_1001.png0000664000175000017500000001145612201770062016320 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThŚy]E?{{t:d$U"e8("3:̌#<e13rAd$ ![-ުuo:Uzu}_mB}HuB&k`I~'1XkҤ٦u&lIʬ9#xdEd%!"!YBh<ՁaX*=`.lL)2K# VPioSJۤ48jU :"xMgK%B 0n"t9)'pρPNF$cm#He2S^d5HkDO=p"*mVASb%40ccs.`μ"-v"J{y:fw{-$$ d#Lii!xI cu_>LfLHK?GX$(PzyZZc))&*cR؊,bD6|zF,+' ;2ڙuZ <e  J8i4`j6 jz]@  Fc`ܬp 42PYT2M-3n$Ki?쫼oAFg'݌Z1f4#qo0]I ۰>7 g -ici5o4-)9N#Y0@hh ?'Zd3y?gnrOqxu0,Yud֟E4[e7c @XKhJ4{*ԪN=fH1`=uY v~cF8F~pM'\){vڰU[ekH:F~TՌpc ƞR ƃ# <M: %{GӾ|^=ڎqšS2k>[`!oȣ)>ڝw 6Hl$).+՛VTo N ز`o_׸o,B::|h'87LLDJ]{9(sp<}3F){\3XWIy-Q#9^ U6v̂ [pT򅛥Y+WpVz~v7-3=ιf1㈌%뮻8裉gws#c|Wb˶ooYSYUe˞}&J_Q]5jLZ$q,S؂yVa]_x4)D}i>}:MMxy󨫫C&ĆgW9S>>{񙨥hѩxpX)%L\.?Wr=A#*mD _3f8oe+tس \tsi17l6tR,qF^c#2 Ʉqs7̥ϲu?\OƨfoGYx\>As '0e.b6IL&3/aF,ێj2eQ6F 78ޅb5q$2?mS_΁ݟaX71unn߂jO~֒ rUMJHx},%K&j`ɒ(6F{(}f8;P([(Klt9!dijXNg0@˩gႵܾCRFJɆ +[ͺO^yNTd,I~7cf0fL7-Q:bnQk /c(>( ĦԊ5vuec,„8n5ގj`9j9A)eZl.;?KzqHRi }u\q7%`XӼgsl~t;@DF)ı?Uq'jg-7eT3Z3djQL%osы.@,7}F$Cعs'+=5BX’`Yc;A!BKԴ-u[LJ.,&V)qq㖯sr=t?j<6|,AS(-e2w9Dی);䬳>.QHGiine￐/D(lj׬ki4bX[װΒ]iv-]¦M/y7x-}}226@.52ϣD*ksB`ph/_G9R B'Cd!6H! #bG/c 16) I5WbG B䠬glu&}Oeuc3l{t3)85:/22BfSNJH RV(T뙤itooI{Lzg_#sVBA>ZL&n7de=8&te}Ki .dh ߿. ?FjUZI(`No}s=mHJ8 4'H{h+̝ѐo> G1迷$j$ILwn7UzkoR'70V(Cֲ(m3<8.KgC&ڀ_::Y&Iu7.xxQZ@:rUtI vexՔRb,G<S#WgN|%W5HrRɞh#Xˎ׶$%wCOٹRN>ׯK z3[yl/No5T !M2{ZVAp#Z |O\K=/~;p;wI__?CCC֐m-s)la:%9T#& Z[ T͑</c=Symqڳ+N.<%K}ȧƔ>=nݱx8W+ ;"4rRmD=_!@KEdyQlgdVCy:ټnb1008tYz5K,X,28859VroR㪻 ol9L攪$Й@FJւSHJ 7 QC6Pz.<^,My |7ĦDɰ7(/GfFjTx?5(v R-GW)@+7"<)Ry!Mm.Eݸ2Iz45țQFLqi\|A& ~|rƎ\ V !k%D R TpRJ>3.pQ07PBAAAQE6""TY2"Ԕ?2k{ܽ0M d1N@+rk|OќK!h8& f|0kbZˏcUqz1AB798RCm۔/w2w{8"M/V^*iTHmJP$Wߕ6ko9 !c'|.=IwBt7i;JTVofYZX;4jW>?RzI4%6ZZ︝; ܅ &\5iVWr6'Qi Wm0aTYR,E^ieS{ 85^A ],u0gGga҆;#GIz{ .;IENDB`pysiogame-1.30.811/icons/ico_g_1103.png0000664000175000017500000001114612201770062016317 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚{eG]?8wwggfC 1`I %j )R,?PD|AYDSAABG$$!$>fgw;;qNwG9g>so=X cAn0^gqƆg?»AO'$)=qhI$%d4CE)u.v\΁,X: Cs6 (~>wa3<@,K$QB%qD8&b8&"(EHA[X2ah$INËsdY^LVF̑Ei@,1)\0sz9!B @H cq78,6}38~ſ繭3hDR+vf/ɰi;@9.8WYVI%%J*W1Z*SH%Bcɰ2,Tqa4s3f^ @ZWޅH`;a]LIHGDJ&R֡8D2Bhj{uB\pN:g[eAxQ͹@(>u ]#|Rsڜ /E·Z7WYO("e;Ac#c~zRAH'`vf/pTVXϓ`-/E  ]mA~Ё;˩gؕ5vCXRG8z7Xmg@uB1"-㮫ʍ^y}˸̄ %1|T] `^@*M#AT1Βmč!%?,?yfU,su=uhl{+̰oߍpϲo7`6OOuڍ]SUmWnY=B`#`ZG*-1DnL/թjD0{ G>E\NBp/$b])lA`sH(@ͽwqT/~y'{(`34_c$ȭ JqmnNGg=ƞv !b/@>[CLT䥺Ei=օf-y6d:` Y[nneײgkz׏2:^aܦjwEP*<OVN{maD ~wf$~MrLJ-v)1SΉbY[OD=c-&Dy(h1v  x43%v~fR _$@JpH{bB%ƇEI!kq-̟ H#.?b;XcwQzZ*ޚLs{C/"U3L{Ri7 =Ԇ{ȶ-?yvx)0}MSA/m蕔ݖYbyA|LN@?'@Hg8ɵ4 B [5Ed-S5ã)pJ0$l`jl$& >e8p&ƔNP dn#>Zu5r%i(Wf)'?a1fDn4q7˹w$bhוa̓$Dpʋz` !'7pq[ǐJ o7FɊnKE&v($oӒ\ jyF qj2aZ AI@')%5L}}[8Izkj#$Ǒai&|^}=Ng#yI$bm3V: *2WFԉ%R&cRkT> 1ڄ Rk(Ɯ=Ie({JhSM?{!/zU##1ۡڸFv&xel AE&TdaZCnrͬMr,#5Dd#Q)<C}4V3μBO%|EVx/Qy8NKsiz-aZEVXԢgYϷYww@"ܐk HXǰq9$IU$#1Wc9ez*1KX5&ݼG:S)qs1'SXUyU!h A ɖ)r0 !e EWWNIRڮ]-j)d]rz _qo+yYV\:2>;ȩWצ%$:j8@&?z(XjF︦#1ϮcsMX=Sm7qNBC폿bzS}'~I+$V_:?,(;$).}')JjQdmA2!QdɷZT'6O#QϾB@B{+ԑqF&EϬaږ*oNMUټi(RplAk4fy(*T:RMz0c̢R2&=U Sӛ:Xcݾ+JgX掯J4H2,yVn^'NI)Z)%ᜯh(d G$:.}Gs! Ieh__m:6dgk +aXxy?Ctrp:OvF6XVZ$)=QtHgݪV7r{ H7zDGTVg|MC#̝Xc@G"KGM{n TO"sKJ@QDH)A'&&1ʄ7 \5[ el(U (Y>T`/&jz-6mB0cdl/e_|4̊O'R7i[UXm2R,$pb]k,+J0| rBɴ뢖a5֮Ш^I@ၤ) l,xzRӞ7%%˪<3 ghѪM4 '׸9s|$f汕ZgZBݗ>ꯌN/ȉ$FX]ï A);:".ҘZzb-xrO.]ءA~q|O\4_KzlUy #蝹[~8 0D(.%R{!,l\JEo5:r^޿hPj,#jȚmLIKŀX^xMCgͯd>$*%uPHJXNR3r+\WdfV跂~1BsvF+v&90]~$)%"J)/;`"w;+mKYe~/&-,RJguoB!\Ar>(~/i`^}E+X"maQR2,+ Ggx"$n(rGsĎ%{g.DuHd2:SrD:uYݠnvvgz46ȍA7[۟k&7^S 1`Uk#IENDB`pysiogame-1.30.811/icons/ico_c_08.png0000644000175000017500000001104512201770062016152 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThyU?֭z_%I !YX6 0!$ !MEϠg<.ʌqDF $$͐Ąt't{?n{^wĿSw~ko?*\.1 0FF=!A0'4Д۶F ҩRe}.C !؎@VI#+ϣzbE ,:G0`bC MH?g`빨뺶x@"C|l|ycyП{rW+y{50"A-mag1SJ /,¸m'։*:c9&2@Z M(N+ŀ BJth7b7a~ř\5KS8!SZ]qBf״H`$hi0҂}I[ ZDF C)|4C xz`-Okwpu1>|LR V6ήj@*c 1`'`œ[1uQC1c<0ޮފBm&+5gcFt}U1ӹŬFSi*FUUb1a"..n0LcӔX36TYs;3沬{)+_mz_[||kՕsEƥ K1228f%2*x+v-Co_t{r#B&Nf,xYjT-VWjNOO[=gY(L"'1tþyEd@d r#)$:)ѓ&4'Xv |+5n<)c,#H2UD$pMY&NHO %LȹL9~O_0^$+EPw [Z60=K3!҉l31p8 j Zh QO>g3f&L# jjTg"lFBRPh(c&*MÞT+n(JM:bW#:!lT:uF2Bz&3gnadK|zO M@#VZ6swssPTDe K58ZfX䒢KE2:]Hװ7H{Lє }P=f7^J .< e)VQ4Ho(D#LrDmվow# RNkR=j :sr"8@ES'MC Ic3xjlf e7_e_D5ny1h(–WW*DKVmv3 Ƚy>(hD;T נ cVM}Kۓ:ؖbY<.5$r5H!!RDnU& 80v?-NM=pQ  w@ʡ4;\*>=0>q+!/t0KG!j5Oɓ$҈ĠuX<91ň3SSPsZLlͮjͨ WId8hkI6򊕇? c(jDcBB,guī ȺEaRy*%8Q,9.cJP3@ʱ8]obV,6wBARFS4-^!6\VZ@*; =J~<?4m9?8Um51> ˢV@Ȋ~|IvhW:`C@pC{4N˞;A} ~/ NB:#c88ґ{44Gd{hzn6*+AEFW!YXh4]c݋_6RC=CH^ VzCtQ4g=*֝AK vsoӽ`+chw[ک}a.'P2k-/VZǴ8M9sz>/NvVl΀#;G _:dBpWd6MN؝,$b(>K8ʱb M?(gdkyk&rɯ.剕H+L)+Yu{@JYO!Ͼo7O|e&LRj2ϥ+t1- @ek3RJRn!j]sV+ph%r\uWAk*\4{-n}>RRÓ3H J/+_cAP_a\ 䠭M4~ װ;w~>u^+62~r8 Iذ="qܔG`=_2*IEv]f qˇh)GpG8w:2"<))s.K^'msz6y^{?!ᇠ @#k6’wou=]ᒮy}[Uy\3k`4M61;vɇ0~zO13vPbL#|t׍Eau)V+.#@23O<|3cM0|z RSSCMM Gq[}pn{LꟊrR8z*0ݜȅױQ^ʵDJASY21R15/Oл?}R`knYeRNDXy8NʥiDa#FH!sދK>k;Zw}F2&s[}cDkŴ7 Pʉ(ga1 L˺o d/}}twvgU[>u_q va}o^[[[}nǞcxs!91Ήqq‚gtqA T g pVz"vGf s 4 &mc&BÌz40'Ğ 3b7C'YX #0 \[>kD8y~ei t2jzJzS"P) UZD}ޫeoW+_"n} vpmhl/N9z$QT"}QD:]8H@25 ⏱ʟhm]+v3S[Rݠ9O?qΝB5C5ڡ!CCBz$"U)x9ZJYDv:@pv]5u=_sVJ{5ʵߗ$ V Qe&O'j_!:?_5(;c.{"rCM/<C\ "mBv~Xzҧ?Y\m&&ڸC΅G<ϓ{] Ҋ+})|_$^|,7qTdCn ǁՈ䎣k4-G[\l YtX!l⬞ } ̞ӣy5}Q_EWW]gq4hIs& ހLf]*h|3_LSEq3/(%̍+=og熞IUUx!;_jT;=zrnFXket._<0+BmlnI%1#XH(+#͔ۧ"̮2#QgٜS/o|`50Zu9J-'L`j_7w'aKZF% HUao7{-(W348]7gy5őx,DQBqĝ9 W~ݰIkW'^\f6T⾿}BD a۷s9|n9q{nGf@,p51\9+c(r!fbL.|=b5?ُz)ɛ re 9 @]r35w:s'.\^$zb ^ &QL]-{-8 bJ7! pGd' -be:-ĸ`\ΜwX䁔W"dWTHV(+wO.}2['~MGmy-Z0y(sk\z*cK"Jp!ADdc!vC$PJHəb#)Qs+b Xꋼ}/c^̤ZNS~jҖ!vbi! ;v,L9eq 1GuqU"X?kxV :ǦF܍k3|} ф΅ޠw]2CK`.*'B\{bdz9'O0n4 Z|b\1c<Q|J@% .t8#hH!+0reČT6(2  zYj*Y/eRoܻ"4 !)1*},70ωAAY7gk6B?o"'c`e\imJ1C""{ஷpn%Sq/x6.2:@T EYpr&fYvؚb&b1Sa^BgXrF̫#1PB-B(YTA?>{@oĐFq_dHAJ}a3B# ׄ!ҋ2':gMv7(*6JuR@3c-\dF;&Z[#U{>q>̛zOABUiJ ]P:S,KuBj/x6,;Z ͆\R͊Ri5|dǚ^Z}%mr-wcu, nuŠx׃8b`HT%ˉ.A Q176Fp(VڬbJ@1CI!KV/@wC*ŬjF}7)c!-)ǭBA@.jjH1Bqr6XMrH9I*>:6@Z:yJ2r^XQ}r{׌bZˆ@ΉqyNOT"SS@fuvi-%lxT Xl4lph 8@XVM1}$ˤ4i<7>'r!148P35eFj9%;%%v40PT.FuOe\Ani $Y/*E *͠"jXKUe!Jm ^fgfI r#MmLd; $ 1HmW|{?t3`ժślZi3C>ޮͿ X!.WAg5%i D${?pcqķxG>ǿv}4Γ%=|S'W Z6FVuTj8C9l'h`t#*7TQwe}fOcqO3FG:pRu5(AgG^ՀJ4ڭИn M80޼OGnd $D>~/~fi_LߌL64vt0zastoRra DDժ:跏_+ z[˛{v17s!yफ,fyrr#B ;:??al6gl9N>?O;rIENDB`pysiogame-1.30.811/icons/ico_g_0312.png0000644000175000017500000000742612201770062016324 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚k]ukf}ι/_ cmpT.4ih)*ɷ4UZJSR%~hDIIP):Q,Mm}s޳afιU>u9gZf͑3~Z +Sp8gy2ӾNm25iF-ZI+jҊZlVԠhF-d88(vwB_5VNl3GI6sD-uд A&jҌҠ7h6DR] (mt-^X2;@T}o);h^ON$" FA0.Aq8y^&b)ӳݑS5AJS!^ŝ]V,V XP/`%ʟ1()JHQR,0QLcNéjP Nʟ18% ߯΃c\MDlbbcZbIlLb,IԏI$"-(b  a)i9U-4_ڛCq( `4;)Pwœ8r7zIڏ \GTu :l:@}}+zo <Cz`#&)lb=b{)f6|:OL|RvW *t nDGz r߹Xpy0d,ߵ@ӲɅ63v\ɜ;eb<׬_ynщI_*D?Cp1Fa6 Dc Odk93s}ŔFlA];Ǹ_G/U:]~b;''^{~LᖚV2\¢JV?ɩ SRLXrJr'w(sw\6:}6~ LuE4\\NJđ3sWHFɴRsΫH 6_}wmWm/&7oy#ܰ^@d׏^>Lu;z}}09JOfI"vi'Q F*^*~nz33>}VF[ s?~]N/[{}p]7^M dk,|f%1 `^s_4q5,_歗nْB`/UFG* 27rVgܷk'kPƆݷ$[wKi+ ZM#v1y4W56`0n61V0Ηȇwɩ%lںzgK]0EvOo @L'$%d% *I=bRYJ/$"0b2`@&KgBzU^~pŊB-d6A\URs&$ Ϲ7slE,e=t=BoW҃R_dҔVBp6uW Q\+{8bmbƨʰB?/L>sxD1N |oej~q%QwH vI#4SjO:u模3^a]iS]7I.Ќ%0ʩYWX>⎫/epr3r銖 ʜ q9z._r[z#ƨp8b-7527g?oHb"%*}n`%~pCkbʢ+"2q `♓!pX/ B!JlDES,O, @Q)qӰ׉X/|>@}+'^zJ4/ (Ib hĕqN>dm>@}csȲa=X=@Ԍ6# ~͊I>@JJ:&=w>d^B{]Ii3m{$/6ݙԥ+[P.ֆ~IDI/ o,d!ZyYg|JYWy VH+jFaiB9nkPtguSk$g{=nyb'^ '9c%ӲM"58)a[Q{{HA仼>Z:/e29i=@vHVX*ڟrh.Ov>]ec +™G ĿRݧnXטkWf~@QDעU$ҏD4*j{9sІPxcC u%Y:ľcS5w[j6iD F h&FlE@5G W~vU\yQlOFdlFDRQҪWc̴xy4͸LB Tմ +V+uiƦoEςoLlGըU)_VaQWK԰ a kM G0%+1AFr!I~{8|763֊Q:!%c$HRcOZrǎul\=PV(  Si/,v0s=<2zT4 ޫQQLqC п(5F$ƚFt~/؞ryX HYl8m5z WԫЩtޝL,,vka-׈X$s\HkJF\Kk>{ =Fn-gF^{y>tZQSрg:#SD!> ILSJN7dGpFDj`5ヽ ʈn釀\ .~Fa0mⲡ{pï!8 )*`@?{CUm Zv-p ́A^i_O\ zWn]ky5&a෺WP2O4۪`{,;{9>KDnww~q^H?Ʋy> IENDB`pysiogame-1.30.811/icons/ico_g_0400.png0000644000175000017500000001137212201770062016315 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<wIDATh͚ku{w]=vW, , c?2*!cRN9TW*Ev06 -d ! BHZiwsf;f{Wrޙ{g}sN^~?|!@9<|~͚wy_.:zp%](2%QʔM((gJJK =޾ OADE6.Es&!= uDBHGD&$2 tRD$4iѤI-ZiҢš !X?·‹lm@}_{@V|F)B}]wbqC_s'>#|{ )˂F'1 X.Q(9H%%J((NE]iPyB-a觯3S0~""QN"Dl3\۽+.u.p>;Sşql~1\0ц@axl etIWmlZmlr:H qx$;,{F>x-3;ys%| ׋K9:>e;^F:<#eM4g GѦfҦt{6H2@ o\mmGpG{]ybco`Q^·B\fDxeCɚ~nEOzD棓Cz oW%ӕ3=WGIIZƚ(Gs%3YIe5@RJi%%l#CpŝPO-2\Na-ӳ3,qH!jf7ezFbR#BJE= 85܋-mm =2ies0 _Ɓa}4[5W2Сf( ,`QN,֕ozXupBt(/im[-YЈ--4by?=ȉ Jܘ"V͢7D1YwX{{oѫ0orK k@J|=Ľ"=Zer(=eDxN&NO3z]gb\͡fs@U#gXx5QBSO!dHrBP=2%釗"Ic 1'`Xox'1uL̷At!ɢo?ЕNQ=_@HW qZ69X!0veVS{VPr\x%C&'@Jpftt&/ҶH̵ y@*bh1YT(R˻Q$fxbzgr !y*"rr+)>ˁ{tM[g9@:Be9j¦o!ʵ C++/ꐲ.&vp\Bm0:@,cB3waf|-lOl~cn(u>  ^`$'cpҍ#m M̤su]'CUƋg㋟&R!-<$*a1Ш7Cg&?ˆ،Vx1H<`ӓͺ}${NrۇaMw_PmY4Iω=̓>6\|%X\.b$xObd0;?57^ Ѩbr^3op,4;3/p&>D|AJIĺ̓=G7gO%Z0o2RlnY$w7zfG]6շMmELBJǑnr>?fb`*UM{-BBfiI;/p1oPqNq_b4+8"n3 HWRME%%k<ԽObm/ \vf>T|ۡVkvˣ]^+A/V9#|;5xoQjG-ؼu3 V.k2੯d[rϞwS(TnVF<Ѕ.zxx*accW "kA he0o΂'ɇ-$_oJd"^Z#1;y3O>`(BtbIE4KםYs S>.3)źܧ )% y.ګ7pN0f9㦘j4IJYJ:Uj,n c9i&gG=:Z.f6l@IV4FjԨڤE%%E"L3a7ԨS/sThw"7SMjTP2L(# qy?3&U| *cͶ h%D&i)G! FeJ+1sC_ Lj ɆޕW)I3) l {~,3i٘JdkY!O҄97@"^lpW054edD T= 4翰)μ s@oC` U8WiT$ &H2$T!J*NwYܳM. %E32v=_ĩS*@eȞ\@׼E:Bk]|g ltViW+,qNa']wUVq/,1ʴIQÁъ%a# 1R HNדuJ t@rX P!%1b#)%gL6z#"kDF1>{' U&P&\ Jӿ0JXjРJf `J&'O3`zX#]HmsiLbh^BnY5$P@D#^^L$wݨO`?[L )(CCPhz,=T[)p)Z!z t9 c0ʅkF)~ʡ1P N/^ |LU,#.?ʡL 3MVgD՝3#Nl<q|;[[yzBh VϠۀR:tbkE,)4cDQKiB j@^a&MճT?/Xur#&Q^cQHE  P_ӯ;t&%!ԔtGXA9Pм&wg:qVw<ȼ(%R o .r>wz%^C.qSoO{_4{Ym;lwK-н~L7IE7[6m :]ZF|!d%`RIENDB`pysiogame-1.30.811/icons/ico_g_0605.png0000644000175000017500000001002312201770062016314 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh_Wu?ܙwݵwm'MA!4P@PZ!RURC҇ A Q*AH4 h 88N^{msp횊БF3w9s=wdÇ@8#ZMuOE* Q:{ۮF%*``{{Pۃؔ_ſyUB@xgPP,:xn|Yʪ((@5 eAYTe* @hk14wؾ)8q!>;,"w|vg< s PDJn>S(pu8{A4'8( ,]wZ@ ˪HTt&@1BSCX\IEᕗAu4jW5ǭ%'MB (!RPj:@ _k0;-qw|9yשgM*ЌG։z;nŏYH@XL}`K[S81N,ۏ`Ezv,ult6 ,o3cQļQܡ fCm+܍Fh!&)DZUN8yBL:5wLdu=voϣsc;<_ˬr9;^Y8xCN0;;F̬zy0ȌRܶ*:'L(0Ĉ޲FTkoV> L:o7pgxҽ/tÐ+]{+l h?#zGφDsn/۝?LN̟sx*SScfF ˪2˄bB@$1ܭ Pq\jShUh٩ AUfo|9t=Ȯ?Lā Ї_I\  ms=@$o>̝ab|W_?Cg.>S)fgCք{y}+O|c?ٿʱcM2j緱!tr7~䤄Vp`]ti"+:HC_W0c.4sif #8Ҧg'ؤgњgνmP?C]okH#X?MY%z&Hec`JC$ s˜8L:OfTsK ,- Mg<.~ "TMqb#pX _8x쪞{gwtl>7s!e<6G'x.sV nR$v>Ҏsc{O^ Y~i),:l/rcgFg:c&$#mGv󞢗eZ6phzhԮkh{εsì۾g!vՌ&4V^8H J#|AK'3X{],MJ,L##y4o }/W6ze1B" />ѕUp!Z$HX>7^>V EK|'>; Ϝ lMC%2bqXi}gdkyC%Ͳ&fccCl"GWVӵׯ#Ȼ8{yaHΈ&ce)N<nڝJ`z/xLǷ0ǁr޹!'-NC !]\W$f~v !K+٭{پ` ӕj+M~<' TLrQ; x*: γ?NèAq3.?$s[XA(fVF%Uj*Uη*\U wyJE@,UueݩsliBkg*•'XzP"E<.{KGEe0Yi(h@D;épTSI,Ͽ=M[sq#sNm\41 )v7fkn ,Zxs-(XA)0R[D; EZ4(c1K] !6p "]8?L\2V: =("hH$c,J&TSrΛe"7*%&4jd *XNo̜)w(ރJ)B@;APUdifs@mwI[e[S kއ6`YYX]D5U }=^Ze-  $*nRj d&ZA N$_N8xpdTZᱮ-d?#+A"FmWi5uV!#/=U!f9݋BӒrp$\)Zi]3A@=d/%!, h~ >!F UzY Y A33" P(o##Hrf9sǹyRAmG+@,-,CbL'^b=TE,`)FL8 .wM$Q|,K0ZgowU_My׭IsdB[A_偯?,nu4xT>;wv4Q፺Z¥ho̲-̄eY޳eas$ՈP wvQ;zRjco- ?'Gƈp_+QYW^Jዘee^mE >ZcJKȘXhTX)@Jֆa EЖ!/-`˅֨}_;-5JFK~>BSVJ 4 L0 L0>LD&Sb6Z+YVʓh "j=p=(O|)!(ӶI!)nff66l.\<ƫE]30E{HCGB0)P)e0! 4CQCC ̘1{iZ9ndv i"U GA2$L2i$.]ʄ տg~%,gP..V_/PPdZm!B/=Xq t*6m]]]$x6 n۶-[ƝwYT*?>?+g$b[UTժzJR_+Zz[0F]nϟOSS|D"Q"JD۶)M2"W"۶iiiaV?򳟰 ઈPF\ TL^㨫+/^d=zsΑmKȲ,:::[>|8< :FLål;C:Pa#Rc^K+r]Ă/B)ESSv̙3((q8s ۶mcΜ9<(h/~UTK+ ~]嫕xSMf˖-H)?R + \׽mH)ٲe -bbDvgD|H rURXWYd WT*Ub,XL&88ֲ`MR*d#Gd Iz/Ui#g*- g銿駟mmm+شiƍ y~m̜9uօcgΜa޼y1\۶ZZ[[È~ ONwww(;vTg0?NWWlrIHyWc) ^ #G+TVhjjbڵ;w ={/6l`̘1hy'ObqX@ @w(ǒD\\堊c:::&˵aHC'"3^bƥ! d4iRլ˒Q*5jC? 3 "[ Nژ 1[-G(ٳ\.ڵkBļ̗%5m1 iH΋vuxaMiyMPӈ֯_ý<8q)5cÆ xuGI^DZUeH]maF.'MĴ,ӧO{9"Xt }\tŵ,T*ڵk=8KMN>aQ__OFum[50UHZmʛF]aݿz<́2tS?pmUOOOx`wԩ/I]zlĉ8T) IӶRe2 #?Kݴ :Md۶+΃]egDT*OdY eY-m۽4< a6b C@l,| >}!t]DJI6Ej$+RO1eṟr9CJ+O;K.Ճ JjEڟC&H2j)$(K%`ku+9?GknAd&3ԧ_7) p~S\^Ro],]Ft#`kkɨgWWbF`BJsI! i0 y$ gwlDWf3,=, I1]RP8*GuBeˈH0 402D.**Wth؈^K\(u5i^ IE8^4ODZXDρ$&oWE..!jڭ%5%C!)̫S;A DD~eReU;H$UZ30LuL "J=A \, kQDG_lv> IENDB`pysiogame-1.30.811/icons/ico_g_0304.png0000644000175000017500000001041012201770062016310 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚yU?{gK2d mI@"I"X VY|%>SE6 e@ L@&aI2-3sso T?7g{|o9>>8<)@Wh@6j[wSPym9'GʑSyNʑWyNɫ<9!""Bt/F}E[Yǜ9cF jzA@MLl#@C+GNyw}rs|!e4%4e  HzJl%igށA@ǘfS$uL\]!!"UH!.4&e \eGAw&/FD$Xp!&;ٻSp#$Hᠢr.$tPq!P HV$m( Ae#Iu$ 4h >K~fW*\JWx'\3O(\!є0s) JU3h}vk&:a/hN#i "2 xDQ5LʚX#Viۍ'=҃=&SZ_S2\13vhd`y7~O/4-_<Hџ6Ҋ>flafY6:FϬCmڐJpyj+ Dj̬if#-GMH BM|Љ*Zm422h5Ӂq,c5]̘\=EvGVVd #_0:sdiz2=*}Ko@y`2._W5mIۺH e4f8dlRe?w D",jLYҜ3k4GFbk$E#ݽE>sS|_qŭ,<>>ϕ Wx,k#vof#ᚽy &<RN m1/ #TBJ#wWXrƉ3`&3&~].\~uf~{9HKs:Ɯ{,piMI|$m7JG;.a`bOCZYq)=%jם03a1ֈ)&?OEFH{ 3",V FǦD4Fj9eݝpg{Ɏk5Jڝ8>` rRC͢at^͈ˆ(&^:F1-E%r%S\eZ(ʉ$ZY ڀ 7>h1ʫw#Oxxw<EmX*v`h"vFej9 ˝<\cR37rן\љ~E!| FM#bS\,X/\;! DڴIo`t;B0\Iek.y*T C+7`F-L8B@Q35]L[sp{+#vvSkZ>:K6p=wD: s:l<:YrJnqs5v^2wD`p n/}ȈEG7 MT~z7atDc/.sH)g{p‰)iBL!c(MiLdXo_ˊ>}K//u&OmHO Fnoe{29#Vpoc9?iT(ಕ BM״1~MH A'>)T *=||~ M nے1cJ}>,r.bEep[rjJ%Ufyrļf\=vxv4QJi$>!ꔿnCzDaffʶ!vnJ8%TB<53QBavqQ]/wE!YX{#(UWz8B%M'Xfx)uL%(jRH$ޣK`3AM(颊@ y\(*OC +;Ih\n:UO8MT]RQF$ET_جt<ŗ^+(y]TE,րWΉ11flP9ug*s2;I&oBHT(rg^T8E(eʌY8C@0P 2.=b0jI/hh`L=2+"[E {SpϙS9eL*i/~{fN- CNƌ89~uյA :sL?'wlc0tD#aiP!p3Vvߌv,iy''m8Mb \7- pwo*5y,@U62'Zr#UKIgHN8{U3}Y V06ǖ4źM=07ݾO,h?-P i#erj0Tt}$]#– H y'*Gz{\y+tuq/lfA~O&@p6=Hu"Ahͯ2kz#^ %"\DJ-ewDfr5m`>|BXgWBD.C @#gUlLiC9i)*xy wh:mmۛmM{ksR'^ɀ6޵ Tr j.}ħp˶UC o[w#d^sԔ9URT-Of즚XI09Ά'G)"EjD8GΒ &߾Y@-75'j9Th8YQrEjhF#E F-叠pi %S`PtAM+dS͘|XL Y(`R?d k0TB2V携 ߺCH7DF+ƙj[)WA`~qp3/ i 6∘T?ds\NO\?帯ztGfs>L}6)=5=՛!J>'g%G+ڶj݌ҞX>0@KuBIENDB`pysiogame-1.30.811/icons/ico_g_0319.png0000644000175000017500000000543112201770062016325 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚K$G]==ce{1-{!;w$ $_#2n8%IJhY,;鮪 ^|TW?oV?0" =*xU8\`a}UX'nʭYkb֬횵[vkVn56^5fYt} у y`G/pGae,풥{u,erde:: {<;<{->qoE QM0{i>~ZӰ9& H7H|cº<0_~ʿ_RglJx(A5C%)sHd^5`b`~5M vV ï*WjW p/;ؙ X cZ :cY{:q,١2| Hܩk!BXM|AU8ٳ<>|J#`6,֘%#jd͚o?x@iᡮnZ5~qQ ]D-gwFnjI!HilyH>h}ƗWw93m6ɺt8d-$ZD0L NhE "D@4kJql5ѓs+퀀!áH=ARbV>~L-`Djs*"$YrдFƊ^HgqSm(`r svkFًkĔ}">k[J:j%^KLPRe1]/n9H9QyL/ྩL:|jT?;n\T {(ԟh8ye7Alr( chG8ב2{5H@{D1|} wnaf0"J:D)jc ~`a׏` H U Uhi[cCt ҡEe*Ósl28 i~_ err5m[:/Vu$mq4R l#G聍hG9rvK}w|p\ g#9c^Fx|IU'4ԀXq\=H~xB`^uOЉp+ba\+jM䞫C1fovQ4DKitGnY5B@븗MT3G'6 ݊.KuOkxݾcS=y0đw-* Cl5DKB1;Qi @,0OƵ]Eɩ9M. *={NO _ߕ}Jt_vmlm16P+FAɡCgArBi%jIZj[5H1#bJ}k@vw.TciW`r΀Q`jjZ{ڭm s); oH5gR ޿T3[oei! 繻w fcfA4*B(B?&|0p5+d|)ߜ gˢ/"ifJc63Vy&q#PITlYciA#=Ј?u@khyyz<YeiF. =÷G٩ himE&t?zڀd# k%y}d{5&c[!qK_J}W mGyVx|$ 1iQ'oJ>9Q(iZa` k䴮CD5EBfQ9909']YiJ&:38fraM]2 +!t)F?Z˼SJL bJ+.P+,n7|qj.7ó_š`j-e;2ル7GFpSKv=q> !xTh!UZH)]%ٟѱMZYeR l-GXR)}.m"<}wlED OQZ_ѽkc=]G^pv)r<-sziq;iUz:j(( Ɍ`rch|_b&9ɶ42?I`ʏH ^;:mu$ضTlU'vܥkz_&GE&g\zWQ]iu]Dͭkwb-=5|0qe4j ۩m(V$X >s+ݬ>綴3\;V7!❓#$li pQZ0&#m؆ LJ_B}e_ƅqre@+- E(2,8YxPhEi! b,X>x,_U~UcS -~CM$SS؆æH탘JJ_126:6%ǾWċRcz0xL bn$EkZR ngMw'kVTPǏ @S{c) ڕNf,:k$f`<.M\X+=GP`ybuk [VU~ okgۉ9n T 4xEιIM¢X\cacEk1vw>R4M*ѻ2J9>c+UJޕit~{YҞə *eAc/`-Kغ~ Gφ}Q[QY/Svlm_  v>l17ݭ5h!LgyGsMoJ&W(/E<=xONXEڛ@GvcC)j#t4WELɣϼ.I\0UL'Sijlka(݇s<ڸ:y&%͵YFsm)9#sE1@ %R7so%ϦynJzQK8ؿ݁4ӹHS_9DyE ;oQhS >ƞe2uhc%ih4_g4gTUD ͆ ;zQ`pL9ୃH)k;I3,k G+iJI,l_ @Y<7;_) Lq- D2?}c/hHPSxlHbZE%ҒstVwa/ܳxY4R@U).m6̂ů@lYGSc=(EZ" +]Nj.q,  %84aQm 0mByxb뚖 Sd=j)<ښxslmA)Il(5.[Cr`IK(?hn1pNOKy(k-Qep%ئJ:ʵ7q'F g?yQ3gYG%ͼR^V|;SiFc@\92U|7>P¥1SYaH '၏ܺE5)Wn#O_aK&xEjk[DJiJKcͦU/ d/< BȽNt0ɷcu0w5BEoRՋ{tL7-Ȥ3|N[ 5KKQn 2,vΝQZ47pGv_a_Ͽm\$`ؾMvlE`!1 0hوq4 䧏^K[LpVg% 1-JX<r"\pFY=$Ϧ oieD#:zZrU4n_ƪ^vܳgqh/=Dbt ܑ38nӞ_/m#l4TF@V[4M `NkQ fXMcd1pzwnʼnZL%fy7liāK,P0U1LGG-(^nr&ebe"]o/esf3knyh-O'5D2Ut$bϾ}'/S@_̼[`,ϥ0|!\ٯ’,ܖvEڔH礪}⣜4uBx$|wp*.q$~ۯ [Rhos S`( ~P]j~ a3'`lj_n a=}7}oZIENDB`pysiogame-1.30.811/icons/ico_g_0602.png0000644000175000017500000001064612201770062016324 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<#IDAThy}?}̼cOJZ8D,i)CT9*q$NJrJlq(pb,(  Y%.Jj{3ӿ3-#d{~o_S?bn8ĥm.ZϧſW%,gvgP iuhԡ^Pn4|^$Vs "JrrʥE{IER CM`-A`K % a`E(HEFFoc# VsW$ǢxlJr|=.|֑l~|(һX?J{77(@gcIoPgشBϲZkRy]iV]{@IqII =ӡ (N6=[i~t3pZR0O$1`F1k i րod~ш`I@ NpZN-7V'ϝttUW/K>ŊyLKv!)ע2U8KY"`3 j.0azy;{>u*m KWϣT 7v{QpNNYɘAA(R8H+sBgD+.|ˮ>oc' /"ĉnx}!zz:#ǎ{gVO(3M>I*c#c$i E"#NΞ;r`YnaV1ܙa?$ Ed% сR01~>'O _>GTtU:fF{lxS6Zd$ 4!q$"8'H"iB" a/t$1GΞR2;gFڻwf P._^K{H˪0^~9I_ }D? Ny'Ϝu۹>H"NERtvuQ*V,v HRRуj94*oxTZ-HR@y(# HÉx>vlG2p*ZJ:5G ~-I򑔂SK!ĊS If| #MΞH|= 7GhHˌo~ 5^#{m^x<{QJ UukD}z$5>MP@\p$i["\h͡8bֿw\4t(au}¬ £OmMgrM}\=ءt%uAh4b GTw^]#jiI KDʈKgѢ K.8;.|]ER9o$)+; {7VupB}3'o CgGeYp5܋a0 z\GĊ)W? 09VL_0pװG/mr^ܾ B\"̟W ~ l|n;[_UKydK|X?d3?d%i3$aɒQGm ̛F WT7T890U}$N=(pmio>UIzv;Ǝ}W;査k8WQoɤlVOib'v:fvco)\SX03Ώt0 "#ͯc/Z#ѧ_fy"GzmBl e9GQt#h"'Ӹoѧw}zt>YH.dL;MYh.4N ن0tvzs& W 7#hJKsZ[~\deD|ioZR N+0턁R.Q)(KT!hhe L7E)ڀY&h>#J |Wd(yv{ D#-HT8nM#J21@N\d-D\Q_\$= x |;#:+)GEFt h6权H˙ h 0q~1F끤f\"ZZqJ˪GT1&䁴D4(/"f`g$`,n89KNz(ü# HJjʪȊ1:e&1yE Je34jc]-CirHNP⪩==GRA!jD/$]ku>'&ۂIb}"8Vb\/[>V/ NwM,|[@S_$X+yN|\ Nu-Y> H濠wwM*M E-ܞKwKWHjf+-P<f"5 ?^XL>mxRJ; 8A yPIߎb1F*x1@IENDB`pysiogame-1.30.811/icons/ico_g_0401.png0000644000175000017500000001041012201770062016306 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚{]U}?yܛI&! U  EN۱?gST*V@$" IMrorsZc>'q?ϬYs~k+?FI~YX߻f+iWocVP ըJ%*ST BOTTԨSwiEcBbuٽY(V8 ø)YKY(2eSʔu.SJ2( -Ѧ-4hҠA&MhФɎ.q4BpVBrV83@6@sUe!$B!}_w2|֐b*%;wш@'(u` G" ֱc=H%%J((\ 1Kvhm`9?=S_x e$Jq #{P -e-XA#b&RDD"DٸDBѠՠŅD泖M `0`k,֍u4|=RNz{%$UU yI{!)h:0nX"y9_" E 奙Q{c [yf/Õ%!͍ ϡ,LZ$ck%ƚ '+^2NV`;xg2?lf!<`tI?ـ *NÂXAYM8yQu\UD#/1] 2ať`=@DzY,+lQR>j #(*DV<8qx;oݹ\C&h8 pqa>b )Kʆ%F2Ғh$=J|L&ks\KsaLbZ![Ф!dy$=UZ8wn-8"clI(.aH䎻xb,|N1ޤ6:B8ccW 1.BI#0 40!@I,"^['s\ Xu^f>() 2MY U!`|4֐fBbmPVQ"fئ!~_;R#wV8f$Zibb؂/<4K",b.MbʢGTahC?}  㥔\~sS_2fbbDJS3oso5K:dA }f$GVOpLM/K1o^wdt{LNM ZbwH\ECHGy(2SI+%A*sYj& u؝ pg7Z}j5ԄjW ~PziD(@q 1-'Y "քg!ji;| Os<ܛm6|Rz[3rygx[JNysp3cRMM8s}}p漹L`Uh1bg]p*! 40BYMG(5&%&e5f 7WyK/hWyz|u;>gDd',|~#7FL݄dh)8 r%D:QrUa6|a~W0aڸ%[y]D=ӱz3 u1@bJ 'aXH&LAJf ֤s[S6Kw>ox[~|;Af5Rr}>6(oz**(YHrI kFB,H^*4^Vf6q`s߾^лh}#7>c=J~Ϝ}7.(H)HOl$ ʠ(zt] mXg{\Q+y97&)Cl?G7cDآ:C#,|[Y8}>vQשMٝlo)'%-=%ZiRҦM6mڴs&-ڴXb3džd5k+(eko9 .:2H(哷=^&:/}ئ!9{Or{_Z=9Jޤݼ-4<6,CC7a31uOy WW\*Z6I29˘Ĥ' 6or>|Xp.v$F# G;h7gG |t>vzV^CC;rp7o/KXv^hQ53'g&-V WﯖzX#+肬<K+m1ޞHc ΏFN`{X1qW]1pKLQEˋNq&Xٜ~:x^f>ٞb)^QWV"B[UX!/&LK﹌\0'C*,呼Rg[e+yq_=H&6-4 ULcR$"eL2e7]#`߮>1L`ST>u& $6Vpg3&BIrMƄra H#RFDJ#`<_{Ū^?­wFR`d%%-0?JH֪*.ZѬb#QLVBJ4LZ{}%2eBJNϷOn1hIG倔TSZtVEyf$WR%ʪt=Lǣ|##R\+T6:yI;Tt-5Z*׫l'> *Q̈f0cCOcGÏW:]2a2ECT30#qHEx6 E~~Qyfb"}r T23;x7Ә}lf}=a?ʌ?+έ娌t`@"B";)tDYTt,*"~k/Ev~ep?E]Pe>1dmm}ոTKKM9*9 )(@hb0'zݰWymӫn }{#;q=>qIӤT#u*n= $(R(X]IEI^Όfc^`֝ዅ\惬5L{,&$Z"`+$6I>s)tR0eRHTGcѫzf4KC;Go^ ń1.Iv {Lo ujD"vRRTrl*ɜh&5mXwGy:CbDh)tD^flt:w]Fp*. $gpts_1|,qgH#z*3>P483F3nwɈr@\Z| Rʟ: R.:;[e|.s3R'Τ%#ʺpξ#^VC'/aEIY)3 2Pu*R*")Gn;$PM,GΧ_/1m[1o)- HɎG+s~o (Llrq<_''Hhn7ǡY'.t_2{.IENDB`pysiogame-1.30.811/icons/ico_g_0502.png0000644000175000017500000000641512201770062016322 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚]Y?Ϝݻ~Yg4iX5 (?!iUUTP O 4NCRAҴ*Viv޵ݽwgᇙsݻk;g5;s̜|6̑οqtc(IP:p|g?9C1 CYPe/MRji5mJ (VzI MGGGAP@<@8 ;Z~+% VQ:jIJ'҄,e(MȒg6 Po7hZK#urYEPEQ_ (9aLG8ƈ b0"1 E`-ࠬ޺7HuVy5PŨGg\L1X~RPD&"211DU 1DE"%zL "ʼΖg)F]Rq`|TG`S$H8I_q( q i%" t]t1'=(N'\PW~*3GP=-%SIC ̽Ǭ|vN ֡X8/qd7l}B9<﮽X]T+x)ǃ{gMDgS[봟?<.-#n>` !IalXr?D,0,5W;tmύ޽v~a-9"(AiDS_¾?X^`GɁsrz u!)$pNWW#|s8UWX|a7yro^yj%N$n9~q,& ?j.Y6Wg<\xؤg ]x5w7y珎/Fy ,`iBdםٜslӶGd1Zp Ǎ_eNNC#oqtanR AR2ZȦdFslv;3Ǖ?5hN:`/FwH d(KJ9VN@D!6E:"1qtǤE]4H,\gI09pf=[{eAV=$]$ @J2*]cL qDDU'q$dITkԆ3zaZ5+&IHF')S#x/:TJ.!MKʉycOs fok˯ro+ r.iiFdR*i[`zد{%ml]Bc_:ɓ_?<6_y&0t;_(>+8MR1BEdIBW.nwэƞ s=5Nqe4dϜhQ ~95H %  QZn 4%i&YZBo^phLG_ˇK@ `#4Abנԡk7`-D7I&>C}o"ʩCc]SW_"mXԒXzMqO2~vg%2I/ry/ɵᔩᄕaC GڈbpQ"8"c{zlr? Y8/T<a""B42O ǥ &" ӌdFl<3&"(%=utՒc%/ێȵÖu]_kKbȐ )% C}HGqTc,.|3s'BKu }Nh[(m{60bJe$CT Hv 8_(TKϴ߷]"HD`p6٩w! d? 1AZhnD8*2X gNUWE"n ;P tjM$[+Ks 'eVݷ^I!}'JU=|w=a$lV{@d@7j_g;CF+۝헶s־w3$I^_0K㊨IENDB`pysiogame-1.30.811/icons/ico_g_0111.png0000664000175000017500000001024512201770062016314 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<"IDATh͚ٓ]}?g,hAH H,!`ʮؕTys*SRyH*~x 6*I}ӿ<1}^9ݿo>7;?RJ%81q[(Hm#rGB.P >*Ĺ>O;lK!Fe"+nP_"@"6g=iY?v-6l&}nM#[}3[uF)+w?H'\2_jζ}bZBjV8OXip W$DT?֟ul߁H !Un299sϽ< pi~x 82+Qӆ)z.ߋQEP1x :G9JTb&TzHD$%XeQVU3Z.Y^^#5Yiͱ(菈Gg} ^cN;v>04<Ċ kIn̚淘')[/]B qyΜ9ώ[m{PYV:%#eHoGY ׋05~ڲ[ M@5J \%O?$Jn曧ػvl @AR6jUh0!Y%[H#ZA"֮0 i6WֲĩY?f] yˋ1&&غ嶴nc d]CR- sNd$3PxcB,OU@(<oy~/7h4 և)9R)!`Rd"(u,rX8P Tg3ϟǶJoy=J%#8 h:J2N1*eF$'8"tETd0Rj˶)U*]/=(^K޸d1l8[odqq}Z9WIK7W`+{lWRk,$E%7ni ҧۧh4y8E)Y^^Zz5ƤF 515Q[;fثKˇ5MLn8@LMsx""4 o@׌H",X'9~$ΝZ䓿?mDZq$$ BňDKָ ?~ ˲صk^ѣo_?)\Nn{G1BVXWqDK hljZr?G5? <9tfGg>SwE+Egqi'NefC>>AĜD"p!FU:l6Zc[VRʥ؉s4ΝС#T+Uܷq8ivNz0w92>0 8\ZT64dDAckjJE+]sZܼ9<%2R syp۲pۉؖm[F^"yJ)VUx8Q܂HL *$w޹qW077?OyL@cqOnrȇq]u8~$N8q"I"8c[y*֑Ihr F};?x|+*/y;J֝b}_iK-`%+ݼC˻t..׺f>}g׏RMSPU@@%@(`2[q@ &BǔCy)w(VTE* 0ϐ!C0dOr>A)(|$̷-۶ IsF)V okj㽖PScw>1Z%Aa\? DS@^xPQyq2ӚLehtNeM :C+͘1U<+~˘bU3@y:zdVES\Y? `ck@e"SKDBcȳ<3pmV*'#c k6$Zy|5QXF?F^LY˷ub;1³O.Lvhn3TwzĮENb&; Q#w{6 xj&]s[=2H=< WjBqFh.4!:YdL۲ j,?2U8ikpZiŸ+ J=Be+2ƊBC1RH\4e#*-7dLiζH-ԵehGj|G1s7g;VspPFB%W0)f)x3 ~fUΌR(Cr?elpL6Q0 &VHmq*_S.Hhl@5T|ĀQ4)E6_T3:Cm+%ւt@{ˬ(0Ne{f VmXT :ZX%\)99W#ƭj娵P-7ky =ӡGp~>|6O4 ]E>ԧ'xmu e(LA-汏)v4لҍ'ulƘt1%Zi6~tzyI?eϮ-dڴeӫ .V$ٝ_MVHޥkhɳ2nTv(=;>ηspzcELD ?G-Y@yIQZNQp__٘($$4\s=K?Tj[S>T娕2x t{0yshLL@JN-Cs[vG9߲ĘE0R#G-mF'}\;xfLUSy!nӃԈ*n'j26"a{2ڬ}/g;#<)jm+|ξ YчzF豯(EQ+LF+/x,ޯP.;~ ix/KJQO(` c^tƮ9ŐQU$>a>T3;(ȔO&9! f݈rs ;(Sk0֌Q!S7$7cȐmFTˆe TEH-Y,6̐k{'*ڑW7mFsbvj5Qksgom4!D2tb$K'z.Nu;_캍'-2`聬W6_]!xS#oOpL^K".<)mf{Yȸ *kIHWt6ޛBN.|_e?ϸ1gXZl/?![IENDB`pysiogame-1.30.811/icons/ico_g_0109.png0000664000175000017500000001015412201770062016322 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThُ͚}?ut{r<[d2E٢DK 8LjE$A_v cQ$(DI<%\rCWt.?:]kȓKƺqmƒ5PNHG!r#!!!k ,^*ݏ=e6x('R2Xk`BryճwX v)J@O.s.BTh.b!RYC.F (mi"-ߕoйv DH7 #b"& FuKX['5 BJ2%0˕Bl_[a403 9h")!BXd $Qlǁ:ZJ!6g5bTj5n߸38(LLr@FFaZӪɪI"N>yJ!u64R"In xZ^~9.^K3$g0t<@큣\j-+!1drRHKY,Y;]Μ9íu&76 p< HIAyGo}-0~JukZ'?e߾{xOsU|<~~^x}̀"%6-3 C [ ,ʖ( /2;;ˣ> / >Ǐ?/ƆENpHXc<Io@oQWsliƚDvO2:~A^K/BEkMRatA\%pT)%֚V:WĖ@)z<'zzrĂMpq%ղ =!hKֲzqk<&&lllqޞfvtz}4$QtEVVVyg!W\…Kb ];9s ޗVa^O^R2 R10evE"PT*LIS WZSP>;88YXo2uHٖ.*A6 *'IbR`ݞ|4($A G7 8H`'cr[n㏡c#769gcA $s%ղ@AU= J8crp{evp9R9r/z'NZ+0iDp!q! QIAf'[K @lb^ҍҝ_[1^.c۴rUy)66կNc-|GJFyDa1 #(B-t\ȂD !J^8}5#ղۤmY8|.]/jM 01I1)4a2wzMDcczq*v|gyuu۷YYYAk}ay0$1[R)vCDQJ&Im@ԛ4p4qiT"qaHAJVaCnYu]j-i<_qA8b0nGߧ5}8IRHL,c1IB^gY(L{  ҠcW* D:3|w~s\ƞ=ys1}?%ݻ7xg4͉ I_14'|޽+=";sKWMkjlkYŭ#e'7np29Sjd}y8˼Y~I$;177pc0dq CkOkR(#BTz y`xoq!&cߜ? ß&IBga~E*CXZZB ֚Zk|?Hy5JJ5$e$A[ AZ-I#_1x_>ξNȿQ:e^z-޽>ݛ-;O/D+M<_F;¥,ғ27c[&K.PUݪqࡃ?#s\:?pSSSXchw:|O{pezz3ZiM;$E FS42*NgFkC9y!9ɓK-LOOe|R}^;wD AF#v’h*AIu~[j`k}] mh`j jHygad $X҃N0Dg_(&6|3[Ð 67NTlf͌i-dјh#وO7IWII\n!cNďUӣ34[ٚzc5#Kߧ6y 2 ? OܣbR;ZF:cN!v]FE`Umi;4Ď3S0)J{ ҃NRCc||:{fb1  blr'mw?$JCTբ0di7o,эMMCoد?0Rwa{￟{LZt$$I1nSd]&i9u19GE22B׊MH1͍Mn'7n.aa95΢AcB y|Rasm.z!%Mع̎& J*(R"4!~o@ߣup'!>]lėz7ۿI#"1ղC1>V)shc>AlhpJəz;.8T B)2 &hVkEӥ^@ F<u;|=/!msE P 2ebuKv{o1ݝ?z2THouuO=O|V,\2X,XkQ`љkapj FX\@Ee@ks@@dJ^Gm~(*i*ht0D-,66T^m-V4u|u}~r>ﻺDjhx u놹4fk7*my'xF`E Zɴ'>2}6J,lˤ_Qƕڕy۷(= D }`#3L6,/dR"")=CZyDzBmsݏ } #,VZ+Hks׆lbDd,)RSxR ϋڔBEmJ)R <'z7.6?!Ap`1k ZqR3@9yE,ccD 2<I36#'~{TUM&YY I L7{s"ҹQN/2R`cGs9a39b{1MXF>6~rS=1 tset" ^BD3M L=%@cXRDmS0 Ge恑|xy/s>{cj0ܶF[hRe#eERgxij2qBH,Hf& Sïc X&k3iN΢cY=Ervҹ΁^<nhh aLT2lب@ 1D2ԸE1 ֚5_޵S:佻 ӫ(vah0?B::)ԗӭW>s 'ŠDNnNXc,&aed׽n32Woj\>G\X,~zTUT*"6lCV3GVfNz?Hdrή=ZKq Ym^+Jx;ش_=I133}W\ wc=HOOw}7;wVUzjm*?|v/#s;QIIKیdviikRE\X|vpͳ不l.]Hsxx{{OOe{9N> +.De0ģ3d%q:R j.r0dhh :G! C¢>tg Lj$2cxVz#<-@>.r;v裏ޞsNra^")! Lg ec!\#$J=_(%&K!ٺu+6l`ݺu?k62WZ(_WFGGB`EƋ1bg- @Il1$7&G~a-H+cjwuI7eUʕ }ᓘȑ#;t:*Fщ$u$^Ng_ttuF2Hv~RJ*ɣA>q upVW;yl\1 ˵t;2;LbtVZaY#E&V"[L*[(ihCKxVQ/_WQ_SD֚v7ARHFlxhS@1a$# M:Cim0Fm:m^ӠgYo#KΣHN|[\8ԗ0f̓OH!`j#f@cnb(Hך0vz.j_sk_ɦMx⩟b]l.c1ig)_K_ǚs/.~2u184Ha*Z$xQl QƄptd`ӦͬXu.K?gv9t֎~ h_^V&&xn+=r.}GF{Dp!;pǫ0kIʈFSiLU K̬v<#4u6nbv-[CG/s4KϽ޳Wn+L֡^,mSɺűR;}Rcyhju XTO" YAIB־b.[r+wT`rr*Wz#~Mw1A qFǾFk\\a%ÇxYE{?o50&|- ̆4p2&WXN9,/t=Mgs89:%g? /VKׇ(Sv T C;'WQy /0%&rd_m\TX~`~ $$Ct1v%gbb }SATǀ6j1N ?(gJa|e2qbc ݭjNS -fTcZC *P`Mՙm9/ Zְo f,3$v8Rz谊& o`hh(}ds}tlk^G\嫄8ajH ?'';;R0a:Fq1Uk: ߿02.MXc@J/现#we(gr0ql!L2k΂Z8NKfFY${x[4 B 44xBp"Dk İz26b1Q==A:B@K=mJR~cӖF4S y6s Ն@E F`L}<2jjG%ˈbEtg1Y>ɱպFy0Y{DrI7Lj*d-2P9{ÿqoB >!Ԡ_\aʋ dq)R63mROg<8/4mcu`5,ՆsҾ3lfԵ8uj8 /o1rq]H{ ywRD$ҋqr3<۶՘Gp"``|Z0Yq} g򖳿qu/s'Y<)#Ry@ y[_n%@ p3Oht3Q=T9IOUm~7onYŶ.4ZUhϨ>E@ĀyϰIJkVAa~;Rce\y~*Y65l$'Qn8gHF( 练H"/lxcP10O|qGy$u!PthdF<[OD $B"WOUA yY;N]:0R"=HS^j>;@3ʶGA/#IŁ"b&eI͓0,blq&iئ-ҰA#b^hXr16b IQՈ{OD%nm2hh>$/~&k #- ( u6}e6HbSXxw.YghvDD45Bf˙oߛ=̶D s%tQz빚»5.7%Bn@IENDB`pysiogame-1.30.811/icons/ico_g_1104.png0000664000175000017500000001125512201770062016321 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<*IDATh͚yeU}?g{:{,e,HYhQ#$SJYAhB*Q1X B`% *00,,=sN8zvg{~v>-HAy99g64欃܂ax c³A%N $~.N&)i`$4h$='wS\눵,YtAX0l(~=wa3<@,K$QB%qD8&b8&"(EHAGX2ah"ENK#dY!p@m@9Nùrq!$B!R \w^"{  w <7ѥI࠙4d XLcƹzJ*()QRIRB*K%ǐa$N [˝sa oA: +.`a]LIHGDJ&R֡8D2Bhj{XJ . pN:-wCYP'/ 9!G>'\ ;WlS,y玷:_e=X|M 1De)'N)>ތЎM+XXe1lrڞݶ C[ ?9́g'~CX|}< ]K.䅧y{={KO^ cbY S!ʌt2$Os0ءdBSL/?HO^ʅ pej9wlOe= U;žG&;bb<ˇau/I"ZU+CHóH=| $v,cfLH{cԺȇla`\;u)km9,:ll-:q#:j2w2N޼>rr|?؇`<Ts:1ԉyV{4.j"굑¸]jIv3}ټ!+ nz9pvԉ&IL@mGJCA=έw.IcM<؉IUzS˻VDD "9&+bϘAk>ޠYc08&i%܏)r yI^K+?r-Cl7H֘з&$!{I?;'n?A^UH-]0v=X5XkJ1bLg`i:\n -|}Wh wW`1^)Rr3?~B qmg jĖ@!A0ZcKgj z{2CTY)?@sݰo#b*lv5DnQٍݖUby.]+^X G H.5{_G*ص{-È᪯DHS/]EfM_-Cd#1Y) l385 0NBɞFw]ڋQyH%i|>JIAlzQ#^D}s̞W'q,ʵ"w5baso maZ.D 0ۗݳspHD&9m2Z:lЖ\ 4c<Y[؉7no̧e̛rWs)ey""滯~3ZSr,(4ai%p0 ȃsd_{qfM^Fc،S<j2*6=(4Cjҁ)N`6qh#8֗im^ıo\J4҇&$_ ;W9>M~/aӨ3HL#6NѢosY9D!ɄLB  %Y _6UM긪 Y,YlT{fiH6!.]KCjmTȄ/TATwmR!<X)t s44ぐU([vavc]ԉd1EJJ2/řNObalka5ӵK4k˂HQ=v߯ KI>h9 "@ 2$2_% 1''}5~tΟ'kSj$W#(?Z+4CocOΠ*c4cv/e|qm xqH$xXާf2/~#\J sNAcFY𗰧f|4l$,ۯ\LyhC<_3xOjlgxo/7_~9:;hld !mF =H/U#),Z?mȏFWh.~XC:ǚZ7O }=YZ&i$a3xa2JF @?WQ׀T=8%fl+Ï,_k'F_Ϭ+Hdc ݓRly8|˧K DKyzVn=x6bXĘDe`XS7ܯlD* ->:ޡtleT[ EQ~t W] y^*L Lrܴ 56.B&l#ӈG{4rOsDQa&]7(2TuKDa6%p挾4uUhz |@Jۚ?Gٳl\p`HGx3GlrpޢqDq4 QJo_ pWm:ޛ0S'ϏΝ4eD17GRવkm>⋼{ˏ}:ţW^Y%A)W^?IC8ȖG'au: ;v8\t^2:#ouٯu ezgX֦##!FiWZ٬ڊhme 7\r 8˂kfbBs"==JR  ؎ʲ$ ,bqܔ%GD8\1+d>@{"sfWVGw7"㭎ndwws0oojmxiCr mrUSj(-}S@4Lcc4HD'pV#TV]lx+6Nk\Cck+@xQG/&DGvWt.##P.0{Р[bGwk)&?9HB!_@/=|gv|:nկw?޴#vhl U,q6[|jjJ{eq QS%ŋ'N4ţm)ӴVKD"lSيN~};ϝC;sG.ogy4jvE8:~Dxسm)8sF+͉-͌ |OU`IG]]q釙aѿ g#JJas9Zv%ǎ!d=8_!ߏFe!883ov9=>'֮ngfP}}:˕:C= <;xC+6]Vr]5}G!3H/{-PS|;Σ*mlGd_GӈJEoXFܶr%bd, jvBՁήe1-w q(A OAnJYp Ywh JM6"T6ۆIE )S,Ȉ-XXօ:*X{}ARsZvA N ZJ2 XВuwdiQ wkMXnrzceki;ȺYS+Y z"W#yT=!x,K7hö:hCSKr6<ypA0Jz^曷P"U# <8qj&HA8 HCqXȲI*QO/O#A#Y&*uL=؀F~'UBP.6nQc/Ze614sA)UlZ5YW=䅋~eQf!_Zyy}!0*HNm> }B[/ޫ$:{nΩ<8/e=@^R߻ 5NF]0V08tuLfhEɚ;Å0i=pSm-]PÁ(ql$'#r :ߋ!ē<rekIENDB`pysiogame-1.30.811/icons/ico_g_0809.png0000644000175000017500000000746312201770062016340 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThku[ veiB@HaUv`Tv\eW6I9)qUp0.,1&blCbFx%O13}a^=wޚ={fοӳiѢoSq1`CH" HDdGC<6<>7%%\JjTjŵ(?Od^Zmӹ'Fb()LN DJTQF"2DP>pKmv~(4:T4R#hH|0T=Mp~PtnR@I2ƒgVVd\ mk0uCwd8nN&0SuyD$ tDQO FkUV;Vq4(vRJK 7=̉O(A`41Xly ĨDi%䤔p\upqp]Id\E.('UeFps`ڴâOFLf]+_TFA#=UV-@R!31?ԓ) H|o'q[ISw#~+pBO8?%}%MrIp~s3'$&&8M&%Q8]BSz>s8 ixL{%1aj''nHoS>TYH4E/O#͜PRx֭Q"*jU$DD±{D<'I,% r,0N:4S+ mdT*QDSI|K4_)_XPWֵ-WV 왴&Hr49mhRr =wx5Dލ.sL97*Ͷֳrd@ 3i>I#M@߅j -T~Z8y/>B\Tf@)>׈AiOIl|E6! bLI+\gi=rl.RMi4&j)Z%F zE/h:PMr.-ՒԲ:S1DtR;oZȉ|t^vVڨz뇨ř_9Ċ|$BE]#j&sY E˳ʋl-}#z#_zD_wBM((:̎MSZ0uDt Rɨ;p.SPNQF7VP wU? `z2wYe Ger #&b~[{uO3հ$oY >sܾ~>Yf[1o`~i*7}?nu-MT$]+%@k)Bm"zw D 2b0ZDɝ^ke^bEOd]x7_譣'39L{7{CnX~_}(莮 1纄Z&{1F0&QYOٳs#15kϡ]wRZ{ o>/ӊ ldT(߸u&?B]YQ+p#suZE(_ǹDzr*!̽s qwn-MOP|m_e {ոAgVm>G&{$A;rE9e\!$Mběa6R({A$r)wD9Jk@+eLbΜ! ''Q픮GLLWA4<_[y\kҍ*> AHHA4H5Bd`Fyu猄'ڋyAS;J CTl9kg3ewE( @/_`ޯJ1?I@uoez}YWԩHJԤ&*_31Tݹ:Ylɒk-"ʣSw Yދ(rvC۫XqG{:1)Y&.ܦ >v3点Qso#[?#yJ)RkK>en?To걶`18ʖkhn?0 fJmX/4Ι[T9~ ׭ǿp3X{ ]gn-<|:ײ_|7aҷŲvxzL%Qiy%>5`ÄڋBe7Ҷc)tݥw~+)~+ݲ~Gqsu, Epx{*)d|uYz@pihT} . h36o(chf+vx<̾UZE@J>ʏ?{9yh3Je_b_@xSu%J'Uԓ!(LF6വt9ջ&Ѭ{Ye֋EEC CCDc|%dq/Dt|>^/ZM@h[D'>HVDm 51*W_3x[/]D&kRn$z }uK^#9R۶r~F/3ԞyNq×Yͮ:@`%;ťnPeb+$IAw*~ws+_ѠK R_HB5;w13o,T6ӭ@GZH@[L'a7RoO<£M(/T?h5I>%Hh2jy%Ǭ7wn? IS.!EmP'Zƿ?H {Du54V:/vtB㠝88u!}!K iI;0K IٵM@j*g/&Ҩ0=+~ABA.hd++UR"eN(8"7G#Ӣ媷IU?J:+jψJkgZq9HS_:6{k>@NnQ_{WYAS.7H-IENDB`pysiogame-1.30.811/icons/ico_c_03a.png0000644000175000017500000001033312201770062016305 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<XIDATh͚y}?13zc`:v@F%5 R4U%BUTU*T4!\c |c{g5z4<;|xU¦Bug&;[q͒g`$} hUBZ;J:e.#E44!& ?zM[|jB& ,N\p%bD2bXNGJ()} ĊDhai'@ x-jke MHo%:[ti!Ir}Ņbva :NND`kX"}ÑgA\}znuj9q !$RJPH!ž5K@DfS3Xb{fJ,ҝt`X mb}սUG'^–;Rb0ϩURjR!T %mH=i23;>V=?˦>k%+>X̢!<isw#FeePLEz)st:p}_Vszj l$V{91xps<ÓCCkzsnUbmN !s6af }$ϚY"$ebcQRVVf[.6Y5P'"kke4,yݻCkx;ᅫ (|7 Ɉ?MToLqp%^ *g%|R,%T<։Ȯӳ[VWnclt cvU&3t A-s ,L|ƷN y,7HQ֋"6c}C:J9uc.<~c?Ek 2V@k3-d:-hpdz?.9sSsu\.`J?|׏vRDHQØ2q}r.qhxl>Dic 259sDIN3Z B ԥPm}u?gv-2B$/2dq$e"S'#Vj1zˆ^[ܡ}\( " /bg) /iVơ^=GJЭ++Us@3`:udry,! >^F04N5f`a?Ijtfmň^n0 ]VScTPR%b3@Rז'_G<)T:\Կ6\Y;'%7:m#X2 j-dϛs]q[A"-ejp,Z_,xlTa0XĵcURFtZ38;7Xc2v 2u:fГ.~$ckX {Fbmw^ ^:ƘqbV;f Q>.H4t{c$/gRXu#7ݾ?:86`mBk{ @\qi#.jLيU <_ۯT絗wO30Ʊ\DRx( ܴ2`4~j|MٳD|nA>\[hK&dOvxdp LG9(ҫh / k: Nwפ/u䊪$Dzww5X7aXXhzd:~'l7|Jg;NIM vC+ z6.)& m!0b0ֵߘI`#S-+ ?Tevzv+:ժ[6KY:DTȼ^db&7?+5u5V2 KeA*2K8^ (5Z=X3_k"p6z-~ysJ 6]=57l⎻nezjgxٙI` O!'Չ Aمv {\&<!ժH56ÞY7 6Q[kntBJ#΄`fܔ0:&f,!6E3Gī[6}mzbdEeRKh L*?'ʒ$JS 料]ʊH@n;l!d^÷9WxjC@jeԫj]B*?"ΞP lAe|ZAriu>yU"kL#9ݳaCɌRyfHj&?wC2v ,2 %f@Dc X ?Wyy'dD#) Blx6uTԙ8vZZP* DZ&gꜚZ`'`h7 j6^*MGom 77<"P _L StZ]IV%t)l1!G19SI62b b+ooS_0lucE[ Rl @/RxJ[߿]QK(gvQT[3GXQca-+uX&]sQvmpiZIZO?M(kIi#ֺ~$YJGJ($R¶BW$COϰMM4]bG6P,;_^߻Hr.lQbJnd L(o, ^}q-sYDWh_jŔ D`vZKd-1k2*eJh%@JyB(5Q )5䵗:ӧ#B߭U=vdz48&%Z"chCd 1D gk{]ƾ4~d@,ͤH0DelcTHU5_|_xi|sǚx͊LJG E6V;@Nu9_(]Q/`P93RWy߾g-;!<=ϝrZ"89bMU+-.hK ,D]ةHqߵ'7a6Uv^͸ӝ֭Xz?4\P(`!`Q`FJ/!_o/|ڔ2}^돖q@8R}Z Y, PǕhhOO Ð0d1hDѲ NˈR*tܲ !Qr9c2j9&Rt2K'H/= +# 7؆aHo4Tw "|}H:HIA`<ܼ*_{o#>Ͽ|f8dH@^<]JRK+}A ֒%@R5wΛagLoՒK7s>f)ktY |Q(;~^O)L3A )G5IENDB`pysiogame-1.30.811/icons/ico_g_0106.png0000644000175000017500000001064612201770062016323 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<#IDATh͚{p}?%l0ix-M(6N(Nf2yIڤ3MZӦL$4C!$mL(068]FXdYo_8{^˥vgΜ{~;W=. & HԃZ(HZC#s [dP,*l֞?GߣB&]T~d34]DH^ A/ "{P_Sg[&9;4^|J9\4\U턒bRגQ^;w]t]);bҳb8=䇏[ JG/Ftzy.A$,c֠};NY)D6ھ;rk/d|^k4(-D:HU%b4cRϏ84~v] HNƷdE@b1FY|N"zk[Ku5w6(JB-IGh7y6ƀTDv3n.RKdV ;ol_fFZnc5lf0"&wr:?8Kܽ ',c@) 60NlҀLmSD1BjQ Ȑn[mw\j;F` ښr`pZy(=j"" g:g=m40#c6TNdrk$7e+Yy|:bij\ L L,턁H%~k*";Q?whBLqfIÊtҔ7V Ʌ*mPj@dw)Cha43ifb&e#M TDfekȸ+2/O\N3N o4Ȋ~VokesŀO rЎCUH@Ҏ܄( \.N.׮;e2⋴PO̿._~=mWmb#P CB#(,44uOؓ<)bDT#$:4roO*5./E[PG@Ei W|ygt̺ۘW "XOQM3c%1`ˆвB{Z5k )Z-222-S,)V-T4k؀\_姹"MVRF"eiy8p %Vb#TƑNnFU`ZetW473,9w.B(|%ѻi熆d9z&L+ d"V]XG:_a[VY}֯ᅦ&==|xyϙ305Ş!oFS];vC-cXİcCqP8/< Ք꽖 &2 mQ3,qlEN33/:Ѓ{x{΍ cd[wDFFwe.(ٙ(rV]oZ( ZIIK[oF8P1"Wˑ3T A2Ϟwβ> dⱩ)wމCIDĩ{/719;KߊTjdii $ !EC|#{b  #Atɉ f|=ccǎ$Yd wtc({  @oR++&u|HRJ"8Sd|@+n q؀PɁ!D1& ؙ}dn3y M-I|;\Fry<=?O\C˖!A@Wg'l߲51Q.ߞbTJE*&sYv-D4}ArqB- f:_F `'̷<"|3a /@<_*GlDB# }#SP-CV}0=ne.bv[7݄jk8LL hfy{Q03cZ.S>̪+03rU b=7EVcUwu1A . :699fw׵k)sPҐՆ\5q&N@Pm'`l֖SwXb"_}lcliMO>EsF_fRuE1(bdvBPTg|&Kو${I-,B)P`50W m'j_g]`# W45'H썄L%4J+Nvel;rEf9̍OgOrC~23A*c+Y4%TssWp錳\҃OUQRGb#ɸƮRXޅz$ZY gQjv#TP::us%P\"~z&pYdBzFD _ P_[73&$X>Vo\OSȶQ^`I1,lE{w~R8YK\Er*c3eYϝQvަ?45w`G& e˗ujċ`6b *6vLWPd7)*Ttf8szV2>_bdHh}!`&_Off/W4rdLs|9Z9sRg"IGy^lD@|!PǸr,~-&JAuC/. r9*eUJ]].͆nͰS@.b#Z;F) Sly4??w=cWF>Pf|Ęղ{8.>UTQ* ҆, Q}ʵ > >hU!?`I|%v_8L)̊^+Wٍ~`BUSog)1*"*DP,MJդFG)>0K6'=Q VLu|?gFϵ1G3ЧcCyg*&B`pqۨ jmLmS8Zk T"КChڃi{ٍOxZ(c!YmxwI V#2j4J: %H6Em]':pUaS!{~IivQ,DM9qL@(BhhDjʇ6itJ*ňo)P>hi/H! ^-C&t6רyk\ZZzzj@?ěYskO=\ESP.:[{X|%pϻi T?X:u[_ƖPyIENDB`pysiogame-1.30.811/icons/ico_g_0810.png0000644000175000017500000000646512201770062016331 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh]%U3;;;;86cXb88D<b/숇BBX 8ڳޙٝuxw>ѣRuU9Ω#_5O EQ(CqZR&㲺-9'J)(/(:֜M  \җ'5jEe@<‰+((TEQRɉkyc;9y<(y ) | #㑣' ,]_$cD{x=FrMJW24Mni}-nbkg5**BM)4@q))b d#ϲ #al2b0YDm5cyP6jO!E g5cG:8vJǡ@f-f̒eZ[YkkA2V.b`k`9LA}cŹ#W}[Eq0W`YD`rx(*NJ )7jx*d9{lM^C0/9W /W@ΡF 0Ay/wb`4d?D='{9Y- I6oc UE0Oo}l#Dι(`2(䆋_N>+K!&{әc}[|oώ z̥;kE_:x2k#h ޼lj[Z-;C M&phݫ\BUϧAvqr<YjÛz]En{wOa&#:UȶɷA$}0U3U}mSlGfs$n6/?x ׶v_~`3\׼f:T]-ܬp9/]-(rLƌF%U{7x`(|7?>axa@ՇM,S DfNwb %w[$avj, hog!;<~pc9{:nHQZ5Ց\ @\窨^< ʦUs oi(jšKa!v2}9$ -==?W'oo-.We,(]7ZqΝ%DW7'XwZθi %<e)kdW?а4q]Mv@6/=~o1,d}iascq%~%pb݊#$§gD ZZi1 V!LR xwA9uXJ^,9qD=.E /n"2` UҵfԪGBy!y3 |KBc_eίNJ4̨Mi#ju$@"ߺ0s3 )Ps%or%3ff]ZY'Z܄]X'H}>Iű^'7p!R;9݋ac"R]˩%VD_Z8>n2|@L8Vm!zx[5"X-998Wƌ-BbZվ{n'ȕ&~H~|3V~-9tj~áamX:r\&$ĦZ;i(ouOkW(;рle{&[OF#9u7R#`S3Њ\BA/k󶤤thMqϬ/-ܧ>7\?penÇ#ΟXɏ&1ڱ*3KӮDRߛx+"epPP 2(\X qX)M1O=O?@T9"l& G\e}q9V=sSu8&}ްI}3u$N6T:t\]CLE :idXo:#FXugG,,Tτ=1*2nߴZ:Gu:0ꁑb~C3ɽBbd}-$ 1{01FB3%dEm"*ݚmp$ cN,ERpaxvoam`GazHTշ[9R`<ء8O,{a4v=t+bc?laWu㛩]/[; /XfvHb Yw 58 ᷋ 4BiÍDU#pEf!ySF_ycBIa]ܨnA(qWREmc3"o)WkZ;6wc-AmFטQ#P#I[x0&pn D^Y;;m~M#WT80 Kd(:yp՚n֙ä9<#揰ʻC&x+TGvMVe_pcyΠZյi>"@ 92#:xN-zʩ[)8V?-k1B˛NA|Fx!.q jq j cdϋww|7Bf*.e&'Y썵dW|GI8 Z@%2d޷L*w bb&H1 oՅ_0{QZkGBF=^B4O0&jZ~O㭹o!6jbsMԙ8\aW(CӹYޛn}wO9)kaBܽ_\/yEIENDB`pysiogame-1.30.811/icons/ico_g_0314.png0000644000175000017500000000642212201770062016321 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚yW}?g{{GlBH' 5nBIA@[PRPU RBmEPBU) EUh@,rEMdL 4$MKcys̙acl3Of_4F  J*.xj *~'1g{lѷ=Oۂӳ}p p 8p!:J2UK*CZFoK#yMuWD.?zŻ_Y KH9/_z>9*OWl"o>/$>x{x$ā 7o2àz01Dp"ooR0xse E]6prn}7g?=m7p߮HHƑSWVe% UNqM gm[]Ätc^8G;wrbGXE@GE |wrMKL&%kP$GC;ı,_Ğ}8sؔ{OÞkoN#ڪ+AKYъWS!c@"/_̗>̱UpJ^%m[?ΆhDlL#DZ +{/?<_yCD]}q#Sr|eջ1*?g^3[ioP-i@:qLhMKsܦwk@Ymȗ(_?M˯n]=;l䝟I<Q6O$Vd:x JMit~>ՏQio: @fǎ{*Y[m1J&Ƃ"{7V@)ssBqÂ$9YssWے2me|)w4Net [>_&{"#>Mk\u 9ͯ)VV)Ly4Q%FT!UIQw1=Ss$5@{xՊ.N*%P ?֨Y R9}|kI9='WEm-biB,ׄ^=?3I&FY>Gu5UQ~ZFPKG k@x-[`o>:Ԟ4`/S>:ǃQzcWŭpퟯc|Ӕ}kƷcRz_&_%զ?N&$|MSC=0?OT45lLYVFv̽1bnmH#RKH鄣y9# ;?9F|!7cF4ܤYcg0ds?//<9r^^ZԢv-@)}:k#CkI@H .ϗ>x i`Ȋ өIM5ZOJ&i Hi/Z@>_8ێZ{03fv"Aw# 준 J'ք]]U:8N}6pDJL>QWO`hvJjjm75z1bmPkʤ2t5]♞1vq6#2k BH yAKs:Z[[3gxpyvR0ڀ@`LhiZO ˂ |Z 228O[k}x'V_1JjDk7[XXcn}Ǡ^>ǜ1+d1 &r7J;c ֝ F ;MJ)Fo2rIZQDTX M]s/ ܸ{} 3CF"Պ@Ǫ""5a! \.17_ֽ:!xDhb=5Bj3ǘ XX=ñ<)%ݼ~LųL+)K3"JieV6b1{&hmI@LLq c P^LRLҋ`LIct/7p­]82 k3ғZj=m @ģ%.ʈ$3Lh:ﲳ{+ͪj1pnq^|aRJ}suqgljEl҂@3];A]\`fq$ՓHh*px=TVt;<**`̍읣5/$n&K,+im V윢sv;SڠtiC_y:=c|Z݊"ozQF1I箏Z~%n_obGO{h'C8?=µrl>߹>ִ6UaG]˄ZTZ26h|L*t)LΖq|G&~]; (ayQJſ{aI&rO,-/ǬtLq9az a8}gYZsmz@F.WdyKe= E՗`aCz@%dZkc=S47'Zɥ  Bh:U&.Fopy`-l9ui\Pk Tuˆ1frmfRj%)u- u~FK tֽAkصV&P3-a+q$``u] zKaeDΔ=&ӥ&qcc봶2Q( e0328&IhV&zcS1qܞIḡRRzhl !(o=-6]6]%[אZ"$4#)rP 4*HC!LOjh8N8lV}"Z{YS:H;/ Pxax_8z@Nn ֬,J=%ص2l`yEd^S_TkbXP6}J5z-Xg@\jͰF ;)s5qfRpFtƵ*UAyΤ,f-#gXT %z <ǡXۑzӏJ7`]8+/p\98} _9z1o^qû:g7b26#{cgh83~^y26>qm|ON=ݿoe\Nz'Yu11N| 'O짫=@n̎8=WU^)~5,lO 6[^,`C|[q}Fg?}d~_y z8qp?>??3ȹԜ@JYz9U%W>ٍ8444`} y>TI:]|z/٢4mJɕf%F$.l7_>Zk 7Wָ䭘PzsL/@#7v)%z<{Xj]W0<ȣk3]v#[Ñ Mk͹+S}+68ں^.\ N,D /&?^ڏ8yFvt|>jͦ㞕\7e=M ,r'vXA=Yd؈\p?'|aWR)atbxatvÿxk\9! x)]}j ^gWȁ]1s}ѹ}6&RZ=Zu=.n-IGp~j?kv<Bgyez:7ZYl*Zq=I1LK~fUFv߻#@k͕y!>3Rj46wɛqB3^~o7aźXncxjy2?@[OC}B!:22T*Y?J65KO=H9i'KH#)Fcͮtq^_{}?6JJICCbޞح1J¥3\nө?b3G;ڿmsk5\Fr2\ mi3 .NU2vݽiggo6w D)ţ ܼ&|R..c-l|VC jkI3#p\ N;u~ ݞ`m:E>'(=1ʛllV.K%a $d8¥q}.%lg$--[@",$KzKq֬: B`Snہaa+#_RYap`"FA`J/Xc \U@Dns-ඖ_Z2`U+KvFӭ`RuJ&-@֪5rx@gDf+(#HWpB)ZL! 裏|oef{DHAG-ͭ%\`j-U=u'\0`rwD=9{!OmOE|1]͖g3Ap͟Uߝ*?@c܄~?sٰIENDB`pysiogame-1.30.811/icons/ico_g_0600.png0000644000175000017500000001051612201770062016316 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThklu13%"%JH,[vG^ENҼ 'M$@S ~~)/ڦ>6i40iXIꤵSŰeIу)J&ݙ{o?ܙ!%9Pt;;{s9bW7S 8{lv͖ΙږΟQ #G>(TX+IbHbchL|SϺ0_ p \aPPuy. Pa@J E)@0P' IO4-ѽ|# \E Ww;[9.} Bd|@R*q,^̩ tV,3S63йl.vcjɦR⋜8q׿}I7:<dIfސN1Q҅zXk=#>1j?bff'x) ^\_}pa ߛajjG8H~,C9 Jƻ\R9Z/\">Bُ3bفc eGY8IT0t$rggF'?;o?lK~JTdkO8H Q">bq>b2Y?8?2cQ|yT.__g'97ַA+UȢ`J2b 00p_KrpQa 3M'E f4nj)̡`}Tr!Vk$͸N Z҄Bvbq>M4МETBg#R7*z$ax36cb-BPR =.3^)Y!m108p kD=uc6YFBoO:ĘrQ%EP JL y8ir;g %0>~I~ዴҔCT/_(RR|}S sk:7ڸ@QLS2gGxQE 3v. E\yy|;XVfN wH0kbg^ @{TIl%y+c:op{I|e8f4Mz"@cz1.aÔ1jKBˉɤt"4!d;"q[@ZGƘk(5s1D;{vhIh R ڕ ͥu+ho,"/.2tS]bAGD OAFFA,櫺1;_}E<@3SCtU äWI &h)Zld/*ڛg 6Dwľ2 ty cfZ`t7tP7mTNWiF22DaH` np^L{pQH3!$$#c(|Ú,Wiɼё:PwAkm(m3 #Q*U3O&&B08CYoa+jsWSDYb9!,"yЗ)ېR|ɽZCK>N +*8g?YT۷ Bz8B gG/Akt!+Umr*JSS2qhQXo 2ݬ"]]ai? -v-GH)! 3ԛPw?5Y`̛֔ KMbҼZJn^a  D,^M7~h5ӓaA(CAJY8飕ltRRJQ IJtM!N"{4~՚hry)GRt"/)%K3»~a/q}$I7=UH(YGcðfO._!_ 1 }x_FíXҡ$c#3 ġ\.|05$XC)8yM/| T2'p47MBm>H+)!IwaqcwkP2#Y&#}聫TgeeŹN59 #McIAr!yCtj>.-FX5zt aTvGg ,t®~FQKa@ua \8F)Nߓj41Q{Q5Z33-5RItƆ1k4ksեbز5{9F&er2|sTh40]aal>X 84A\:PLMiMq[WP'f~&)SH#d%}ӲsW̻>HA뤕 A)P֑(%II3 sWDя:I|1Fw04ROQfĘt:P%l_vjި:vl7RJ @kVw`766DYwpf@fSX :isM-1w}3lVvyma$4%*o|Xx.1laIӔ CkkD fYʢ/wqAهT!* _rraj3XH~Ұ oFVo2iy6xɒ*2v/̮?jXCY2} tZHOĎe*^ޮW1Y@H[KUix%yM %yܹCē.^|mAbtw=֫IbHۙ()|Dt@H)Z;ƻ]`.xli5ZMȤBCtdUfZQRP!fר )k/'L\캇g{>_5r_,H& JQkKb/q*ho oGG~W_Dۅ."v! ]H՘HGv62crgOC>ϻnw :9pZ$=copMv6 q+{*;:B(YB ˛a9z~.o﴿MWd_(mgwF<[r/TNmV]黯e[Zj1|kE߈b1|Os"Y'BBwIENDB`pysiogame-1.30.811/icons/ico_g_9999.png0000664000175000017500000000613612201770062016361 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh[]Uk}sL/ӖqZJP.r h1b !&hb jⓄIQ"DJŖZzs93sΙs{}ˇ}[{sJ/k^gT' (C"bPFHxרBQOUg(ݯj Z9K/P+4tx I$ό< *Vϩ:0 ȩHG1Ëܺ VβxzSWć*:뀡/;`LĜ)HS$Zc=_96!^rg_ɀ[!C-Y@1FfyH؇C+QEw@cvM2Xʲa=FhHKR!qŕn7#i,S^Z$/0rF'Yku!Ţ[ӖcDŽZw6}ޕI>C&pKCl}>9(vαZ|O,9eIl8:^{\^≶8ۻXȎTGN`A-iBОrN~D(da<ñirgpvv#agw]g\]"A¦T*ZkJtP~X0I`06VHC>6Q*=F\biO )--}[[m# $;쨰iEMɗGiX85GG+#oX|{zZHΙԌ6RNʈ‹q>ڲ}Oq$T1B# *DGB+GcQ8eA0Y{oFOѩ_q(8Fqd$ΘtAsQ NAwZA}k؝O%V4kLH၏$=)fo`rD[WL :kRCf?͌93*aRWIGl8^qzȄ^`w#72r)4k4VQadbLNS Sp9^I6 $z $ve|dz0MW_ 9JSA$ۆwYMXRPˈIE#3VV9aGh% MJ[dXb: ¤ϐH~^DYT` 5`GF:s~ee?x%I3w)4 ־0 WO ~6JI/+z{(A%E-2=T21[\> j_;HYAdٺ2ҫ*|c1c@Eu ) W5KEuz[ dV*\Z}ϴop^̋܇bpǵd@f e_ďx;7(_J.V tÁDE:| g%ͼ}}%37 Lp^斅rďri~ OS!y֤|_ef\<6MO_|=L=]6w7ǫŏw8.z N*Ck\_:Arw ]{ +9ͮaq;;x5wh G0~/"0\EIf'~ţW1K-*s]Б)d[9>u+ܶCn#ӣ7lQޚX 9(8*7o8"<ңnx| ζtylQfYnϳqϸ#^>ɖÎucEE!|'5tSXrx~-}5FRگ} ߖ](02/_ufW/)9T[am8,, 7xN}eݧWf.AnXp<52| O9I*Gy'xo] .P̗[0}׀CfWw˲9:9 @͙dޙb$ ~ 4Q ?>;x(cx(vHIENDB`pysiogame-1.30.811/icons/ico_g_0812.png0000644000175000017500000001104412201770062016320 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh{%E}?Uww^;Ǣ.;QDnc9 kQsb "&Q!KqW{y۷Gu{w+5z[߳jC& Ec04`F%= ƠB*yBcU߶5Z/>{ 5tϋ=4î9m %N0tŽ*c0Bhӿ|7<{oG "N^Av]S1E4w z`D F[`$1&k%lٸm*{{ZmFI&l L&3 BJtR pqIs@"~b\yPVHha0Ҡ% Zlmkɤ!ƾ\CEqKg3.zN7N/#mȀc 1`` #KeM)LijO'; *(A+t2"Q!1&FMNKub`F4X;\^q;<.Yw By~p_0(/nc @&f8Yy90tLDakFIn4Z+Zs\^?w}o{xo1k(NxhL^$+oMXe4+ʬ{KNbMnrXEw}7K-^S.ٰa"}h8͑qKq@ DA!! RxxUP2bժ)3)H/Sos˷n<xGǸE|mPP)<=Kan!V99B[@jɊuT:,UXiqbn}'~sss||^c_C%Nad#)$>SF!Zi F!V`}_>+p٪6nd'[_<m`0ll}X?^1 B{ 0)n[q̯H)Z5%P27+PjsiwY6=htF H |lE*^Nh IKb!:RddT%9'+"E.j?+t%"D$aOw(fLBm9dPԏhZ%L{ o?i}GkͩH>T~/Xr$1%uQ:S$c@ 0Ơ5Ualwȏm$lN$BI+Es;+{†wȑ^?gb\JPU0'F8 FLdN#!+MD.@.p\ڛMΏJ+g)M[čzl>e7=G7@;l[ @꠭ $8 2LCY讵F vBD:b8Ơ[tDe$mOX%^ 0tw*^FI^䄺hJ"ZsEn""'LNG2HM#0ځ6%`腉`S{?qM_F.E DLHf$JvFF7VԴ.|O~5;>]ПQzfԉ{1ty;D5BXdN7Hrt}'?rP!b/ }+XSR}@Hhx5>W3WwGF7|K t$u \QDI3 Ww=Ơ"Ȍ^~a2?_ស=ʹ翝;/(ό1>7Fynq裻@W?{vtޟ?Χrd^d`oppkW%nD&&rqj tC\B]kG{s>цMTsl߶"Cл_~]pZ7Zu8¡0j$Y8ݲIje1GTc&r^.-{Lp0@Nb{ҳyU,YT`Sc-RӢ=n>Mo8G9UwzNHbTXR3B-b#~ȳÈC(TjHGf ,9m=x/o&\ 谼/7_*|erQ&sJ~uK˄!P1:wW,((Q&k" Yޣ0[pʺ!Jm.Kz|{]7\[˗߳R 1z] 5 m60K]Hpei=lP(Np6.!5 :W_ʻe1!s aVelrU+<}#oѕB1LG绯cӃGݝF]cQ8Arɗqz;BņzwFKӃqֲ&t6a d%/{}]fc ]Ws]q~X_ !ש8JRpgӟ?(R9Rzªn+O5ޓlCIAIH NHog[9JO4,OY2!cVFLƈ/J@Ab{Q馚 ݧFر}o߷H!XټiD+"Ym:LMs_3,3oCub+ܰGN/ksy ~; ,IENDB`pysiogame-1.30.811/icons/ico_g_1105.png0000664000175000017500000001072412201770062016322 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<QIDATh͚y%G}?uuy;3okXk;`d P@H  KE %( ,`KG8bH{{vv{]UӫRuWoV׽= @ ރsxzp8<{o]|s>+< $)$e m0Ė6XҠ6h$)VB r/ȍL{{mbh{ G{BJ/|܌{0 IIMJ#1:$&!MRchB 2ȅCAKKm,/_%; |GQP= DȯqʾKgG)B8ڸpy_3hDRnSv),d\t= =+z*RDIzJByT)$G%1J!|:?]caH^8NzTT,A0`BkQul^h4(H\$$%Qxq#];IxvN]Qԉ%߼d{(uGRsڼ/ԇE.vY:?L"ٱwl)/<^K?6o9ҕ]]_[ٺE Վ޹n;[ s }P=[#_^BwH$l&33-y;6Ok_ykBm#ʾD WOJFH(e"*g!w7hztn}u't'{(B ϰ|o~~g) /m|*%"=bJ SdCh-r{px|s8(v7qg~h:H*d݂=VW;pu2jfuC2f"|K8_IyW="caNا_`|WG8HJR}2?p{.npqn8:Ow'عg$[x%1 B3??R&c :eh6Ã_o~7Ggxb{[Z)Estᝣއ,!p2evz2`h(?{7 O2y̳ V^uyfi"Jǎ}݂w~fݸARKq5%1fʳ(fN@bԄ~iq;v! |s?$,(7ݳ/D)SPvG Cyw/pEݳ+o\x]trhcEt,sd7c$F {FBb _ɺ;}Qj=Xwq"*{(orE^k;[{8tB{t&e◤ӫcޝ$H$d( <Y@Jw}o?#۰1xv uRɝ{+\1/V Ɂ7awXx3=0wg0g۬ݻO]SqEᘟ@رCpq/*:s,ͭӚl$D9F[uTnAZ-v&_C v d ':sFrź-s[l@ BJhw&؍.ѓ"A0:*5-FpZ$`{aq2֟_>#;'i\Rᄁ1} & VvWe%E)'faNEJJATq##ƛ!!^ F>{/rڝ.z2c y)}:hY[9A X/B6 AO{ HTO]R44 5ѬE<4{i6zo5WzDlo!epXysz\³RZ8{%B)mVF<ҷhIeA teWDً"8J= hڸB6'RVu|'{W qR@ (G'#OYfXe.EIj֑| 2)MO$JPI FJ3lޥmLlA7Sү7o߃V2g@H@e ڸD.z:Fm|`P -$٧'! )Y3㕠amh&ʭx _ݎ~5$N5kMd7gZrWTfժs=zg~@#HYK 1$:<eJhU/A$ԴT_[vbB)E!-4׀o=e!J ZТp[ՉJIĢ[5ҘZ},X}~|b1Vkl4EУV3is>(̔V`oKxO>=1Lqm=)0ˌf~zT)SRu7 s9`)IBaܼl4Ns`4Xs M5œNHLLN%δ×od#:::y6IF :ݕ,M2x`Bx򘟷ctl* C$H)1R`]Flb()J#{!Ն]F4i>IQHKo\_^B>ŹL"{lm<Ќs *49()J10bms A\!w)hnIqk]{v<2(LFy׍ŵh^\B,+Σ6.vȢ~Aͥ;!  ;>x粗'od\w>M˫p|uC@YTqz |Ǧy龿z㡄z拧/=[^CH-kӠ2UL$b\$IBNwG%}#߅*Uh4Fʄ>d|f!,SIKqιH*l%}[BP'zY2,LJԮHEUpԬ HAbɱ aI TNK:C96y ghDUU#Z9jsNA1*Dzxck)x5?DiKE@%KڨKhiaX.e5yw @vSd!VW $RPQOJ%rZ2XTs*2zrUnvdrd¡d\2nDLJ`u!1!d_wDɒdN%Jͮt4 D,WhLfAn Fko+֢;ݍG:i{x~F?8|S.IENDB`pysiogame-1.30.811/icons/arrow_l2.png0000644000175000017500000000142412201770062016316 0ustar tigertigerPNG  IHDR! ?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8{HSqs棅fF ޚ[^s*> 14"/DC%((Qa Q>4lkMyw?zM7 {ϡJ򹉼=<`d/~)F-]"D?qq6C6=<%z@.־2ëO!33uhjH6ܛ;`4s8\q^2\R)knJEyWHϯS~k)Bp߭xPVK1h!(LCol%Oz}8Q /=nX>XXvKۊrcU$ \h0{sb&&2I9-Nj<XImu֒"|yv"2;vEr L;l*ԷnιJD\BH01񺰦S@% f~3/pkqGĩfEH09gOh[O$DX7`llt<,FĎ@3E A+˳2Ȉ(?fco7Lz*zBH0 拥G&& ^:?`>C BeY6im$XGHu˲'7)q02#,ˆn6/vYb-IENDB`pysiogame-1.30.811/icons/ico_g_0802.png0000644000175000017500000000777412201770062016336 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<yIDAThy\}?}73{i!i%7I% 'P'$ NblbSqRLr8beA @HbuvW{^ww 6_oۿ_?w%b10j 1,Ɔ0apcCow#,~//\)Cjb2e>Gm^ ~iߧs~C &Gb Z9 |]<=w4$2:PBͺ皡uDu:vsC+A1 g{6iO3}dlhe/(Е[>4@PpVl ݢ鳐kK~1 )RTJ!E,QJHB@`׃./.t{bvOS{~FX@i2Z+c1uȎ#>NRfXJq\JQJ!* xJ*rYkj1::j{AF*喔ŢR>ˠx^ kHm,#Z N<}cZfӱr+QSC:]I~v;u;cOx1*tuQlѰw:V|m1/:ZR |i]TF픛av$Ti6lYnu`Xkxߺh5nwB$Ej~&GWٔJnmI);ٟ2Fm*``~ҶD)WN{t4̓fm.[ޤko3+b ֚d֤N |yrnJٲfB?.A ZaAXg,r5wQ+\%$Y6Z:63qmax26p 2t(WaAl@!ITIk3ezm.!BE"YC@Y` &c Bbb.44x3-Xa]u>| ShF@j~צ=eQLt2"gy Fr3Q=Dc( 6;̟@F;8pVD*A {u* #uk!4. A+IX+ؿDVod U9+1 1eLdhzDbG HFbu5A4@aueMDTCɲ:Շ(>$b"2ܭM@daxw[p$&LTg ǔNaJqnZ1BF$Y2I}]WvG5AKV0{/d Pn0]N[ByxI>^-6ZAɈ}lgڧžBdE˴XbG~:2OR(Q,Φg,Qi=*x4Jk#dP!&IDr@lV[MT,.dLCׅtuL4cʄ`l 6Gd!t*/B:ɂM nnkIcMLEi 6JigHހo2P[É+齄je=ȡULMm^ۅ0,s92|zw$IAFC@^c;38xNiĦ+KX>#w&.GfT .RW={ ;}5w?/.OGW B2H? ѹSBJDhKX1M$zQDK :΢й{~nc\cJDfFX'o='fSJDZxV Ez M*TO!;Jһs/2[]AL T|"[lq Hzh?vթqL= 4i1o3;61^-< #`J1rF#\8r()hk)O#LLl7_0sj=e]-O%`Җv(ƻӹײ /2=@2/QŤ[E;}oHNDdFl#T;<5Zerv{,Zur@lds/ОnA[}G25 $Ps_|u,.'ixfqnp_ўHE!Q;|U*S(ўT PFX Fydwq]ΎGbOx_ HڻGۘqO*/xN@ܬѥB xs UQtwmAJI֊Z"4~!8'X':sbتɻLڇdG2'Dvש+/9(|xhOuH'~4mw*5ܸ_;o' GL~.x9-^r<̃o?L5Koa/D؋K?\r/4iKR1|? yHyt2N_pdȞJ0x ~w8}0?/h =}wUrMOsŁET4 whp6텼LYy{f6?;V_DLyZBRk'WrPeG]OdD6?j/D^_kmm ,+F?.^yCTCh_R/-J/%;w㖷)v_"lXvNd$r%W~eQ@ObE]k qk]*93KlMak\3ݙm:X?vMǯjPmj b"2.DB DJPQ,ا v.j|ֈXm&R=Rg&<#[oqnR{kO(d@`2 :1y0Ye㜸)@8 1ݨ:O|"XHD%!+<9~3xv6$  b ޠ9==g_|>uwO45k:mf*wc=" B.uzUԇ~W|S*8s 8[szn1Ҡll(yeP>KK/"$ J.(8O^@ ߨ`mc8u} pqvV& #`2@F̐GNuA UP4AzkE!i1SB |MY]Wף4 `XU@MDҸT¦m0V$ňAXLzƠL10&#e(O`jPLh0q2NhAܢ0aMc,0baF+ zBXL;~eA*>0BG!5jf.<'H羅^Kx$]3j .M!Q*@4nZUFCկ=-WF!Cl׶. nHi\6H$WC>č7koEn~￝F5 +qPhaD[jU$M vA đc<`pۭO˯~?m #NQ5+Hzb' dMLD㵩*|r.TukO؀RaFrki7_1%Gt=#Ƈzc7"B[Қ %kjnZ`htm _;J}iD@5#MNb@hZ~ExK \rM !ib(]ҴJ}bu{?Bvz\;wW7Hୂ .K: 꾶k)~E,DTT;a;M0ܸy#XB'vͫhG`:Fu%_N\<3(O32=#& aY° Eرr'Mߝ 2Tm2{{V>=gdB8q`R1l$כfI`8}z.h${*<71-1Ga >1.^5EPkQH9 5= *c4 Q^\V O:ƫǚ>}`Mշ}]ik` @eW}H:MgY4ٍ#2yB:&P;k "6#ҭZ Xň.5Ҏ'3RpARٕL3U$Ћ'Tʴ"lu$t9 Nk6*EPEL: ᨳc\ `&{;;g15#yj Fl(3Au'`6reck,SX;cޗ]"26 U@ <}d3}o?woyo~ƘFN/svh]^Q1/h| t:ApQӋ*8zqU@r {/gk*يYҴm#KDK5M72ѣ+|k1G +'WiιE3bhH6^XrB xw'HB؍٘5b$ յnlEJFjm G['ki^mnDZ+eٽ{ .8'cc< cmA5ktC >!C;gZC("ݔ[ f( D܌OR[V$/5/| ED/rpL?jVń` Fj0D ̘1~ٳ-,//̞=s/b~<,wmR8e¾:y,m2KZF/r7^.ًkS,GpYYjl"\X  Tn8I b+0?6Q91 QNgOJ7:O@jY7'L% )ٮ[<=jRv&#(dҭ0Lؒ@ 6kjZ}wn{?Ϣ+:Kݽ]KՇpоɪ۱v{<3ǦܯO H鶶d;@?ceɊ}gqpVMCxWulnr|(6[73u?ד[9|qy/IENDB`pysiogame-1.30.811/icons/ico_g_0310.png0000644000175000017500000000717712201770062016325 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚k]ukwfk1P( nIC %"BJVT ɧRU)m#5U/iU%i(QBH_£r)M!@H1~0{sꇽy;&zYϕ/|?;k#F@P@շRJ]9(/F;:DҡtݤC7ҵ]IN7IX)qpP8(p>&~;V?ٌS#\:p.A0'҉Xcsr,$#<阌$"Je,q px[bVMm榟@A ~̏7Tk qNE"AF`D#aPV}w1$POs NA *O=xMVww"XX1Xc0bIB5$>cP !PX.jqG O)aNpyu_Ky;S 5 IIwkI%%)6%S&T %R]v$5ἐ~5=M\CPJs 9 " F]lt7HMLŅ<&w͓ ?NE4.E/CUg)׶`Ą>M\xݾF ΆNNvV\05qqwr~k "Ň_f#&4&;#?_\ i=N5Qɠ (C"2?,ȓv ɿéC)q1Fa7++֒ Di֯^O,0̈6@[PW|.3@ZC ׵v,jڏيRYTMo? (8p$C\1!|(*˩?pDQ_wn;n(s'NqƠB%8(RC.Ht.Uvvv+ܰ:|ddcF*7#W"m~ypqMׂ O֬ |\~t؇t6Ob.BZ\ VjF_{ו|{(wˍ-kHL#FJ4'q#~޽}3/;Bf7eiT>,Ow?+P7([Mc9|0zSGD6\`|/(&&F"jSWQO':Lc47]gkݗsBe[[sfxVBx-g^^FFya\q`KU2jIJAF)pI~Y ܸskoCqqǪc&QVqvɥXyv+7^ }b~UO/: tt"K+McĠ 8}׊`MfSG\1}6ґ% [R@>|fn$}mVXZT=S=+CPSy߯3`|]*Uځ8$p+AүׄXדٌ̤6#)FRHhHe8Oh#:H0V58t:su-9j~ťsLqPw(h)IP8Gzi7H&N"#$ĕ?gY%&4=y$8:9BegIDdXIWZh#Yք& V>0vP.NH2tɀg悔k WHj@ >1Ncb>Yl $R^#,kKB46I@ JAqGqf10^`/*Ѭ HvL=t^T ov^1.WDH*5l8}PD! JX2urcH7ټ2p)aDsHԈ>8=އd+;!}?<8"{;0]!3)hzR&hӐ7{|㙽t8uw$ж]5w BJK~?c%*hb ]q&s^5v?* K&ye U5TZr *ci ~qx1VNd|=[YfNm !O2ێ/lZ6mFD8?~ H jZ [rJ|#!:aF0j7^Pm#-jUBw_GjoZr'+mibm![FJ+C$6ň D]ٽ+&Vc@~81$Ԉ%aHx#vnfELdy]ڛS_{julg[Ek 4RŜ 6HCQa Kz0~NWs Jk丙i8RyFkd*n744lЩo˵r`J7ObG#]&Ǭ"+WaſA("[iu]Flb/ !aϪ~񰜧H(jB2h z"d& i8Ƶ2ho ҈Ƞ~ fH[3>ًlTgm;(ĨZnn<Hed"7"Rی3z4٫ #F{ iq9РV׮kUrU+?hWp_,4q.]~g]SjLD>32S|۬yL\cϺxo3?Z읤, CYt+Yz>\6{jsHIENDB`pysiogame-1.30.811/icons/ico_g_0808.png0000644000175000017500000001126212201770062016327 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org</IDATh\Gu?Uo}zglX#Y²,ٖ611Br)?$9 ?9 p9`#$,/ cY4GH3,={UүGSjΛWU]}o]V@A`Ѐ1(46 xW M0W]MTXԦ hjhDa/خKakwXB JLDF1Qߣ'}9rp'h;ۏ@"Ax@+"^A-M2z)[ (vs࿞FDl~„sxbĘGý7?lx\6CP~/ 6@/7Q&$@D3d,2)BJזe!E., B"- !sˉ ;=cг5Z_C -H`d\k#ZD C&X,ƶ-lƲ,lƲ>lF6+U+Ppb!m }`<%e'bxB@vnUq :n ƈ>?U+#\6W0m .cXQ"@eeVqqmKإ\lڤ'X (E.X/ޠTn>{cHilaB "'41P, H}aH^} T+\!ߦ>Ǡ:DF1Bt0`"L@`,0Zq ~K, 'O<'ۋ#%ƱcĄe3S+t'fic7_?jr…+3 glp۶R@O|؊7Q#yޫgx8|:Ceɕ,# SY8؉Ј1[8h\kBH>t߽.&v5۶mvl._yW,_W>O~3.#jŗ'*!F_ykPv`8B& 68sbV9r{0:fbtJ\c4=υ/t0 (-Ld]j+e1G88 b6pR : 0LMq/e :<hq:V[[YR"Vgjz}rt:W*  ~)$K34'ױ]v}O FzZirBՅZJ%ֱ5v-!Fl8n&JcD2$QY_gRʑMI ]eh=@ad`owQv=x!AH+o _^H|6\3oO~7>: cPߘBe2mDD~$ Ob0Fonlchy-"[pwfp4Fo}駟fxxl\B>ǎA޻Ce7M =#1$A"jlǥRYc5P6:= R8dvZ|>lX^Zdz NHu(z,ْQ#u+˓,-.Ӄ2%\Օ2g6C?~&/^Cf^KLC{$/ob %en6I<#2^A.!_(FwdsC֌l=m{c &Ͳ4FOO%#}EZˋKac}&s%"!ԑ= Z+1' Ei͇SSeo[ꡯi Kqض !ΊSy݋玝 hT}8hLRcPB&vIjL= 7lEƍ(b4a/8 u< o,q]Jl&Q[_gqFhL0&|:yP([>j }PJT{|>{#DDggO>1|@+MZ僩)F Nz" ):j Z*C6QMP[U1۶fs\diyu#JN!Ss|⡏ t,e31b kyuR7+zrMV'F9 U~G5|tS#. RY0ser-Z<Ο|,K\6OVGT B{^hk:%ؖc#-y:^;싊3Ad;Mz:ž={瓏~ض͡Yq%,.Zp-CA*k* ea !v*]l$pa˄TJq5ӝaݜ=;^ vAvl1B\"t(t&z mӛ(#n*|YB"^~4@EX-0>Lvش !Jptz'qWiUc;RS>ZAzd4 Rl3HűWӴ޾uCaHe$\lljw]c]FpRnd2S]﮽tsa6OHLKu>eyFc ƃU@S2cLR)CG.Dc[uuS^_^3=;RH\@=£kZhh49ħ8~ 3ѕˑvtY| um@K#`!EnI Lܴ Ry'z~FJJѕi0/yO?z!W_o`!ch7K@"夂`Y܌6RBgn4L+0hIڻsQ(Rd3;ê@|P Sd,/eYH+=m kKى_(¶=}ߚDm6&F inޤGɄ%arYv_EQ.*:[U1Dd{ _lVQmAM 3[՛"^}H"5\/ңa:wbm1go07z$D@/WQnO5//\ iƵ2ڍexNĀi7mFWy a_ ( ~\ϓx,cf)S6~2a ˆ :n7 ȩW! yr A jN]ԩRL2ׯP=LS(`iq @8`PF+MIߤ,SBHȴ!]齚!&F]/f^B%3#MF 5Ta) c(`DxC xy(&FDӫNiImO Զ: O{H#Z1-R8#Z4B; m0O }=Jx磔"|| RrjRU{=`S`d3>`vJ1Kwc ¸`ЖZ ݝ4Il4HcFO6`RyY#֏L *D[:5F7pFܩi2FtąG'hc4D;C>!@$.1n4B̜3vT!"yML?_59#NIdjՉAd)S0h `)H$R G#l@82Jldh 1o~ĨOn$7aӍy"JZ{ƀ6oB!YNggب|n3;I4pD ml&Ylz7swĩ|:uF_3_Ak8(ϝBiZL{LopM/ A8Aĩ9&Dv sbF&gLCH#> se*Uk6i2C zV jU`iuߎB8h8(;:tu`)WLa0Tf%2:IYeҴ1*)BP,rpF޴$H7=E @y7'O4vm֎ J /_!q#aZ˔˒\8Bu|\WլAw; V!D`g \7K7!vsGt6kcB}IRPn867aTCڃ^1/ҷ5 T :#MF\G↯hCՋ1dg|M٠` C,~ݮ=` (kAGyV_ӱ%;5¤͌4|D9pU.ڷC[{L<':v>b(m-vCs`OgL^q)}K41ls O"H}Z!ܓ*cG>]oν0_Ai?`g3흃 j^{:}N]ҊWY~ J( ieSó7\1;ktײq{t:nnw0NT۹;3ݳǜC73oV:<R_pB?DJz͌عVl}&qܴb429F}Ga(MEf/;X oNK4nz{5c߰ң0&~S+1ģ2r`*~x'`ɕ;BCcUH]Ć(Tuh7( 2`ҥ@ ;i}Hx[Omb lcWy]_ݺ<˩2TwrQ1}9+rE2LQ_T 4zJxxElAᡄjZ$Fв/E Xq^6+<5uK#(Xgi?\E;7rJ2Hӵ!6fI3.U%xH#tD=&PA·yw2SwBYLץϱh0JPRq߷?X7>՜qNb?ĭ(# 1B\jf)` qEuQRTU1X)>zgw|AwFmի|-K{o!+Xb)e:o*LDRe$hr`IsWif/A'PB@#g꾐73{i=$|ϧ2 RJsUPNRBJΟaBY7Cy`A]#BX rVYYY51`!Bf 3wǂ ?/w@r3&sx£P/ ?I:kL)Ω&FƸH^O"DF|; ?nG}(e50nZ{&^*W>ž VAW'15GIe@a~ȁZ3+IHP@0E-t” ep--oy~A*,fPBPP/MuT*߇8M\$K s~F4WHPnK=!N-]Bgfh{dEۭ* P߰ZzA(0ޟ1Tιl~ɭ }d! A B"R ,w= }t]:9%? ^aw"dæ1^KͱPD )۷STέ$>3?4ku`444Fۍ2(dX~CA(ش~u^>z|iٺ-4sozNOr%W#9)3/+-Oe#٬ym,;ѐKn׏c?d0&W[F8䦛kvW05 u!0tTFhʄN]=1ֳt65+0:֙Yvtfl D;IuVڛ]Tj 0h c:HU <+/rϢ޳rW}!HVtͲĴrwocM=&G1˜.}2³\B#tb5׶!iZ~,iݝ?jiUvRՎYь`}6ڝ 982~y:RG*T&l9%RbfPӊs t AA20"VA]xFi%ӆ&]ťrjTݏCZPilX.%A`S!l^rٗ~J\H/i_Xgw(O`5)@(ξv243vOa^?DYB;e_Ҩy C&$+Z?9}Tgg[13~ew$Q.ֲVKdϣy/GǏڝ?0sxe`~ۿ'э\#`ag?۞!N*NAx׉:;9i6RQ*jA(Z&7ZYyf*޳Hu\|}%wTEVo￷u GRP*k'+L. ]uJ&LOypdx/;ޥ{ey^ {L7G)4P> 哠djMG-F$lۜ>vɑH̯"9pF {Hz !Z[9o=ir"#5G:hm0PV'e5یo@:{NmjB.x /bRH0Ï< T.G>ŏIG`hvle'k=ή("hSert/-~)A lN1QpKphi[eF& $!1(\y58=s亹h-{.e#'w1L Q6/se8$AH@?-ґb;#QFCڋdІ{e,Ka!)&4(BW2X={u$ a$; J? `5 71DU ygWq荗Y^Ѫg~8FJAIhY]I5S׷vsn>G~o߿{Ilj;GQ: 0Yv %33{o^cy޵|&q R 0 c|U>5rG7\3Mc䙧;+?GG_?STE0U0+Z >?/гj gbʼCcιa˼2@ꈏ#=Y5E@1iyr7M 0yB$uΑ NFն`*}nm_^:Dkr}-[BP:q )]9!i#]Jq|N&S@L%(8xN l`]H6B .YwaW wIO?+oNʙ|% @8;G;F@>ðvgᙶZ@gC'/Z:#9Rh f`D##a_,&iӍmi]C_ݘ_5Y&%]Au!N0#1&+f6@5Ө",KG[GvL@D"VVIENDB`pysiogame-1.30.811/icons/ico_g_0104.png0000644000175000017500000000762612201770062016325 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚my=3@ 02ma0PSS;+&!$;/01v%.8IU*/!:@$|ҡ;uovvv;gw|TMuOyomʼ(ɩNL JH춆SIe;o"E>"uGDPUTUU!WRO~uHIǀ6:2 \|_R "lRqd͂cՓ{"44)c` +C_&-60u>nE;!LVےv!h(i (ɑz?yDdv uz85VpL'N,.cѿKMs )#]vtBk[2\^ڑByI/ GI@"-a4#uE%מI ښ SPR:7A>(12~DtP)RR˟mt?a$:I F#^5l$@D85/eZZ`m`|-m@2` 7HۑJG$HS %zYY`71@ņ~ڨێ.e#6Й)*hguE8D̟& S $YIiaD(+j6D);Ѿ b5A T蛘`}K _Z 0[ɖ\df&!SFR-+T$iBə^za~H@D^7RE;x,&>bG- ayM_p;Vf|e8q"uDÓ^'Z xN)tKaD Ga>GϾY\d'YQ(@A ##J!;,?3 0iVlbE4DJ3QGHXFR+@laWy~?z'Y " u_ѿj6e趼b;xD*bëWVJUФX d~o9r]۶.E}1J(!4AC ,VDW3پ!@(0n T43!&c"i)KZD;4=>C}( \KsmH?k%J(^ խ[QPjgpHC|I%fD/Ѿ*Lne8 \Z7Al!W,t~eIiY[@hة% }E-1s!C6BTA@-(#\\vjfp|Xb}ލ=„S/_ ˷bFyDRPρPAORXڶV \TʺG|J_T bgkvۺ\Nt/C~|?^{.[3$e$cFZS3 剃ѽ~sR2:SL#q=0_@fߩ/lžQv\q zNqLFVw${!/H= %Ҿ>)U|! N|O)ӏme޼Y;qxy5> qSO<ߺ6Z_ x%||gMĘ^(-Ebq&v6êIԩQ4]GllAC(##LNOgO?ͳ kp>d2I&<8\W@nf]l];\}S2k8j)f<}ۭlRy|55 GAxes09 * p41m[x;?:|6YY=%~?$7WS z!Wp?O X_D: !;>Nojo!ę3oR(pKIPUr=U![*Ux<7[atĆҝ"ϞU,{h`= PAg3r 8)E7@ϦLuyqnq JIcM # 뤌-uC=;Z($_ݹug\!g1oEJsz (g$W]s>B |gڍ7/  ^0ƫ,Tlf~!fN4t CzD/_ ccZR0)pM)<\Jr!7mBe!Y ޮ]ICze{7vv@aJ٭1YҊ1Őa>ؐQN O A!ZyCd8^ԱV()}Wd/M늍ELpjnÄ1^(3Q; e}C_ 5<!9:V=w>Բ\MXǛW BG[[}1Q(`i6-fF> LmGΤn5'gCx+E/rU26;1Lăb;40i~|]l)ZZ x0 6b4Yt80` |miAـ,/x۳eA4-'\N~>c3*Bm% Ki/C$^Fi.FF Dg'tv@KS_?l86u5jI}&ku/J랰Ecl0XX(N!^U/s<\G ɥےEőIENDB`pysiogame-1.30.811/icons/ico_c_06.png0000644000175000017500000001014112201770062016144 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh[]YsYk}ۉ$M\WZZUцB" T+}($**D\ BP P&UDR٩c;q_Ns񹟽ZsafZ{i h4kf#g_WՇ@Cǃwggӳw߇~!yQu]v^d9I9r!T 7|kn>4@ |P(\h6xe,sI5Y Ei\g<ӀXU_`>;[-n񙿻!!|&|WhG5wFc_OA|OxBX @=ɩn[&`mձpX@08! hm! ›]CT,DJ!Dj )B>`*05 \鑱2nO'}#PISDIVJIV(PRZ)RmԺ(+x[ar1Ax<{8>H΅>< 80H𲚊$|hI R"0.v*uo#<#LE50kg yu{8@:8xMg+}?|6p-yM-@820# /' <2SVO@\#y} w^`ćђewf}#Bv.9\)~y/<rZ k0I"x @ҁ >r4x%Wu8kA#9\j{.Fj&|Z.`j=Goa~ J͋st&Yظ?bfȍI#hĊr oQ 5B(EDr=G~;3zK0!Q6=بأ/s>d.J@6vu~!aowx~ϰr,kb-k8P˹1 AaB5#b 2ZF4/mm$"jC-9M o:˯,jR9E)5YDQ`#:avDyV[""ōIbuLVJc}߾s2#x/.eYO>$/8)Ǭ2Nd[Ԫ5RJ󮕶z]E_os,o{nR/cnƫg9eJvoFm; @Is:s+yW{&s[YY\;י1or+$7~p8*(kTĚQLM~n z8`mjiC>r̢^C2:bq[yQA\}A (z!!Rʭ\J",{e˖၂(֢E\틭loo3==IeW:IHZK\ǖaY__rӌeKW,9KCNKエ:֔Lf5{f "ZD"w\k.k뭀G ɻ_3k3˖''׹ý K^Mgߥ3м#xDN,W{i>ADx5j$swOo?e-{,9* Ӽ^xSvA&VZ[9iHJmVbRuޤ3!mm5QwSyM?>|KK/3-6]SPtG-2кv%R8@agd wg۲Xpdu0[Ƹ2Y6B<2Gn=Iף,K1wPyq/1FNq8vźW3;=#:KbocJock6Z( Jof' xC?mƙ3g8|НLch%yEiޓg*C8vvJ6wllYU*cًЫ87aM,H%#vѴkySQkO<˛r'G… \x,9wp!,nebcR3PJ@(:c#70u8z|WxV\+/4Y.Zw޷6P=)X\\^`k{ WA,"j-Q&8ӈ1}fjH[ɈL][y;WyGԩS\^Z╗x?c{m/YVۢ:IVVVnlJ_1Ou_nbHfo) M\ЦYӛS}M }E1iMO5i`#(x#wK7SO=ũSgY|E[$/4- 4bB-n_tO<_Y-\8}Ox @F( \rNj)Gan=PZiYTҙp9)˒ ofpnւR ,Z}.kqΥ}_UU17{2[a-W](2L")x/>,~m?8BSnY8_ dZ3Vdwwk-~? =qZVVV|+sW ==/4RÙFHzxu;'NP%y#ð_0aU" =BbG>'p˩l3$X?l1˙3gt:ItBo=jX,"a@:pxJȞS4B$k }?w| ,FCJ @*IOa-]EFL>d H:T.9*!-BV`}}'@*@u5k%ĝR9J(j .2Unj$Rĺ>U<@QFvY(DTqU_WpHԚNG1q,JD*qm0:Eep\/c\X95g%IU8Bm5uٸ|!(r"%K#)ŏ0{OUUHa՛*\XdUaj2SIl0Fa*wA@rK%X+"YC,I`FiTwk $!u} pB1rj.Z,S e5@jP"1Mm o}Dhi b7ao_ ܻE+hF;9}T1 Aw%sb:!"M@Pۗ#]ύ?b{|S>%o,BSm(F^l{UlN3 jc, _ x@>HT,,)JeIYTeE褐b^S5IIU@$t,ܙ5NE R )t\Old"%O RE(+(pE!׊H&AWSМ=9'$|Lmgs;wM)R:Z) 9WJ"EHAWŻ\c͊t"7TH* =1ZIQS#S+Qk Fh1jmm!y;@"A]?bb@I`ϓ%-#ň1f$Xc1 kF WR;z #R$ă?S<<ƚ !|RU1Y׷e9E׵e9TuB 頻JM` ZPxR02Nޒ&C H b$4)|mD@c|0JmV%B#!DƷv~! ܞ6Ž-}Vb3c"HLw^(MDL ]ۂ<%Ja] &H]S[4[1d"J1]!ČqSA+MHpZQУ@Ok# ډDeYL%њv4XcIYgcPITlϐ(d6RG)S~?BR$\'!8)# l./BSa)A_'#|ӻ|i=Bj 33)SĘGJH(a!1c,޾Y:? mѶ-|-_|(B N}CRγ0f9]VPBrPFFaQ ʲ"-J)Y,89=fh1TUE kz}Ń NNNhÃ#JWb4xǏ;'>io֜p}s1 @UU̪J¨$yca6aJsNP_qxpH? |f=;#!kjDk|6ŋz0 ى8F H\]} DS7[֣:`ʎoXi[)8q>HE93O)U%AďԤL p}*UVk4Mzfn臞sqͦk{.ҧUY#g ޼y qz|T af^8/=7-sZt{zMYU3|^5̫9s`t NR,գX,88=9Z;~ I~Hvݳ=Ej-hՔt9+J1,g\cjǺo0ptt0`8* c MӰٴDdy]ۑbhCf?b&g-6V*g\>zrCWojn]xO ]ݴ$ۮZK4(r,%D q I NOOy8>:旿%[ʲd>O~EEeՇĬC/DI^)1@,KTUӧO !puuYۘbbV͸cN:IJ*ݙ)I$^| /_~'/K KXCJG)l6, e9On'!eߓoYj_<,b[#Đp.CK !c! ͵ưi[ʪ%1ཧ, B۱Z"sAcmE|D b.\D9 k\#nZ|vFc5EᤒŜ\ʪ|fiˤlQpQRllW^c +r2Irvpp 6X#(=˪EÓ\FUѣ<Z sf31@]t}7Z{9884)&꺡ݴ_<*jĕ Zc:=xTO:9Ol6\.SjjݻwVW+./?g\C]+d$63.//W9=hUe-$H׷+ќኂi()a4sDZm7'fU ,J/%Fc?j161DB뚾ٲ,NMB%1MM;m[]жWWWX,m۩* Ypqrz¯J1qrrʼ-a1_ppE)Pr^ԵRBHj( 5()r˾w ?_f^S5y.?bO~ 暾h\rttGhRzUω'ތғXce )1Jc,(ǏdXUAjVqyJ\^9|:;9H ) T!n( ђ{(EH/GRڮoG];\s $_k1*U^ό!Cd!cXa9',21:;7)FMn*Do+TmPtc pFQ@mk)1? h'+1֢"%\^Fjk:s޷ *ܯLا{ gH!FeHyu S;vs$C9s1dFb &c4.7.' ' pr&AfLL!aHFhY\x/=ojZlLH0f"ZXfݯJ9 CIr{ߎB9|kH?yL݈ɭj,H Lߎcؿo{fDiaa1AiZirk{FnwiWƈuWP|kvoBVFeQacJӝ{1ӈ lw?w]VNFs3XE 3IENDB`pysiogame-1.30.811/icons/ico_g_0410.png0000644000175000017500000000744012201770062016317 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚keGUݽ眹wɼ'3$3ɤC@D  „!E,~K-QJR*ZIa`cf2#swC?ޡ>O{{׿?o4D)4NBOqډցX@bD >|@?1( >ϺOV[Yaa0?*v)K»jQ-߉j0zYIeeޣ(^JU 1d #FXfȈ?Zy9;OR](o|$ hzU[\(QJB)oY!X,.|X>O'P Y^'(kQ % @ eZc2e_TX, }?hhh WN{lj Xj(,9YdY[S"+U0d5d\1$Z<#':h8FJJ*Pkf_ڎsMP(D_"+Gbl? oDJ΁@"ҫ D%ځ<}^6{(%HU^ 4F;s N+փ{9muvl/B2\;Q $D1 !M$'s6yȉM=xK:NgzY"ZQHMnH` Emy7/AģhIJPK\GcSyĮV&k ]#Q4JsJ .Q; d?H, |4*]Bs!N<=:|NP~F6?c(+@yAc=5BD,9%!b͗I!QCKK\Ml[r!JbլL/{9lzyȥ7"4iJ60IzMkXںp8gZq|2j0/ޘ~=z"聖Jگ͑sDO#i%æB<w}K?r=.z\|o}TR ҡ2%N]Lu̢vcгkηy W4YA{-~xs62vsޮ"F1ZP|b/A˟7w#9u5z@d>6^zZ~ k߯pSrmPWySԟ_Toٶěw2//diQ*JyJ)9[ߟhQQs+0ÛSgvUեSmid[7qޠ7Uj8z nq> mbM'M}o7!ZcXamw,ҽoNj~]J96gX$2 Ş/ÉbCUAT ݪ] y!nv_D~v;uZϯij-&yB˯9&Tp%pQL4Z{{q tIJ!`[IԒ5\K1r5|Z6e|UL9wsq#ͦ-s/|uT-ju4"G#}5f$ >u|  3bܭb.+Na aUN&ˆ¦3s( `E4R >9n2,YšVJ0)Q)QRB+5s2Ϝ̧C0hjgEVP2/)tAϔ_D%^6z0bLM@N /d)ɔfͶ  8J"(QYAa $<˚6.Ι k۪ez*N @y2+[@VN!؀UUCSPF0`,_PᩕctƐakI6H&H/L2OlVhqGx&ԫ^6LGY"/яbmd:kQ#)LsY( \iMp 'nN偔JR f**4F&5Sq8/jg=?skSZŐncLi@s識xK'AY^DarN?~-}] 2dw mjUQ]4#ŀxIuH&Wddž?ͭ8Vshm@4}<{Lc^k?:LOT6FvrοW".=[]e+Wh2YJ]eρ 7z˗n~ EV&Mxju?N;n?κ+hfЃb@/+J,y{yv{}\sM`6GNS?f󩺝l7Zj;%֢Vv\(*Ӷ;v\mɴIx|&RPͦb 'PRb"h\쉟yːv9*udE^ :eƸF20Y*޼VYN4#nجX5_S3F ˌUe2H{Zӗ*uZZ%MᩥfLŘe;8f&p&̐{j G2Ĺ1vT`Bi>͑[Kk͈q{'x 3-gB* "ydHEG5z%xL||73ּz#8CiJ_{Y .ȐQ5|_VG5LH׬ƫxr^K=oR)w 7==q_ !~[;wnΥgې}Q>έl8Zʰ<2-(̚Av\}!z^IENDB`pysiogame-1.30.811/icons/ico_g_0811.png0000644000175000017500000001142712201770062016324 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh{E?U]}M&b@! QD ʢ(z]V g=(% ,+A D @ɐLqg讪;vkkNOwUկx ,5Ec0XT]OgC4Vظn0^Ə~-:K TM꬛ oby/J_haZDwXaӡ5XZX0 m4Dsq<뺸J!HmPOPQn5F0YP  8 A uAT6~&޸߼g!Ԛ֫hc !"D)E\"ϐ)B`l|ut~G(>j:z+[P+cCS,a(kȡ4M=GVzX G*OJD:Bm1ۅdUZ離D?FX V+#pQ[T7-Fm}p' S J m➅XmQ`"TG;Y:6rOQJ!DnUOiNhw$#`1b-X X5lDm8Sd>~wej֋7 ~׿y1Zn\EWw&T H\YIM?Ij1Z⺄Y+,. nP0Ł2(E!bI0^qףPt&:.nտkl[PT dZEI3֘acf,ظ׊o -#i89fpeXq'22rޫ*ZQQɔr&NiѧĮ\)EcJǦ_|pX4 ws۝qǭw axx?fu Ok|n6J"wIJ`VF'̴m20`S 8M%yϋ6v0G/4ӕ4x-f[!b sF= hȟEVpTmW})F C)lO0lؘq"9=r\td#%Is(+s1{5r;}eEiG6R( O?tDpC}%v:-F'n"e#CC @D`x(O0lc>·ؓy/ɯ5r/ÚgzY*gf*]2e`h(.yzIon`xdv(5[dբaD<>U-$׍ ,>.f̓0NIgevTZ2S'vVT\az^g *6}cc=#%#c['=b#$ZTɒpf2zѢ ~&̮fȅZF$Mo{@lg7y䍰BƖ(۰F4%[8E`D5pFGhӜc?XOPSTẢQY 'CO{{v]Pָܨ 7!Q hf|3jDt"#=%v̚OO/~KQg|g٭l:Y} /'.g<[nawpj6E%#lAsیZVp$U^Eþ.gk946q%V.rQ3˴Rt;8S./s }\x@f1"ߓHCy.BJ[)E%מbNfs^(~]uZoanHkaWhi u244[ws)@CQKOI&3DC qS Z).OlC}Vs8ze/Y`gl[@Nٴ.8u*?p 𧚛怶&s̑QHz.B.E)#8 +g}2JB~*K{l*<%T5S,;0%QJ{ǻ[bc[aFMZԄB ٺOR7bQF;10G.~:u7'>M+s +^V­۹u@P1ƿ}ylݿCUV\r!Y2rX6?ˬv‚O.\㩭;zWePlQDBjfEsF"v!eFJV=Kdgp ɒd3;fR[jo^DioeEٔ8yl=Xd\Ov{]K#BRYօsű߁:)Y*%G5Qt"^ԋKRJeU嘡ꕭ f9YԜl!|\q~3wnRf:Oo{ElJ_XGTFG$njSx:Nov/y6n*#%tQz^R1zSӍxZ\:Iz@hחmVo" yZ~?O.?EJ(7}%~֏5 8m½ R ; Ȥ_ Ip!BB#B?GNTs~@N@ FM(SL*T(RB? mySFǀL;&FVEIo!B tm޶R䳚!"B;(DBs}A`,ۏ#Y@gq@%7@zR )%%<>b/}̾1 ,["|;[_LTT2+qNSuIR.!b#Yd("c%h16Td[I ԦVlf/8y y%CbG}'Q-ByPH!i-?N$D:ƒuн0UTRs~l9ED42 F1#7o7*g=Ko8OgN꺆K# c{x9}+ᾕ7wE_1/1 #Uڥ!.V$R6!h^UM2H5hˬ5dAV'qcʬ\<ĥ4$-k+qWQ9{?/a^'b3ibefB >|1|#D/}Fy#?2nοB#/RkLCnD3q: HlAV:J)N*19\qbZXE3 ?@ۣC8Y~2b]UMGV UH||/ 㒙3fQB*%*(KdS{iפVh4Sv6~U6[0/wsbDHYy'ٯ*ESb)2YF=RJ?3@/}B:5d6I!!5v$X?9)ϧ:9y?q n:Ϋq:?yMl;^Efhsq~@JiGcKS$JHG\Jݬ7)[g_e谡un۬@~r?s!Gl{a+36,{y$n|^k$d#{dc ]OC [N_}>Ouob/kf{qFͻ~?=0i?\+PFOG']SK0q"$#-uS %ml:BKY#3~ c%5]*}FPi)cs.S(gwi?uz {1Guҽl;9>sL]x:_[5FصcGyZ#|o8zx Qz21S8^^KOXtVF&zԣ[cu+B-WP/ac:8Ƌt9=N=@Ԣ_0o Ko#3rJaò N+tI 5j48Әx^^Go7G].q3j:UZK8㦍f/qxլj:?:D睇| 9w\3ȏRK\q Zk= ^Pg-@ϘQH-*$ =DRc4Ϫ\|=GqO߿~5=\`~?~]_ uZRk< x38v~>yo1zN[|RHh^>kt7g>x^*VX@\͜^DmxZͺ,i#*yh-q`eAGQóD~(.C+z>S)1u |ːV2'Dl*uۢr~0m4#7SFR"(+"P?ZHC^@1G֪7c703ht؃< [@Tͣmq0F]*-:'@|/@xOz(r[{&tӹ%Lq&aCtQF#/Q#*+-5zh?$Y-5H%I hSzmw9a݋i_8U<EʉsMl^UT)#A T]RJz() ev1hl:Rr՗# )ze>>CHRta>\VbPP9?U€D"Dzv3& $!Q}+VS \>7]ywGe#Rz!nV4%hAzvKIE-dž@<|2g l`Dm12c} (6B p,?oBYV nB[c ky/Ymg+`I,cL;w0BiA|G A5l0W<ء?DJxN1ѢZV1K <qz7OVҮI唕W3[6 %֛в!$Rz Fy3=|B*5BBC%"iF?٧;T2yd(*綎c6dN,#'9&b{gHS|$Ȳ85J EHpHmŞKH:IA|im@%lXPR&fWʬ'aDKKTl^{^CbdlB$LFRiJ VWNHVтV9JNR0,f(giaPQDjUURBM\ UGd̊6 @RvZYFզ65FyU}DZE$J36$H\‰ƭl4hk#Mys*3H2(-3 @ -t/<7['_1dʀW=};h"];h@vEf!g>( ԣU-%=^7a5;/_hӜ?IENDB`pysiogame-1.30.811/icons/ico_g_0107.png0000644000175000017500000001102412201770062016313 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh͚[l\ysn{v%]IDEZDI}kbp7N[Ӵ-K^TCC4 8ypNc(!;M").ɽL9˳Kc̜sn3WgPE@*U؂ᘯP񱎪w e! eA" 2lUd3w@613HB@D0 wJ){ۀp4T˂OMDBݠC}e@@ %!ZD4Za+V}h?sB߈" %J2gTDhG*[+ hGڈ5B@ӂV[BTtOx*Cw5]jm ^I @h(H D|8hUhFuGQBPWJB%p}%=q7tw&+QPRP,>Bz;hB;S47RJ]s|ˏ ʵ1v tH-$U P@m/ t8":!4HD }|@JIu)5h y*:Lthoԑ2#,Z(w41,J!bL1tRxOq]ʾOui3$×9>T<D4o%$H qj&@E.DG.k&+I}Y ݽ1rbɘ-iP #b^KCݏ0/zl>}+A>+s+v`$!9ee,L(Z7+:Ęc AIh>&7M6I2ece|ti)0EE-xuTݗL=Pgcs0ZOn]jݲvgH$I iI.2,J@57(Vb^AatWRd7xn=)&|x~= ZV oOB8#\ #z0P|5{>('tMT8#*1sv9܊Š(f`:ܪ6M ǎ2J)|Yr#45ДDS"j@!Q Jk∊ZwM^o"lEjMdp$QT]5Ch~& M!W_R BR{2!#J(L~jr9*Z 4m]\Ŷmt]R">jr {_tPI.48u5NV A!#QV(h a033 ضM.VA__Rafgg, ˲.sD/[e̲3M&pdzX(V~X;ܯlDFq$`dLp˸2m,//S(X__ŋd2J|&iYn⽵2O$niX; ;|h khũOlő]糐p%\ebb0 qΟ?OdddlۦhpƨjK__4/<${,U2׳,-Y!٘vh.lϹΖ;]_f! ,,T+n'-F" AY]9q4 h4rO._<Ν;\~;Mƽ1/X,&ᾁ!f>'$)d~ߏRZ,3j)?QcҌ]8,--144|D"A>'ɰKP@u >:8H*"HN^/E˒W|ȼ~$Gtb,MOM`&RJj';sX033͛7T*R)9}4Rq]F2dnn01rF`6?}I(?mw^@\vvxuSElgs7n`a@~p)J\*lY6`oow埖df,===4`&\.o_ȍ4i0LV`CsFQG1{(`NPC"ە2ϯq)\`wG,b]ZI&J%$}}}Vl65";:Tl+rW7mllpDSKү:p4khlQPK9}¢Gz\FM&i] VlKw6dʶOF(, a(1|$P)Oa%51tsHmcׯӫꌌodYAusNe/*Ro&}a&ZJI񼘱HB!}Rloo3:҅f&6 RHt)qx Zj b]L.{zZ3|8*Az.i@ -.H$ L,.~"2|A%hHL$%ZUu^yI$onBעRBK)bm'vgG-i m aMyUyi\6\kD{PJ@ M_7M!Yv@Oם+Dua@y6C(SXx4!LMڼ ,YMcC8:bvE_Cz?p&2ǜSQH&ѣ6$`&Ai7p u !T6W>% +4 aYԄঝ-X*iA ̖"o!V({l7$ff8c]]6iE #?FZ;rS>FBcG0 |dڗ<4$bconw_]dg~ o %dS)4ÀֶMx:ƕ߾pD1iuI剏G_|¯;ܫ?[ Ld^D"iЈ­j|9^;U&`9篼A\}%VU>L& fhFZQJ#ݢ,0h>tfY~-M&tua ]?Ha-uף@:MB tOoysy̕~&#' D.!l'3`c/Dδ-|*3ll%X["`G1s`j^K8~韸)ӘG<,lG8J%b1Ƚ4 IϭqұDFw\Q xpgϒ}B@ C<*w!Ō޶Џbcpȁj|\^DtQ[ckmCcߧܛRn8l#ޏ)l^gf/kszsu\5Sg7y![M+imI xa(s0.8xu귞Qs>O>e2{CiJCņh$D8gL_{5*,7֡uf7ŵ[xhF)7kTA ?ͩ#?bGIuM\;˴pY^߿w:RQ D||ԛ&1}1OòA"-G&w8A0?WunT:A>eu~\+ Zdbq^" Q8 uMUl%IH›K|2;SsN&K3RuQ-fnay~\Y$jR`YFƮk*Dã":r՛|BrVvՏKRf!<O88k1b(.m.L2-/dĆʆ2$ PnDW:F\cז͎xn;- B dHԊa%3J,{ ޙ-! FbmsARW'Rwlbqn'߾AW|~T +W~_¡AJA ݽ Nle}e3ジ _[%C$:7VnX6h&AzƦrF1z ݝ34ǎFCـB2U,}f7T/ 6,By^Ik~iC>:>c5>"R]|-/d0ĝ]]EOlt[NHpc܊F7ok7ï&jgeI5Xr}C螔?ףTlU( BaF5#$X\ ?X*!=ba wV R.NA,\d8Iq?zy},psvËQtIV,vu;NRVo/|W\ӳiup|'C{d*ȇV蓎$ז7Ϯ+pҪam`*ٷCoxFbɧ?Ͽ~ӧM0?Wʻ$i|i&O6R >*&W ]%|gf ?|{7 3WyzW /ުy&mzkakӲ@+ %3PKc".HV k_87x?thP3.=. 3x1{شgqer1FxMIq#e`Ec/\oJBd ɯJ!_̶nل3 3[,oɢnS$cv0fĘ!# '(bNFd@D^ZJ%YUK*03s]n$twH"U)FP :EJI1ㆌ~3%ҒqdC"Rb+YC%U2{ bNjMJۘ͟!opd$q%d5!UJWAL0y(-ZZH-XO!EĘ"8ax9zgMmdDy5'5i U RS Jkj3c @F@<:ıw|'wci'5~vi)$|N}jb"MRODTx>$m|fs)^k1Bp:O"qӌ  ے-lKiFEL&H^ Gx4U&z/vLPOgzg{⺨Bع>n>mBn^zma@i z8u ?m6pHZ^e$(o} M7Dk$ϑ<!]+QUyK_`%+W~BU^Eoe3_F{ [i[z]kLč%eeրXWbx[atƫOzC(T_ (܃'V(P?W,JʿWQ8@rwku=hi8oXgRX_&mQ~A&mg ːLv eI` O@&/cf Xi1RjPMQI?Q;9 D? kpֻȒHˬ2A֏xbOp #/ _rWٶ/A'#q>oxCm$A vdfS$xv\1snC^إe޹Ұˆ=F)8xz/?/=~'wmN hgjPn VQH͞MnɄ7YӋ>Bġ2Cՠ 7oEBnh P @d` Vr5$xU].c`I91 ucu X.'`\?H*iNR,lܱ xbw^!)Ҝԕ5<5Uko=pJm-7Igv54{v`M9H4Z`q8k|{c$j&#$UuR4ttfָݸN]zɌ*oI,Y,w~.,Y-x"0j;x 9g\λ}P[71ԁu\UurˤȃDx_eO;ɃLXN¢V3n[c5>ϡG1W..x 9w X)фu۵-a}e+teMY9iK,/.~}33G'vQJ<J\Ka#'Y+ oՕI h8{Gq1?z11ɻ} 2s k(8pBm| (OPlf|y8yf6ښvj2BatDO eܶ%m:fڹ&5kIP8{iKiF0<S}zy^Ykqf^bnҳL .,ё .vѸ5/0͈F00~<^ԾPID)=BekA QU#!IWXX&LV=' Lc諔2f=2 cg>D6^7 ?9y+m Ql11ݾcf37mܿ _\%X:߇J20M&_ͷ_'D>zgޡЙP %:ܼ) *4Y#냰L3n8:RK3j T(rV &z _jH&0/1kE%,Hn^r/<l9EZ FR.^nZ:CE7e6\}Tq|<0bUV=Ww5G P^3Jb`]8?](^f>c/yw1 5Y 2WOJ:z"k^c djb.Ĝ?=Q}_Ɛfe6@]-?@n!;ԁ@IE*c\*lH3):FVh{Ƣr2cGn/AO~< !*zŐN>r*cn3۟ P.ES5ߠLP&}$+Z۶InlkU1/@ /xH5RG,_C:y<oD-:|?Gge@4J4Ey^?5UɹddkY/GeqRMF:=Ϸt! E3Y RuYç Jfc:-Ed5#mB;9w]gq.nDst_<d6pxh: Éw([#?oYJU? ZXؿO~LyD,ˣ̳w,3gy~x5$ }F_L.jizb6eNs L9qwOk/CS~|f: mチuj>Tm/אA6:kϞx }NRh׷%["وٳe6bdJՖj%j:#50uj.u 8l9d"`v*#HͲF MD&i03u~}r#vcN}.2)q{r>|JA#ƳK ^M[(upK6Q 2f7+f))vk] #oZ$?TA914#x,^ˀkM3VKTDƓ:/_]9v+U] 6)7uG)BVKdqX_hD-3nc|0qht5+z*RDIJUIRB*G cN#ǽKSP0ށ|U '>=jp҃pSI|hQ 5F :^'FcAFi`tHJcq#]ٙ;IC/XtԛQ Q _aMk JۼƗ~ꃑo}uG%RVS>SrRğ^x D-h8ZzC1 E UU_[@Lp;,k2.++#!HYo<h}ň5K40~MD҅kQJ+ c(wHdeH  D f% 1Gԑ sK&JC 5 @ˮb|D]!RՉ Ռ8_1 Jr5rCH Dvp>R2Bn+F7@PJqX2hdL|԰w.R YixL ,XFGH QWIĊ `']^#1Jxod(>ӯpEŮ&s 9hk>4K7FYQ+0@d66-p.$vn'{׿0=l5k|rI.z ѷL~ԩ.$yyG(n!GoJWBR3> cm--_\?;«;_UwNp2;OC߲rzwco4T|cU2`Ҳ b>pO;߲;TОJpсs׌%;zkExY&qֱrV_xpЅ`H䕱%M@ٌy!.G_`bw܀; d)<#=K=rk0Ė sY>jbú'Kz׃=eQ}g le( ^GOV)ʉmIX6w)]<ّU^ա?bMBtb%MJ:B6!P\D^VHO eCx` _TlA=:gCϯ6fL$<̓tτ(0ふl\eOM3<9wF5Q! Ir(%Wӈ(-Af[G1U{d&yCHQZY1K_o.-;~fcT /[uTno==Zڦ/Br!2_fb,̩JYBo\1$ڐj1=$BFFq~^zbx|xonMު#\T+{]PJ!ݔq۽{CMTa`2_T2sC0" q9VcdKLR2<-)Jqq kXa-# 7'1p9UTF[zIQM|6&g_ɻ. AG{L٭Q:.4 ,Z;Bq%3 =`.bE}0h!#^;Oz9[X# CҪ&AZpvI!?$ncu@ 9xRe*;X_ J ~2(̿K?O+Gn觿 cysg_#j'1V0]}VI g0p`BdWB%)A:hgxo3aSϞB w[=6!#.4,IT2-C 5 y,.VRTo!Lc}, "C IJd&AJIy  #.OЛ5W Z)iwTwzߵdgHt'|%k9y.ıe+N )I#)*UNcUyR1*q,i66IlGBj<ݭHo^#'%eV6$#8%CB#iUaƛR22=>a*mn/ @((-EQ2l`*72`].Eҥ@ z=x *2BI]j*(rj&Jhb:tT؊$#% "b%B Ʈk eAow5rFDS1TPh%^+VNAC^!I2hQ5|$1$aVP(r*ׁzH9M@^fs5r!dwv ^D#]! ғRFJ zs+`x\d(W/ǕLndd JJ&eIߋH !(XwN#v >ӿSM'BC}HEH\\i^5ךzm;t/PX׾K{ohs!֥3IENDB`pysiogame-1.30.811/icons/ico_c_11.png0000664000175000017500000000663612201770062016160 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚ۯ_U?f޿s||'1nT@UʭRi%DmP+n nU+J iA$* CRTI i;ǿY PBHOcABԇԏ4=k6ڎͶcѦıvf7avx+ѧ+Y5Sˇ[p1FE< @xE56IЀ)@{MI5]1i:1i[k[aL0bXx,Y1g۳Yr-[{>&6 f8N;kc{ZQ1#Icø ոG Tˣ|̿ *0yZ$ a__+0EM5DV,"ZXZ b@gEF&E9LqU.5HR`M}NLLQ "@kq؆ƹtŶKq4`̒jźnEU$TT ~(3gdI›oI$k:~*H_*>I3eӐvQYjO~|x91U@&0 2bz#C HX%3^V?A $IFo C].'BHW˪KL_.pga*%L4b4 Hd!Ơ L|X%D5:(!441 !6W˻:ko8| .Ch_30b$ha$3* R&)$hdU ̈"ƠsOcoS/'pud_y<}7G.dhb$tXC5y5#+5#$0WQŇ֥3_22c L`/|mZκK,!#Y0V+iU GFM~8ߟ?~Փ/2과#~M|e2kV&uIb޳{i)n턦A-K8E~Q8Eg=W~ <;SXKx4U`pWy{9}m݇H1h0ɃqыSXn{'-V|"_Òn# ƞm6k*+D0+bp~Wl"}mԘ5Fu^} @H+j'N۸׺jEcdAKam&FF|z'{OLjT%;?@l3yg7,G8ޏ޴YXG> Qki 0FHҊ$޼nC`D0H>;0'v614<ƉspgqyRAiP )USKڃ6j > C%&@$3$0 Ӵɶ#~ wN 2M[]FzE}(3OjFbè$BkJ"cj0q Ʊ hP."cfjU+v6 D'!H71Uv[fXA$vXbGX=N,X1dzijHu{&j>%2ն I (xΈ(W/PִLleCg N>1"VrX1(7ZVW–tlJS o*&23E8E Z{EcҴL\Gg[1b6+ysxl$f aK:!#;>Dx}IҺ4T4X.خ]l GG6R# iQz-58 }%5lwGF7sM4z)00Z蹙cXg=1NnV4j E/= u@7)Y@ε{>?答W;~b/s|k[-}oG #&.o=̊Ͷ~VV$ξo.VƘsu2z==4# m$YKt7OFĕOT=RCdfwr߇›WYP,-jtxVl2#xŸW0Zf9ˋ_a5!kIk#n 2wFV:9 L}@ծy?6dʊE}Qj⦥MuZ6xE e 4 ",`h#>k7a@&mjWXI'p ?ĩ_} ݰ3t]^ju"H؇jPsq!2؈+wwnpa' փ8>P$S b/_+*oT܌Hn2W%}[Eu )a/cCgr';{YaGiRԑs"AF@<ĩ6:q||zj(7?8nn-b$֊9ɪZ%|+AKVo|ov{|1}h޵<{֧?iC `k%3$IENDB`pysiogame-1.30.811/icons/ico_g_0306.png0000644000175000017500000000656612201770062016333 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚]uサҮ7~L*UK^ V\<@Rd$$ X*JTdaL 5[B_H+vB;ys׌{fZso^SJD@p.-l^;=paCu#31֣ӢaFf%E%mc =#{^1&ccM4 oLa VB?.q ,iZ7Q#hDK hT[JdXƱ@V2,F~O\p(@\ĩ0*DxMBUB7^W>.>:ʍI u01&l&^0@UsMDɅD+/J)`1D$_*#sȂ˼*Oc~p.ù \vqֻ$oS7|}_s\Wr& U|1|~kgY5\y J/PDHbFر߰vEq0(Q kMvx:v뿗C G%lP&Q$΅is5]ƺu\γI/蝹TC:vM{n n_;Gˣ'y@'`iqMl<,G7Jݪp89uqb8">G%0rxC2;nb6n -_f:Iя0@<8NN}ȖB襇Y38&QjCAʮU颛۶I;Lylx驋lb ă ")UEk9[Y[qm<ȓ6~1`l,%CmpSmS 2$Q$ˁHcdYi䉧oc857w]n۲ozq!q P]#6bDOu?m95C#̉9nǵ{mVqjpa_H%9fEl;9c;agD!oL/pǶWvj Xw+!qNKT~M9. u3 z?pAΜR1ȝBy[~ #ƪ[EX8Pg[̝B\1ҳ]ϣO[ȑ%n9!Ak~2Z4>C Jd nFbW [eX3z/`g8lwy("[7 (1(~G`v XqEJyes~rz "֮ ,B<85=wcvvdx}5U%n(CѩS,gۖ \u/Hpbږ}qtW 6'f{ lZgvS^X@ިNS*]&"eW)h[gv,[͓eΜn{}Tyv=+]eʙPĕT@5SmF0Y@:0]gF{2^v*{VB} #59dн*yĘnp u%sgVz}."dUy;kai\ #šEj o{o(D_?L߾ k>eV\n,⤜k0ʘn׬@x^"JRƯ8͞}_vڗ8z(4^T'jxE-(eq e UӯFHT+~-^k^!x)/QEkQQ+qȲ_ br9f>_ETG ̳fL~Gğ_ zOQXaP@ix21N W3>?vį70EFn-}ﰍڎ.a8d6Qf"޻D{ ^2^EP(hok9TjW nPtD?s} ڴ\UR &]+ؚ7^@er~ +( vUq3s5Qdx0׹T6|~(h?d'"a_4j2ʝm7q^yת.uzجYZ^j-o[<=0?,IENDB`pysiogame-1.30.811/icons/ico_g_0322.png0000644000175000017500000000563412201770062016324 0ustar tigertigerPNG  IHDR22?sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATh͚ϯ%E?Tuo70A@#!htceB4q+7l]` J $&($(h 0x3{븨 ĸ^zo={~Tݑg9{FD@53!I #!H D}p\ IGt,u^@X`06 Țի ?{ @cA f^_=3>3X5I "XQA%]h\@ql~wye|ˀdY /0M(f&iLDK=ޢNNçx_(FzEs={w_L0S %ƱiT# ~Fzz6448G# 64h\CF=4֑R~~˒rW$i*j(d\kH0 hϼotV E0Q([Q8"8ld(gpf5KVHa4R0|kڑ>gpx^%bJ-%& f_U+~kd`_ dEArbiHN[OEK@ $T4\'Bڐd+Tb - W(AqzcP棏'̴ KRFFj1ji+`aGj1rj?pQv0LZ~K~P "CE$72䆤d $G:5iF*sF)K_v}2[+>~*TOE?Q%o`~0٩s-Va6lUָdg)b؝6бx0V"@ /5VUnC m)@$DპDZ PJdZ]?zq"|ZyEPC!J)o0ft-ߨL-* {kQ$)u 3k x 'Hjy{$DjYKbO2RR9rH>2X q ȄJT@lf`[Ey Az|Ku:AR = UE2֘:ә26 E* [ÿ$/^9=cJGlRd U1!}/6#l(ϸ#mx_dvD-gīg{Nnϙ6nfhZM2q`NdK;|25O\FUDX }cHN8*lo&jd+ykg)K)>rsE@R񄴭 sCjq%XO@¸\g}1Nx[+Ͽv]Y!WƊ kD藢3KcM#'Fb mj8V{D{j&zᚧ]}=K<*MwcK 00H`5 K]]q<%7ymu5Lz)@4m8vP0\W$ Vv9Jy9:+p;&bêd+M.V'l O~ 3 *`3J}knAūs  S P=w7x-@0'E*٥  Wiq< @pxsxH.)`NVnk I@o  DjۖV̭&$XyQ/D E3C EH-^PY, q@Գ}+ԼBi'SgJtJL%׮e\ *hqt6o+65M%o(ɚ,P[!ϝ[|~.w&τRzԇӃrŨW%>'wϓnk$ *..lt2/~o4Z g3(tSp cr⑃̝O' 0J)ʩy7LƥpKwiuIuyR+~z~hPM÷z>=&?{񬩶tVJ~ގ{hw:= vyz0[ի~aHųA=W}'/jR #DA=*rjԇpo1`IП@)$#-hcXm _bqJec9c^f˄;I?Tr=~c%KSnt4FXK'& כLM5(! 뽯aZnQBymT>k%wD :RXpa^vhźw/bIH PR:5)SC7N6=T ֬\f&2SA@>CSߏsr. pYLWL5h=4R>Cյb0saB%jE"חUaD&uy{&`V'iv+XU<6TdIw^&]xD|.si({sv*.Q1tevz;qʥafpb+lOP)5HiJeOMcM@(IђB`^8dA$ ܊U~F524AQ)ڳ ttzK?7(a-te^?qҧȒ0> l\YV&" JX\A׽w fF\f"=:D23rZ܂ &xj.HP/l :tfze Ū91U?L+DY^ĠhcBgg(W7дFbz1yR(wA=\PY G $Fta{9p#֯0 _&E@W1<4"|-ghI7ZTfci>GGdG[GpxdE Ay}9D 3|A47Mo 翂r[o*7CAxzS& /-s'?#ܽm8ԧ/!# 82HOxֿYdhr}mGovѮǨ46d/s VYEA?p8LdhXa}T6RuWı;}J r,.aIXo!N\8A.zXB)P"ԏAtWyd} *sed>vN#K˵K߆$eNƯ&Eޗ/MTb߻'< $\9oP*h#BFH ,x/w̼b>ŹnvO=`CTw鷨w._!E[#x? DZM=:33*IZԈ=$gJ&rFΤQ{:|&cq\2Е&iEgPx275=@rtʷЯ̓>7C!yW~Jsy8'bR08!n#~,So;(]h~ Fg$#/uf&3r$lN'B?ʒ2?s]  n.^$\= S&c_MqJeCmiZED]c\?Cښ|M>Zݤ@ʐ Oh2Ry{Mq1EQ>9.^C:dllgTz)fM7.rʥD7s 铄o^G+U4e&T0LO ,2#ls%X1̮VLRJ۔VN`jM-;)>4\B"Ȅt ^kxBlhA1MKN{ e!(wk{\> [Ȟ{RRnmG^L`P*׊G< wD2s<ʮ'$Z=8F6;Szj)xۘ:lQ?[~Fkh݈(ԋ|kU-BPԤDa>(T/odz" j6Bl ȓ7a14R6^ِew/yOhzAx:/,nnDA=?^?%,F@ ^ bX B;ŃRF S΁le y $hFc!Y&q4Z풦6Q͙ME!Dfw+ᧀء2łx]X"m;j{"u:vInޛddHv 5Z^_Cy{H1;4C6BJ9й$S3:V <[+ڪE#&BK<+ݘVY !79,G(ZH}K̀b&C&tS\-Sr{gx`l:q;]=~%M@zSӪP:ھx-WzbKn( V 7ц0XeZ&ܑ%]T!tQ2^&>: Zr,OJ'1c2TaŬG98pM/A( 7v v7h!GIeȈUΖ[(A TF ߠFm~^G (vʪog [kcRcl-VGo6N/Dqv2__ɲXzn;IENDB`pysiogame-1.30.811/classes/board.py0000644000175000017500000011606212201770063016052 0ustar tigertiger# -*- coding: utf-8 -*- import pygame import colorsys import os, sys import random import copy import pygame.mixer import classes.extras as ex sounds = pygame.mixer sounds.init() sound_8 = '104874__robinhood76__02020-cartoon-slide_1.ogg' sound_6 = '104874__robinhood76__02020-cartoon-slide_2.ogg' s1 = sounds.Sound(os.path.join('sounds', sound_8)) s2 = sounds.Sound(os.path.join('sounds', sound_6)) class Unit(pygame.sprite.Sprite): 'basic class for all on-board objects' def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",color=(0,0,0),**kwargs): # Call the parent's constructor pygame.sprite.Sprite.__init__(self) #grid location and size self.grid_x = grid_x self.grid_y = grid_y self.grid_w = grid_w self.grid_h = grid_h self.board = board self.initcolor = color self.color = color self.locked = False self.lockable = False self.value = value self.speaker_val = value self.speaker_val_update = True self.outline = False self.perm_outline = False self.perm_outline_color = [255,0,0] self.perm_outline_width = 2 self.hasimg = False self.draggable = True self.keyable = True self.show_value = True self.readable = True self.highlight = True self.audible = False #use true to enable sounds on unit move self.outline_highlight = False self.font_color = (0,0,0,0) self.align = 0 #align: 0 - centered, 1 - left, 2 - right self.update_me = True # Set height, width, the -1 is to give it some space around for the margin self.image = pygame.Surface([grid_w*board.scale-1, grid_h*board.scale-1]) self.image.fill(self.color) #http://www.pygame.org/docs/ref/surface.html - surface.fill() comment #self.image = pygame.Surface([grid_w*board.scale-1, grid_h*board.scale-1],flags=pygame.SRCALPHA) #self.image.fill(self.color,special_flags=pygame.BLEND_RGBA_MIN) self.painting = self.image # Make our top-left corner the passed-in location. The +1 is the margin self.rect = self.image.get_rect() self.rect.topleft = [grid_x*board.scale+1,grid_y*board.scale+1] #scale font size: self.font = board.font_sizes[0] def pos_update(self): if self.grid_w > 0 and self.grid_h > 0: self.image = pygame.Surface([self.grid_w*self.board.scale-1, self.grid_h*self.board.scale-1]) self.painting = self.image self.rect = self.image.get_rect() self.rect.topleft = [self.grid_x*self.board.scale+1,self.grid_y*self.board.scale+1] else: self.image = pygame.Surface([1,1]) #self.painting = self.image self.rect = self.image.get_rect() self.rect.topleft = [self.grid_x*self.board.scale+1,self.grid_y*self.board.scale+1] def scale_img(self, new_w, new_h): 'scales image depending on pygame version and bit depth using either smoothscale or scale' if self.img.get_bitsize() in [32,24] and pygame.version.vernum >= (1, 8): self.img = self.img_org = pygame.transform.smoothscale(self.img, (new_w, new_h)) else: self.img = self.img_org = pygame.transform.scale(self.img, (new_w, new_h)) @property def grid_pos(self): return [self.grid_x, self.grid_y] def immobilize(self): self.keyable = False self.draggable = False self.highlight = False # Update color, image or text def update(self, board, **kwargs): #self.update_me = True if self.update_me: self.update_me = False self.image.fill(self.color) self.image.blit(self.painting,(0,0)) if self.hasimg == False: if len(self.value) > 0: if self.show_value: if sys.version_info < (3, 0): if isinstance(self.value, basestring): #if a passed argument is a string turn it into a 1 item list value = [self.value] else: value = self.value else: if isinstance(self.value, str): #if a passed argument is a string turn it into a 1 item list value = [self.value] else: value = self.value lv = len(value) for i in range(lv): if sys.version_info < (3, 0): try: val = unicode(value[i], "utf-8") except UnicodeDecodeError: val = value[i] except TypeError: val = value[i] else: val = value[i] text = self.font.render("%s" % (val), 1, self.font_color) if self.align == 0: font_x = ((board.scale*self.grid_w-self.font.size(val)[0])//2) elif self.align == 1: font_x = 5 elif self.align == 2: font_x = board.scale*self.grid_w - self.font.size(val)[0]-5 if lv == 1: font_y = ((board.scale*self.grid_h-self.font.size(val)[1])//2) elif lv == self.grid_h: #number of items is equal to grid height of an object - distribute lines equally in each grid square font_y = ((board.scale-self.font.size(val)[1])//2)+board.scale*i else: #lv - total line_h = self.font.size(value[0])[1] line_margin = 0 #(board.scale*self.grid_h - line_h*lv)//lv #self.font.size(value[0])[1]//4 step = line_h + line_margin center = (board.scale*self.grid_h)//2 start_at = center - (step*lv - line_margin)//2 font_y = start_at + step*i self.image.blit(text, (font_x,font_y)) if self.speaker_val_update: self.speaker_val = self.value if self.perm_outline: self.draw_outline() @property def reversed_color(self): return [int(each / 1.5) for each in reversed(self.initcolor)] @property def brighter(self): if self.highlight: color = [each / 255.0 for each in self.initcolor] hsv = colorsys.rgb_to_hsv(*color) rgb = colorsys.hsv_to_rgb(hsv[0],1,1) return [int(each*255) for each in rgb] else: return self.initcolor def turn(self,d): pass def rot_center(self, image, angle): """rotate an image while keeping its center and size""" orig_rect = image.get_rect() rot_image = pygame.transform.rotate(image, angle) rot_rect = copy.deepcopy(orig_rect) rot_rect.center = rot_image.get_rect().center rot_image = copy.copy(rot_image.subsurface(rot_rect)) return rot_image def draw_outline(self): "draws an 'outline' around the unit" color = self.perm_outline_color#[255,0,0] width = self.perm_outline_width if width > 1: x = width // 2-1 y = width // 2-1 if width % 2 == 0: w2 = width // 2 + 2 else: w2 = width // 2 + 1 elif width == 1: x = 0 y = 0 w2 = 2 pygame.draw.lines(self.image, color, True, [[x-width,y],[self.board.scale*self.grid_w-w2+width,y],[self.board.scale*self.grid_w-w2,y-width],[self.board.scale*self.grid_w-w2,self.board.scale*self.grid_h-w2+width],[self.board.scale*self.grid_w-w2+width,self.board.scale*self.grid_h-w2],[x-width,self.board.scale*self.grid_h-w2], [x,self.board.scale*self.grid_h-w2+width],[x,y-width]],width) def set_outline(self, color = [255,0,0], width = 2): 'enables the draw_outline and sets line color and width' self.perm_outline = True if color == 0 and hasattr(self,"door_outline") == False: #if color is 0 calculate colour from base colour #convert to hsv c = self.color h, s, v = ex.rgb_to_hsv(c[0],c[1],c[2]) outline_color = ex.hsv_to_rgb(h,s+50,v-50) self.perm_outline_color = outline_color elif color == 1: c = self.color h, s, v = ex.rgb_to_hsv(c[0],c[1],c[2]) outline_color = ex.hsv_to_rgb(h,s+20,v-20) self.perm_outline_color = outline_color elif hasattr(self,"door_outline") == False: self.perm_outline_color = color else: pass #self.perm_outline_color = color #self.perm_outline_color = [255,0,0] self.perm_outline_width = width self.init_pow = width class Obstacle(Unit): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="", initcolor = (23,157,255),**kwargs): self.initcolor = initcolor Unit.__init__(self,board,grid_x,grid_y,grid_w,grid_h,"0",self.initcolor,**kwargs) self.unit_id = len(board.units) self.value = value class Label(Obstacle): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23),font_size=0,**kwargs): Obstacle.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.font = board.font_sizes[font_size] def update(self, board, **kwargs): Unit.update(self,board) class Ship(Unit): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23),**kwargs): self.initcolor = initcolor Unit.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,self.initcolor,**kwargs) self.unit_id = len(board.ships) def move(self,board,x,y): board.move(self.unit_id,x,y) def update(self, board, point,**kwargs): if self.update_me: Unit.update(self,board) if self.lockable and self.locked: self.draw_circle(board, point) def enable_circle(self): self.locked = True def disable_circle(self): self.locked = False def draw_circle(self,board,point): max_radius = board.scale // 2 step = max_radius // 4 color = self.reversed_color for i in range(1,4): try: pygame.draw.ellipse(self.image, color, ((point[0]+step,point[1]+step),(board.scale-step*2,board.scale-step*2)), 1) step += step except ValueError: pass pygame.draw.line(self.image, color,[point[0]+board.scale//2,point[1]],[point[0]+board.scale//2,point[1]+board.scale],1) pygame.draw.line(self.image, color,[point[0],point[1]+board.scale//2],[point[0]+board.scale,point[1]+board.scale//2],1) class Letter(Ship): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23),font_size=0,**kwargs): Ship.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.font = board.font_sizes[font_size] def update(self, board, **kwargs): Unit.update(self,board) class ImgSurf(pygame.sprite.Sprite): def __init__(self,board,grid_w=1,grid_h=1,color = (255,157,23), img_src=''): pygame.sprite.Sprite.__init__(self) #Ship.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.img_src = img_src #grid location and size self.grid_w = grid_w self.grid_h = grid_h self.board = board self.color = color self.image = pygame.Surface([grid_w*board.scale-1, grid_h*board.scale-1]) self.image.fill(self.color) self.rect = self.image.get_rect() if len(self.img_src) > 0: self.hasimg = True self.img = self.image self.img_pos = (0,0) self.outline = True try: self.img_org = pygame.image.load(os.path.join('images', self.img_src)).convert() self.img = self.img_org self.img_rect = self.img.get_rect() #resize the image self.scale_img(self.rect.w, self.rect.h) self.img_rect = self.img.get_rect() pos_x = ((board.scale*self.grid_w-self.img_rect.w)//2) pos_y = ((board.scale*self.grid_h-self.img_rect.h)//2) self.img_pos = (pos_x,pos_y) except IOError: pass def scale_img(self, new_w, new_h): 'scales image depending on pygame version and bit depth using either smoothscale or scale' if self.img.get_bitsize() in [32,24] and pygame.version.vernum >= (1, 8): self.img = self.img_org = pygame.transform.smoothscale(self.img, (new_w, new_h)) else: self.img = self.img_org = pygame.transform.scale(self.img, (new_w, new_h)) class ImgShip(Ship): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23), img_src='',**kwargs): Ship.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.img_src = img_src if len(self.img_src) > 0: self.hasimg = True self.img = self.image self.img_pos = (0,0) self.outline = True try: self.img_org = pygame.image.load(os.path.join('images', self.img_src)).convert() self.img = self.img_org self.img_rect = self.img.get_rect() #resize the image self.scale_img(self.rect.w, self.rect.h) self.img_rect = self.img.get_rect() pos_x = ((board.scale*self.grid_w-self.img_rect.w)//2) pos_y = ((board.scale*self.grid_h-self.img_rect.h)//2) self.img_pos = (pos_x,pos_y) except IOError: pass #bg_color = tuple(self.image.get_at((5,5))) #self.image.set_colorkey(bg_color[:3]) #self.image.set_colorkey(self.initcolor) #Surface.get_at((x, y)): return Color def update(self, board, **kwargs): if self.update_me: Unit.update(self,board) if len(self.img_src) > 0: self.image.blit(self.img, self.img_pos) if self.unit_id == board.active_ship and self.outline == True: lines = [[0,0],[self.grid_w*board.scale-2,0],[self.grid_w*board.scale-2,self.grid_h*board.scale-2],[0,self.grid_h*board.scale-2]] pygame.draw.lines(self.image, (255, 200, 200), True, lines) if hasattr(self, "door_outline") and self.door_outline == True: self.set_outline(self.perm_outline_color,2) if self.perm_outline: self.draw_outline() @property def brighter(self): return self.color class ImgAlphaShip(ImgShip): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23), img_src='',**kwargs): Ship.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.img_src = img_src if len(self.img_src) > 0: self.hasimg = True self.img = self.image self.img_pos = (0,0) self.outline = True try: self.img_org = pygame.image.load(os.path.join('images', self.img_src)).convert_alpha() self.img = self.img_org self.img_rect = self.img.get_rect() #resize the image self.scale_img(self.rect.w, self.rect.h) self.img_rect = self.img.get_rect() pos_x = ((board.scale*self.grid_w-self.img_rect.w)//2) pos_y = ((board.scale*self.grid_h-self.img_rect.h)//2) self.img_pos = (pos_x,pos_y) except IOError: pass #self.image.set_colorkey(self.initcolor) class ImgCenteredShip(Ship): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23), img_src='',**kwargs): Ship.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.img_src = img_src if len(self.img_src) > 0: self.hasimg = True self.img = self.image self.img_pos = (0,0) self.outline = True try: self.img_org = pygame.image.load(os.path.join('images', self.img_src)).convert() self.img = self.img_org self.img_rect = self.img.get_rect() old_h = self.img_rect.h old_w = self.img_rect.w new_h = self.rect.h new_w = int((new_h*old_w)/old_h) #resize the image self.scale_img(new_w, new_h) self.img_rect = self.img.get_rect() pos_x = ((board.scale*self.grid_w-self.img_rect.w)//2) pos_y = ((board.scale*self.grid_h-self.img_rect.h)//2) self.img_pos = (pos_x,pos_y) except IOError: pass #self.image.set_colorkey(self.initcolor) def update(self, board, **kwargs): if self.update_me: Unit.update(self,board) if len(self.img_src) > 0: self.image.blit(self.img, self.img_pos) if self.unit_id == board.active_ship and self.outline == True: lines = [[0,0],[self.grid_w*board.scale-2,0],[self.grid_w*board.scale-2,self.grid_h*board.scale-2],[0,self.grid_h*board.scale-2]] pygame.draw.lines(self.image, (255, 200, 200), True, lines) if hasattr(self, "door_outline") and self.door_outline == True: #self.set_outline([255,0,0],2) self.set_outline(self.perm_outline_color,self.perm_outline_width) if self.perm_outline: self.draw_outline() class MultiImgSprite(ImgShip): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23), img_src='',frame_flow=[0], frame_count=1,row_data=[1,1], **kwargs): ImgShip.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.img_src = img_src if len(self.img_src) > 0: self.hasimg = True self.img = self.image self.img_pos = (0,0) self.outline = False self.draggable=False self.correction = False self.frame_w = grid_w*board.scale self.frame_h = grid_h*board.scale self.frame_flow = frame_flow self.frame_count = frame_count self.row_data = row_data #[number of images per row,number of rows] self.correction_factor = 3.0 self.frame = 0 try: self.img_org = pygame.image.load(os.path.join('images', self.img_src)).convert() self.img = self.img_org self.img_rect = self.img.get_rect() #image size is most likely different than the sprite so resize is needed new_h = self.rect.h * self.row_data[1] new_w = new_h * self.img_rect.w // self.img_rect.h self.scale_img(new_w, new_h) self.img_rect = self.img.get_rect() pos_x = 0 pos_y = 0 self.img_pos = (pos_x,pos_y) except IOError: pass def next_frame(self): if self.frame < self.frame_count-1: self.frame += 1 else: self.frame = 0 xg = self.frame_flow[self.frame] % self.row_data[0] yg = self.frame_flow[self.frame] // self.row_data[0] x = -(xg*(self.frame_w-1)) y = -(yg*(self.frame_h-1)) self.img_pos = (x,y) def set_frame(self, frame): self.frame = frame xg = self.frame_flow[self.frame] % self.row_data[0] yg = self.frame_flow[self.frame] // self.row_data[0] if self.correction: #shift the image by 1px to the right every x frames - to avoid scaling problem with very long images shift_x = int(float(xg) / self.correction_factor) shift_y = int(float(yg) / self.correction_factor) #int(float(self.frame_flow[self.frame]) / self.correction_factor) else: shift_x = 0 shift_y = 0 x = -(xg*(self.frame_w-1))+shift_x y = -(yg*(self.frame_h-1))+shift_y self.img_pos = (x,y) #self.img_pos = (-(self.frame_flow[self.frame]*(self.frame_w-1))+shift,0) def build_frame_flow(self,frame_count,frame_flow = []): self.frame_count = frame_count if len(frame_flow) == 0: self.frame_flow = [i for i in range(self.frame_count)] else: self.frame_flow = frame_flow def reset(self): self.img_pos = (0,0) self.frame = 0 class Door(ImgShip): def __init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,font_size,**kwargs): ImgShip.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) self.font = board.font_sizes[font_size] self.image.set_colorkey(self.initcolor) def set_pos(self,pos): self.grid_x = pos[0] self.grid_y = pos[1] self.rect.topleft = [pos[0]*self.board.scale+1,pos[1]*self.board.scale+1] class SlidingDoor(MultiImgSprite): def set_pos(self,pos): self.grid_x = pos[0] self.grid_y = pos[1] self.rect.topleft = [pos[0]*self.board.scale+1,pos[1]*self.board.scale+1] class PickUp(ImgShip): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,255,255), img_src='',**kwargs): ImgShip.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,initcolor,**kwargs) door_outline = False class ImgShipRota(ImgShip): def turn(self,d): if d == [0,-1]:#up self.img = self.img_org self.update_me = True elif d == [0,1]:#down self.img = self.rot_center(self.img_org, 180) self.update_me = True elif d == [1,0]: #right self.img = self.rot_center(self.img_org, 270) self.update_me = True elif d == [-1,0]: #left self.img = self.rot_center(self.img_org, 90) self.update_me = True class AIUnit(ImgShipRota): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="",initcolor = (255,157,23),**kwargs): self.initcolor = initcolor ImgShipRota.__init__(self,board,grid_x,grid_y,grid_w,grid_h,value,self.initcolor,**kwargs) self.unit_id = len(board.aiunits) self.prev_pos = [grid_x,grid_y] self.now_pos = [grid_x,grid_y] self.change_dir([[0,1],[1,0],[0,-1],[-1,0]]) def change_dir(self, possible): #possible_dirs = possible #[[0,1],[1,0],[0,-1],[-1,0]] self.move_dir = possible[random.randrange(len(possible))] class BoardBg(Unit): #def update(self,screen,color,screen_w,screen_h,grid_line_w): def __init__(self,board,grid_x=0,grid_y=0,grid_w=1,grid_h=1,value="", initcolor = (255,255,255),**kwargs): #self.initcolor = initcolor Unit.__init__(self,board,grid_x,grid_y,grid_w,grid_h,"",initcolor,**kwargs) self.rect.topleft = [0,0] #game,self.cl_grid_line,l.screen_w-l.menu_w,l.game_h,l.grid_line_w self.line_color = (240, 240, 240)#gb.cl_grid_line self.screen_w = self.board.x_count * self.board.scale # gb.l.screen_w-gb.l.menu_w self.screen_h = self.board.y_count * self.board.scale self.grid_line_w = 1 def update(self, board, **kwargs): Unit.update(self,board) #self.painting.fill(self.color) if self.board.draw_grid: for row in range(self.board.x_count+1): #draw vertical lines pygame.draw.line(self.painting,self.line_color,[row*self.board.scale,0],[row*self.board.scale,self.screen_h],self.grid_line_w) for column in range(self.board.y_count+1): #draw horizontal lines pygame.draw.line(self.painting,self.line_color,[0,column*self.board.scale],[self.screen_w,column*self.board.scale],self.grid_line_w) class PuzzleTable: def __init__(self): pass def clean(self): pass class Board: 'Initializes and creates an empty board with the sizes given, ie. a=Board(mainloop,10,10,50)' def __init__(self,mainloop,x_count=10,y_count=10,scale=8): self.mainloop = mainloop self.draw_grid = True self.check_laby = False self.laby_dir = -1 self.level_start(x_count,y_count,scale) self.s1 = s1 self.s2 = s2 def level_start(self,x_count,y_count,scale): self.grid = [] #square availability list self.ships = [] #list of movable objects on board self.units = [] #list of non moving units self.aiunits = [] self.ai_enabled = False self.x_count=x_count #number of columns self.y_count=y_count #number of rows self.scale = scale #number of pixels per grid unit self._create_board(x_count,y_count) self.active_ship = -1 self.board_changed = False # This is a list of 'sprites.' Each block in the program is # added to this list. The list is managed by a class called 'RenderPlain.' self.unit_list = pygame.sprite.LayeredUpdates() self.ship_list = pygame.sprite.LayeredUpdates() # This is a list of every sprite. All blocks and the player block as well. self.all_sprites_list = pygame.sprite.LayeredUpdates()#pygame.sprite.RenderPlain() #self.sprites_to_draw = pygame.sprite.RenderPlain() #scaling and creating font sizes: self.points = int(round((self.scale * 72 /96)*1.2,0)) #sizes= [0 1 2 3 4 5 6 7 8 9 10 11 11-hw 12-hw] #sizes = [1.0,1.25,1.5,1.75,2.0,2.25,2.5,2.75,3.0,3.5,4.0] sizes = [1.25,1.5,1.75,2.0,2.25,2.5,2.75,3.0,3.5,4.0,4.75,7] self.font_sizes = [pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(float(self.points)/float(sizes[i])))) for i in range(len(sizes))] #12+ handwritten h_sizes = [25,17,10,1.1,1.5,2,2.3,0.7] handwritten_sizes = [pygame.font.Font(os.path.join('fonts', 'pysiogameFonts', 'pysiogameHand.ttf'), (int(float(self.points)*float(h_sizes[i])))) for i in range(len(h_sizes))] self.font_sizes.extend(handwritten_sizes) #20 self.font_sizes.append(pygame.font.Font(os.path.join('fonts', 'pysiogameFonts', 'pysiogameLatinPrint.ttf'), (int(float(self.points)*float(30))))) #21 - extra large normal print self.font_sizes.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(self.points*2.0)))) self.font_sizes.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(self.points*1.5)))) #23 - mini clock sizes self.font_sizes.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(self.points/15)))) self.font_sizes.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(self.points/25)))) self.board_bg = BoardBg(self,0,0,x_count,y_count,"",(255,255,255)) self.unit_list.add(self.board_bg) self.all_sprites_list.add(self.board_bg) def update_layout(self,scale): pass def clean(self): self.unit_list.empty() self.ship_list.empty() self.all_sprites_list.empty() #self.sprites_to_draw.empty() del(self.ships) del(self.units) del(self.aiunits) del(self.unit_list) del(self.ship_list) del(self.all_sprites_list) #del(self.sprites_to_draw) def _create_board(self,sx,sy): 'Creates an empty board for the initialisation method' self.grid = [[0 for x in range(0,sx)] for y in range(0,sy)] def _reset_board(self): 'Sets all fields on Board to False' self.grid = [[0 for x in range(0,self.x_count)] for y in range(0,self.y_count)] def _set(self,x,y,grid_w=1,grid_h=1,value=1): 'Take/Reserve the position on board if True, or free position if False' 'Before using this method use the _isfree() method first check if all squares in question are available and than go back to each field and set as True' x2=x+grid_w y2=y+grid_h for i in range(x,x2): for j in range(y,y2): self.grid[j][i]=value def _isfree(self,x,y,grid_w=1,grid_h=1): 'check if the position is free and within board' x2=x+grid_w y2=y+grid_h #if position + size is within board if (0 <= x < x2 <= self.x_count) and (0 <= y < y2 <= self.y_count): for i in range(x,x2): for j in range(y,y2): if self.grid[j][i]==True: return False return True return False def add_unit(self, grid_x=0, grid_y=0, grid_w=1, grid_h=1, unit_class=Ship, value="A", color=(0,0,0), img_src='',font_size=0,frame_flow=[0],frame_count=1,row_data=[1,1]): 'adds a new unit to the board' if self._isfree(grid_x,grid_y,grid_w,grid_h): unit = unit_class(self,grid_x,grid_y,grid_w,grid_h,value,initcolor=color,img_src = img_src,font_size = font_size,frame_flow = frame_flow,frame_count=frame_count,row_data=row_data) if isinstance(unit, Ship): if isinstance(unit, AIUnit): self.aiunits.append(unit) else: self.ships.append(unit) #add a ship to the ship list self.ship_list.add(unit) #add the ship to the sprites list elif isinstance(unit, Obstacle): self.units.append(unit) self.unit_list.add(unit) self.all_sprites_list.add(unit) self._set(grid_x,grid_y,grid_w,grid_h) else: print('Sorry: position taken: (x:%d, y:%d, w:%d, h:%d), board size: %d x %d, game_id: %d, screen size: %d x %d' % (grid_x,grid_y,grid_w,grid_h,self.x_count,self.y_count,self.mainloop.m.active_game_id,self.mainloop.wn_size[0],self.mainloop.wn_size[1])) def add_door(self, grid_x=0, grid_y=0, grid_w=1, grid_h=1, unit_class=Door, value="", color=(0,0,0), img_src='', font_size = 0, door_alpha = True, frame_flow=[0], frame_count=1,row_data=[1,1]): #add a unit that will be drawn to the board but will not hold a square in the grid #this is usually a red square indicating where other squares should be dragged to complete the task unit = unit_class(self,grid_x,grid_y,grid_w,grid_h,value,initcolor=color,img_src = img_src,font_size = font_size,door_alpha = door_alpha,frame_flow=frame_flow,frame_count=frame_count,row_data=row_data) self.unit_list.add(unit) self.units.append(unit) self.all_sprites_list.add(unit) def move(self, ship_id, x, y, ai=False): 'move the ship, diagonal move possible only if two-step non diagonal move is possible' if ai == True: s = self.aiunits[ship_id] else: s = self.ships[self.active_ship] #check direction and move if fields in that direction are free #set out what squares need checking if move has been taken in each direction up = (s.grid_x, s.grid_y -1, s.grid_w, 1) down = (s.grid_x, s.grid_y + s.grid_h, s.grid_w,1) left = (s.grid_x - 1, s.grid_y, 1, s.grid_h) right = (s.grid_x + s.grid_w, s.grid_y, 1, s.grid_h) #assign 'area to check' to direction if x == 0 and y == -1: new_rect = up self.laby_dir = 2 elif x == 0 and y == 1: new_rect = down self.laby_dir = 3 elif x == -1 and y == 0: new_rect = left self.laby_dir = 1 elif x == 1 and y == 0: new_rect = right self.laby_dir = 0 #diagonal move: prepare the 2 step move alternatives to check against #alt1a -> alternative path 1 firt move: a, second move: b elif x <= -1 and y <= -1: #up-left alt1a = up alt1b = (s.grid_x - 1, s.grid_y-1, 1, s.grid_h) alt2a = left alt2b = (s.grid_x -1 , s.grid_y -1, s.grid_w, 1) elif x >= 1 and y <= -1: #up-right alt1a = up alt1b = (s.grid_x + s.grid_w, s.grid_y-1, 1, s.grid_h) alt2a = right alt2b = (s.grid_x+1, s.grid_y -1, s.grid_w, 1) elif x <= -1 and y >= 1: #down-left alt1a = down alt1b = (s.grid_x - 1, s.grid_y+1, 1, s.grid_h) alt2a = left alt2b = (s.grid_x-1, s.grid_y + s.grid_h, s.grid_w,1) elif x >= 1 and y >= 1: #down-right alt1a = down alt1b = (s.grid_x + s.grid_w, s.grid_y+1, 1, s.grid_h) alt2a = right alt2b = (s.grid_x+1, s.grid_y + s.grid_h, s.grid_w,1) mdir = [0,0] if x==0 or y==0: #standard move: check if positions are empty and move the unit if self._isfree(*new_rect): self._move_unit(ship_id,ai,x,y) else: if ai == False and s.audible: s2.play() elif x != 0 and y != 0: self.labi_dir = -1 #diagonal move simple path finder: check both alternatives in turn and move if possible #decreased number of checks to get the direction if self._isfree(*alt1a): #if move up or down possible change y in first alternative mdir[1]=y if self._isfree(*alt1b): #if move left or right possible change x in first alt. mdir[0]=x else: mdir[0]=0 elif self._isfree(*alt2a): #else if horizontal move possible change x first mdir[0]=x if self._isfree(*alt2b): #and if second move possible change y second mdir[1]=y else: mdir[1]=0 else: if ai == False and s.audible: s2.play() if mdir != [0,0]: self._move_unit(ship_id,ai,mdir[0],mdir[1]) def moved(self): pass #print("board - moved") def _move_unit(self, ship_id, ai, x, y): if ai == True: ship = self.aiunits[ship_id] else: ship = self.ships[ship_id] if self.check_laby == False or (self.check_laby == True and self.laby_dir > -1 and not self.mainloop.game_board.mylaby.get_cell(ship.grid_x , ship.grid_y).laby_doors[self.laby_dir]): self.laby_dir = -1 #remove ship from board grid - take off self._set(ship.grid_x,ship.grid_y,ship.grid_w,ship.grid_h,False) #change position of ship in ships list ship.grid_x += x ship.grid_y += y #place the ship back on board - land self._set(ship.grid_x,ship.grid_y,ship.grid_w,ship.grid_h,True) #update the sprite's position ship.rect.topleft = [ship.grid_x*self.scale+1,ship.grid_y*self.scale+1] self.board_changed = True if ai == False: self.moved() if ship.audible: s1.play() def _place_unit(self, ship_id, pos): ship = self.ships[ship_id] #remove ship from board grid - take off self._set(ship.grid_x,ship.grid_y,ship.grid_w,ship.grid_h,False) #change position of ship in ships list ship.grid_x = pos[0] ship.grid_y = pos[1] #place the ship back on board - land self._set(ship.grid_x,ship.grid_y,ship.grid_w,ship.grid_h,True) #update the sprite's position ship.rect.topleft = [ship.grid_x*self.scale+1,ship.grid_y*self.scale+1] def get_unit_id(self,x,y): for each_unit in self.units: if each_unit.grid_x <= x <= each_unit.grid_x + each_unit.grid_w-1 \ and each_unit.grid_y <= y <= each_unit.grid_y + each_unit.grid_h-1: return each_unit.unit_id def activate_ship(self,x,y): 'this only works on binary table' #unhighlight and repaint deactivated unit: if self.active_ship != -1: active = self.ships[self.active_ship] active.color = active.initcolor if active.outline_highlight: active.perm_outline_width = active.init_pow active.update_me = True #activate new unit for each_ship in self.ships: if each_ship.grid_x <= x <= each_ship.grid_x + each_ship.grid_w-1 \ and each_ship.grid_y <= y <= each_ship.grid_y + each_ship.grid_h-1: self.active_ship = each_ship.unit_id active = self.ships[self.active_ship] active.color = active.brighter if active.outline_highlight: active.perm_outline_width = 3 active.update_me = True return True self.active_ship = -1 return False @property def active_ship_pos(self): if self.active_ship > -1: ship = self.ships[self.active_ship] return (ship.grid_x,ship.grid_y) else: return (-1,-1) @property def active_val_len(self): if self.active_ship > -1: ship = self.ships[self.active_ship] return len(ship.value) else: return 0 def update_ships(self,circle_lock_pos,**kwargs): for each_ship in self.ships: """ if each_ship.unit_id == self.active_ship: each_ship.color = each_ship.brighter if each_ship.outline_highlight: each_ship.perm_outline_width = 3 else: each_ship.color = each_ship.initcolor if each_ship.outline_highlight: each_ship.perm_outline_width = each_ship.init_pow """ each_ship.update(self,point = circle_lock_pos) for each_unit in self.units: each_unit.update(self) for each_ai in self.aiunits: each_ai.update(self) self.board_bg.update(self)pysiogame-1.30.811/classes/colors.py0000644000175000017500000000073112201770063016257 0ustar tigertiger# -*- coding: utf-8 -*- class Color: def __init__(self): self.black = ( 0, 0, 0) self.white = (255, 255, 255) self.green = ( 0, 255, 0) self.red = (255, 0, 0) self.grid_line = (240, 240, 240) #self.menu_l = (206, 255, 137) #self.menu_r = (255, 179, 70) self.menu_l = (40,40,40) self.menu_r = (170,170,170) self.info = (70,70,70) pysiogame-1.30.811/classes/logoimg.py0000664000175000017500000000132112201770063016411 0ustar tigertiger# -*- coding: utf-8 -*- import pygame import os class LogoImg(pygame.sprite.Sprite): 'holds the logo in top left corner' def __init__(self): # Call the parent's constructor pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface([123,123]) self.image.fill((70,70,70)) self.rect = self.image.get_rect() self.rect.topleft = [0,0] self.img_src = "logo.png" self.img = self.image self.img_pos = (0,0) try: self.img = pygame.image.load(os.path.join('images', self.img_src)).convert_alpha() except: pass self.update() def update(self): self.image.blit(self.img, self.img_pos)pysiogame-1.30.811/classes/speaker.py0000644000175000017500000000575512201770063016423 0ustar tigertiger# -*- coding: utf-8 -*- import sys import threading import os import subprocess import signal class Speaker(threading.Thread): def __init__(self, lang, configo): threading.Thread.__init__(self) self.lang = lang self.enabled = True self.talkative = configo.settings[1] self.start_server() if sys.version_info < (3, 0): self.needs_encode = False else: self.needs_encode = True def start_server(self): if self.enabled: #prior to lang #voices = ["-s 190 -a 100 -p 75 -ven+m1 ", "-s 170 -a 100 -p 80 -ven+m2 ","-s 175 -a 100 -p 80 -ven+m3 ","-s 190 -a 100 -p 60 -ven+f1 ","-s 170 -a 100 -p 75 -ven+f2 ","-s 170 -a 100 -p 80 -ven+m2 "] #attr = voices[4] #attr = self.lang.voice cmd = ['espeak'] cmd.extend(self.lang.voice) try: self.process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except: self.enabled = False print("Failed to connect with espeak") #stdout and stderr only used to hide the messages from terminal def restart_server(self): self.stop_server() self.start_server() def run(self): pass def stop_server(self): if self.enabled: self.process.stdin.close() self.process.stdout.close() self.process.stderr.close() try: os.kill(self.process.pid, signal.SIGTERM) except OSError: print("Error killing the espeak process") def say(self,text,voice=1): if self.enabled and self.talkative: text = self.check_letter_name(text) text = text + "\n" if self.needs_encode: text = text.encode("utf-8") try: self.process.stdin.write(text) #self.process.stdin.write(text.encode()) self.process.stdin.flush() except: pass else: pass def check_letter_name(self,text): if sys.version_info < (3, 0): try: val = unicode(text, "utf-8") except: val = text if len(val) == 1 and len(self.lang.letter_names)>0: t = val.lower() for i in range(len(self.lang.alphabet_lc)): if t == unicode(self.lang.alphabet_lc[i],"utf-8"): text = self.lang.letter_names[i] break else: if len(text) == 1 and len(self.lang.letter_names)>0: t = text.lower() for i in range(len(self.lang.alphabet_lc)): if t == self.lang.alphabet_lc[i]: text = self.lang.letter_names[i] break return text pysiogame-1.30.811/classes/lang.py0000644000175000017500000001774212201770063015711 0ustar tigertiger# -*- coding: utf-8 -*- from __future__ import with_statement import os, sys import pickle # game003.py holds the GUI for language changing class Language(): def __init__(self, configo): self.config = configo #self.lang_settings = ["en_gb",1,0] #default settings self.alphabet_26 = ["en_gb","en_us","pt"] #self.loaded_settings = False #self.load_settings() """ self.flag_files = ["flag_uk.png","flag_us.png","flag_pl.png","flag_gr.png","flag_es.png","flag_pt.png","flag_it.png","flag_fr.png","flag_de.png","flag_ru.png","flag_fi.png"] self.lang_titles = ["English","American English","Polski","Ελληνικά","Español","Português","Italiano","Français","Deutsch","Русский","Suomalainen"] self.all_lng = ["en_gb", "en_us", "pl", "gr", "es","pt","it","fr","de","ru","fi"] self.ok_lng = ["en_gb", "en_us", "pl", "gr", "es","pt","it"] """ self.flag_files = ["flag_uk.png","flag_us.png","flag_es.png","flag_gr.png","flag_it.png", "flag_pl.png","flag_pt.png","flag_ru.png","flag_de.png","flag_fi.png","flag_fr.png"] self.lang_titles = ["English", "American English", "Español", "Ελληνικά", "Italiano", "Polski", "Português", "Русский", "Deutsch", "Suomalainen", "Français"] self.all_lng = ["en_gb", "en_us", "es", "gr","it", "pl" ,"pt","ru","de","fi","fr"] self.ok_lng = ["en_gb", "en_us", "es", "gr","it", "pl" ,"pt"] if self.config.settings[0] not in self.all_lng: self.config.reset_settings() self.lang = self.config.settings[0] self.get_lang_attr() def get_lang_attr(self): if self.lang == 'en_gb': import languages.en_gb import languages.word_lists.en_gb_di import languages.kbrd.en_gb import languages.kbrd.en_course #self.voice = ["-s 170","-a 100","-p 80","-ven+m1"] self.voice = ["-ven+m1"] #self.large_dict = languages.en_gb_long.my_dictionary self.di = languages.word_lists.en_gb_di.di self.lang_file = languages.en_gb self.kbrd = languages.kbrd.en_gb self.kbrd_course_mod = languages.kbrd.en_course elif self.lang == 'en_us': import languages.en_us import languages.word_lists.en_us_di import languages.kbrd.en_us import languages.kbrd.en_course #self.voice = ["-s 170","-a 100","-p 80","-ven-us+m1"] self.voice = ["-ven-us+m1"] self.di = languages.word_lists.en_us_di.di self.lang_file = languages.en_us self.kbrd = languages.kbrd.en_us self.kbrd_course_mod = languages.kbrd.en_course elif self.lang == 'pl': import languages.pl import languages.word_lists.pl_di import languages.kbrd.pl import languages.kbrd.pl_course #self.voice = ["-s 160","-a 100","-p 80","-vpl+m1"] #"-g 5", self.voice = ["-vpl+m1"] self.di = languages.word_lists.pl_di.di self.lang_file = languages.pl self.kbrd = languages.kbrd.pl self.kbrd_course_mod = languages.kbrd.pl_course elif self.lang == 'es': import languages.es import languages.word_lists.es_di #self.voice = ["-s 170","-a 100","-p 80","-ves+m1"] self.voice = ["-ves+m1"] self.di = languages.word_lists.es_di.di self.lang_file = languages.es elif self.lang == 'pt': import languages.pt import languages.word_lists.pt_di #self.voice = ["-s 170","-a 100","-p 80","-vpt-pt+m1"] self.voice = ["-vpt-pt+m1"] self.di = languages.word_lists.pt_di.di self.lang_file = languages.pt elif self.lang == 'fr': import languages.fr import languages.word_lists.fr_di #self.voice = ["-s 170","-a 100","-p 80","-vfr+m1"] self.voice = ["-vfr+m1"] self.di = languages.word_lists.fr_di.di self.lang_file = languages.fr elif self.lang == 'it': import languages.it import languages.word_lists.it_di #self.voice = ["-s 170","-a 100","-p 80","-vit+m1"] self.voice = ["-vit+m1"] self.di = languages.word_lists.it_di.di self.lang_file = languages.it elif self.lang == 'de': import languages.de import languages.word_lists.de_di #self.voice = ["-s 170","-a 100","-p 80","-vde+m1"] self.voice = ["-vde+m1"] self.di = languages.word_lists.de_di.di self.lang_file = languages.de elif self.lang == 'ru': import languages.ru import languages.word_lists.ru_di import languages.kbrd.ru import languages.kbrd.ru_course #self.voice = ["-s 130","-a 100","-p 80","-vru+m1"] self.voice = ["-vru+m1"] self.di = languages.word_lists.ru_di.di self.lang_file = languages.ru self.kbrd = languages.kbrd.ru self.kbrd_course_mod = languages.kbrd.ru_course elif self.lang == 'fi': import languages.fi import languages.word_lists.fi_di #self.voice = ["-s 170","-a 100","-p 80","-vfi+m1"] self.voice = ["-vfi+m1"] self.di = languages.word_lists.fi_di.di self.lang_file = languages.fi elif self.lang == 'gr': import languages.gr import languages.word_lists.gr_di import languages.kbrd.gr import languages.kbrd.gr_course #self.voice = ["-s 170","-a 100","-p 80","-vel+m1"] self.voice = ["-vel+m1"] self.di = languages.word_lists.gr_di.di self.lang_file = languages.gr self.kbrd = languages.kbrd.gr self.kbrd_course_mod = languages.kbrd.gr_course """ if self.lang in ["en_gb","en_us","pl","ru"]: pass #self.kbrd_course = self.kbrd_course_mod.course else: import languages.kbrd.en_gb import languages.kbrd.en_course self.kbrd = languages.kbrd.ru self.kbrd_course_mod = languages.kbrd.ru_course """ if self.lang not in ["en_gb","en_us","pl","ru","gr"]: import languages.kbrd.en_gb import languages.kbrd.en_course self.kbrd = languages.kbrd.en_gb self.kbrd_course_mod = languages.kbrd.en_course self.kbrd_course = self.kbrd_course_mod.course self.d = self.lang_file.d self.numbers = self.lang_file.numbers self.numbers2090 = self.lang_file.numbers2090 self.n2txt = self.lang_file.n2txt self.solid_names = self.lang_file.solid_names self.shape_names = self.lang_file.shape_names self.fruit = self.lang_file.fruit self.fruits_1 = self.lang_file.fruits_1 self.fruits_2 = self.lang_file.fruits_2 self.plural_rules = self.lang_file.plural_rules self.letter_names = self.lang_file.letter_names self.alphabet_lc = self.lang_file.alphabet_lc self.alphabet_uc = self.lang_file.alphabet_uc self.accents_lc = self.lang_file.accents_lc self.accents_uc = self.lang_file.accents_uc #self.unicodify() """ def load_settings(self): 'loads saved language settings from pickled file' try: #with open(os.path.join('save',"lang_config.txt"),"rb") as lng_file: #file_name = os.path.abspath(os.path.expanduser("~/.config/pysiogame/lang_config.txt")) file_name = self.config.file_lang with open(file_name,"rb") as lng_file: self.lang_settings = pickle.load(lng_file) self.loaded_settings = True except: self.lang_settings = ["en_gb",1,0,0,""] """pysiogame-1.30.811/classes/__init__.py0000644000175000017500000000012112201770063016506 0ustar tigertiger# -*- coding: utf-8 -*- __all__ = ["board","menu","info_bar","speaker","colors"] pysiogame-1.30.811/classes/menu.py0000644000175000017500000010560112201770063015724 0ustar tigertiger# -*- coding: utf-8 -*- from __future__ import with_statement import pygame import classes.game_driver as gd from game_boards import * import classes.colors import pickle import os, sys import pygame.mixer if sys.version_info < (2, 6): pass sounds = pygame.mixer sounds.init() sound_7 = '140508__blackstalian__click-sfx2.ogg' sound_9 = '140509__blackstalian__click-sfx1.ogg' s3 = sounds.Sound(os.path.join('sounds', sound_7)) s4 = sounds.Sound(os.path.join('sounds', sound_9)) cl = classes.colors.Color() class MenuCategory(pygame.sprite.Sprite): def __init__(self, cat_id, title, subtitle, cat_icon_size,img_src): # Call the parent's constructor pygame.sprite.Sprite.__init__(self) self.cat_id = cat_id if sys.version_info < (3, 0): try: self.title = unicode(title, "utf-8") self.subtitle = unicode(subtitle, "utf-8") except UnicodeDecodeError: self.title = title self.subtitle = subtitle else: self.title = title self.subtitle = subtitle self.color = (245, 0, 245) self.image = pygame.Surface([cat_icon_size, cat_icon_size]) self.image.fill(self.color) self.img_src = img_src if len(self.img_src) > 0: self.img = self.image self.img_pos = (0,0) try: self.img_org = pygame.image.load(os.path.join('icons', self.img_src)).convert() self.img_pos = (0,0) self.img = self.img_org except: pass #self.image.set_colorkey(self.color) # Make our top-left corner the passed-in location. The +1 is the margin self.rect = self.image.get_rect() def update(self): self.image.fill(self.color) if len(self.img_src) > 0: self.image.blit(self.img, self.img_pos) class MenuItem(pygame.sprite.Sprite): def __init__(self, item_id, cat_id, title, subtitle, constructor, icon_size, img_src,variant = 0): # Call the parent's constructor pygame.sprite.Sprite.__init__(self) self.item_id = item_id self.cat_id = cat_id self.game_constructor = constructor self.variant = variant if sys.version_info < (3, 0): try: self.title = unicode(title, "utf-8") self.subtitle = unicode(subtitle, "utf-8") except UnicodeDecodeError: self.title = title self.subtitle = subtitle else: self.title = title self.subtitle = subtitle self.color = (245, 0, 245) self.image = pygame.Surface([icon_size, icon_size]) self.img_src = img_src if len(self.img_src) > 0: self.img = self.image self.img_pos = (0,0) try: self.img_org = pygame.image.load(os.path.join('icons', self.img_src)).convert() self.img_pos = (0,0) self.img = self.img_org except: pass self.image.set_colorkey(self.color) # Make our top-left corner the passed-in location. The +1 is the margin self.rect = self.image.get_rect() def update(self): self.image.fill(self.color) if len(self.img_src) > 0: self.image.blit(self.img, self.img_pos) class MenuBookmark(pygame.sprite.Sprite): def __init__(self, bm_id, bm_icon_size, img_src): # Call the parent's constructor pygame.sprite.Sprite.__init__(self) self.bm_id = bm_id self.color = (245, 0, 245) self.image = pygame.Surface([61, 63]) self.image.fill(self.color) self.img_src = img_src if len(self.img_src) > 0: self.img = self.image self.img_pos = (0,0) try: self.img_org = pygame.image.load(os.path.join('icons', self.img_src)).convert() self.img_pos = (0,0) self.img = self.img_org except: pass self.image.set_colorkey(self.color) # Make our top-left corner the passed-in location. The +1 is the margin self.rect = self.image.get_rect() def update(self): self.image.fill(self.color) if len(self.img_src) > 0: self.image.blit(self.img, self.img_pos) class MenuScrollBtn(pygame.sprite.Sprite): def __init__(self, sb_id, sb_icon_size, img_src): # Call the parent's constructor pygame.sprite.Sprite.__init__(self) self.sb_id = sb_id self.color = (255, 255, 255) self.image = pygame.Surface(sb_icon_size) self.image.fill(self.color) self.img_src = img_src if len(self.img_src) > 0: self.img = self.image self.img_pos = (0,0) try: self.img_org = pygame.image.load(os.path.join('icons', self.img_src)).convert() self.img_pos = (0,0) self.img = self.img_org except: pass self.image.set_colorkey(self.color) # Make our top-left corner the passed-in location. The +1 is the margin self.rect = self.image.get_rect() def update(self): #self.image.fill(self.color) if len(self.img_src) > 0: self.image.blit(self.img, self.img_pos) class Menu: def __init__(self,mainloop): self.mainloop = mainloop self.lang = self.mainloop.lang self.create_lists() self.mouseenter = -1 self.mouseenter_cat = -1 self.l = None self.active_game_id = 0 self.game_started_id = -1 self.active_cat = 0 self.tab_game_id = 0 self.prev_cat = -1 self.game_constructor = game000.Board self.game_variant = 0 self.icon_size = 50 self.cat_icon_size = 50 self.x_margin = 6 #6 self.y_margin = 7 #5 #self.ttow = self.mainloop.game_board.layout.menu_l_w *2#width to trigger title only self.scroll_l = 0 self.scroll_r = 0 self.tab_l_scroll = 0 self.tab_r_scroll = 0 self.scroll_direction = 0 self.active_pane = None self.scroll_step = self.cat_icon_size + self.y_margin # This is a list of 'sprites.' Each block in the program is # added to this list. The list is managed by a class called 'RenderPlain.' self.categories_list = pygame.sprite.LayeredUpdates() self.games_in_current_cat = pygame.sprite.LayeredUpdates() self.bookmarks_list = pygame.sprite.LayeredUpdates() self.create_menu() def load_levels(self): if self.mainloop.config.save_levels: temp = dict() try: file_name = self.mainloop.config.file_level with open(file_name,"rb") as level_file: temp = pickle.load(level_file) #checking if there are any games that have not been saved in the pickle previously and adding them to the dictionary for key in self.saved_levels.keys(): if key not in temp.keys(): temp[key] = self.saved_levels[key] for innerkey in self.saved_levels[key].keys(): if innerkey not in temp[key].keys(): temp[key][innerkey] = self.saved_levels[key][innerkey] self.saved_levels = temp except: pass #print("Error loading level data") def save_levels(self): if self.mainloop.config.save_levels: try: file_name = self.mainloop.config.file_level self.commit_save(file_name) except: print('Sorry could not save levels...') def commit_save(self, file_name): with open(file_name,"wb") as level_file: pickle.dump(self.saved_levels, level_file) def create_lists(self): self.categories = [] self.games = [] self.games_current = [] self.bookmarks = [] self.scroll_btns = [] self.saved_levels = dict() def create_menu(self): self.add_categories() self.add_games() self.add_bookmark("","tab_l.png") self.categories_list.add(self.bookmarks[0]) self.categories_list.move_to_back(self.bookmarks[0]) self.add_bookmark("","tab_r.png") self.add_scroll_btns() self.update_scroll_pos() self.categories_list.add(self.scroll_btns[0]) self.categories_list.move_to_front(self.scroll_btns[0]) #reload level self.load_levels() def empty_menu(self): self.create_lists() self.categories_list.empty() self.games_in_current_cat.empty() self.bookmarks_list.empty() def lang_change(self): self.empty_menu() self.create_menu() self.change_cat(self.active_cat) def handle_menu_l(self,event): try: #this is to avoid errors with mouse events when mouse is over the menu when game is not yet created if event.type == pygame.MOUSEMOTION: pos = event.pos if self.mainloop.info.hidden == False and pos[0] < 124: self.mainloop.info.title_only() if self.x_margin < pos[0] < self.cat_icon_size + self.x_margin: if self.y_margin+self.l.misio_pos[3] < pos[1] < self.cat_h+self.l.misio_pos[3]: self.active_pane = 0; row = (pos[1]-3-self.l.misio_pos[3]-self.scroll_l) // (self.cat_icon_size + self.y_margin) if row != self.mouseenter_cat: self.mouseenter_cat = row self.mouseenter = -1 self.mainloop.info.title = self.categories[row].title self.mainloop.info.subtitle = self.categories[row].subtitle self.mainloop.redraw_needed[1] = True self.mainloop.redraw_needed[2] = True self.save_levels() else: self.reset_titles() if pos[1] > self.mainloop.size[1]-20:# and self.scroll_l == 0: self.scroll_direction = 1 elif self.l.misio_pos[3]-20 < pos[1] < self.l.misio_pos[3]+5:# and self.scroll_l < 0: self.scroll_direction = -1 else: self.scroll_direction = 0 else: self.reset_titles() elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: pos = event.pos #if y is within category size if self.x_margin < pos[0] < self.cat_icon_size + self.x_margin: if self.y_margin+self.l.misio_pos[3] < pos[1] < self.cat_h+self.l.misio_pos[3]+self.scroll_l: row = (pos[1]-3-self.l.misio_pos[3]-self.scroll_l) // (self.cat_icon_size + self.y_margin) self.active_cat = row self.tab_l_scroll = (self.scroll_l // self.scroll_step) s3.play() self.mainloop.redraw_needed[1] = True self.mainloop.redraw_needed[2] = True elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 4: self.scroll_menu(direction = -1, pane = 0) elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 5: self.scroll_menu(direction = 1, pane = 0) except: pass def handle_menu_r(self,event,mlw): try: if event.type == pygame.MOUSEMOTION: pos = event.pos #self.mainloop.info_bar.hide_buttons(a,b,c,d,e,f,g,h,i) if self.mainloop.info.hidden == False and pos[0] < 124: self.mainloop.info.title_only() if (mlw + self.x_margin) < pos[0] < (mlw + self.icon_size + self.x_margin): if self.y_margin+self.l.misio_pos[3] < pos[1] < self.game_h+self.l.misio_pos[3]: self.active_pane = 1 row = (pos[1]-3-self.l.misio_pos[3]-self.scroll_r) // (self.icon_size + self.y_margin) if row != self.mouseenter: self.mouseenter = row self.mouseenter_cat = -1 self.mainloop.info.title = self.games_current[row].title self.mainloop.info.subtitle = self.games_current[row].subtitle self.mainloop.redraw_needed[1] = True else: self.reset_titles() if pos[1] > self.mainloop.size[1]-20:# and self.scroll_r >= 0: self.scroll_direction = 1 elif self.l.misio_pos[3]-20 < pos[1] < self.l.misio_pos[3]+5:# and self.scroll_r < 0: self.scroll_direction = -1 else: self.scroll_direction = 0 else: self.reset_titles() elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: pos = event.pos if (mlw + self.x_margin) < pos[0] < (mlw + self.icon_size + self.x_margin): if self.y_margin+self.l.misio_pos[3] < pos[1] < self.game_h+self.l.misio_pos[3]: row = (pos[1]-3-self.l.misio_pos[3]-self.scroll_r) // (self.icon_size + self.y_margin) self.active_game_id = self.games_current[row].item_id self.tab_r_scroll = (self.scroll_r // self.scroll_step) self.tab_game_id = row self.game_constructor = self.games_current[row].game_constructor self.game_variant = self.games_current[row].variant s4.play() self.mainloop.score = 0 self.mainloop.redraw_needed = [True, True, True] elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 4: self.scroll_menu(direction = -1, pane = 1) elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 5: self.scroll_menu(direction = 1, pane = 1) except: pass def scroll_menu(self, direction = 0, pane = -1): if pane == -1: direction = self.scroll_direction pane = self.active_pane menu_height = self.mainloop.size[1]-(self.y_margin+self.l.misio_pos[3]) if direction != 0 and pane == 1: if self.game_h > menu_height: diff = self.game_h - menu_height #scroll the menu if (direction == 1 and -self.scroll_r < diff) or (direction == -1 and self.scroll_r < 0): self.scroll_r = self.scroll_r - self.scroll_step * direction self.tab_r_scroll = (self.scroll_r // self.scroll_step) self.mainloop.redraw_needed[2] = True self.mainloop.redraw_needed[1] = True elif direction != 0 and pane == 0: if self.cat_h > menu_height: diff = self.cat_h - menu_height #scroll from here if (direction == 1 and -self.scroll_l < diff) or (direction == -1 and self.scroll_l < 0): self.scroll_l = self.scroll_l - self.scroll_step * direction self.tab_l_scroll = (self.scroll_l // self.scroll_step) self.mainloop.redraw_needed[2] = True self.mainloop.redraw_needed[1] = True def reset_titles(self): self.mainloop.info.title = "" self.mainloop.info.subtitle = "" self.mainloop.redraw_needed[1] = True self.mainloop.redraw_needed[2] = True self.mouseenter = -1 self.mouseenter_cat = -1 def add_bookmark(self,title,img_src): new_bookmark = MenuBookmark(len(self.bookmarks),self.cat_icon_size,img_src) self.bookmarks.append(new_bookmark) def add_scroll_btn(self,img_src): new_scroll_btn = MenuScrollBtn(len(self.scroll_btns),[55,13],img_src) self.scroll_btns.append(new_scroll_btn) def add_scroll_btns(self): self.add_scroll_btn("arrow_l2.png") self.add_scroll_btn("arrow_r2.png") def update_scroll_pos(self): pos = [[9+self.x_margin,self.mainloop.size[1]-13],[9+self.x_margin,self.mainloop.size[1]-13]] i=0 for each_item in self.scroll_btns: each_item.rect.topleft = pos[i] i+=1 def add_category(self,title,subtitle,img_src): new_category = MenuCategory(len(self.categories),title,subtitle,self.cat_icon_size,img_src) self.categories.append(new_category) self.categories_list.add(new_category) def add_categories(self): self.add_category(self.lang.d["Info Category"],"","ico_c_00.png") #self.add_category(self.lang.d["Working with large numbers"],"","ico_g_9999.png") self.add_category(self.lang.d["Discover Letters"],"","ico_c_01.png") self.add_category(self.lang.d["Learn Words"],"","ico_c_02.png") self.add_category(self.lang.d["Maths"],self.lang.d["Numbers & Basic Operations"],"ico_c_03a.png") self.add_category(self.lang.d["Maths"]+" 2",self.lang.d["Basic Operations - exercises"],"ico_c_03.png") self.add_category(self.lang.d["Maths"]+" 3",self.lang.d["Sorting and Comparing"],"ico_c_04.png") self.add_category(self.lang.d["Working with large numbers"],"","ico_c_11.png") self.add_category(self.lang.d["Geometry"],"","ico_c_05.png") self.add_category(self.lang.d["Time"],"","ico_c_10.png") self.add_category(self.lang.d["Art"],"","ico_c_06.png") self.add_category(self.lang.d["Memory"],"","ico_c_07.png") self.add_category(self.lang.d["Games & Mazes"],"","ico_c_08.png") self.add_category(self.lang.d["Multiplayer"],"","ico_c_09.png") self.cat_h = len(self.categories)*(self.cat_icon_size+self.y_margin) def add_game(self,cat_id,constructor,title,subtitle,img_src,variant=0): new_game = MenuItem(len(self.games),cat_id,title,subtitle,constructor,self.icon_size,img_src,variant) self.games.append(new_game) #self.saved_levels[constructor] = 1 if constructor not in self.saved_levels: self.saved_levels[constructor] = dict() self.saved_levels[constructor][str(variant)] = 1 def add_games(self): 'creates all menu buttons' c_id = 0 self.add_game(c_id,game000.Board,self.lang.d["About."],self.lang.d["Game info..."],"ico_g_0000.png") self.add_game(c_id,game001.Board,self.lang.d["Credits"],"","ico_g_0001.png") self.add_game(c_id,game002.Board,self.lang.d["Credits"],self.lang.d["Translators"],"ico_g_0001.png") self.add_game(c_id,game003.Board,self.lang.d["Preferences"],"","ico_g_0002.png") #self.add_game(c_id,game067.Board,"Font Test","","ico_g_0000.png") #self.add_game(c_id,game056.Board,self.lang.d["Preferences"],"game056","ico_g_0000.png") #self.add_game(c_id,game058.Board,self.lang.d["TicTacToe"]+" 3",self.lang.d["multiline-tictactoe"],"ico_g_0808.png") #self.add_game(c_id,game060.Board,self.lang.d["Preferences"],"game060","ico_g_0000.png") c_id += 1 self.add_game(c_id,game037.Board,self.lang.d["English Alphabet"],self.lang.d["Letter Flashcards"],"ico_g_0100.png") #if self.mainloop.lang.lang in ['en_gb','en_us','gr','ru']: self.add_game(c_id,game017.Board,self.lang.d["Your Alphabet"],self.lang.d["Letter Flashcards"],"ico_g_0108.png") self.add_game(c_id,game068.Board,self.lang.d["Learn to Write"],self.lang.d["Trace Letters"],"ico_g_0109.png") self.add_game(c_id,game010.Board,self.lang.d["Learn to Write"],self.lang.d["Trace Letters"],"ico_g_0110.png") if self.mainloop.lang.lang == 'ru': self.add_game(c_id,game022.Board,self.lang.d["Learn to Write"],"русскими буквами","ico_g_0111.png") if self.mainloop.lang.lang == 'gr': self.add_game(c_id,game067.Board,self.lang.d["Learn to Write"],"Ελληνικά γράμματα","ico_g_0112.png") #if self.mainloop.lang.lang not in self.lang.alphabet_26: self.add_game(c_id,game014.Board,self.lang.d["Complete the ABC"],self.lang.d["English"],"ico_g_0103.png") self.add_game(c_id,game049.Board,self.lang.d["Complete the ABC"],self.lang.d["in your language"],"ico_g_0104.png") self.add_game(c_id,game047.Board,self.lang.d["Sorting Letters"],self.lang.d["Lowercase Letters"],"ico_g_0105.png") self.add_game(c_id,game048.Board,self.lang.d["Sorting Letters"]+" ",self.lang.d["Uppercase Letters"],"ico_g_0106.png") if self.mainloop.lang.lang in ["en_gb","en_us","pl","ru"] and self.mainloop.fs_size[1] > 440: self.add_game(c_id,game016.Board,self.lang.d["Keyboard Skills"],self.lang.d["Touch Typing"],"ico_g_0107.png") elif self.mainloop.fs_size[1] > 440: #and self.mainloop.lang.lang not in ["en_gb","en_us","pl","ru"]: if self.mainloop.lang.lang == 'gr': self.add_game(c_id,game077.Board,self.lang.d["Keyboard Skills"] + " - Ελληνικά",self.lang.d["Touch Typing"],"ico_g_0107.png") else: self.add_game(c_id,game016.Board,self.lang.d["Keyboard Skills"] + " - " + self.lang.d["English"],self.lang.d["Touch Typing"],"ico_g_0107.png") #self.add_game(c_id,game006.Board,self.lang.d["Sorting Letters"],self.lang.d["Lowercase Letters"],"ico_g_0000.png") #self.add_game(c_id,game007.Board,self.lang.d["Sorting Letters"]+" ",self.lang.d["Uppercase Letters"],"ico_g_0000.png") c_id += 1 self.add_game(c_id,game013.Board,self.lang.d["Word Builder"],"","ico_g_0200.png") self.add_game(c_id,game023.Board,self.lang.d["Word Maze"],self.lang.d["Collect all"],"ico_g_0201.png") self.add_game(c_id,game025.Board,self.lang.d["Word Maze + 4"],self.lang.d["Collect all"],"ico_g_0202.png") c_id += 1 self.add_game(c_id,game038.Board,self.lang.d["Numbers"],self.lang.d["Number Flashcards"],"ico_g_0300.png") self.add_game(c_id,game061.Board,self.lang.d["Number Spelling"],self.lang.d["Match numbers to their spelling"],"ico_g_0323.png",variant=0) self.add_game(c_id,game046.Board,self.lang.d["Learn to Count"],"","ico_g_0301.png",variant=0) self.add_game(c_id,game046.Board,self.lang.d["Learn to Count"],self.lang.d["Basic Addition"],"ico_g_0317.png",variant=1) self.add_game(c_id,game046.Board,self.lang.d["Learn to Count"],self.lang.d["Basic Subtraction"],"ico_g_0318.png",variant=2) self.add_game(c_id,game027.Board,self.lang.d["Shopping List"],"","ico_g_0302.png") self.add_game(c_id,game036.Board,self.lang.d["Plus or Minus"],"","ico_g_0303.png") self.add_game(c_id,game004.Board,self.lang.d["Multiplication Table"],self.lang.d["Find the product"],"ico_g_0306.png") self.add_game(c_id,game034.Board,self.lang.d["Multiplication Table"]+" ",self.lang.d["Find the multiplier"],"ico_g_0307.png") self.add_game(c_id,game035.Board,self.lang.d["Division"],"","ico_g_0308.png") self.add_game(c_id,game031.Board,self.lang.d["Multiplication Table"] +" ",self.lang.d["answer_enter"],"ico_g_0324.png") c_id += 1 self.add_game(c_id,game060.Board,self.lang.d["Maths Matching Game"],self.lang.d["Addition"],"ico_g_0319.png",variant=0)#2 self.add_game(c_id,game060.Board,self.lang.d["Maths Matching Game"],self.lang.d["Subtraction"],"ico_g_0320.png",variant=1)#3 self.add_game(c_id,game060.Board,self.lang.d["Maths Matching Game"],self.lang.d["Multiplication"],"ico_g_0321.png",variant=2)#4 self.add_game(c_id,game060.Board,self.lang.d["Maths Matching Game"],self.lang.d["Division"],"ico_g_0322.png",variant=3)#5 self.add_game(c_id,game039.Board,self.lang.d["Basic Operations"],self.lang.d["Addition"],"ico_g_0309.png",variant=0) self.add_game(c_id,game039.Board,self.lang.d["Basic Operations"],self.lang.d["Subtraction"],"ico_g_0310.png",variant=1) self.add_game(c_id,game039.Board,self.lang.d["Basic Operations"],self.lang.d["Multiplication"],"ico_g_0311.png",variant=2) self.add_game(c_id,game039.Board,self.lang.d["Basic Operations"],self.lang.d["Division"],"ico_g_0312.png",variant=3) self.add_game(c_id,game019.Board,self.lang.d["Basic Operations"]+" 2",self.lang.d["Addition"],"ico_g_0313.png",variant=0) self.add_game(c_id,game019.Board,self.lang.d["Basic Operations"]+" 2",self.lang.d["Subtraction"],"ico_g_0314.png",variant=1) self.add_game(c_id,game019.Board,self.lang.d["Basic Operations"]+" 2",self.lang.d["Multiplication"],"ico_g_0315.png",variant=2) self.add_game(c_id,game019.Board,self.lang.d["Basic Operations"]+" 2",self.lang.d["Division"],"ico_g_0316.png",variant=3) c_id += 1 self.add_game(c_id,game005.Board,self.lang.d["Sorting Numbers"],"","ico_g_0400.png") self.add_game(c_id,game011.Board,self.lang.d["Even or Odd"],"","ico_g_0405.png") self.add_game(c_id,game032.Board,self.lang.d["Number Comparison"],"","ico_g_0401.png") self.add_game(c_id,game033.Board,self.lang.d["Addition & Subtraction"],self.lang.d["Comparison"],"ico_g_0402.png") self.add_game(c_id,game026.Board,self.lang.d["Fractions"],self.lang.d["Comparison"],"ico_g_0403.png") self.add_game(c_id,game020.Board,self.lang.d["Decimal Fractions"],self.lang.d["Comparison"],"ico_g_0404.png") self.add_game(c_id,game056.Board,self.lang.d["Fraction Groups"],"","ico_g_0406.png",variant=0) #new game self.add_game(c_id,game056.Board,self.lang.d["Fraction Groups"]+" 2","","ico_g_0407.png",variant=1) #new game self.add_game(c_id,game056.Board,self.lang.d["Fraction Groups"]+" 3","","ico_g_0408.png",variant=2) #new game self.add_game(c_id,game056.Board,self.lang.d["Percentages"],"","ico_g_0409.png",variant=3) #new game self.add_game(c_id,game056.Board,self.lang.d["Ratios"],"","ico_g_0410.png",variant=4) #new game c_id += 1 self.add_game(c_id,game073.Board,self.lang.d["Columnar addition"],self.lang.d["Demonstration"],"ico_g_1100.png") self.add_game(c_id,game069.Board,self.lang.d["Columnar addition"],self.lang.d["DIY"],"ico_g_1101.png") self.add_game(c_id,game074.Board,self.lang.d["Columnar subtraction"],self.lang.d["Demonstration"],"ico_g_1102.png") self.add_game(c_id,game070.Board,self.lang.d["Columnar subtraction"],self.lang.d["DIY"],"ico_g_1103.png") self.add_game(c_id,game075.Board,self.lang.d["Long multiplication"],self.lang.d["Demonstration"],"ico_g_1104.png") self.add_game(c_id,game071.Board,self.lang.d["Long multiplication"],self.lang.d["DIY"],"ico_g_1105.png") self.add_game(c_id,game076.Board,self.lang.d["Long division"],self.lang.d["Demonstration"],"ico_g_1106.png") self.add_game(c_id,game072.Board,self.lang.d["Long division"],self.lang.d["DIY"],"ico_g_1107.png") c_id += 1 self.add_game(c_id,game009.Board,self.lang.d["Shapes"],self.lang.d["Shape Flashcards"],"ico_g_0500.png") self.add_game(c_id,game043.Board,self.lang.d["Solids"],self.lang.d["Solid Flashcards"],"ico_g_0501.png") self.add_game(c_id,game059.Board,self.lang.d["ShapeMaker"],self.lang.d["lets_see_what_you_draw"],"ico_g_0502.png") self.add_game(c_id,game024.Board,self.lang.d["ShapeMaker"],self.lang.d["test_yourself"],"ico_g_0503.png") c_id += 1 self.add_game(c_id,game066.Board,self.lang.d["Clock0"],self.lang.d["Play_w_clock"],"ico_g_1000.png") self.add_game(c_id,game063.Board,self.lang.d["Clock1"] + " - " + self.lang.d["Read time"],"","ico_g_1001.png") self.add_game(c_id,game064.Board,self.lang.d["Clock2"] + " - " + self.lang.d["Set time"],"","ico_g_1002.png") self.add_game(c_id,game065.Board,self.lang.d["Clock2"]+ " - " + self.lang.d["Set time"],self.lang.d["txt_only"],"ico_g_1003.png") self.add_game(c_id,game078.Board,self.lang.d["TimeMatching"],"","ico_g_1004.png") c_id += 1 self.add_game(c_id,game021.Board,self.lang.d["Paint"],"","ico_g_0600.png") self.add_game(c_id,game042.Board,self.lang.d["Colour Matching"],self.lang.d["label the colours"],"ico_g_0601.png") self.add_game(c_id,game062.Board,self.lang.d["Colour Matching"] + " 2","","ico_g_0602.png") self.add_game(c_id,game051.Board,self.lang.d["Paint Mixer"],self.lang.d["Mixing RYB"],"ico_g_0603.png") self.add_game(c_id,game052.Board,self.lang.d["Ink Mixer"],self.lang.d["Mixing CMY"],"ico_g_0605.png") self.add_game(c_id,game055.Board,self.lang.d["Find the colour of the circle"],self.lang.d["Adjust CMY"],"ico_g_0607.png") self.add_game(c_id,game053.Board,self.lang.d["Light Mixer"],self.lang.d["Mixing RGB"],"ico_g_0604.png") self.add_game(c_id,game054.Board,self.lang.d["Find the colour of the circle"],self.lang.d["Adjust RGB"],"ico_g_0606.png") c_id += 1 self.add_game(c_id,game012.Board,self.lang.d["Follow the Arrows"],self.lang.d["remember the directions"],"ico_g_0700.png") self.add_game(c_id,game006.Board,self.lang.d["Photographic Memory"],self.lang.d["Training"],"ico_g_0701.png") self.add_game(c_id,game007.Board,self.lang.d["Photographic Memory"]+" ",self.lang.d["Automatic Levels"],"ico_g_0702.png") self.add_game(c_id,game018.Board,self.lang.d["Match Animals Memory"],self.lang.d["Find pairs"],"ico_g_0703.png",variant=0) self.add_game(c_id,game018.Board,self.lang.d["Match Fruits"],self.lang.d["Find pairs"],"ico_g_0704.png",variant=1) self.add_game(c_id,game018.Board,self.lang.d["Match Vegetables"],self.lang.d["Find pairs"],"ico_g_0705.png",variant=2) self.add_game(c_id,game018.Board,self.lang.d["Match Numbers"],self.lang.d["Find pairs"],"ico_g_0706.png",variant=3) c_id += 1 self.add_game(c_id,game029.Board,self.lang.d["Mouse Maze"],self.lang.d["Let's have some cheese"],"ico_g_0800.png") self.add_game(c_id,game028.Board,self.lang.d["Sheep Maze"],self.lang.d["Find the rest"],"ico_g_0801.png") self.add_game(c_id,game060.Board,self.lang.d["Match Animals"],self.lang.d["Find all matching animals"],"ico_g_0811.png",variant=4)#0 self.add_game(c_id,game060.Board,self.lang.d["Match Animals"]+" 2",self.lang.d["Match animals to their shadows"],"ico_g_0812.png",variant=5)#1 self.add_game(c_id,game008.Board,self.lang.d["Match Animals"]+" 3",self.lang.d["help me find my shadow"],"ico_g_0813.png") self.add_game(c_id,game041.Board,self.lang.d["Connect"]+" ",self.lang.d["Balloons with threads"],"ico_g_0803.png") self.add_game(c_id,game040.Board,self.lang.d["Connect"],self.lang.d["Numbers"],"ico_g_0802.png") self.add_game(c_id,game050.Board,self.lang.d["Connect"],self.lang.d["Numbers"]+" 2","ico_g_0806.png") self.add_game(c_id,game015.Board,self.lang.d["Fifteen"],self.lang.d["With a Twist"],"ico_g_0804.png") self.add_game(c_id,game045.Board,self.lang.d["Fifteen"] + " 2",self.lang.d["With a Twist"],"ico_g_0807.png") self.add_game(c_id,game044.Board,self.lang.d["Sliced Images"],self.lang.d["Sliced Animals"],"ico_g_0808.png",variant=0) self.add_game(c_id,game044.Board,self.lang.d["Sliced Images"],self.lang.d["Sliced Fruits"],"ico_g_0809.png",variant=1) self.add_game(c_id,game044.Board,self.lang.d["Sliced Images"],self.lang.d["Sliced Numbers"],"ico_g_0810.png",variant=2) self.add_game(c_id,game030.Board,self.lang.d["Hit the Mole"],"","ico_g_0805.png") c_id +=1 self.add_game(c_id,game057.Board,self.lang.d["TicTacToe2"],self.lang.d["multiline-tictactoe"],"ico_g_0900.png") self.add_game(c_id,game058.Board,self.lang.d["TicTacToe3"],self.lang.d["multiline-tictactoe"],"ico_g_0901.png") def draw_menu(self,menu,menu_l,menu_r,l): mw = l.menu_r_w menu.fill((70,70,70)) menu_l.fill(cl.menu_l) menu_r.fill(cl.menu_r) pygame.draw.line(menu_l,cl.black,[l.menu_l_w-1,0],[l.menu_l_w-1,l.screen_h],1) pygame.draw.line(menu_r,cl.black,[l.menu_r_w-1,0],[l.menu_r_w-1,l.screen_h],1) pygame.draw.line(menu,(255,170,0),[l.menu_w-1,0],[l.menu_w-1,l.screen_h - l.info_bar_offset_h],1) #load games from new category if changed self.change_category(self.active_cat) x=self.x_margin y=self.y_margin+l.misio_pos[3]+self.scroll_l for each_item in self.categories: each_item.rect.topleft = [x, y] y += self.icon_size + self.y_margin each_item.update() x=self.x_margin y=self.y_margin+l.misio_pos[3]+self.scroll_r c=5 for each_item in self.games_current: each_item.rect.topleft = [x, y] each_item.update() y += self.cat_icon_size + self.y_margin c += 10 #if category with current game is shown show the tab, otherwise hide it (move it off screen) if self.games[self.active_game_id] in self.games_in_current_cat: bmr_top = (self.tab_game_id+self.tab_r_scroll)*(self.icon_size+self.y_margin)+2+l.misio_pos[3] else: bmr_top = -100 bml_top = (self.active_cat+self.tab_l_scroll)*(self.icon_size+self.y_margin)+2+l.misio_pos[3] self.bookmarks[0].rect.topleft = [2,bml_top-1] self.bookmarks[1].rect.topleft = [2,bmr_top-1] self.bookmarks[0].update() self.bookmarks[1].update() #Draw all spites self.categories_list.draw(menu_l) self.games_in_current_cat.draw(menu_r) for each in self.scroll_btns: each.update() def change_category(self, cat_id): if self.prev_cat != self.active_cat: self.change_cat(cat_id) def change_cat(self, cat_id): self.scroll_r = 0 self.tab_r_scroll = 0 self.games_in_current_cat.empty() self.games_current = [] for each_item in self.games: if each_item.cat_id == cat_id: self.games_in_current_cat.add(each_item) self.games_current.append(each_item) self.games_in_current_cat.add(self.bookmarks[1]) self.games_in_current_cat.move_to_back(self.bookmarks[1]) self.prev_cat = self.active_cat self.games_in_current_cat.add(self.scroll_btns[1]) self.games_in_current_cat.move_to_front(self.scroll_btns[1]) self.game_h = len(self.games_current)*(self.icon_size+self.y_margin)#-self.y_margin pysiogame-1.30.811/classes/extras.py0000644000175000017500000001171712201770063016272 0ustar tigertiger# -*- coding: utf-8 -*- import os, sys import subprocess import colorsys from classes.simple_vector import Vector2 import random #those color functions take 3 values in range 0 - 255 #h - hue #s - light s=0 white, s=255 full color #v - dark v=0 dark, v=255 full color def hsv_to_rgb(h,s,v): hsv = [h,s,v] hsv_clean = hsv for i in range(3): if hsv[i] <= 0: hsv_clean[i] = 0 elif hsv[i] >= 255: hsv_clean[i] = 1 else: hsv_clean[i] = float(hsv[i])/255.0 rgb = colorsys.hsv_to_rgb(*hsv_clean) return [int(each*255) for each in rgb] def rgb_to_hsv(r,g,b): #pass hsv = colorsys.rgb_to_hsv(r/255.0,g/255.0,b/255.0) hsv255 = [int(each*255) for each in hsv] return hsv255 def hsl_to_rgb(h,s,l): hsl = [h,l,s] hsl_clean = hsl for i in range(3): if hsl[i] <= 0: hsl_clean[i] = 0 elif hsl[i] >= 255: hsl_clean[i] = 1 else: hsl_clean[i] = float(hsl[i])/255.0 rgb = colorsys.hls_to_rgb(*hsl_clean) return [int(each*255) for each in rgb] def rgb_to_hsl(r,g,b): #pass hsl = colorsys.rgb_to_hls(r/255.0,g/255.0,b/255.0) hsl255 = [int(each*255) for each in hsl] hsl255 = [hsl255[0],hsl255[2],hsl255[1]] return hsl255 def unival(value): val = "" if sys.version_info < (3, 0): try: val = unicode(value, "utf-8") except UnicodeDecodeError: val = value except TypeError: val = value else: val = value return val def rr2(from1,to1,from2,to2,step=1): x = random.choice([-1,1]) if x == -1: a = random.randrange(from1,to1,step) else: a = random.randrange(from2,to2,step) return a def rr3(from1,to2, center, exclusion_zone,step=1): to1 = center-exclusion_zone from2 = center+exclusion_zone if from1 < to1 < from2 < to2: return rr2(from1, to1, from2, to2, step) def rand_safe_curve(point,width,height): x_space = width - point[0] y_space = height - point[1] if x_space > point[0]: max_x = point[0] else: max_x = x_space if y_space > point[1]: max_y = point[1] else: max_y = y_space x = rr3(point[0]-max_x,point[0]+max_x, point[0], max_x//2) y = rr3(point[1]-max_y,point[1]+max_y, point[1], max_y//2) return [x,y] def sqr(num): return num*num def cube(num): return num*num*num #points = [[200, 400], [300, 250], [450, 500], [500, 475]] #points = [[beginning], [beginning_midifier], [end],[end_midifier]] #points as Vector2 def DrawBezier(points): bezier_points = [] t = 0.0 while t < 1.02: # Increment through values of t (between 0 and 1) # Append the point on the curve for the current value of t to the list of Bezier points bezier_points.append(GetBezierPoint(points, t)) t += 0.02 return bezier_points def GetBezierPoint(points, t): p1 = points[0] * cube(1.0 - t) p2 = points[1] * (3 * sqr(1.0 - t) * t) p3 = points[2] * cube(t) p4 = points[3] * (3 * (1.0 - t) * sqr(t)) return p1 + p2 + p3 + p4 def inversions(p): lp = len(p) total_inversions = 0 for i in range(lp):#pick each number from left to right for j in range(i,lp):#and check it against any numbers to the right if p[i] > p[j]: #if any of them are greater than the number itself total_inversions += 1 return total_inversions def get_word_list(di): 'used in touch typing program' wl = [] for i in range(8): tmp = set() while len(tmp)<10: word = di[i][random.randrange(1,di[i][0])] tmp.add(word) wl.append(list(tmp)) return wl def first_upper(text): #word_list[i][k][0]) + word_list[i][k][1:] if sys.version_info < (3, 0): utf = unicode(text, "utf-8") #utf = text text = utf[0].upper() + utf[1:] text = text.encode("utf-8") else: text = text[0].upper() + text[1:] return text def word_typing_course(word_list): 'used in touch typing program to build a list of words to retype' #repeats =[3,4,5,6,7,8,9,10] repeats = [4,4,3,3,2,2,2,2] #repeats = [1,1,1,1,1,1,1,1] levels = [] for i in range(8): #tmp = [] words_line_1 = "" words_line_2 = "" for k in range(10): for j in range(repeats[i]): if k<5: words_line_1 += " "+word_list[i][k] else: if j == 0: words_line_2 += " " + first_upper(word_list[i][k]) else: words_line_2 += " "+word_list[i][k] if 0 <= k < 4: words_line_1 += "," elif k == 4: words_line_1 += "." elif 5 <= k < 10: words_line_2 += "." levels.append([[1,1],[words_line_1,words_line_2]]) return levels pysiogame-1.30.811/classes/layout.py0000664000175000017500000000576312201770063016307 0ustar tigertigerclass Layout: def __init__(self,mainloop, screen_w, screen_h,x_count=26,y_count=11,game_type="Board"): self.screen_w = screen_w self.screen_h = screen_h self.mainloop = mainloop self.game_type = game_type self.update_layout(x_count,y_count) def update_layout(self,x_count=0,y_count=0): self.x_count = x_count self.y_count = y_count self.menu_w = 124+5 #+5 - extra space to make the gap for tabs to look ok self.menu_a_w = self.menu_w #50+10+50+10+1 self.grid_line_w = 1 self.info_bar_h = 76 self.info_bar_offset_h_init = 76 self.menu_w_offset = 0 self.avail_game_w = self.screen_w - self.menu_w self.avail_game_h = self.screen_h - self.info_bar_h if self.game_type == "Board": #find the right size (scale) for a single square and calculate panels' sizes scale_x = (self.screen_w - self.menu_w - self.grid_line_w) // x_count scale_y = (self.screen_h - self.info_bar_h - self.grid_line_w) // y_count if scale_x < scale_y: self.scale = scale_x else: self.scale = scale_y self.menu_w_offset = (self.screen_w - self.menu_w) - self.scale*x_count - self.grid_line_w#(screen_w - menu_w) % x_count self.menu_w += self.menu_w_offset self.width=self.scale #width of a single square self.height=self.scale self.game_h = y_count*self.height+self.grid_line_w elif self.game_type == "Puzzle": self.game_h = self.screen_h - self.info_bar_h self.game_w = self.screen_w - self.menu_w self.info_bar_offset_h = self.info_bar_offset_h_init+ (self.screen_h - self.info_bar_offset_h_init) - self.game_h self.menu_pos = (0,0, self.menu_w, self.screen_h) self.menu_l_w = 62 self.menu_r_w = 62 #self.menu_w - self.menu_l_w self.menu_l_pos = (0,0, self.menu_l_w, self.screen_h) self.menu_r_pos = (self.menu_l_w,0, self.menu_r_w, self.screen_h) #self.game_pos = (self.menu_w,0, self.game_w, self.game_h) #changed self.game_pos = (self.menu_w,0, self.game_w, self.game_h) #changed self.misio_pos = (0,0, 123, 123) self.info_bar_offset_pos = (self.menu_w - self.menu_w_offset, self.game_h, self.game_w + self.menu_w_offset, self.info_bar_offset_h) self.info_bar_pos = (1, self.info_bar_offset_h - self.info_bar_h, self.game_w-1+self.menu_w_offset, self.info_bar_h) self.info_top = self.game_h + self.info_bar_pos[1] def draw_layout(self): pass def update_layout_fs(self,screen_w, screen_h,x_count,y_count): #update layout after switching from fullscreen to windowed view self.game_type = self.mainloop.game_board.game_type self.__init__(self.mainloop, screen_w, screen_h,x_count,y_count,self.game_type) self.mainloop.m.update_scroll_pos()pysiogame-1.30.811/classes/puzzle_board.py0000644000175000017500000000137212201770063017460 0ustar tigertiger# -*- coding: utf-8 -*- import pygame class PuzzleBoard(): def __init__(self,x_count,y_count): self.x_count = x_count self.y_count = y_count self.image = None self.create_puzzles(x_count,y_count) def create_puzzles(x_count,y_count): pass def update(self): #draw puzzles on board pass class PuzzlePiece(): def __init__(self): pass class MenuState(): def __init__(self,mainloop): pass def handle(self,event): pass def update(self): pass class SolvingState(): def __init__(self,mainloop): pass def handle(self,event): pass def update(self): pass pysiogame-1.30.811/classes/laby.py0000644000175000017500000001414312201770063015707 0ustar tigertiger# -*- coding: utf8 -*- """ Laby, par Mehdi Cherti 2010(mehdidc): - generation d'un labyrinthe - utilisation de l'algorithme astar pour trouver le a_path le plus court(selection de la destination avec la souris) Laby, 2010 by Mehdi Cherti(mehdidc): - Generation of a labyrinth - Use of astar algorithm to find the shortest path(selection of the destination with the mouse) #removed downloaded from: http://www.pythonfrance.com/codes/GENERATION-LABYRINTHE-AVEC-RECHERCHE-CHEMIN-PLUS-COURT-AVEC_51293.aspx Rebuild and translated by Ireneusz Imiolek """ from random import randint, choice import pygame from pygame.locals import * import classes.board import os from math import sqrt class def_const: def __getattr__(self,attr): return Const.__dict__[attr] def __setattr__ (self, attr,value): if attr in self.__dict__.keys (): raise Exception("Impossible to redefine the constant") else : self.__dict__[attr] = value def __str__ (self): return self.__dict.__str__ () const = def_const() """ definitions des constantes """ #colours const.white =(255, 255, 255) const.pink =(255, 0, 255) const.black =(0, 0, 0) const.yellow =(255, 255, 0) #directions const.right = 0 const.left = 1 const.up = 2 const.down = 3 class Point: def __init__(self,xy): self.x = xy[0] self.y = xy[1] """Laby Cell Class definition""" class Laby_cell: def __init__(self): self.state = False self.laby_doors = [True, True, True, True] #Right, Left, Up, Down """ Laby Class """ class laby: def __init__(self,w,h,sx=0,sy=0,scale=30): self.w = w self.h = h self.Laby_cells = [] self.wc = scale #const.wc self.hc = scale #const.hc self.sx = sx self.sy = sy self.displayed_once = True """ Laby_cells initialization for each Laby_cell, it initializes its position in the labyrinth """ for v in range(self.w*self.h): a = Laby_cell() a.x = v % self.w a.y = v // self.w self.Laby_cells.append(a) """ returns the Laby_cell corresponding to the position(x, y) """ def get_cell(self,x,y): return self.Laby_cells[x + y * self.w] """ return direction opposite to a direction """ def notdir(self,dir): if dir == const.right : return const.left if dir == const.left : return const.right if dir == const.up : return const.down if dir == const.down : return const.up """ generation of the labyrinth """ def generate_laby(self,x=-1,y=-1): if x==-1: x = randint(0,self.w-1) y = randint(0,self.h-1) cell_act = self.get_cell(x,y) if not cell_act.state : cell_act.state = True tab = [] if x+1=0 and not self.get_cell(x-1,y).state : tab.append((x-1,y,const.left)) if y-1>=0 and not self.get_cell(x,y-1).state : tab.append((x ,y-1,const.up)) if y+10: labi_grid[gy-1][gx]=1 if y0: labi_grid[gy][gx-1]=1 if x 1: text = self.font.render("%s" % (self.panel.level.lvl), 1, (255, 255, 255, 0)) textpos1 = text.get_rect(centerx=self.image.get_width()//2) self.image.blit(text, (textpos1[0],lvl_lift)) def update_title(self): #book 3 text = self.font3.render("%s" % (self.panel.title), 1, (255, 255, 255, 0)) text2 = self.font4.render("%s" % (self.panel.subtitle), 1, (255, 255, 255, 0)) #print text.rect.w tw1 = self.font3.size(self.panel.title)[0] tw2 = self.font4.size(self.panel.subtitle)[0] #textpos1 = text.get_rect(centerx=self.image.get_width()//2) #textpos2 = text2.get_rect(centerx=self.image.get_width()//2) if self.panel.title_space == 0 or tw1 < self.panel.title_space: self.image.blit(text, (0,2)) if tw2 < self.panel.title_space: self.image.blit(text2, (0,39)) def update(self): self.image.fill(self.color) if self.btntype == "imgbtn": self.image.blit(self.img, self.img_pos) elif self.btntype == "levels": self.update_levels() elif self.btntype == "titles": self.update_title() class InfoBar(): def __init__(self,mainloop): self.btns = [] self.hidden = False self.close_dialog = False self.mainloop = mainloop self.lang = self.mainloop.lang self.arrow_down = False self.title_space = 0 self.title = "" self.subtitle = "" self.btn_list = pygame.sprite.LayeredUpdates() #self.visible_btns = [ok,left_arrow,levels,right_arrow,close,refresh,titles,fast-forward,keyboard] #self.visible_btns = [1,1,1,1,1,1,1,0,0] self.reset_buttons() self.update_fonts() def update_fonts(self): self.fonts = [] points = int(round((60 * 72 /96),0)) if self.mainloop.lang.lang not in ["gr","ru","pl"]: sizes = [points, points//2, int(points/1.5), points//2] else: sizes = [points, points//2, int(points/1.9), int(points/2.6)] for i in range(4): self.fonts.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), sizes[i])) for each in self.btns: each.update_fonts() self.reset_titles() def new_game(self,game_board,screen): self.game_board = game_board self.level = self.game_board.level self.screen = screen self.height = self.game_board.layout.info_bar_h self.height_o = self.game_board.layout.info_bar_offset_h self.m_offset = self.game_board.layout.menu_w_offset self.width = self.game_board.layout.game_w + self.m_offset if len(self.btns) == 0: self.add_btns() self.layout_update() self.game_board.dialog.layout_update() def hover(self,pos,l): for btn in self.btns: if btn.rect.topleft[0] < (pos[0] - l.menu_w+self.m_offset + 1) < (btn.rect.topleft[0] + btn.width) and btn.rect.topleft[1] < (pos[1] - l.info_top) < (btn.rect.topleft[1] + btn.height): if btn.hasimg: self.mainloop.redraw_needed[1] = True return btn return False def handle(self,event,layout,mainloop): if event.type == pygame.MOUSEBUTTONDOWN: # Change the x/y screen coordinates to grid coordinates pos = event.pos btn = self.hover(pos,layout) #if left button pressed: if event.button == 1: if btn != False: if btn.btn_id == 0: btn.img = btn.img_2 self.game_board.check_result() elif btn.btn_id == 1: self.level.leveldown() if self.level.lvl == 1: btn.img = btn.img_2 elif btn.btn_id == 3: self.level.levelup() if self.level.lvl == self.level.lvl_count: btn.img = btn.img_2 elif btn.btn_id == 4: #clicked on close button if self.close_dialog == True: mainloop.done = True else: self.sure_to_close() elif btn.btn_id == 5: self.level.load_level() s4.play() elif btn.btn_id == 7: self.level.chapter_down() if self.level.lvl == 1: btn.img = btn.img_2 elif btn.btn_id == 8: self.level.chapter_up() if self.level.lvl == self.level.lvl_count: btn.img = btn.img_2 elif btn.btn_id == 9: self.arrow_down = True self.mainloop.game_board.direction[0] = -1 elif btn.btn_id == 10: self.arrow_down = True self.mainloop.game_board.direction[0] = 1 elif btn.btn_id == 11: self.arrow_down = True self.mainloop.game_board.direction[1] = -1 elif btn.btn_id == 12: self.arrow_down = True self.mainloop.game_board.direction[1] = 1 if self.arrow_down: self.mainloop.game_board.check_direction_kdown() elif event.type == pygame.MOUSEBUTTONUP: if self.arrow_down: self.arrow_down = False self.mainloop.game_board.direction = [0,0] self.mainloop.game_board.check_direction_kup() elif event.type == pygame.MOUSEMOTION: if self.mainloop.info.title != self.mainloop.m.games[self.mainloop.m.active_game_id].title: self.reset_titles() if self.hidden == True: if self.close_dialog == False: self.buttons_restore() pos = event.pos btn = self.hover(pos,layout) if btn != False: if btn.hasimg: if not (((btn.btn_id == 1 or btn.btn_id == 7) and self.level.lvl == 1) or ((btn.btn_id == 3 or btn.btn_id == 8) and self.level.lvl == self.level.lvl_count) or (btn.btn_id == 0 and self.game_board.changed_since_check == False)): self.resetbtns() btn.img = btn.img_1 #self.mainloop.redraw_needed[1] = True else: self.resetbtns() self.close_dialog = False def reset_titles(self): if self.close_dialog == False: #book 1 self.title = self.mainloop.m.games[self.mainloop.m.active_game_id].title self.subtitle = self.mainloop.m.games[self.mainloop.m.active_game_id].subtitle self.mainloop.redraw_needed[1] = True self.mainloop.m.mouseenter = -1 self.mainloop.m.mouseenter_cat = -1 def resetbtns(self): for btn in self.btns: if btn.hasimg: btn.img = btn.img_2 def add_btn(self, panel, pos_x, pos_y, btn_size_x, btn_size_y, btntype="imgbtn", img_src_1="", img_src_2="", img_src_3="", rev=False): new_button = Button(panel, pos_x, pos_y, btn_size_x, btn_size_y, btntype, img_src_1, img_src_2,img_src_3, rev) self.btns.append(new_button) self.btn_list.add(new_button) def add_btns(self): self.add_btn(self,122,5,84,66,"imgbtn","info_ok1.png", "info_ok2.png", "info_ok3.png") self.add_btn(self,self.width-318,5,64,66,"imgbtn","info_arrow1.png", "info_arrow2.png") self.add_btn(self,self.width-253,5,74,66,"levels")#level number label self.add_btn(self,self.width-178,5,64,66,"imgbtn","info_arrow1.png","info_arrow2.png","",True) self.add_btn(self,self.width-71,5,66,66,"imgbtn","info_close1.png","info_close2.png") self.add_btn(self,222,5,63,66,"imgbtn","info_refresh1.png","info_refresh2.png") title_width = self.width #-303 - (168+5+20)-5 self.add_btn(self,300,5,title_width,66,"titles") self.add_btn(self,self.width-351,5,33,66,"imgbtn","info_lvls1.png","info_lvls2.png") self.add_btn(self,self.width-113,5,33,66,"imgbtn","info_lvls1.png","info_lvls2.png","",True) self.add_btn(self,5,2,34,72,"imgbtn","info_k_lr1.png","info_k_lr2.png") self.add_btn(self,78,2,34,72,"imgbtn","info_k_lr1.png","info_k_lr2.png","",True) self.add_btn(self,41,2,35,35,"imgbtn","info_k_up1.png","info_k_up2.png") self.add_btn(self,41,2+35+2,35,35,"imgbtn","info_k_down1.png","info_k_down2.png") #add a layer of solid colour behind right-aligned buttons self.add_btn(self,self.width-323,5,323,66,"btn_bg") self.btn_list.move_to_back(self.btns[13]) self.btn_list.move_to_back(self.btns[6]) def layout_update(self): self.btns[1].rect.left = self.width-318 self.btns[2].rect.left = self.width-253 self.btns[3].rect.left = self.width-178 self.btns[4].rect.left = self.width-71 self.btns[7].rect.left = self.width-351 self.btns[8].rect.left = self.width-113 self.btns[13].rect.left = self.width-318 self.reset_alignment() self.check_btn_tops() def title_only(self): self.hide_buttons(0,0,0,0,0,0,1,0,0) self.mainloop.redraw_needed[1] = True self.hidden = True #self.btn_list.move_to_back(self.btns[13]) self.btn_list.move_to_front(self.btns[6]) self.layout_update() def sure_to_close(self): self.hide_buttons(0,0,0,0,1,0,1,0,0) self.mainloop.redraw_needed[1] = True self.hidden = True self.close_dialog = True #self.close_dialog = False self.title = classes.extras.unival(self.lang.d["close_confirm"]) self.subtitle = "" s5.play() self.layout_update() def buttons_restore(self): a = self.mainloop.game_board.vis_buttons #book 4 """ if self.mainloop.size[0] < 1000 and sum(a) > 3: self.hide_buttons(a[0],a[1],a[2],a[3],a[4],a[5],0,a[7],a[8]) else: """ self.hide_buttonsa(a) self.mainloop.redraw_needed[1] = True self.hidden = False #self.btn_list.move_to_back(self.btns[13]) self.btn_list.move_to_back(self.btns[6]) self.layout_update() def align_to_left(self): if self.visible_btns[8] == 0: if self.visible_btns[0] == 0 and self.visible_btns[5] == 1: #self.btns[0].rect.left = 5 self.btns[5].rect.left = 5 self.btns[6].rect.left = 78 elif self.visible_btns[0] == 0 and self.visible_btns[5] == 0: self.btns[6].rect.left = 5 elif self.visible_btns[0] == 1 and self.visible_btns[5] == 0: self.btns[0].rect.left = 5 self.btns[6].rect.left = 105 else: if self.visible_btns[0] == 0 and self.visible_btns[5] == 1: self.btns[5].rect.left = 142 #5+117+20 self.btns[6].rect.left = 215 #78+117+20 elif self.visible_btns[0] == 0 and self.visible_btns[5] == 0: self.btns[6].rect.left = 142 #5+117+20 elif self.visible_btns[0] == 1 and self.visible_btns[5] == 0: self.btns[0].rect.left = 142 #5+117+20 self.btns[6].rect.left = 242 #105+117+20 def reset_alignment(self): if self.visible_btns[7] == 0: pass #self.btns[1].rect.left = self.width-303 #self.btns[2].rect.left = self.width-233 #self.btns[3].rect.left = self.width-153 if self.visible_btns[8] == 0: self.btns[0].rect.left = 5 self.btns[5].rect.left = 105 self.btns[6].rect.left = 183 else: self.btns[0].rect.left = 122 self.btns[5].rect.left = 222 self.btns[6].rect.left = 300 def align_to_right(self): if self.visible_btns[7] == 1: self.btns[1].rect.left = self.width-318 self.btns[2].rect.left = self.width-253 self.btns[3].rect.left = self.width-178 else: self.btns[1].rect.left = self.width-288 self.btns[2].rect.left = self.width-223 self.btns[3].rect.left = self.width-148 def hide_buttons(self,a,b,c,d,e,f,g,h,i): self.visible_btns = [a,b,c,d,e,f,g,h,i] def hide_buttonsa(self, a): self.visible_btns = a def reset_buttons(self): self.visible_btns = [1,1,1,1,1,1,1,0,0] def check_btn_tops(self): # 0 1 2 3 4 5 6 7 8 #self.visible_btns = [ok,left_arrow,levels,right_arrow,close,refresh,titles, fast forward, keyboard] #self.visible_btns = [1,1,1,1,1,1,1,0,0] #if sum(self.visible_btns) < 7: vb = self.visible_btns for i in range(9): if vb[i]==0: if i < 7: self.btns[i].rect.top = -200 elif i==7: self.btns[7].rect.top = -200 self.btns[8].rect.top = -200 else: self.btns[9].rect.top = -200 self.btns[10].rect.top = -200 self.btns[11].rect.top = -200 self.btns[12].rect.top = -200 else: if i < 7: self.btns[i].rect.top = 5 elif i==7: self.btns[7].rect.top = 5 self.btns[8].rect.top = 5 else: self.btns[9].rect.top = 2 self.btns[10].rect.top = 2 self.btns[11].rect.top = 2 self.btns[12].rect.top = 39 if vb[0] == 0 or vb[5] == 0 or vb[8] == 0: self.align_to_left() if vb[7] == 0: self.align_to_right() #adjusting the position of the background strip behind the right-aligned buttons if vb[1:4] == [0,0,0] and vb[7] == 0: self.btns[13].rect.left = self.width-71 -5 elif vb[7] == 1: self.btns[13].rect.left = self.width-351 -5 elif vb[1] == 1 and vb[7] == 0: self.btns[13].rect.left = self.width-288-5 elif vb[1] == 0 and vb[2] == 1: self.btns[13].rect.left = self.width-223-5 else: self.btns[13].rect.left = self.width - 5 #book 2 #title space self.title_space = self.btns[13].rect.left - self.btns[6].rect.left #print self.title_space def draw(self,screen,screen2): #draw info bar screen.fill((70,70,70)) screen2.fill((70,70,70)) #pygame.draw.line(screen2,((255,255,255)),[0,0],[0,self.height_o],1) ##pygame.draw.line(screen2,((255,170,0)),[0,0],[self.game_board.layout.game_w,0],1) pygame.draw.line(screen2,((255,170,0)),[self.game_board.layout.menu_w_offset-1,0],[self.game_board.layout.game_w+self.game_board.layout.menu_w_offset,0],1) for each_item in self.btns: each_item.update() self.btn_list.draw(screen) pysiogame-1.30.811/classes/level_controller.py0000644000175000017500000001174012201770063020332 0ustar tigertiger# -*- coding: utf-8 -*- import gc import os, sys import random import pygame.mixer sounds = pygame.mixer sounds.init() sound_9 = '140511__blackstalian__click-sfx7.ogg' sound_2 = '146731__fins__game-fail.ogg' s4 = sounds.Sound(os.path.join('sounds', sound_9)) s5 = sounds.Sound(os.path.join('sounds', sound_2)) #file initialising level control class Level: def __init__(self,board,mainloop,gpl,lvl_count): self.game_board = board self.mainloop = mainloop self.name = self.mainloop.user_name self.prev_lvl = -1 #used to check if level changed self.games_per_lvl = gpl #number of games to play in order to level up self.lvl_count = lvl_count #number of levels self.restart() def restart(self): self.lvl = 1 #current level self.game_step = 1 #used to store number of games played in this level def levelup(self): if self.lvl < self.lvl_count: self.lvl += 1 self.load_level_plus() def leveldown(self): if self.lvl > 1: self.lvl -= 1 self.load_level_plus() def chapter_up(self): chs = self.game_board.chapters lch = len(chs) if lch > 1: current_chapter = self.get_current_chapter(chs,lch) if current_chapter < lch-1: self.lvl = chs[current_chapter+1] self.load_level_plus() def chapter_down(self): chs = self.game_board.chapters lch = len(chs) if lch > 1: current_chapter = self.get_current_chapter(chs,lch) if self.lvl > chs[current_chapter] > 0: self.lvl = chs[current_chapter] self.load_level_plus() elif chs[current_chapter] == self.lvl > 1: self.lvl = chs[current_chapter-1] self.load_level_plus() def get_current_chapter(self,chs,lch): if self.lvl == self.lvl_count: return lch-1 elif self.lvl == 1: return 0 else: for i in range(0,lch-1): if chs[i] <= self.lvl < chs[i+1]: return i return None def update_level_dict(self): saved_levels = self.game_board.mainloop.m.saved_levels active_item = self.game_board.mainloop.m.games[self.game_board.mainloop.m.active_game_id] saved_levels[active_item.game_constructor][str(active_item.variant)] = self.lvl def welcome(self): pass def game_over(self,tts=""): #self.load_level() if tts=="": self.game_board.say(self.d["Game Over!"],6) else: self.game_board.say(tts,6) self.dialog_type = 1 self.game_step -= 1 self.game_board.show_msg = True self.game_board.mainloop.redraw_needed[0] = True def game_won(self): #print("Congratulations you won the game") self.game_board.say(self.d["Congratulations! Game Completed."],6) self.restart() self.game_step = 0 self.load_level() self.dialog_type = 0 self.game_board.show_msg = True self.game_board.mainloop.score = 0 def try_again(self, silent = False): self.mainloop.info.btns[0].img = self.mainloop.info.btns[0].img_3 self.game_board.changed_since_check = False if silent: pass s5.play() #self.game_board.say("Not really",6) def next_board(self,tts=""): self.game_board.changed_since_check = False self.game_board.mainloop.redraw_needed[0] = True if self.game_step < self.games_per_lvl: if tts=="": #pick a praise phrase index = random.randrange(0,len(self.d["Great job!"])) praise = self.d["Great job!"][index] self.game_board.say(praise,6) else: self.game_board.say(tts,6) self.dialog_type = 0 self.game_board.show_msg = True else: if self.lvl < self.lvl_count: #self.levelup() self.game_board.say(self.d["Perfect! Level completed!"],6) self.dialog_type = 0 self.game_board.show_msg = True else: self.game_won() def next_board_load(self,tts=""): if self.game_step < self.games_per_lvl: self.game_step += 1 self.load_level() else: if self.lvl < self.lvl_count: self.levelup() else: pass #self.game_won() def load_level(self): self.update_level_dict() self.game_board.create_game_objects(self.lvl) gc.collect() if self.game_board.game_type == "Board": self.game_board.board.board_bg.update_me = True self.game_board.mainloop.redraw_needed = [True, True, True] def load_level_plus(self): self.game_step = 1 self.load_level() s4.play()pysiogame-1.30.811/classes/dialog.py0000664000175000017500000000505012201770063016216 0ustar tigertiger# -*- coding: utf-8 -*- import os import pygame class Dialog: def __init__(self,game_board): self.lines = ["CONGRATULATIONS!!!", "YOU HAVE COMPLETED", "THIS LEVEL"] self.lines_game_over = ["GAME OVER!!!"] self.game_board = game_board self.color = (70,70,70) if self.game_board.lang.lang in ['en_gb','en_us']: self.img_src = "congrats.jpg" else: self.img_src = "congratsx.jpg" self.img_src2 = "game_over.jpg" points = int(round((60 * 72 /96)*1.5,0)) self.font = pygame.font.Font(None, (points)) self.layout = game_board.layout self.layout_update() self.level = game_board.level def layout_update(self): self.width = self.layout.game_w self.height = self.layout.game_h self.image = pygame.Surface([self.width, self.height]) self.image.fill(self.color) self.rect = self.image.get_rect() self.rect.topleft = [0, 0] self.img = pygame.image.load(os.path.join('images', self.img_src)).convert() self.img2 = pygame.image.load(os.path.join('images', self.img_src2)).convert() #img2 has the same size img_pos_x = self.img.get_rect(centerx=self.image.get_width()//2) img_pos_y = self.img.get_rect(centery=self.image.get_height()//2) self.img_pos = (img_pos_x[0],img_pos_y[1]) def image_swap(self,img_src): pass def display_lines(self, lines): y_pos = 190 for each in lines: text = self.font.render("%s" % (each), 1, (0, 0, 0, 0)) textpos = text.get_rect(centerx=self.image.get_width()//2) self.image.fill((255,255,255)) self.image.blit(text, (textpos[0],y_pos)) y_pos += 70 """ def display_game_over(self): y_pos = 190 for each in self.lines_game_over: text = self.font.render("%s" % (each), 1, (255, 255, 255, 0)) textpos = text.get_rect(centerx=self.image.get_width()//2) self.image.blit(text, (textpos[0],y_pos)) y_pos += 70 """ def update(self,screen): self.image.fill(self.color) if self.level.dialog_type == 0: self.image.blit(self.img, (self.img_pos)) elif self.level.dialog_type == 1: self.image.blit(self.img2, (self.img_pos)) elif self.level.dialog_type == 2: pass #self.display_lines(self.lines_game_over) screen.blit(self.image, (0,0))pysiogame-1.30.811/classes/game_driver.py0000644000175000017500000003555312201770063017254 0ustar tigertiger# -*- coding: utf-8 -*- import pygame import classes.board import random import colorsys import os import classes.level_controller import classes.layout import classes.dialog class GameBase: def __init__(self): self.screen_tick = 0 #screen frame count self.screen_speed = 3 #execute every 3 frames self.move_tick = 0 # object motion frame count self.move_speed = 5 # move every 3 frames self.ai_enabled = False self.ai_speed = 10 # move every ai_speed frames self.ai_tick = 0 #ai motion frame count self.show_msg = False self.auto_checking = False self.ships_count = 0 def game_restart(self,screen): pass def handle(self, event): pass def display(self, screen): pass class BoardGame(GameBase): def __init__(self,mainloop,speaker,config,screen_w,screen_h,x_count,y_count): GameBase.__init__(self) self.mainloop = mainloop self.speaker = speaker self.lang = self.mainloop.lang self.level.d = self.lang.d self.d = self.mainloop.lang.d self.config = config self.move = False # used to start moving the square when pressed self.direction = [0,0] self.ship_id = -1 self.drag = False #used to control draging objects around self.gridpos_now_top = (-1,-1) self.gridpos_prev_top = (-1,-1) self.x_diff = (-1,-1) self.y_diff = (-1,-1) self.circle_lock_pos = (0,0) self.game_type = "Board" self.layout = classes.layout.Layout(mainloop, screen_w, screen_h,x_count,y_count, game_type = self.game_type) self.dialog = classes.dialog.Dialog(self) self.screen_w=self.layout.screen_w self.screen_h=self.layout.screen_h self.mainloop.info.reset_buttons() self.changed_since_check = True self.mouse_entered_new = False self.active_game = self.mainloop.m.games[self.mainloop.m.active_game_id] #self.saved_lvl = self.mainloop.m.saved_levels #self.saved_lvl[self.active_game.constructor] self.level.lvl = self.mainloop.m.saved_levels[self.active_game.game_constructor][str(self.active_game.variant)] #self.level.lvl = #if one game has more than one category of tasks on different levels - the beginning of a category #can be marked on chapter list and jumped between with right click on the next level button self.chapters = [1] #create game board self.board = classes.board.Board(self.mainloop,self.layout.x_count,self.layout.y_count,self.layout.scale) self.create_game_objects() self.len_ships = len(self.board.ships) self.board.all_sprites_list.move_to_back(self.board.board_bg) self.board.board_bg.update(self.board)#in case colour of background changed during game creation self.movingsprites = pygame.sprite.RenderPlain((self.board.ship_list)) self.staticsprites = pygame.sprite.RenderPlain((self.board.unit_list)) self.cl_grid_line = (240, 240, 240) try: if self.mainloop.info.hidden == True: self.mainloop.info.title_only() except: pass #to make sure game gets updated after starting #self.mainloop.redraw_needed[0] = True self.mainloop.redraw_needed = [True,True,True] def board_layout_update(self): self.screen_w=self.layout.screen_w self.screen_h=self.layout.screen_h self.board.scale = self.layout.scale def say(self,text,voice="1"): self.speaker.say(text,voice) def get_x_count(self,y_count,even=None): 'method used to calculate the number of horizontal squares needed' 'to fill all available area making games wider on wide screens' 'it may make games a little bit harder on larger screens,' 'patches my mistake to make this game optimized for 1024x786 screens only' scale = self.layout.avail_game_h // y_count x_count = self.layout.avail_game_w // scale if even == None: #if number of squares does not matter make it fill whole width rather than height return x_count+1 else: m = x_count % 2 if even == True and m == 0 or even == False and m == 1: #if the number we have is the number we need -> return it return x_count else: #else: increase it to make it match the criteria set (why in- and not decrease -> see: even == None) return x_count+1 def get_y_count(self,x_count,even=None): 'method used to calculate the number of horizontal squares needed' 'to fill all available area making games wider on wide screens' 'it may make games a little bit harder on larger screens,' 'patches my mistake to make this game optimized for 1024x786 screens only' scale = self.layout.avail_game_w // x_count y_count = self.layout.avail_game_h // scale if even == None: #if number of squares does not matter make it fill whole width rather than height return y_count+1 else: m = y_count % 2 if even == True and m == 0 or even == False and m == 1: #if the number we have is the number we need -> return it return y_count else: #else: increase it to make it match the criteria set (why in- and not decrease -> see: even == None) return y_count+1 def outline_all(self,color,width,units=True,ships=True): #mark to draw outline around all units/ships on the board if units == True: for each in self.board.units: each.set_outline(color,width) if ships == True: for each in self.board.ships: each.set_outline(color,width) def handle(self, event): #if self.show_msg == False: if event.type == pygame.MOUSEBUTTONDOWN: # Change the x/y screen coordinates to grid coordinates pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if self.ships_count == 1: # if only one movable unit found - activate it self.board.active_ship = 0 else: #check if we have clicked on any movable unit self.board.activate_ship(column,row) self.ship_id = self.board.active_ship self.mainloop.redraw_needed[0] = True if self.ship_id>=0: self.changed_since_check = True if self.board.ships[self.ship_id].draggable == True: self.drag = True self.x_diff = column - self.board.active_ship_pos[0] self.y_diff = row - self.board.active_ship_pos[1] self.gridpos_prev_top = (column-self.x_diff,row-self.y_diff) #used to store the mouse coords on previous position in grid self.gridpos_now_top = (column-self.x_diff,row-self.y_diff) #used to store current position on grid self.board.ships[self.board.active_ship].enable_circle() #dnable drawing circle aim on items self.circle_lock_pos = (self.x_diff*self.layout.scale, self.y_diff*self.layout.scale) if self.board.active_val_len > 0 and self.board.ships[self.board.active_ship].readable: if isinstance(self.board.ships[self.board.active_ship].speaker_val, list): value = ', '.join(self.board.ships[self.board.active_ship].speaker_val) else: value = self.board.ships[self.board.active_ship].speaker_val self.say(value,6) elif event.type == pygame.MOUSEMOTION: #make sure the current game title is displayed if self.mainloop.info.hidden == True: self.mainloop.info.buttons_restore() if self.mainloop.info.title != self.mainloop.m.games[self.mainloop.m.active_game_id].title: self.mainloop.info.reset_titles() #self.mainloop.info.title = self.mainloop.m.games[self.mainloop.m.active_game_id].title #self.mainloop.info.subtitle = self.mainloop.m.games[self.mainloop.m.active_game_id].subtitle #self.mainloop.redraw_needed[1] = True #print("ok", end=", ") if self.drag: pos = event.pos #pygame.mouse.get_pos() if pos[0] > self.layout.menu_w and pos[1] < self.layout.game_h: #if still on game board self.mouse_entered_new = False # Change the x/y screen coordinates to grid coordinates column = (pos[0]-self.layout.menu_w) // (self.layout.width) row = pos[1] // (self.layout.height) mdir = [0,0] #mouse drag direction if self.gridpos_prev_top != (column-self.x_diff, row-self.y_diff): #on_mouse_enter on a grid square simulation #mouse entered a new square self.mouse_entered_new = True self.mainloop.redraw_needed[0] = True self.gridpos_prev_top = (column-self.x_diff, row-self.y_diff) column = column - self.x_diff row = row - self.y_diff x_change = column - self.gridpos_now_top[0] y_change = row - self.gridpos_now_top[1] if -1 <= x_change <= 1 and -1 <= y_change <= 1: mdir = [x_change, y_change] #else if mouse is out of the range try to follow in one direction else: if x_change >= 1 and (self.gridpos_now_top[0] != column-self.x_diff): mdir[0] = 1 elif x_change <= -1: #is smaller than -1 mdir[0] = -1 if y_change >= 1 and (self.gridpos_now_top[1] != column-self.y_diff): mdir[1] = 1 elif y_change <= -1: #is smaller than -1 mdir[1] = -1 if mdir[0] != 0 or mdir[1] != 0: self.board.move(self.ship_id,*mdir) self.board.ships[self.ship_id].turn(mdir) self.gridpos_now_top = self.board.active_ship_pos #self.circle_lock_pos = ((self.board.active_ship_pos[0]+x_diff)*self.layout.scale,(self.board.active_ship_pos[1]+y_diff)*self.layout.scale) self.circle_lock_pos = (self.x_diff*self.layout.scale, self.y_diff*self.layout.scale) #self.moved() elif event.type == pygame.MOUSEBUTTONUP: if self.drag: self.drag = False self.board.ships[self.board.active_ship].disable_circle() self.mainloop.redraw_needed[0] = True elif event.type == pygame.KEYDOWN and self.len_ships > self.ship_id >= 0 and self.board.ships[self.ship_id].keyable: if event.key == pygame.K_LEFT: self.direction[0] = -1 elif event.key == pygame.K_RIGHT: self.direction[0] = 1 elif event.key == pygame.K_UP: self.direction[1] = -1 elif event.key == pygame.K_DOWN: self.direction[1] = 1 self.check_direction_kdown() elif event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: self.direction[0] = 0 elif event.key == pygame.K_RIGHT: self.direction[0] = 0 elif event.key == pygame.K_UP: self.direction[1] = 0 elif event.key == pygame.K_DOWN: self.direction[1] = 0 self.check_direction_kup() if event.type == pygame.KEYDOWN and (event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER): if self.changed_since_check or self.show_msg == True: self.mainloop.redraw_needed[0] = True self.mainloop.redraw_needed[1] = True if self.show_msg == False: self.mainloop.info.btns[0].img = self.mainloop.info.btns[0].img_2 self.mainloop.redraw_needed[1] = True self.check_result() else: self.show_msg = False self.level.next_board_load() self.changed_since_check = False def check_direction_kdown(self): if self.direction[0] != 0 or self.direction[1] != 0: self.move = True self.changed_since_check = True self.board.ships[self.ship_id].turn(self.direction) self.mainloop.redraw_needed[0] = True def check_direction_kup(self): if self.direction == [0,0]: self.move = False else: self.board.ships[self.ship_id].turn(self.direction) self.mainloop.redraw_needed[0] = True def process_keydown(self): self.move_tick += 1 # if key pressed execute this every move_speed frames if self.move_tick > self.move_speed: if self.move: self.move_tick = 0 self.board.move(self.ship_id,self.direction[0],self.direction[1]) self.after_keydown_move() self.mainloop.redraw_needed[0] = True self.screen_tick += 1 # used to limit the display update rate, without limiting responsivenes to key presses if self.screen_tick >= self.screen_speed: self.screen_tick = 0 def after_keydown_move(self): pass def process_ai(self): #process ai and move unit if arrow button is pressed if self.show_msg == False: self.process_keydown() if self.ai_enabled == True: self.ai_tick += 1 # if key pressed execute this every move_speed frames if self.ai_tick > self.ai_speed: self.ai_walk() self.mainloop.redraw_needed[0] = True self.ai_tick = 0 def update(self,game): l = self.layout if self.show_msg == False: #update the grid with new locations and colours self.board.update_ships(self.circle_lock_pos) #Draw all the spites self.board.all_sprites_list.draw(game) #self.board.sprites_to_draw.draw(game) else: self.dialog.update(game) def check_result(self): pass pysiogame-1.30.811/classes/config.py0000664000175000017500000001246712201771611016236 0ustar tigertiger# -*- coding: utf-8 -*- import pickle import os, sys class Config(): 'holds some basic configuration data - screen size among others' def __init__(self): self.version = "1.30.811" #Screen Settings #set this to False if you want to manually set the screen size, but if you have manually resized the window the latest size will be used instead #self.screen_size_autodetect = True #self.screen_size_autodetect = False self.size_changed = False #enter the size of your screen manually if not using auto-detection #this will be overridden if self.screen_size_autodetect is set to True and if used earlier - the saved size will be used self.fs_width = 1024 self.fs_height = 768 #size_limits - don't let window resizing get out of hand [min_w, min_h, max_w, max_h] self.size_limits = [670,480,2000,2000] #[670,480,2000,2000] #670 - minimum to fit all buttons, 2000 - with over 2000 pixels each way pygame is not redrawing very well #self.fs_width = 1440 #self.fs_height = 900 #set total size of OS panels and window decorations on both sides - used in windowed version. Not so much important now with resizing enabled. #this will not be auto-detected self.os_panels_w = 2 #sum of widths of non-hiding vertical Panels (if any) and window border (1px on each side). self.os_panels_h = 52 #sum of heights of non-hiding horizontal panels (ie. menu bar(s) + application bar + window bar + border, etc.). #the game will 'remember' at what level each game has been left and it will save this data for next session if the save_levels is left at True #to reset the game - remove the level_data.txt file check below for the location of these files - it will be recreated next time you close the game #if the pickle has been saved with python3 then python2 will not be able to open it and will reset all levels to 1 #the data is automatically saved to file every time you switch game and on exit. self.save_levels = True #the following 2 settings will be overridden by configuration file #to change any of these do this in the in-game preferences, except fullscreen if there's no config file the value below will be used. self.fullscreen = False #self.read_inst = False #no longer used self.google_trans_languages = False #Window title self.window_caption = "pySioGame - Educational Activity Pack for Kids" """ #file names paths to level and language files $XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used. $XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used. """ p = sys.platform if p == "linux" or p == "linux2": try: xdg_data_home = os.environ.get('XDG_DATA_HOME') except: xdg_data_home = None if xdg_data_home == None or xdg_data_home == "": home = os.environ.get('HOME') directory = os.path.join(home,'.local','share', 'pysiogame') else: directory = os.path.join(xdg_data_home, 'pysiogame') self.file_level = os.path.join(directory, 'level_data.txt') self.file_settings = os.path.join(directory, 'settings.txt') else: #if p == "darwin" or p == "win32" or p == "cygwin": self.file_level = os.path.abspath(os.path.expanduser("~/.config/pysiogame/level_data.txt")) self.file_settings = os.path.abspath(os.path.expanduser("~/.config/pysiogame/settings.txt")) directory = os.path.dirname(self.file_level) try: if not os.path.exists(directory): os.makedirs(directory) except: print("Error - can't create directory. The game data won't be saved.") #default settings self.loaded_settings = False #[language, talkative, untranslated languages, full screen, user_name, screen_w, screen_h] self.default_settings = ["en_gb",1,0,0,"", 0, 0] self.settings = [] self.load_settings() if len(self.settings) != 7: self.settings = self.default_settings def reset_settings(self): self.settings = self.default_settings def load_settings(self): 'loads saved settings from pickled file - language and screen size dimensions and mode' try: with open(self.file_settings,"rb") as s_file: self.settings = pickle.load(s_file) self.loaded_settings = True except: self.settings = self.default_settings def save_settings(self): 'save settings to file' try: with open(self.file_settings, "wb") as s_file: pickle.dump(self.settings, s_file) except: print('Could not save settings')pysiogame-1.30.811/sounds/104874__robinhood76__02020-cartoon-slide_2.ogg0000664000175000017500000001411512201770063023755 0ustar tigertigerOggSzJVvorbisDqOggSzJ>=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggSm zJ{q[PBA:>;=EEMPWOLS_ihh\K>7,G_2Op|0ٜ.??u~_ߟ__U|}}&#l^;ad\V_3o$1fR&$!~X{ƛO ~o Sg_Ra^C}4{{'sx<4g,9ycʼnc9ם۵I ñdX3 ymqG[4w7 e/&O ?:ۮ;> g:w^{_Dt]=oC&_mk'F tvyi~4i0YÏ`U~" _q&FD7~Û܊=txM_7@2mQ%ol f 0{#'*x}X5 L-B[M_U~&/@$#2~|oR!㳲yq x x `E_v skk6cx 0K&̰(-#vGˏ폇]'>Eoe15w<oUwOtn@ `GY]kM_ɸM/o=qÛrn@7|5~_7nc^/pӹ? `ԧ9}*Uwz)[W=Z0C& ƪogFx| WIv)UfL?@g -&Q.>׾"Ò?(Om_}3?%L}kݫ'[Pz R߀h͜+^4_Uey+N.E7 Uw+*/=:cQUЄp-M [m5VZ5ϯQ 3Ӿ+[Ϟx`{iEV6$˺Te/[}7.~m{9??|ߟG³ u"U]Q 6el%lg9U Ԣ'7F{rUOjT9zsr|twݗ緗5DWvjp|}*pl$5B]e yJ{E3әmm5NCݑ=-7Cm1>cSǢk~IIU?ǻu}EG>"TTրFziqUc%,w%l%/ c<'s msZ|,뻟r}6,{~ݶP_^}/bF5mYs(a>, ^VR+o[#pysiogame-1.30.811/sounds/162465__kastenfrosch__lostitem.ogg0000664000175000017500000005744112201770063022533 0ustar tigertigerOggS (^ixwvorbisDqOggS (^͌=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS@" (^c!HN`]bPada,PhGk }Q;;چWr 0kUUUY>߼ (DQЌ(z%qT4:4b0ti>&hNT49ڙv5Ě,Yu*bE[k Ub9 WA`N Т BytN#{rˎPA2`k95`GGE`pq,JP%nTU zQ{᳏̒ga(p ?$2)^EDN-o*ΌOk,%8H+n`0E$d$1 mZ/g/m|Ŵ\:J,L~ h&@ 7_;o7<G$Fa&fH͖c?wLNWƇLum;x"B8|ٞ|X%!H/\)x][\o&ObhEuT^8U dy?߯ֆ]gYyԣ1h-fn-r^s,4U%xުfgP]sr?̩ӟ, niV0,j|3_SȺs¹yjpֶa7\lH8998;Z05,o rN 'IJ˔m qX0Vlp 4 &8znAY,rX٭p-w|Z?#+< \*`k:@tV>n7m~g@^ hnkI)IK^Ah @4rxYU2,cãSݧk*9]MzC{wAOUIpOy|'_TRخٞr_✆ϭ3=̟ {!k:Y>+AMA<ٟ}f/1/~j癮} CA?髠i yw^8efqJor?R%cɊ*@ dN L,iyٝIfG>|b3q-Rb,9`@LgV$ݣ0kHeSIP e.eKoUN\x ;1}ȞZ&wJc|A/HcN=@\q|!'.n=׻{S}CLU7UE* w&Gw~>/&k}z[fGJgLY9fPr_Xt'vN/bMጺFi43>>ws]??ߍKSIkǕu~9PSp>~v IzS,|k?\b5 q]-DXHHA .^E2 (7vCizz3-5GpXkѣS& U 3?ofJ @qoulrb*!%zyd\JlϷ8yg`v~=;N_7G,6U{K_k'O޽{-P.yLţ Ӛǿ0F\r'lJ |I9lcIT.lEٝҝ[=sv9ˏCгb;TUI!2}'s/y>t[ ^=uO4@k7MꞤ6 9W+}/ۂ"aO콀Yi5o\<!;;Q13H`pfDA=vĶL#*2Y )'v]öNcKnww\/KXqS.kkwٛ5"VN-2s*6f Xe z:^\8ֿr.57όzÇ]Nvz^8`萟ͤ?b/I3%3ꋝ;Ovԍͼnۃg^r͓^RWSSU? &1|so_Qkߪ%o^yv(`+T$/]Yȕyk~<ew΋ǫPN|m˷jm$O`V]0]sUۂC,aȥ=3w6l ;-&"ccm%OZϗʦi9Y}3sdh3崲(cɅ7ښasϿ/ `C=MVФ@ هyf/?llΚV2{bf@d{g`o9$~(a:kI6 $v,\X)`5?0G e6,P Zd2|t0 `ȕG" )5NPlhڶjU/4زsu ^]ɴ0HLNF_n?LMix䟷q~Z6.'lTɳ@q9ۋ;:GPbs66|Pi'ʪεKjqj49L8|K<⨜~qa©/1EyL=>C\d= ykQdȅ:Q+9t'<}}|qߵlofS͔{Qn w3LR_}zW|黵LJ == p~}~|jyhȪVab1T:Sov'45cam;#F0 V tG@Ja@5@c m1Mf##"l{J'c+MjVePIݾG^_Əx4s1^ +d z}j%~\t[SAQ?ظ~;t x>aTёЙw\=?}MlLt0L7K}\f w ԩEޟ,qQs:Q=ǟr|io6AMGJmL=7P]njn]X M1ULUgtx+9g쬳?P^Ô*Τ˔9=[z&P;ע`PS|]bONz)X!qPؐ3_ͫօ1Bŭ",wxfa HH$m>qyҋ %ZBd< `|e6P_ŅIk6tM$<~N1Pn[_j{x{x1FOvğgs3OBLO(zokdv?U:fLKi*'+rqoOOPe*wƻ+,m.`$gYWW0̐x֌{Pߗ?ȹ1+Q7Bh9SyD}W-!u>ZSv<ݪt'qyhV ;Śe|FMjwB(aI@+m)E\mfpza$c <=aj=]/kex۽ێٌ%te"wٹ (?~:=fWtKGc3vpg~Gdjrn?_9]&jllϿ=ZqNBo?ߵ| e:h'Y;$ayi)ai Pཿó5kmtTԊjn3s0>?[v@ӯMғnuan=-LbҵmHd];+{Ҥ/asWt{z^}kig`2v=Do(=uz,la#k(* E&@ECK;z濽/ám|uҜ]KR'*UVjjUAueP/\ w/]Isu>iï:>Чm\3cN t5L~SM ?>f/猏BѪUmk2*O]7?ySv܁(c~>EԸV$.?e(q1o P2%b ė?r'.>;sGL/Y4[3̆CsQ`@@q.&o f厃z+ E#&X?M^lBp} ͜ork؇:yDguWUΡ\Kp ҁlDSP¯BVAnC9=7)r/֔s]>+3Ϝ qQE%Ӻ nSI~: 34 TOSCt9GalNbѸur R5CAU`>uu/ F"X I|[ 2= SkaüBհ؍ÍZ4|\hѶmUCUUI.F`<K@ aKho@ۻo erWyt (oh;Wpe@Uq.?Ot >LU/LwO'I}S_S_蹧g@CC>ށ￱LGFT麜`O~u4Pi7 Ӯj`ș\dO5PP4,yDLd`NMCvtAӧ)b>n{N!]ߺ]5n} 36C*R څ̪3 ̓" P(I2n!Hښ6Mô  "e0);!p W=+M|[fJ, @ģ^fsWPHA\h%q [Q2Swρ*т<LyȐZdHDF FU'LVQ v滗c?gymL*w0U[Mwn=UYٔep<'9<.9$PߩEfo;?  s3c<σeO*kv6\4;;s>0fN:z`S}3n&̙+Nsrؓ`&| k?Y: {W,y @oY}%*$i4 4pCERGp,/iU uFۈUr/z/ Dh9>X */ݙ;e:q> We8%w id/ek=dnu=TeD랢hv+x5:`CX0 !/ 7&k׬Z-J,ʣ{GX?ϵeY I~ЄWo\K `QWCnw4/LZoa#Ps3o-7{ '|ko~%xo~|5@~Z¯\ME͛?iڤ+uK}vON3Tˏd:@)(O{H{?s#*+b,ٛzmܰd\ -ir])9 3E=]0TC*ȡvuS9n:Ӫo˞r`zG|}!bQȀ Y%$ёsJOXƫO<-|$L1}>?P%)]loO]=^z9+T_m KvFLq'&ogu *HwFޯCz;6RAKM^wDǰO1KZ˳'Z װdR߆oTv]γz^ĵ_ï4@3^m`LteYCM d;+1]siby`rh͓fs&?qΗoM:rnÂNzg Xe*;spG-6HfщMq]1bRvS@ Px-17 .kPB" ׷Ҏ -v/W J,m[Wz7j>)EmcPJNiCuLCZByDΫ-S+"5(Τt<{-׽"I/?OIN]f R|`)_SS~R4[ xWuõ 一P]qL1ojpEfUc# ??x ^32:l73 k/XP[y[:(~gVm:fjooF6`S؁MQ/,5dǹxQT޿f{eՋ{_ I=.&v"JxPp!wL0gUĢwBN ?cY9NVg߶+msa5 .t5@tɁOM}uz>s~b!vk>0lokrՔ]g YU' j#xFo4v`$G`,}^N2 ^hmZzI@w( @9@r*mGF-ԫI${.` {aJ ^vwX s<}Je/=}@F9XNv;reTe#TLI Wad测l}n|Ev6k5efT\?>S |"!7f(-$fES~CF&S1- n^PNBOf֧@4[J.d0k'wuzC(zg7:>ӻsw&EeArH'eOsc_fԎ$&C 7C Z5^A)>x-Nr- D&Unuي!~ߞMt֙mm룦^R {W;_ug<:XuF\|RCtyV @oiUt1lN1Uv+GIաUjsu@͞kqgo#;xmô Lv;HTpl s̮Fk&d,5`gk@d@[pTYğco7X>nxӧH`kKvVʼnPs&G2|'ޝB:e\93/ǝ-{Dgw38@Ϗ PePҸI莚|9q_ɊA kZ %;1ԓwRgߧrwi΁6듙MߣY; ҥjtOjv _vS@s4U)Q?pA=?f_3C^,V )tFY_)_AuZ2J3dPW-4v\[+?4QV K3- a ,2d{ &7^Gx_q(b=I @b%i"܇1gosa<;./̞ΡΠ߂ڝ5|n/ojJDu[9hBwi`ro Nr7g TO=wpAi O((k" G? T}j(1E|n\/8Zhf&F$( zڀe皞)=O#l Bt|YcuwTm?:ihz5CW]+bfV:̾I^E<5sp m٘Rfb&+Ƶp2W% PU9~C}}:̾'pd%sPr\vP( \E FMT˓ |wt96u~u y&Oǩ>|V)I0YSsw!h)!7j0qً\aQW OԁUeNkmޛ DB"x8MOggS (^h|u'Íx-@ 'VCр?7cMԬLI)`XYr@zm&Ap@=;1+F7wsb9[䲉(6⬙CU+iS!s3MOek&7MDSu)^ Igv0jS$d> rԜ9Cu2 y~ẶkTso/Cyt8'3 PS.TYt2k]};# w>j>7YT*Բd𻝻fu_ٟ)g5d bUhz蜅sl! 8#y~MJqArX44`Elk6ZR[[ϥ6^o=@a ԌmޏT,/s%ttDn V %W&T@O{h :D;}Û99 . >~fUY{hY\sYtd2-`иO=!f.a ӻ4G_z$o4S]6߮$ >Y{=l>~V ϩ&jO=+ m mC60jL鯢pf#95O zV;ɩ=?8'ajsA$f\6T@N4Pb1?u ʗIi5^mc(t4MIwIfNg3?7cH: Qpkʘ,A3r0]$S@q,o\4d30fx̜i b {.kXgrroUÅ4mnd,ތ71ȗh k<CMZkB&Fp|XgaFMk0,v #+PRm.n,XwDe>y5d8{ 8ۆmMl,T]0F, _gpoy-лNOZWq}Dfȁ&l'631ߌ4lzQ'sPS߂E) ff Z$nd-v7W<ڊK0x(~GSBb_Us otgT?` ,H^B1\?~H9rnhQ0}ݏ@}P^Be8T oYyG8Y(Mמ*geJ {vH2tHq9%!V|\#"/KT>+Eax[dUO/95g\;"z?Iu+[g 7 <3 LP/.!bi}1A]lé#6ٽS7]>{F797RY i , LoG>43S*xoa ǒw=-A; x@S>8J@eăVx8>ԛhT~@EP][o?K_g%UG[Σ+ RN2X;tiٕ}j&0|);0i^CU e2V,zx/`Ϲ*~g}9gMML>uwZoX #;I}&FLxl,|(^^oN'Fs'j\2f?rvVhvICOB%|fCdɕ[nG쥙22r ϔg z.%jf.ߚo\z{T/5}6ɿ 3g}73$]VK0֞ l4ɹcVh ub8ADܳCL@<xLȱ~f/bk=hf^3ٶ1iJ ƚ{o9ǰ'%P?܇̋l?l5VU=5(9n_]gN1k^su|ޞ>:v:"Ù?<lrʾq*o$GޢȘ2(T,U֨`XN(C%;-Oger=7^pIr|b>=39Us849{O=z5+|L ޓd)3YIDlƼQ>.3k:{N3ӻac_`l'Y}@ȺYbt%)Բ<M8SƦHdT8>挛(T|~j*Fp5XG첵jj0y#~z /i|km 8i.l[`'-m=fD zs?&g4P9$ޚ3וͮ{wWv~]o}kkrsw}Y:(yyg<`_YEÏ7gYb^9sxMΞxdl9wO2MknYoj&n敖xX*-cΙQPy3_@ݿN @5~12vBSoXBe |LBsq:&JpMVbzr( ;J&oKe\|ϫE2x:3i l_%%ﳿѿ6wNYJ9FS'O*/~]YP= ?;0gηsi t}٧~ɡ*p6f.,SM.mE]= ;+a=&n ?m3{<]f:&GJԐ,[XxX0B)F3(på_g6j1a 4If<@p~l (ꥍXLY- O z[M 2qVcmi>jt .?/}0ŲCc:i\ܹPy*! x~& #6bfq%3iwWIB8*[BuI]2̣jw#H@u%/t-ģcnp܇)0KNFC`ѵ)뚵7l֋P0#@kO*oL14W^Ş\n?A ME%̄*2QvtHa`AckL'^f,å ZMQV0%:ۚ5I*$Hㅅ@ gD-jsC5s._ |;@KVh|C\Joayo抚I1=y#0%/.4Hm]MICysȠf5?m>;ҿ-Hp!|Oa7)]K=u_a$+LΞz j@9u=@sqb9*jrPKLS0<̀sԖ3[fIo1W;< pzz&Y~qT/A`2RmNCu)JV<3d1~ c#kP?tz2|sQGqdv{ ?~ ^+d%ZYsȭ3}Qqa o]UQw'.ոh*:Ml~HfޚOA~o*:sp1a{S7UfM?v տ-Dyk>EWo[&7O^056Ct.we& #zABc\{qT}dn-8N Yz\1!PCv7;X&WQrw9,/`tEN.Y/e %2( 2hd`N'6^ Q/~eZ%3-;oZ5"BrI`÷npU{$x2dUT兺! ֣u)۽ u?.ߡ82%y^>r㰊\wٶ"9^NFrfCiD+~>gG8q"џTbDgIJxE24LE/]̩S) IjgM1wv90?즊}wv`9I 85u J}Y8V]\L M0]<MVO+$gSe܇>qOCR`NmD[UP%->ӭ3Vw[r (e)[pjD?p䖇u&pVNXS鼼 7(NreCslf>Q_J.9 YhZH硳+ϗ})}z _f/ IՓӛ4S]kuN1s355X.zz*&q~H$s=_ N*aIi anE=;Lm!Ю;oX:W68_cx+f7 DsQ5ohv)<!$ e[]ߓooF 0m͢jF \x6p;j?v,f .|R (%o \Y8|z>i \70My2&r4yJ_z{^]\MCxA{ɢ ={'0#350JeY lu(=P L2E? PIܵd;IgO:7lu<] H9WLsQxX@a g5Tbo>` kpeRXeQig'[*\mvjQU|L+>@lu+_="}s7Cmx=09+?s;O48W>oov WWWpysiogame-1.30.811/sounds/140508__blackstalian__click-sfx2.ogg0000664000175000017500000006351712201770063022571 0ustar tigertigerOggS,4c {vorbisDqOggS,4CPVvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)Software=FL Studio 10vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS0,4͙CBB?t3s C_EUFbNXEGOdUպdx)v/^޷׼{7pok6^eJ"j bM`="hTŶb2R`YmjsE=j - R0 ADŨ {t na~z>f6|kf@0!@DP ҈"s`K*Q4ƦE4`@ " <^?UI999F1j, ;OMՑZ;=bZZ]ZZ=I:5u+6Tt8q: 8!4s013$tbОUcLJdHE1eּLiM4gjeTFӊKkCTUFlXkq'> noH cYFYVQ(YFJBF9aX`!2U(iZgW.jڻ2?ry`& I-Hۉ\ڜ.r B 0P) }|U`'k*blD5Ul"S`ʢ~Jd;\eUj$j ,q8@`(CKe.3@D`1-ad (KeZ%e¥hR(Иׅ*b3VOƚ rNhb!OD` !1*HvQH=χnho4bTg@D549dXP(`xQ^J`&sb9A Kt3nv0ͩQӪbT20 0XC%I Yg&^_Lഠ7[=366dK&:AXAdf:UB1^t8$L`PߐRHDs uCЗHI0 @‰%42@dAЯ5" "[\]t3i܁&@@k_P_zq V&p(!hu\aޙG9,Qo=tQd3(vG #Έ kVE eI$ܺ>iI'n~ι"P؏iw2x0;7W\y0kH" $vkrn{kڍEDGTbD"Y`O\+C |fЀSDdw(R wh m 9 IOk(bA2'Od1,*uD')CtrX90(`m `" `HX2h\bh.-O뷚?Sj!TTw,e7'&m[&gFm饃ޠdJɝ֕$' k*3*j4r;Roj mjM ɪ%K I WjQBbT t kwS=M^f-DQ/l0ǴRJk Dk`ƕ]%> G',C c'I757c=0@qfz p = @E4 *C0V@3>I-g ξ\b5xo;:q`[g8D LaX|HLܔa<NO9tc%n/6npvpLl0"r=h,E 2|4 n^.֡& xn /hʕ;B{Iz𣮔1J:="*F hUE pKU`lb`'N̠R,_ d3iXWAI $%wfob!`t Z@ Pn(05rk`Yf]O@e^T~9gk[o<%oڃLd?gbVDDQsLD `oD"* Pߟ6C7N˜Fuߤn-R/챞2z<&VlR X0qJk>أS} S1%P"SH!IR3 Xm0fSTL X[8 6`| )Mʚ S !HLԬ\/Gg|9cDGy bop(L t,$FB@"4"0`61 '7dD<>9qk>6'ڹwcyhf6?w>vfSH8WaF $GaltZΒDKک$Uk.+@y_(e&;o?rpk mFsrj |i R6넳Pё50#ɭ(G @{lr|qxWpp~*]# jB:)BЃ@0ZID SC06 P @8F)˗yt,Nk٨ < q^f?p~l͊r%Ғw;_2Y~ly t c9I?~p$#Nݛ3YA9Ƕ<iDj &֫o N鶄d0 9˩}N6Y!Ly+D"wU7YSpi&0R\1 *h1L4@g '5* lM!qpvYJ((6 )ahzU+tB.{ eأ%3@iб(&_<7mq7D+ eB2ݜBbk'W4/jV59_gas9Bnk8nGch%F&6 UPZu:1.tsݦp5%9Oo=&ӂU 6 BiTYiNMNdXt vjQ^]ޘEA`_;)ixpZWy@Zؤ/Ff0:&  0n;,=x@e :[䵅٘a@, 5'<A @l̂1Ү-lO!xb> ZCe2F=%H ,K^8Mƅy|1߲dvR"z}y2eS$~1/q6$Naޫ꾵mmH< m-Rs&gBVN;_biޗinJb.8Kucꎧ퉡zXX҅ U +=Su X =o'q !9}da0%? \ՙ=0%B` cd% s8ރ09Ju=AT2UIȫ@7=CCޭţVO۾k*/lA17Fu]>-3Rsh`qo]ʻmBt_aLߩS<ë|Y@j }Y2[UW&L Vҏޔdr"T̝ߝRȧ0[8fآ<}Gw/t+.qW y9xp=x^x1ZV->*&ˆ8OUnjlcYzBSL$RpzH':xZ&(sZ_.C)hYqzÿ%y9yگ4*g6fCoQ4 8{fin7' ЇE*j9W CTET jp @ƌXc;@=pV`h \£Y^F@V,<8^M-ie;_mu]I[ dhO܀ǔfCX *!Bml8p FOݭ\ZK)>=ʴxT濜ŗ?[ӍiR.deoq蠞*B6g ~-H`_+f&lﲕ?fFƃYeWI6ѰdD@]U V E@3F1ɹcÎ *<x <8@{ ?~HMfGryO#Zބ){1O43PG8q-dVUUUI`@{ #)l?ևoZrd!1V<#luٗi2x?{rC梊Md7T{mԑ򣷬WBV p,rSDX,_3pҝH!U,L%ܿރ& 'q@V\Мw PDA2٘}<mIݻve I#s8 ; Џ<AY<Υ>OǠJ`ht(~3?Mx|JڳHOǛ3+`/_@34u,!*jtAj!ķ.?_7z"훍7ۜ؇N8^F9ǽ[(}34$7y&P,\c"b2׮c )>ʻm$m,^0cTC@#Q1P ǐDR aٟ1г7_ru}Ia<.ox2ͺ|=cEmFJoyu!ʂ"';[6z]@4VyvuJVxnTl,8>rQ*?4,j KLX;='6*`\ i". Q0T4س |0xCBR $ ;.R 0N`G%3,3W@fhhX捈 arɭH'ww-^x+755Z s:-F Dhe6u}yIg;:d, g_hh.Ι{lj( P+Y /?hb_l&%ĴmBdQVg`o3Vܻ֣Cbq|;$}Fa(`1?ӣM\*7CYm"2+` L~o<_(1fx/~kt슡.|xn0=W;>g8+xx>ǥCާ>pqI^`ܞOqˋE mgǗҒ1;p?ekVCA{ƒ.Wy>__,6_ ^nN8Ҙ1Ɖ OB)fP| 1yh+6RŸ -6rȔ0J=W\rs,}8F9!:O7zꬿ2׹LBcLI׆eJIà/?U@D:!ǨZRNM긢b [çQOIakmJR IT66vF"6^Q B6F=-a(F"&vJeuvSHF"l$5ln* ۆ kX\Wfdc,B>mD8Xp٬=J]wJaQ֟ rFj2I?߷sVuE(>ly'm}{n ?vkt@>93dtmp1<~A @8ܽP,xnx]&|&)%5 2G4s{ *GԞLVuQoژAeh׿֖!aݢ@ @2l ar7x\0^r޺\ʵ 5Q<@"`4HY~>~K Sk-,@,}Q"{gqSC/5;qs$LUU WqJU2H@2x8BRv@*{~FJ6#mw~q>ebuQ%<䳷 o7M_O8NN7S]dx *fnr؅4/3 s 0LSgYMXeLSPtc\Qpp1,ΰ,Xe`t>_E+ A_-H3:7R}c>5ǐ V..>ތOyF<9ݎeX~ݻӯNSNTCh?* 945}L~3@ZN@ǏPDOMy&9?r_ @rsr rzod*۟!QN;sǎ'1 gyp{p8x<xMٟ5禰,Y}s1-H/={_-<0n˥ Py8^se?G :ߍW\>|g7i﷞̚۹fUOU|DUڀ3&e?3':shVG#k0Ր$p{ÀSd#KO |q:?s0aq;S &8]yxx8p8p^ﲺz݋},?|8Uyn|سzGX@O}\t]Z*!B*9K X{pi(2B> m8Pgiqu:aw:\fQo>O)nOsԼNulD/ЇI:+<11+ L4Pd#u 7,93 8<<0OggS,4IX+8QGA>?%<>lXmgї|vވ{৊j?#JEx6N~7)TU R,9#}/".]٭t=f0~0q@& ȹKYFhJZBoORhkZX\pK2лKIgʗ^/KaL7u =4 sȠI`-xC7 ;B>?$q,n}agTMy c5lX`,1 X,c`Xgwvu}! BR'9&{Uhatd"$PVvenr蛯FksH~㼅wNEBX8 ԯ!aLBt<^hHY lƆGr`'T삟}@Xւ,k1, XX00 [홯"vzrσ'-,Ǜވܞ? :/]n.&qovr{| #{R+װp:޻rU7vG3%;ǰAJby-]yx*w^Ģwai aI:+ >ayca7ǔc8pÁ@~R?.Z¯Kw_z#@lU :xVe\MQ$\m+Odeۤ %-a/jݦTuU4Q4ev03.UÑ&çi3 @Q0熺@^ch?Yp6ay.c9Jd!ьY,Ͽ60;Z{ GK#.6ᒹƈ,4TCUO=8|4IZ~'=u=dcU]B>g ;c<ח SI&wͧϯ-CC998`Ϸmifz NeL"?}v<0 o̓{wy⟗z).<s>quᙂ.x<8 om]pÇG4x\_EjW)5b]].Tס=7RΗA8\3[EMUUpBXѢ{8LܐͽNBc7ḛR-,ktƯ@C<8y^1C$ 2}o>n tQХsNee &00 OLoaY܃|"L /`YCE+ӹC{w1WM bix9dO$ O.wιdz~8yꙻm pxY.o|ޞwީy+cعtc|ÃޗjkC9eO<Q_u &5ql2Tއ}t _׽PkSy33mYh{n 2K~Ը[-+q|%g2n";R7:osbc~т iDĮLpl8>n6ngq=þ+j~`qwg^`yA<{fwP#xU@3 (+\ @\P_gm8f*sg ^dQ xCGRTTC2+9C)MPe'(r 0[Զ k.| ol6=j<>y;|?SHhxͻ/ ޛ\ˉz=tDG$,fw@Xzx*?<<̇};OpgCϟbfى=1ͩpi>=yr_ (]86YQsx'`yt&xd $,zdl_/xqqCcOѧs*9dݳ#@-4TUUb07_<-܌2?r9 @,3{z;vtΤ1[9U8K gz }-? `7q@‰FG!n`Z|@ӆ ?sx6\19V@Lp<Wʂ+)'Iَglux 3~Lah?br]k c猯6SkfrhWe۵@N~לj[#ȃ;;z *x\@eTUUUU[߉m8H~LJe}y @Z\ZfF@vrK˙~):i]sU~MNey4h;'å^31ξ~LwVA(m Hvt@K~:cw\'ap rps{v| 8> 83=<<?X@~RxS-Pp.Z tZer=c@ǣ.f*P3xw^aᘫ/w쨹LK.N-D 7U(Kjj{s3w]zH{Yl<#@x`Snnf~]$$o;Л 8ӧ^Ms_> ^gוuWoC7 \p9;a`yI/3<|x8W;ϻz|p \y@osa4Ax~?CHAẸF_Z'+?[ ]j#jj6&5?&Y}JF@|yP}ؑC.evt"-; EA4àa bـ@w  '#f;@øzg3@bgx ?|\zsu>>/oN4-(_~39x7x>`xi>Ǚay?|'>܁x<`fx<>wVZj!6 ujQ_onYq" l_E{m"gI{]ETT!KbVaM>7@a`ܚx_D5=6jQs4*j9+=2W MÝ<]9$ tΫ3qC )s)Igx*=Um)>Y\4w;pM> ;7t@'+I˩!wn^h/FTWS 'my~fPell `}> iF4˹3pӯrH<ScF x+OggS,4D[RnhQUmWg{eigxS׷7O: M|>8:|<1}˟59_.Uj*UJArhCa]`G.AVhvoF?K(o!~4S<#}vrjdtG\] 7lI/DIC*( !IWA P@<p 0WM99-(_wy`oo]ss&SIAwϥT!!N̜\g;Pڣo\Zk&k.;.T:}f83pLjٿ;Rk[ kmsbIP @$P%@p\hcSRo")`\'Ya0_U;P䕴0"\ǠeԼ>>@Nnw fޓۿ84g|&SgbTSn}Al"р\ %EE1!Th|oP8d@f/yv6nqbFv6zsݭ|n h.~֬<BQ+f޾w,dLO_?Lțس]4 MOH GI8x$p ^gw6woFRu;w|h0r~Ls{/4xwK^,ֵ2F5Tͤd8aՆc\[?{t1}_זt{yg]1@U|pq"wOGu ) jҎP@wZt$ nh~p \ |τ@]=[k0b$e=.89_[袨әŔelV7L/z 6Ab] ɵzs `P?ٿ֕%Tk3`,P PVȬ 3?ء@>OџŽ!1oa˓=m͎.8Jl, 5SU UJ2U}&v6w1Ԁt3؈y jM'MRX bYõv'uw@sMt2|Lhv|؞[;"8Ho`2W߭`~w K2?f1>϶ +E鋦axO&Nq oMaꩽ~ZƷͬݦo0\/gPL6ݝ,$gl)극}t4ju$ (^\ϴ窝:f w6łdA]K}w< ZE Ni,z:nO{۶>yofɸܓa6@pc&_HoQ. -FleX]ONr~*ϕN84')/ $U7! PNyfζ;Ȱ陷i:I~(`~/[fIpSs =뙚 wWu6Xay1#0>śu.Xoz;vLCC}'@qTbU !<ՏBugsïbٝb͙q&N3 Śe UPU xw&dž7ZyyJMnlHh'>ɧ{C{n42saEw9{(,4>vءɉ *Csy7ögTaI"2q$tC,rgu=s {ϩq߹]{v.8[gkFyo^=wd ;9W|[h/tlxA3 y.>?nxv|4"0gƗ꜠׀Dun=q`,E_<xx̸cڶj0UiqG&)nҌlj.ѽvtPYiSY㬤_#@./ֽ8b3 wwgfN׿n0E3p{y^ >IH^;`$vlȮs%h֮Vzu %: 3͹C^ Y?%Է׉Th*cEö=ۻt.[;OLbLd>d?鞦b7X᝚/y`1c='s7>?#ro &37Ԑ̃;_ǸU۶35k'9{u ;٨ gJqWq"Qn_#ӷw\2iz^iZZ\}zwfJ:3luIކcӚr 6B5TI*d>81DLtkˡ/+}m_|S/UE]Sip/͂ϟW).' wɦfgnwCw>5]y}' OEIl}tUm|OlOewOR]OSn~-du.{O&<9fO5(9]Cg~{Ov*Me3Yvy dt[ߗ6Kd5_\3A?ԆajYW?#_a5#a >wv_ 3OHMR@ Vl~[=AhWTh>ZXߗ& 1g]O\7snj <ٚFU5X:cv lEQO")ڨ6 xW<͞X&6˞3o*w$F]v0ӓ,pn^q #g2?g@ BW=Sb=;ޮ&bS\0Gߟ>.TӜno5 RLS?4S`fۇ6=TӅXY<5SgO;6݇jtm~|\:43 L*0ʹkm>?o/Yg> vzLv%-C1Lxv3Ϲ\hF7|;_cv2ڰjU]U&Ƨאs:ڊOΓSLbnѳyB4)iV>PT+.)d.ɰ79]|r,` x_4{>[p}&k?@5ɰ+Iowt$aOWdMBwNjji;ʇN9ҎSŝ|=&yg]p}^.x7 a^Is|p'ᇷ Jeزe o[Ρx(<σ(OggS,4{_jbqyiytos~w܃"[w ޶eTP\4dshPt&a7'X_~ڿ8cuAc(z T~@RܩZX]$@,4,r\3? w3W~zSs emuhě"JIaefK˾o|^xeNyϸ&rwqa3{B5{<-LpOqG|?؇! /GZۣ$b4.눑բ S#d|s ɳz9HhДYzM7_]GN:I3 |u;b7ځWrp)q p]OL0@% ™w#pfi$s !*0wC5ת~~\锳79~ZxgިJһ- /;fUw V{ucÞ)6\f2Hs=ϻpKʩ]y6f̻],tE{ 2`Jp/`^ #8f6<S߉=LŊ ZaD*Sc{n.MosƓȖmk LU`{쮇p(\NK2ؽۖzv{F9)V M};7p|`  iMe{l䀯>g ECsݕ 7e6OGYط{CkCwn] YU zm?ƙ.;?_M=Y4*cٓНb=K7pi=f!VOwF)Xi({>j]MNWT 652ip@9 Т9MSjRH85g\O$#kP>4xJ0 mhmZ( `Z?g;;=~:r[^hk^`[b t5fif?h_ɜ 3ۃmgC4<=>dzOo^:? f0v;4}~g7j¿(}e'Ia?I++lNvfʺH0\w9ל<2J+{L:f}N {jTf=<=QXYe<9L!˙l ~y fXS n2e`D5 IG6sɀ \w3vEѐo~|z 4{R]*zɈJ 0}aߢDN¯EK̕5sIY `~v×յ;I${یk_dHggl(*tk. -'m:zl1>5 S?eoki0RS7o/g$䳒 } ɚ@ܙs Ԑ")9ٮIDž8M\$'k;iDrsHV777IX3MnrdrK7_$#Ou'$.ztAكJzWj!o g(==?k<vꚁi߷?q쬟@Ś`vv93 VC~*QI0T SA ^fs^s=;MC x3;V{1c6vdY˻4EMͶm۪Cy۠n}~׼Cߓb]g^e%dj &5o2so~[l?z譛]\2|?Κx=K-o}>?]eS@n|ZGCJ/ny=*zXJ,zO/ {G:$y~r{r\g_E% ӔLԌ+Zj |7zNUFdgr3?熚]ll,PAҙ{s8gu3v{͛ާ@r/V>{sE4Qh2 f܃g41q[xPlDg3#b+U@\@ڶmD ~ߑ|L/`r}2tRBl{3yxK铚کrKDL=g۷^]:EfTb:67kdB >/s9};_1 ̦Lݛz`v7'Gjl讦+=\;;9sr?4;>LɅլ9I.ICd鮮6;3fx}\Kv%r?Q-~{{`빼;݈Ϸ93{:T#a jdQE]@c@ :@f\g~i5͐;?V2w{pT wlmۆɆ8# n:]z)ix_ s=e⳦[]b*Ea MiiˀG241d(?@$FuʌVN =\_Ր?jVP{ Sɧ$q̵3_r3&kޙ?NxrpuLOW_ Z'OP?wnpRU$w% BWLZt/dv:=?I2C>16i@[A<_z_dCMN2XƈU# 0%)>fWz]3\o85? kCG[F( fC8]SgiK֮wp5wZSK)+w+D[_cޝhEëA~o?AN ϓ3sP^E{ȩcLtr9$1Rɷ߱ω)I;k5CmB2+s+E?=su:,dչ/v*gMjzkQ=trLr:QA|>?Ρcq=y?L#8y5.`vڐ`)S7[Oc7 Q!j̱pIT#ht}(pZK^f\2C{3a\׌Kծ_=xHVlg>88+XGѶ5206go`̥3sif;y].5N:Md1Ӌ2A_~Qb $dtǘ#Ȝw z$51Q·kL9t]'gyeP3Z870g's>;>boS~*/iL捩!RyC'{NPd UI?t]{̆20 @)[tɜʾ'\PLW%*EwmbP!&o#,زliK:QQOggSf,4>>+>> `Y%>pysiogame-1.30.811/sounds/140511__blackstalian__click-sfx7.ogg0000664000175000017500000006540412201770063022565 0ustar tigertigerOggS -n'vorbisDqOggS -n3Vvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)Software=FL Studio 10vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS0 -np'FG9980qࠚn8\4Z9@jVJZxXpWznهq7K>mÊ|@\  +FMQȘv2pHPa*J+t@JRo[~pra}ffN9k#bU!-_růzůOiwQ +xߊNVOuV|:޶zZ"65m*@IJJ ۊh0Aez `S3Ȏ Dۥ469ѡ36Y8hFKSbъNU1`Q*8Av6g@T^Y~A+5y,˲{EQEzXeYe0(ȑeeU,ˋeYe[XVYnc0ȲX֪U 4*Yʲ(R(? |3,˲,˻wEQ4t0d0HPv$J6WnI(ZZb\C*;!QLm6MCB<RPBdSƨ ehႀGvEbHÙ`NLhizg;A&K80VJT(Q.MABQhX{9 a>/1P5ӀUg3 qX8>7)3Ͱ]a_6bwA0m"xҊ:'bEK) Sӭ9.X8 @a5%*"cHߞݣ7<;9ǩm Txב,Kk&yBK{eRIhuB w/z  v<o ߸t >s=)'k~5[it 4$R}̡&o=j+˨ gO`=X`8/LZe1khZsM1?>dtz$ } N-E`*!A~C!H$i RONj${-qGz|%jTE ܾD:,?tAGIMo6 Nl3^e?,݅~,SO̷*5ٝT BdJ+Ϝ>mk4ܟ3>ϗC}LldFɿ!?Css?q7w=v4ە Qdرњ/ך?& L^ѳm` WW?}.i#;+aX4|EQjxRUL1J륀YFaHV;-fl'?@<`fS6"ԫ ,#5M~uU0\5PM7G4t[!>FWOwf#C>CHmՀ AD?" c,A :ujVmۀ`bV WUv0V$DC Peqv$j-.ctS& 3 .L1  ``  %W``f?=P;PlOϒUjTX?qGRVKh4`5 ^5\+@}ܴ((Ǎ->-t~߂7qs^ۼ(LΧ[#(*չsW|ϗU^^T]Gjrht3Ӡ-,gx:z4,pnܔC2%HP `jdB*SeBYcA?P>7M5Eݪ2ϕlg4,{:|ll~#Z"@8SUS m0wWuë́(݌55Lu* 6G{?Fa 8t+L{vX~b %X@af*X -Qh 7 BYjv`38`1ta|K?3 =4V~88> h~n)ުˍIsfX\g.7'#u{oʖpAgQ3U Uv$Bf&$(m1kǡjJ| 7ŋr@,sME.G9QGg%u|ƺ-cF0Iݨ" _JgF w>-Φc)@DիvAY ! #FѸm{y O+?  @q<-g5 b g̅E8DY*M@3QiO S,w=n9MjGM hBDAkdjbahA 9QW*5=:<ؚ9϶[= 4KJ X\]:V9n@0grZ=w `&9bC' X628\>|| wΞKxqOggSd -n2#hcT_K@HE(*OgU6?,?5yTk}r5R37gpmXJ mϸ{ct`?}]Y r ?zʥ)y 5eubj8BlaA%ZEr:_ #3w|3tS5P{i7ݢu`f4xgz:ۘy"u0IӼ7ևcoT$p E/ֲ{8C$zKf}?~x^G6(zqL߸WP(:.g6Ax%c=N@QۆEJ@~g60c/]r3B;4ގ!+ or͗ɽ|8q5yty4uuih&5߂/Вu/j1bcLzU|x ? ׭*Ԁ/|% ؍a%ẑT3kwCe5=x)8ne)?wHxc\G 0|- @>'6:s;8l䟡)m.9txzJ_-8_#?4D­ 6dMlEVb:-g`[>/>psN1/+a޿[otPo}iIۮY|BISfoFzoV)9&ө=ib`f=K;^ bw;-ʬ8~u \ ȟMϣNg2tj~z*Ͱ珫kE,1ys_w9{YLYu8._9>tx<|x0^'UɖӿjS{mjyvV[w:'f#Out4~Df@*3YLw_v8:n"e˟L_>D-JdΔE4nܳ|ae]vȟ8;ĥj7̛}f@o{ @tCԝ%C)&Swn 荋n;h oJ dIX04ί{lp8u88>'7M(T K@?Q?`*óBUUV;^1+0a. $o)d)iRg6xXuEafY½ ;|WGxinF+ = \ﵕ7&IOG߽Ǘwo5@{'gE'>2Am3 q@~iiFﻡ^НHx~Y $m.C /TNQ<Xs<0pG%?.m8<8[c3#c\9l4pnhPh4c> vEu4e:{9 +<ܮ~"~K24M h 'g?6@떓`C_݀.̅-S/$9b=]CL3|of k֍qS?[,۳M1g&ɁY5АT&+mwh6]'LKdzվk\d3_3YYTUPPPX9 3:gFp{DZ=2Jbq6 ɵ+'NcKeۼ7/q1F汖AD( 1/}>*;s{=p~c@ӿH&4T9PSS m͞w.*=dPCϾv k2Cl5M<{ZOs$£N& ~]>-$C}ߜzog? ʻsOejLK 5',3lh?a~8<{XÛ},j?.ɍU%Ӏ>~O,;66evڂWEѥzt{?(O{A g۟.7@ fy?:3Ξ PUAB lCqԡE&܋"(א~r L?'6?U&unKht6|/TJEǑUPUB*kkV|S0'O |o򵲳:NW@^dM0kM7䛮}\F5qf@%zK+oIYt|lJeC 1O1S;g8U{[S@hpzK'%7/.{ 6R1x6Nc_KwxܬQp xY81,*S'z:*6<6c/w<^v-w1sy1َOmcGTfz%|Ʉك];'57F OlQ~,$b>$ȩI\ ځLMfPb vV(ػif,,ea2X~_vf vlzqa)H`,c5˂N OggS -nf4b@@[JXDR>'MV]e'%ֽ_ҍgTҪ*Ny iv68=5Vo*$N6uIiw`䃯;n_9b#`Tꎖ5=>Nb[dڧy]ջ3H6se=x獿ӏr/ HC`0`1PuQ$@ޙ]P$Td1PyIf-roc +b0pcZa:-{`<;vfa` <)0b`18`0@J6ˠWޠg3MiqThH*ƙ3 @N>~h}<`&^'h{+w90l,w15>b,9o\.kd\sQ+xdCY߸=m-)-gi 9azzѽ(Oq(ތ/;hwO[F9@2_b&_"}sVeZڣdz1ҲϘ20ak\1ppXx/E`14 6su8iM{#O)l5K=?|P9ǡjjf1H0m|sv m@ݢ=dL 5C.{ V UI_мj:bĶ ujw S@Qfݧ'ͮ7zLH?|ylw#fkGk (Hz@jM4s @fڳp!bo=zL9'hk9 3ΐs )okܛKn/txsOpI}>_|Rqc$&Yiurz3ƴ;+{syzp@6YД(hLW_dv5?~0úa, c6&C.NZp3u[[1faWYA-غ]f,~ 7yY[%A+oOz*-/oڂ}Lpg?逵$&y&J& ?{XB3=$e<-[K~ '4_ڜՅFlOsq`Urƫ|Ω!̰ 8|Ţ!O300azy]Ȣr9vSO^':܁vzwu%yOx۬ƃ;w>8 7N{s7~0)c|tbfni7Krn~vA4hk =tJ#}Yg91["_&"de^N÷ww7<)^ݙ%0,Mŭ>7٫~:yy7wziϓG.B@|.*c~I $3@̨3$u&S(su_$OQʄIL;6;X k}8eǀmZ00f #2l4L-clnb8=LS5p̆WU6 iL{SRTo;MqY+*_N=͹_ӎe  [%֩<܍6΄\rrn~5Ay;\"hkeگ^ tC1UN^ }jbyF$Oz47 ~/ Qg3Kn0d$&J Ά%`#Eލ9f9.Y_k5?aaLQdm0`gj-񝃅.C"OX@7_Q6Ǐ4sYݪMgv~)W7 UUUU u*qy^ :NNKW7*9P%9x.<< +syh{&WQ46O}=˱fd{3`7 ,vp0 9{ob ~T7P&Gڒ ڹ@~?//Xa'8^μXT54T$ V?ʟ6w \:v:,gheC7Oiy=ԼCN2Ð<KK3"7}H`g=݉)'a~_X@vQ wYI;Nx'LSM:ns3Mcgg0g%`PJCaze ȯ}0v :تf癵1s7s lPΛ~7?<`nfmveqC M~˞E^6ݙ[0JJӁ{єeyY7V+|O^pyڮyGf1.XISBAIo=in|z\gy7ﵼs70P4~+7 @z6{51v3B,;wQg~gsfǵ-x`.é`of% @1fP,+`f}.c/nu1ziȜn0$7C. ܡv- t+?;x34 puy2v6~….pc&'PUP$B]~!YݘC晛0o#fcLY k9Qv?CM2B3P h2h[#t} iOxyx3@5@6ca Y`@9ӽΙ)L ǝ]%[?U%rp&+L9f,_e(97/L5B^oynwOe-{6_o/nN ff][[x1lNY;}oyyWf~6&7]o0beܭ[l#%ؙ ./݁+?<.=Ãm Irϔsn961K@LG=(7gfoeo^`yk74 3œ`j $r<N3ܾLARoNZ28='{ @(8y}{^с|3T~Xwu̕^l>c\mo>sy_:~0]l!/dP x`ˆiPSKn3oSol OӔhg$S;m/s̗}\֎&n&Vp]S[vu9,ퟂϟؤf>z1 J/]3];[ĊHvIOVNfTr'Vt,+_ -,?bo]Jȇm]k[0Pss1 oWZ?ҕ",O'1oJZC>rVs9q{ч=~޷8'OޭH<L?-Q-OqI@]; @?䰪 $!,\aÊѝ._wVk3UY~&p393o]i"EBw󡜨 sT6IC';=Ω.?4bq/Prn1.~nz7j&^#v ,Na@6DKٴ?t)?Ҩ?ho`G? *0q?ĻMiXQxNX؟5z @C,R&r9oBi:ȑr\F~rU;3,J^rx{t7?ނ8mUs5xݰbv̤&t5Νy4 sϚẃ$Nag8=}{25κg4 ~áOǼm:8g~Wl?UbڜJߚ&&ʓP  PqAFޅ7)k:wi $lS?^4îhöp:gwXڪUUUAB^qAC'ndrVz{F<~}_0^y~X E_nؙ.A2'__JnZ5輄ys?Lȏe84or]T'=4?9] W$; tt n~z1>ONlx,J;7j,wOA4}39zv?OR)5*T6uȹYҸswج탹o hhӼtfN< :9(M_>:8+м++i( &5- ?u6g[htD_Fra+J=o lF֬0ISL$zogunrʺ^,R xe/ x+' w}oS\cAZ㍚w-,{pV fA<ߢ`Y.$G}3{he3sӓ Pu(X;k/ F[;0qӡKi?MuG 5B*l1k'Fc L}e^Ol~J_#=T\oc?%q|LU[Bs x[k<ϿKs?!ђY{g7_3N9sv*>aN'/Ơh~f/yS7wG>6ņN'|w >9@vׇy}``ܪ/vo- WyYNSU$c;{6@me`Hޕ 6?Qd=T)]H~&֟ȴ^ .G/W kaFT)0:"C_avh5v!LLXmtyU}X Y{Ƙx&Rw~O>z4 :4_o_¿N@?9o<8->}T i?=.L2=wT3=I'/b."\tud2OQPlc촉޿{?4hsb{vjl*>`:b;r7fJCI{LۤߓYK\v>/)o;"oj21PD6`>vT߱G@|; "M/wg+a{൚5vNph@5TMPAn4gy}2nOn. z˸($ًXVW-˜9hMH7rnnyuYz;]BN öہ8;L3N>dJ]]?4vv=.9SR&OSʢs2qjOoXbmCd}ˉegr̥\L]3dkX3YcdMUtb>쯈(N3 b44V? f_O@/p_sPF|C߲{MNx9;1+n`Li=/6phf; u|(ur;doT!i7dL5[;UaR3p<}{s\j/ "GLlz`R~wd\O/D +ƒ<'t4 x""Hޅ6Kğlӽ 7ނ*~ ;sZ mTU ͇q6=0dx73iNo9w]cMJUh-68 yF-YIݒ7iCw2sqs_t^wb!{;8@?@z4_zq><4 *0$0{*5ݯY]fD:?,{~EA;FgGR'+w׼Ue`^u|-Ȃ!g }馡O ) LdOJv"7iS w;3sy˺30A""(EVjTT h,2OggS -nro~sw71gbOΔhlGon~̶ڊV`)6~륗vW?͇yWv ūtw##&OEo=uҎ2IB}dEI|q 3⬢B~϶7'Fo9. WLY?Ȭq43 =:SIڢ:{TˮuG7"{ϗMн_ s9l!ZYΘWLq.p3ǿ;dd@@Y~J~1\a`؍CSEp/p虡yzzy>tO{5/UКxD!7?43S|_<x\L ׂnz6Wrz+Ӕ|=d9*F`N޿;o} sYT'| v)4 `^M,xf$6n''荝FO责vUQ{Y ݗ%}kVU*侍~B[[o2f|c ˣ0>dڇrB:KGȜ56"L>{h `pii;9ڇ1WP@@ $-[,dsSfOAѨENTvOWN6Lfx):jNN\C!h כqk&2XfmID$4XDTpJT0W&Pe7oPx'J§,j{)0eɣ`o;րE$@KCvwiHאvq.39縶l"&ԝϞGJ!S]dϴGR͇ 6 ~YźY@@r%m8p&XQ~{Gotq”LC3×L%U4ÿ335-(`W*e9 SxjaYk}^]KHBTEs9~sԦ &0Mٚ⫯i۶&5wW9I)jIx3 0 ?nUIp ` 6$7K_a2c39Vp_E ps y8{k[Q)?v'$ƱfGr nBgxqe"\&x*;zX5wd7l=PTjn cwoe繪a `G-m,ksv~3'wygMNV Z=恬k/>[=ީ6{ Vh=>8vf@+E)'oM:e>WB%ܜkm0wׁĽ6rb'lg+pYY$]TqEe$1l50Q=ؔ@\\ЁUH~e7y O2ev2ӄɊz=l!wV_kk2 _IK}޷kg9ݷ? w4K‰owC{n s[ ߜ.-۝_~=ڧXw/>|WoCRTjht=xIX\CI3EONk!&*xIxѮoڭlUᄏ4ks7^z{ &3':Eӧ=PۙϦEF5uϸ3:Cr\Ȩ̐4/ 8}M>) wlj.>[5Ko*D d#qI!Eڸt&<+e$*c͵l?#n*ۼwhڟ4ACyֶ5i)&+<:t=^u >͇COݦ剳1S_=d:iqKw 6a$ yr @ mn.Φ~s;v3hzVn.T[Xus7Zg{g rWt|f7^ {ޔw>p(5 Sy9X0<륬La$;#ȋ1Opjq霞\We1UOEC~8颲ھ8OoWL}d Qڂ췓!'9)ٓY &1wtCqknǺlZ GIBd蹄b@< 0 < e$7yRd]s_qRşb4]5?uXJ uAQ cwlmUT1@ĶRNf}ʸy3@c {fz1*a n5!?wa@%{~wΉK"0lo9?HW̱Tn,ޣπ?MS@%0g~&a{00ݧvCU{b s>kxGOWjfVeTݧ|2(ϙżө*qEbps.ܸ=3y>ǿrjr}s6ΝcǦu\6S{) Q0[6(U 4`|-bYe$7y sF7_22:y Y<8!0c0\8V8aFM52GY /Ȯ``sl꣋!Q yavͳ7 ㏐wh!Iq'ɓ+T&  \CbEA&?>x"h )N~2dmFDE)s覘rHn筦욽{jkܳ?57hTonPvCU͆ߚ,UNy5T흕7tݳ{ L*}dwM nw`t0-JIGL&ӷ;e78u2vA\ɕ3؇>97}f.扵֨1h6ʲCg3_ 8'Z{r/UQ %?(Pc6My^5+b=$hpޚvƗgxP[ . Q/ź^M2W`CuFG]T,{SCGsjyS=w_T Z$Vq >- AI.*ϋS4 6wg̨}x;wS1m.督*O3kL=/kk*)\_|15S#xg[^0HJHr8TD@#O}_ c"OggSf -n&UM^e$7SQ>2}FOy6z-_ M^5f_ԎlGQZ3ULv̍;v肱oarʻ^s+ 9>|Uҹ$ޱ6m;&YϮS |2!|sw O+?XO P@A~؟06gl<;ͬ ;skvuiٜMԛN}Xݼ?L-<ݐT ̦t2"ㆦ4EN]aeN7e}pkdžmy(0᫇3s(X6I(eݍw ]1e$6wF6X/~;lÇû_$Rӝ}|]זک; =&ױq5As!M~;ErlX$S_} dA6wɦ W";f j3 &ex*?{ w>]!Y̾e6 *,kbdV6ŷVo)?>ds| &kS03s`2UJ,mbSywzdíRO;tF%@"pht e$rvvA[fd㻳& Ҩ`w?fk_C(fO?`_6TUE6UYG%NkߗRy4wm촛!mCm{aqm>I?ļ.iwS_ylo|437BC10l~BN^Aͽ2{!rRĕTx' :֔hӕ35IS M3ϕAS;ך1&|X~eU\5l-oپqt3-v,lXaHn%>*i:'d(f,ַ@ءp1YF+fr#S#gϽ?Em&(VՕxۛjLM4W}|lnMx xpysiogame-1.30.811/sounds/140509__blackstalian__click-sfx1.ogg0000664000175000017500000007036212201770063022565 0ustar tigertigerOggS[VKvorbisDqOggS[VVvorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)Software=FL Studio 10vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS+[VQ^&HK4):?@@;:9GKEL`??B@ TGq@Rt.DUcP@E*K7e4kt5:ET:A[@@V.DX ji&` mBTTlFP> @TU:jtFL.q}%%+FPPh )5@D<P? \+˓p ITuؤ(I~*IeܒE'qKIGoV5A"͋3H%335),6b##jUU{l!h$h$(,lZBK!C5@͌6 -,D1): ت"hЭڶ i* bE(`jX4%ja! Z``AED6,3B` Cb (Tthi 1@jVRaEb?=p -Hq*ud>*%-TCwKd4hZFi+ hʠr{!}+Kfx5i q?$,}p R=+)wJo*o%pxJ.D#RXB+d M`C2ߴ(^E}땾ȫt?֝,0j:b,PRjSQ]>FIC W)e b[:")1 ;(2`5a\ʎJ ^!ag$e cdbQލ:K mhmUi 7 2h(T6RXj{47#IHZa$b G*Dyht*("ci2fZ4T `)ֺ"tJk'hUk.̍U50P[<q6z,RZ`zVnl40fYc6q0o S&NdB {6? N%eD\٢u*h| ;L)Z HaQc REe P(C hg[Je@ZF,,R(1l"fb"zkJĀ a5Z r6 u((@Ψ"FJQNL)`YEHUET*8rtF_ۊNha`[8AX1 ۄn ͅ E lT$ -כruYu@y*s' ـc@0(x2>BNDc>Ć5=.;؝=CxfNR bL,FLCԌG$H!5j&4<Ɔ_]1 &i4E?3adR+b1Z2UM5DZ/NC:S EI*X2VU Y"3( N!0&jh6p @dAMU6bѪ `ETZ$E%tOMSA@@*FX 7*5cko#cE3Wa;l`(du[&# vޝR Pbt"d;tD ȼHwu2r`P2@h#(הcwV ƨF1KMrU`ե략~αwe&(Q0ch :UlŦ4hfYײe}`@ r>qC*s [Y" +mB Kc.XΦ,o{OV309Y2B$H52AsbHsSֵݷЃ0Rj0},gXÚםVHR1']d-Lh-V)RX1B%[tp})~q!5ؒ*aCA\W'2FȻ tUld- BENꀊeaNuj/Tmzhah@7 ؿp؞r˷QI)&v$e&?!,V;Q'el-#/?6LƼ] (5 pl@ D=h#1Oi\_Kf||ӢDĈFp`I . CHt@[)I65F6jPѯĭb#VQA}] oL5='ʵ&Yu\ ;\GҧQ!).sa`YȋϛM8)e<. '_FGGK1:ʧB;_cu4/rbak s'`veQUup`f&c E=5I>L'Y+7Y?t!%d5_q(/}]Cm.UTb/R-K]2O0{ ,5F)h`Lծm6 d\ #*jdhXBX\z݅.m պ"B&Ur@dA(,"xrrb-Qdy ,@P,,P Qi9@KZ)GY`F*WS?V's?/x玪e.V*sF| "4 X˨dbӫ|JՖ ;1_sƕOm 0_kz/0\&f@o,WwOddљ T Ml-`7𾾗d>&>,ArKToIyGs*(/' ZgE.Wſ4~4q>4б(sv+:l- y5)b;^ԫt&0 :l!Wjv &%HN8o P ЊZ{D685ݷQx9Up LHE?mk坕Ʊ9!58c}*7TtUr"ֳgK@Fd  (OggSW[Vۄ^v}lxpA/*kVN?燸=|~n3o#%`棝i1@@9_9r9ypϾOwA|&@w]]MES"WLI(&==6M;(|.ExޯHkwU%tqlF>z_ ym[L??ьv\d|67Ut5g Fΰ@jP{SͰ)&f` *ptpݺɞ@3EV;S9QwT#yyM?;4N$L-6Y{R&.i 񦽽q`E $~-$FK>8 6O[ pH)+  E(#Ks(O|Z҃D'S*`|vGl>N'.+ 4HsqR x4 x=*y [\u_[ёd lv y;,a{:oקL܃#Mvbw=)bh4Fۛ/Й1$ZU80-aXΗ._cA7/[k$fN=oAvK4!d 캏 $ᚁvC$qUTR 9Ԣ &_- 0-2c `,C uz$+1So@=1'r~HL@ɰW4*_)%q:E`L: L >)ev=w2zfց!2(^ ޾9|֎)b$0ߧ$4ek G=4mN}o{A>@&䬏yY'&~(;H=M1C!M5UX.i+E%|RS d)GqƼ< AtHZ.wfjʨEEиjqPzhG6F^Y>]bL/}d:}|f[%| <Fl=g&  A8SPF1͗:U~ 3f 7m?.D)B 0{*b@kw=V<|$w v(^eK??c}GL6ELĘIQ?x<z৷ËʖaqQy;mҶۭ>& gO!b%/8zw$=/BM`|i#’}(_0 6Yh 19=`b{#/PM>]Tu{Ho{|+ֆ 3ycT.&{0IL먛{%Yu3v4О,dG@gd#-E/chJ-bF,(&X/ FnE vbj)sG+ f@&X bp K^ ^: 0ZkH8`(A+:|Oh6 o#5n Wk\1bff*d/A09rn^G]$l2Sb!S{ŴL5coYXQb@"]wag0,Rݷ'?js@1$n_=S2G|hH c0LTdSC| ``5{(ך0A]Ʈ #1$pZǔ@gl(y:hJ wReCJzQ (&[&" ca$cJI,d oeL-hj@f5A흆B ^%⓪- 0Wَ$;sB7s;O*}x'Vz:wP#X:,[ɩ#+irbҹByy9(*LBo|y{`٠M\3Y", MBg'9LГށəҨ IȃOj3tNRqW 1E7 cFk u R@bJ3̠h 8 TEEVb PBap@K6l`(3IuBv j6ut Rm B( R@ DOhX 1G8H?˞}O5|7ښExZ|*fft:!^D+:CWSD0S΃:cWjkWk n˵vݬ ~i%@[BLڡc!bqOϒa4Vf 1AOGC|8\OW:rD8&eY:&Hu%@ӓ #Eu@/LӠc+q1ҕ5@haB'B4 * r, ,V Uڅv hʤ,0\05ւ6>&fjP0HFܴ¾.sKw|W f SN vqQ ~x&-G9#7Uԫ:ޡ1 pwr3) um?+,\< {*9}P#3,lIwOBjf>J欟.ȉ",5ؼqg| T8,2'S}M:K*֪'GuYPib, &2xc>.GVXN]x5'Õe&ǿ>YV|J"> 7N6seV6Z4* IoP4p-p@jx0ʻyiXֶ¸X/5:Άւ]\It>_ONj=akH@vg^~]Yd.f?:L ;u癏IhimϲG\0*w! χo/IOr}ozaק϶M]I)3?/gSt_4g2~X1P\*"ʼnzRydR\:;#ɒ>5C9)< }쁣Og݀5û?dp S_eHhz\3+E?4Ǡ 8* i  ̿ut<6I[SUú@}~د>>1l,ϻ˳rtmTOr/hPmgٗJ7zN>#;{GLuVgp|xq#PN/f` g^< 0/~73}gQECfD; >P?(<R򬮮Ч4tf&s=cHO=1t[Hf6u#&w8Tx+.13lHS톻k!ș;wT7E'wx 6 Auε w-p2+H514=f l˝3~߇"@qOggS[V{qxi^decgZjdb~Ȥuoôֶ{~=@'oW.ٷ`x޶ׯ~VU {v*ut>?Tufii-%@t(6GB.ipW+؝r;fHs MP$~hN3oc4d?wl5\2f鏿嶑Q2U(L\9:s`IG]AɂdSu1;j4b:27w*䞳8`3`! W CBwj7a< SY#a2s&LW Al&# ARA)rP&Jπ~da0xF݇1b5Fy Og 9o{]4i@1tC+9|r8=t~D"qُU$woA.zļkK3,?)_ ?pe->E(ي"矯#CknMCOU$dis+i9ٵUg} (V ?_Hw;R&SvCyoTܙހ iD^wSL mNMȕwH`|} Yͳ2 `MC̙~)/)w% >g"+נBY=]?l4s_1ff$yֽv^`f"]LiN~ݠwI@KkO+W;Οm.xă)Y6MsڐK' rL?G$3f69 C<cwe n{! fMS0fϥd4좨Zn3v 2_OH `d3 3?@yǕ=s~ O^^% >)O=c4o2ĦRb$O͙b[kTC$x~uv-pM.NF<9 ;8AK9 |r,@z;X3pJ~ů8a-|ʄ=QY>tU}xhN1w6=+LDgջ@}:e%d{󳻻Rs8Ou;`zfX ~ {~Ǎ5"9^}>/g.w OP)8Xa'srv4}u (Jv (Zy0|ؔw*+k'|b1l8}/y|6um#PVq5Wkf׫MsjN}8Ӿq;r<|g &<|e?BnbAr2r˿z^8/E}?|,p. J/kvq]gsSPd -"MNNS'< \995{GTCN&Cr/Sa(h>د9I󲜶혘=[/?a&| Wmyw<`׎$?IBpG[?dVSiMoL%@U ~c!ˁLiŷ '`ǫK͸}l tvf}C 腻kCUMX0o:{j%9 .fVIϫ黢m$ +ef%]2RP0%5P.Zy{W_H{[>bxç>sXodLPgh3`XהrM7Rmo H DԹk~m g1ݰwlmp~NO+̖44qޚ/@{m[sy\JBٕP_{h"DEf /<6y,p,t:=;O [!aEG{$97l?-3f~0cJ| M> t?4l䷉L4PͳyrSLst㦲8=wLM*z k.hhr#_*e3 y杀_op:si Yf`E9d.P0Ƅ礙iIFHcOƴL/~}}L{9/Jll `l~$᭪.!DvӮgM׿0'L7IQ2)Xat<euˮ +wc=Uhf?@7\Ӣ' (~%ۻa?~@4Lg [MAƶD@I~rMgOw]La^s|5{?Qɴ37|>Wf-hB*Ԉa=ߜ`} [.~2z'x@hӑ@$>Xc aSònݳ;,TUCI¾v:e0ˑB>٩Vw9$ ^8a7+`g=0S3SZ)Ok"|)/ȷ~m|_. l`;ob_ ~aeXMg=i8'':i@b3ּVtN[ȴDx_|no~,\lz&;+w?[owy0)E7vehJt~D OggS[V|T_chmnrfpjjo6cFۡˋOom /Lok&3d^`}/oN*Qs9Ï[f U A?0ֶinRLmd<}|m޶m[loїagP 4v~~ENf|l'R¸ '"K98\ |z?^u>t=BK&PMW CBZ^^ %?d| f$9m'`wP3Wev]UO S(hza2en|fJ egYb傡guNŪ^t_61 n;Kio>q#&݆8gW_ּG}T3:2^=Y iis4)9p |FFkJgQX|aw']=~SiO?{yaMq>6Q5 GIWdTE? @+$0ǑG ]Nlukx!m= 읹ч9$? pyR&l8@ov$M͝X;?1@6dА4A\HzgYwW o;&&u‹tU"&8&צ\(묢׶79|CUM%Sܛx{/ݹoL.}27*LT+7y;m~T?dN~c1_0nɞs&b^ eM) o~t]!s nw-U9<ځ.@i #{pcE"@6pN2a8+ſ3#.s&x'}wZ;ka,Y{w azmɹRSx0(`AާM@s`RFx180nlyOx!]kQU2;Ҿ; $Ke˝۾UK&g!  ^JLEHJ5~">Ca6ߝy <>k%8음Kpȝl֞% =6浨6O,f{kpBc:.ە\=E 1>ga>3Tq $(dLNe4oʚT;C 6q0@4wR p8o{[֝53sLc:L6:M2)Xv,Ys`UJ #s%oظdž' O+?..uI>,TՔr[S$++ ou٧{=xj:WSϧ=+u$ɁoAz!0ۇ#^9pVcֻ!Oٓz>hPwhgx}SS`Cq44:]>fOFa\0MNC&=.Ǡ~609i_hgUټf'De_ HX7񅋻.ȹq hL o0 v;,W"G )ޠ$o_?Fx^>d៪[s!HHh^eXx>̷aRRq\lv A7:>`b5Yc/5]pu.|=ro ]Ckn0xΗ>u)0_4Lťel >_}5;Nv2SBE(^cE4$S tQVk8qQ*`xݜ)bsLt W68q3@̨؜RdN{fsi'fρ+o^ CBVn$lg\jm ݸ,\ , u1J9͎ `HY~c؂:l.3y|l-wL]@̔ #!xR.E0F}7 d޼ HmBgֿgnE1uK0~(M t;h X;'wvt\}>X^fƀ:UJ~"ݵS&@_Wz>"^~ONgƑڐYP[Վi\O''UO  ל=w4$ E%V;L 8 M7oK9j T3_A s  CP4o=Ƶ[ydJJLNF A}EP d Vd# j?{ &ge$>Wxw',/"2CQ$ߺGr'?Vo76ktwހ'Uܐl% p`ב SG])`: P t'IAiצ|}tϟ7clXIo.kzl nYY6 %aH e3C'|*u&,[cpa ޗ> Mo], LJj$Fӌ-ˏ6plâUՐc=p3eUkοžef rJ+*t g-\_vGwm 4lp焃f"ijT_x%,^'\3?LO1,l%6`6H06ٟt`wt>do u0\q2@uhr_v3y ̸i= xjxKt ݌6-) ӕp~`簉^g} <&{\7f^cnd״ ǡB2BLTJE$Lg~E\u5edey鿺n6ZtI:ݙn?sUi'W]AOjۡ\Aw]oezh`w7QC;[/\^wle=P gfY^x|g9lyJy'u9 Rt YM{9] x E ;>9 =}N tbDžtz#I&N2_PC$?(&gZ:S4:ŕE; 3z=U$Kp]݀xO~5*+ ΖJ?&6COggS[V;w}xmrrllnmjpgt῵撑$lg/1y?@s񯓿[w?^[w/>4\ oh-FK E;r8Ӹu?_9? ϻQ3ۿ,7\ʥVΪs4U.Prױ/=wD?us ɯx;@K qNj<7_jPk~=.rg'Y0|fn@Yw @Oj'L}'93ܺ(`/DduʹAo/M|`2/tQ=wwqe?l۟[@?PwN?Л C) ?k{m4*pIpOg=(Rp;Zɬ;*~^>nz%f/|of~rl෭mۈP5U&'TX!dSh:ԫVSIҟ՝c@1s{Dm . y{o?r؊UCO&L "'zc*Ϙ\Þ]yBgh$G6 ``xʪgnnꐝ[YCBYP cvEQ|(N`6}dn'i&LuCfuZ NBq.h*ӧ;jȢd7aẋ`M'S%`=w^n<79wץ9TlQ/%F8 6H zQK@gԙjbQ Qgw4 ?Ŀhy`:>jfL^v9_˅;ɏdu_V9@U&׍YcYoXy{;2x:v3oUb}a>wA-:0P]SOOXF&~vUG\ץ>w'3)f܇4ʎx}<'538zi=L @~]9k k}4l>뜬,qwf?Wد?v _ټ?^Wg~8uj( p v>74FZE*QXe y|\O~tC3}_hZkaRU H8NJ=&Z]wVmCr-3q鸛-@|$[߼\?\Qc/AvKK-+K!:&B/}X1\_m:a!J^k>ą,T:oŘE\8A=N yy~iعVuka00@f5tQoz1NxȆ2SS1jvv@RtG PW҆LH,%@fʶQ ڎ6xwF=fr4./_YbaͶ-Ǩyj>ThF=ޤҶL~^7W{sypﬕ*~v 77,yH/~W> Vݴo H6yâ,4UʼivݙPo~߂rNջ gv?pj<3xɳa"'4o5߼v>VQ vvCӔ3N(`cܳ:X|lOFO#OXa4:hbCC8J~fd?-"Þ6%Z-{gXYJ+E> Okem8hZIWp *L\NKǗo$ԤkYp>]Ej~S/pI7pC\T@vYvC^BfLpLv:x69@3t~2 ݱ졇:4絚I|M: c؇I푧ޝ&I0{01l9٨.86 ߙ"9nQǤSJe;nM4;1{+cYhCAԕd8Qb0>g?۞)0s5.VW?gGgK]m9u$`ǥÎ:f?|yhrg_}YL%{@!q$-@0 0YNĻ}cN6{*zk2?"2OSw7r}wz4rLeq'>:ڣah]4t¼\n\]0kz?0sOɦ臗7v}`v;ၮd ]a- 4$Tm)(0*( xTniߠtrFKE"@@f郺f@v3:ψ"x|SwrE1&M' 0]b_[AҴt't|c_g34[Fz!08/rW\ C 3l yؐ_U`09 3k,wWۉgN잷0p=4l@fs~ы=Fw/`; W>ζZ~7` A (`6 z5vFBoq 'Cke6\,ӸI/@Vo38ˡ:wC0sOwԌ /uK쐑zf.C2eU&op)?qϿU:i'N-a7tgy4A$ȉ㸰u Z"mM.ʧKbii~253@:!S A_3$52j}HꚧeUd&Iғ]T|0֭94Iѷu?W&Sמlz?Mڜ4Ɉ]5]Eu?? @PeЋtֿebzg4ּ$Nap[ΥF_lիi @iگ`+p48ݽN,lb/ϽÓFm?/Z"ODJK>bܯ|=Dxg. I?AUKP4Dy |~dH3ǩ= u I $ ;3@m!iH`>01@7LgW 5kSl+~.]s6=CrsP9T]3L[wܕ7g7}'$0¸9Hܝ z֊ zӮb-Z`^:#v? :c Oc$??~:_F{ڊҔI0Kw>ca<bz eM"_pۍ9ﰪãNk>LÐ*ts^/>_F0yn&r_DOt4MT͍;DYaCzF diCLS\WANp8WSo1gTHi DEUU HhLcp}XST3ͼCr)aC}u9 tג>&LDaF ?Mc$@b 2A7fҬ1#Iw<BI8vk_6CA3ud56"XMa ~LO-T%w}V ,|{M1oX3#Q3qP>Z5CD᷻^ O]&&8 DWѐ)8{%oipoyws پui`zW5_z~g0 }ɪplYohȚCLW2̟ޭ~ԛ;ŧ*)Lox3E!ʞНy3V U9S6 n.mq{ARɉ9@%P R@0XOggSf[Vdg__nh^gLֽnJbQ#3(H`V8vr_Ovǻ[/weYLka*)$rNڐ#5~Zw'z0޾x_u5E^p.b ̲ qc >5t 0r8ówfo ?\oWGu_3Lt, } 4[o|%? QrܛzgCvݽy줲~ʩgǻP;(Nٞs|9pS9=>| Vm%(ۓ ZR   ^gLʟQV=$vRfʟY1Fx~|8}GÛB-$@9{{a=JӴled5ug;@^}P#aC`fB@w>;up駠yjacCJ_vBާ dHx]RT=yk$|`H_)*<?{yW) $m NpPY?1Cf.*nzEz %b!4Ø)㮛B #_[:;{0 M2󔘯_DR!\ Bߖ٪t)^g,[ \ Ijx_=hlfQS e痙v`tP83"S09CI]2j\R; r&vZFҷƁ8k؎^ξξɨ.JagAO=W<&;' rఞanE!,W0 *xlX>Xي:̝Y|YATt;&c4Qєɟr(6>,+]vs6C UpotlHi\:3/Ɛ÷)?T `  C1~g,įҼv"I;*qGR ̏J*v6D$94d|1NܟG;rL8k=\ogζ7΢3mKw9gٲ88Mz&;*x3l5xJIXE%E' @<6Nx)p3ل`'N?/~ ^&KS`I޽zyrt6+דW꿪AUlW񇃗v}j嚢O[ &}b'KdN/hh:{|z!w}2nh>pcL 9"jfX.Mx\_" <||;CϻL's j5 tMWQ)٧Ab_E\(aweҷY0IXu$Bg妊G7]|HMQ͌l:Z@` XS@t#`>gO\cc(٬\q>nVc9U0U:O$wUh?ߎܷȻщRՍǸleOm_[@u[pnP QO0sم&n? @UJ>F"˅?z 64 hStτ@MѣN44 x_d1 Q\9ǀ!'5m250t (zSoMTC@QIE̷T"áI:;za>e(ZZA⦦&q|c [EŎH+E cW= FMm>fLj~w#!Lq_M65n=>テԾ O;9ڎjUT]@}#dc^~q:sae4 ߽QGw߼~s܉<Ow*zUQ #a`]4y?_}*(i/bAVVLuݓݖUPY~Ngm %cmgeAOГ$A (Vm>>=_+( 0c~\]]ln~ >sv 0j+g%L\]puWWWc&N>r>pysiogame-1.30.811/sounds/104874__robinhood76__02020-cartoon-slide_1.ogg0000664000175000017500000001445512201770063023763 0ustar tigertigerOggSύ.n@vorbisDqOggSύ.Έ=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggSsύ.XKPTC8¬7heT_t]iFi}$ݤ&tE&7?x忰mNNCDx!b\8%. @H2r$)I.wGL(YI\R~fy#zn3axteX߽L}ُ>y3uQkku`»uߛgzgĿb]nD-fۿbyZ Bx O8p0G 6 ݊ ?=~}\5]=|KZn3ʈͭa˷tsұ?t眄#{9< 0`~3ecJ509R|Jɥ p0ffVj(E)$KK{꿋~a[lGnE^ɪ+#́_~UUA߃)0^U(ui{5__;,pc, \ T W²Vv)Ng(3Jn濻o>~=]R gL1&-D?鴽j8HōuS6ӧ95E-逄-#҇n6㯟r \U,뭭ϟp^xƵ.l"u3/7~<aZ'M]w™왃zu=v[vmȣk7%ZpUMJyEfl㽄ç{G^Ϗ|G[gsm kfܛ[M>Q_ {~X<||q~azj?糆??IO?h x3{R#f$/I7$^g\)01uθ9WLk,]S“Ia>SU3k[U2Mx<}6;>};4k{v #g[m]g99&f-~G!{oyP5?>ޟdL\=2z bQ`e5X Yw/oǞ~q6F^UvS FԴFT|SE(WjjI¥tNʕ"V\Jb&&܈Bɽ9Ɲavv=򙨦˝Dlm؛+[74j4u #P,vR0'L4%By e]O}; ?tC;]#;Y$E(Ӽɡb%  ; ;reV緲?䪎*#TURdMꭱpysiogame-1.30.811/sounds/188043__antumdeluge__mouse.ogg0000664000175000017500000001401512201770064021632 0ustar tigertigerOggS8jvorbisDwOggS8@3=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4saz&B'O qVo D?%›lI;gƅ77Km.4}n+{Ӆ-kǗÍNtُ>f_mi&U4i3kqt;$L5JM\Vut̂?)ؕqV7J){=я99z9b9}h9/[%bҗdhA`EjVc?U,}`~p` ھ6k#*!.ԦB`[~{?{ݔ84wdMz^ٙI(W>{w;Wmk0b ]5b)yK Bgh#Xx(ץkO@ˆ'ѥUӑ1 +xj_{n ϡp I㢶֨XQyYW~7eL =Z **PY8?km{{,2 ٽegS&Gl^~UX)&}Gw!0T5Of# i7"UiM  j8m*UOr[$cͅIo(TH|qΠ=D%udY!K$ Xw P?7j U&̀-1, 84@=݃93C&j?ex9529jȝ_7e[Zf/ufB E,\wBPՃceSflq1nyEkl*Gc)&C ++cmW;L@nkkbQ̦[NքJN) 9;\cZje 6o`U: -5;evWч9 ̃1"(%^I4u!߹8}kݧBNe%qD[< 8]|6~HU>\)ywƂ&2 _k!)yPΏjZCNȃ.t%gT#pVkRb*xU0~..J]ϹpuD3U,AU@JD 4'xo|Vė3M r/d`yY|{[VpynWP:**P`RRηzvHaf.{)&R Ȟx#HMZ4blv 0a(T?GՌ_r/(uש{e`^n7~5;w?) {۽fu11y4InS:^]Q pj*$~nlӥp"^^±y&4=$_&{[v+6^)f%v=` fI+aV9 %7h]uX~#"Xk[ t bXz6َLxOR Y|pDZ[$y[\:YH-qt?MN |E}ִ@>()jQ[czV5G>`V==pz.9 Ƽ& q nE'TMU#:WvI=fq*6X76J%:eq|7+FۑM}|C| 44eTCBi_iy\9=Q-hΥ͋e8g iQo*Q1dF,jT@=ˣmThq{ zqURC*ݻn-T|1YN@ ,*%[Es.Wl&G^^D'l]6SI^N}ǢY?@7 xϧd`TxM=ޥ ;W|fֆ/Q<[K>E@sk` ?{>^[Z>ko9pysiogame-1.30.811/sounds/146731__fins__game-fail.ogg0000664000175000017500000004107212201770064020752 0ustar tigertigerOggSSmQ$vorbisDwOggSSm_'}S=vorbis-Xiph.Org libVorbis I 20101101 (Schaufenugget)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4sy'FOVVb\a9̨~v>u&69®XE63 KZX.YK.׽ ~UoF]?L=X OR!n ]θPw.kմVY6 K7.GuGwn?@P WeXNO!1 $C;Ñ׿@u@W= xTnh<)9x Z_$}ʻ~֟&>{oU S+*4qv`&fiĵeWM/8ܯ$d~%l'"̆l ,K[pՄ9<uùi_L~e ` [atgle^o\U>/=mOI' d܀x`;1^cWJ'˱gc1NJKpp!۪+ޮpoĺND Mf( d ?$[z&|=4wd\I-x@o7(k{I)^GJ ^&[^bLY xUs41*͚c{J!%O_|A5 {y U'-\ `솵T i&I%&O!j+Gz1XIܶ8r`l,UR0㟔8\x=̂UTvp{ ƃS]']hMh_}\^B ,~ha\sjYřcp 5tȻ| {C.<}@Ɔ=3CD7/@gcze B2/~X`<5қ<϶6/uxfIu#$ :cv&>y CIɞ8tCǷ&s3re`wƢI`g/'ӧ)~~rzXZ)$ɶZkmBrG!BhN0D@twPy2.l]4&3V]L r7YTϧ?@n!*Rh i^x8f!c@e'/Ȇ?S H{ZgrmB3Iuկg+yv^nbҍsb (Za9\o=ykLfY`7)P+ rt鹰ր wUG2Bl֍Nnjmm[;dM٩@N$#M>}a"xVj6H)h&{&pXt#70ho,n x 6Ԅrx1|C>dW zI6U-0ͻjI%3kA:"myEbĂ @ XxW^1xXlk9~Ԏ p {~,o̕ޠ ܴA2]b^N d ?$ _CzGXf;"lCjz};JπCz?(XZy[G-orte'2߭l*"^L'OWMlh<#֔&3F@gm[ˇKaUql1_~nwN-a_, 23\Fɟ6 $ {M"G@ ,thUe²צbN[OxP\_$o. $쎠:̀7"{uն9(_Dճ/tR>*îaT (5xM=tAt׎Rc{U"F!3 cipy60UsYpz?̆ V  Azs-M ϊ|쎧ᵱok+_o|Eyʬ%Uo9Z UQ-~'l@MT5;-̘Jv(~avz%OggSTSmU3-0103-43)34)11023/2156-20'41'3..41.5462.32+16'20/4002312+52,/3'14/3./2435/65-/6'24)6zo.&ioU`vUzUjmŅ!ۦxT69xz >GJ9no5n nN˹4YwM"G ƿ@ò 9:t5v>+q.?ѕ8aFhD/ @[p:yu^ˎK3CDY.7׭D lۧ)RixzJǮۚ:S zyfG#%aS釩ֲ=6ŠG*|*v;-n7ߝ}r|I mYJVU)h"Dzctƌox@<=^\Tf"o7{[vqT<wlpvh5ǣe6/|9hVB whz|ȞO#7C :v$=|\q/i{s ׀`!߁7=>Z.L%WնjXDf;x kM 1Nke#~pgB}~lA.Z ׃f%u-b8]{f8<@pC-LT]/~Sm"&LD9[F }:ނ}9iHt-%Q szG? ~l&%h᪀} 5$txh)ve;I@u@LmgPtjAK4r/akk8l-x@TL l4?->hflavop m=>Jn O X'R0j:A {c @-Gh,nW _aێ3^>~=185Pj.sv_ z-:o}IlgoDY x?Ns$'oV |Q[NwMN(@W}zm^Jg.hDwQb%^%<+v7pr1wnX5 ˇM1J_] bnz  *eV݃"ȣ_N2o]Ʀ5vY"Vwot[ќKs,CZK&%vlu8 PiQL r<+zBne?1 r2RA/zCE={'Ǝ }7g6Br? s)U0=z;,g?@~Y&ݬͯ:2  sU&2o5Faϱ_|5Y/Zq R|@ 73}7 Z%>wW\kWB_.J.~t5mwK-\pRcXM `\?t8zAcvFzȀw!aSZD*%um.d_7՛ &o4wT c19xU=->5.KyW n8̼4f3:~6|"U T~]>~Y m$vdlCQm 7OI5L!/PD;56v^zT] 7tL$u #h":Lc Ԇv-ؓ@!)݊2˯щAvnO`tMW鞂>[pCLB80/zMJݡ&^5,êy6=xNLZkMZveOӚtc5%,?`ZXsf]!%)rn&'N  MGI:zwXpҹ>3 z.cp_;@ nɑ:8uZkSZku~MANvMNC)ѿ vի 1FzMؖpp񣊊uyB~dR(PC `6D}- keJU[ d@0/\9Y݉fw]IЭě] {JD73i6f#>=L Z?i|gn~&,XKm᪀jBmDX<[w$zUfw I^w$Q6ϼF)S(?IVai`G܆TB-M e-Tj͕P:˶5_X,n m sp=6W(*voQ;A=6+++ABm];i^U~dxa1AAjBmDl>ĵbvqdF 1A L[kMdI=OdQn׿^#|{'iOggSSmT214312156.51+35'33-2104047.16)05'30/41/2033003+17%1.-40-3361.32,24)1/.3/11-01-02&01ĂCM7`7 3c&[+?sG;2_R3kXzV'̆ Nop= J-*)ȷ?_u~[-M]UC{+Cļ@p !;&qQVuʷ. SECuv>γ=v {p;@o6T+:c '0볘חx$gE~x `YnhmDutG翷,ohzIdȀuj [ER5)UƼDrYuW7i+-jUnl*9٭ ®xR{+J=cx v%d>c)NDJ^T7=I6Oɦj 腾vc-`5I+@p[PpjA $ϙ^MxX5328% v㰨AJ º cimjxg} ۋze# Sn d 884u݇Sa̡N', OL_{S >yKMoQ8T,[rֵ z|ѵj}ZF˄ڈ)eQeR w](J@pxY}̴^vʧ$svZdo֚OZgF>e8h~tYJm@a0<^ &ve;(&qT ?pNE}sf&:w0~;MQv\CĂ8@ݞ_x܀ݛ 3XSµd]yM#Sf'p}&?ꢼ.䆗U᫞3QzrbJn+3v]8WY\'d{MXN-֛-_j5H&K?u01n/+4P-wf6pl*gn}52Nh%?̂I U[re~VngBق>{_Y@v]` @XMR/ѧKX\ڎtf0;t{tok9MXp G rWz(͒<N7rk-U>O];}$'I6555Y rqf6,jȸ?mv.c+u%*DFYM_2~zT rPSʿBb4L&mkǰJ_6YnMH+ˏk yvv6Acud,9v]NXg l&֚\?|Vx|zM%uL!r7y\A DԬK Le~謾u?^-z  ^M73φͦ@Ϯop*]߇TTRrl3߰%T 5S\@p,Pu8re6dZi*9_'CG8].gUڷ?n(,'FeK\ܞ"k(H7.7vpa= 2Z[O*3}oo_Y\.?jfmpy-|L1r }%jRT("gK䀘f= P?®8sZ xK2^nA^_A}'rLlUsl?ѱfv5 |~|,fU&)/H˦Y3j1سSZ湝-/A.\Z? f} [XWBƠ<`|t%ݗu6oBSԟfIvx 6BN_<*]ANn ֚beI 0L? [wEs͕*yQe%}{,1Ϟ.bv9og.`-j()I\X'TQ~fZ o羾>Mq/^:z圧>9S^C ,N% =fi-*e|d.y_c˕cb{%DVi|c!1cLZc" ֿ@9(UOM:}{}\f4 H(^=qRh𿙁l5jLVmVGg[kpՊ%៯ZzR(Zդ `wK SaV%=$_s|;VU~dlU[}y9+zٿK_t6R2P-6 UMfc5ڥϩ&ٷجl^S 4P(+W +W X'Yh NC@p}J [دp/׬L~\KM ^VCTN8daGH܀М-l[t g&آkVLD6sVn9ehά̔nv뎱nK K[o N] wB|@p OL?|If=`ňݚ}LJz*MoS34FN^& uy@Ȱc%]ɪm< &p,lN]ZsJ&pj*!*;G݃`'AMތBy *'jbts&Xw\[#cΌkÃrbįē:EXv&ou͵5#d=pɯglu|tBF~?[*@TVY>CYu4:efs@}+ä }}Vgap}h:۹.>C&vSof[tnjZP˶Z[}mPǙa`?X%4_lBS'e,n -| a!, 6Ul6y w+_d ѨL9&3Y:5>G:RUq0nd6my'o,6ө@Gs$FV{*_@ydF?7 H>Xp=F13졐1UPe 6m"V 1)l20c z]^^/!DO]W$2(G`nsޜɔGnwT~LaDB= Ԩu~-?OOj>jASί/Ct.m#q5G%-\\%83V{V{J"L8;5&z'@[3/f9@03=s̟@V/ 2pXn@U,^_aҨ՚IZW2ːL{~4*w()29F PqcƢ#0@:W?ϭ}LǗ7x,JKGt3-hwL5j?CI_׾oiM Zgql|-Ę<\ PqR>Q(Uw.';!P26e \g?']G@BDFHJLNP@OggS"EDKTZMPKLMMehZâC WdpV%tv5DUSwM},jn[4a{5]@Z۶iEA$n7ֵA.Js=rA w`^yYN)<iׇ1qU @ڇ  RgSx5˲ջXو !<\ `?} pV9 Lj^~|} ֳlsar|Sk[qj+***T%QV *U6]SZG!˩Xur:—ɴm] 2{$#bi/RpؿO\^* }3@6èßAK7f @OM4%d2'9AR9l4c2f60e̺.afiZfTV3ְYʺbƴ(PEQ+J JW@2&㫆;۸ @Ιe'^i5m>GocdVbn_tt;:zac@ `N/xֳրN~=:{pJ|<\tR FyYzΘ!9|o" ;ȤFb|K P[!Y Ae8ȻqQorSqO/VäJ}0ұ<ƾ=Gow4E'w!~V˿M*mܦsox8hO m[ ߭Q`Z͆Șd'#κ;& 6"a*T"VT] *.:^i=xi._p/w.cދy\ nN.gAJgr B7b}a-@Nr|8xH:AjOsugӗWoSᯜneDޜHyh >e96rϚQ(FS{]jźtSgi1AUUc+˚ZA4mC&iat11#V,2 fF{m[[bH@NƧ)\ƅ*ķ',GtἸ|Zg[v^ވĈ8]p7/ ‰&^qZui:͎8R$VSN?U# c2z$iDgQq(Ǧf:D Da@VR#?Є 8bR4:KjZ+3HeK6MV3oh&1 ϔ! V0-L+NE*y3|%~yeʑ~ؿ[񩍍RHk`8pKT`.l70 , NЃ`a@; P+<ķFD|_WV= D́>$h*s9+>+>٠ @+VQh50] F F EĨ0 D֘Vu)/@*5d!`U#9kuǛ-pʰ?ľeIӚO'Qſԡ h,MҤ^kf&;K-ٺ ji #֬r*V G>є16ZN^ f37w 70}`7<D&a-z#wX@y#f1QwYW/|5jNٸj{tni() þ\=LYs㷍J)92"9~4{Z@RR-Z)E5 7{>{0 "^Ltz6H V "+~87(:zgI92rSsdҝ|̬Q%#D)BdEw#a$Wߗ+._CwwX U-G* 5X4e۹ ٶ&V 3P ˸>؋IB @[\Ul`˰d%x.n7[f hdmY ҁ`-XxW[' iI@Qu e"vuP&Qk`r1S`Z 7'|Q#{aj'#i:cm Ze[@ $^gSgH>t>H0\ͮe6ycH:@DWl(E ,e:V Ln"~U|֑!!@_ uLs]*rc[$bj 6ȰζVvr?m%JBY㖏ӡȺ&[EnՊ0j,ā D"rCaccnW{3T &g+|)֬aڔklmo VkAH%@RVi6< ٦'LLͦ <Hy}0xH-=̻܁si5CvUR>cϿ{,gt9s, B`+E}+m'eYB`^{3^]>hw;.&Nfc!կG*_屙g?͜l 2/ Ƃ wfZIC3N=_}ɉnvBпpLx\C|ykR>ex)b?{zqo=zç0b^fp/0>v[^ZP7|~g!gl|};'8}ypɳf@d/* xum> dt(UD[c `)6UVU1D&+U`)0((&)ҁ7Sl?r!^ݸe~C/0_^/+4 D%602ar*3epZ_Իu+@N!/@=~qԇ|p[n}}b;M/L4l}ВF>vsHF= @nj5Ž Qm?I&pϾ_]@i3^z6rUOUp Y7يzx~ߡ!=ͭyϏV[_kjN{}PwЧ]/ 4`Z]} Ϻ7mRY(FUD'jU kԲ1,N%QM!wg.py3dw>۽瑿k=@^t劯g~&bKu (w/Ɨyެ9N@KE/Xcx/. p$PT/zw!#g;ʄٵk{xr\k a7\6/?VL?جV"˷Ot?yt:x:-KM(^.{j,,އQ$1^}]v~`#8>i0>ӿz:V[a2L﫦v&`iͅ>PU7%zgc aP% BXgXp b؜aՊ$#1l[*hXIMm`x }1NP6O8)+ Y=~ue\`%w_Yf_ /ӆ΍&9㰷U<4#mOTlݓ5nOn7[ }߁ओKwo\u~Wo0c P0uҰ[k ݤU<4]YS nۮO 3J^EBmh?0Z|At\*od>-xid  8{F)~D͛eM1mEt""\v~_ @X>o ≹`{ͯʻ 3klE(`6=Ԃ<#S`G ]dkʨ/b ̋SKjcZ{"3p{"4ϙ"!/#:{]^=_ ?%`џ p}_\yZ&7qw% }#洿QcҒJzk8ÜW1 7WQRDm P7Ҟ9@ Lr{ฅa',*geE߮MZf.A~}|x¿~uot}KO<\fcv@ CPk$/Wc$rD_75z8C{?/T)☯ .̥o{ šCw_߶j) "Qڷvm Ƣd2 &T(@e*RE-1DĴZFcZѡ$rPbEFe0y=2zY",]B ō`-eecpɲh yqvz8! ^paD~)( |0 f:~;jƽC65WU-zqmjWfǣZ]L$xO-p*TUpsdW˭&MW@ jϯO Ln&WO=,MiY* 7oELQ:}wMCC=@yI3yJnb  5 >>>NsqmFnH"zz\oq^g7oxYدYUC,JE՘mVL -%YUT1VĂbĂӲ, \?"b 7:Ox$<9aǘ!iL @vkfemg=@`m4#1mJk[JzQij[Suz j@2R2hJPu?_W  ' ngL^3i*7V*CL"*xv;ԅm-< `]Cϼ,8§mTC曇7*"7xm{ \14tSEw>HC1IVF= b68aXPU^maa:qܿ-H$-Y2+e~OggSzEDf\`SVfjOUG=H?7|F+]\t$x@QR̾/O.&G7 ;}=&~?hKI,嶭WJehOʥ裬TBS󦼳ɢ HXޮI3<ߦ0"Ph[@z$@KN / uw4M34cW42=A-73OzE tnN &ۊG 2fmPX#&fbq~*R8ʲ|`QM``eY @@"K.3CY@VɅV7J -^3)ȯf0#TCdxkz,mmsVy6s,scwkK˧w/i+GMoN2'oW4P @%vf#bX=֟rz%2X P|;{_SɁжf"x AݛEt;=Y+v{PO1-t׋*hx'W袷 U.O&Ϋ|qIW2@`ڥ͟& L;w5  8;, R U~ V]w 8~|{&$/DDyVm]!yQpLКdutƗbp-TQ; Ĥ@6b\*r4 1<݈Zlǫjfqsbig>Q_Դ/n/ulm'ܜ/%M$^J>C7?(yypXrs 0we(Lm}6͛l9E ݝ;S0{wS 0@ω`n!M8 {Y '0U~Eژ ]&~)H 3O'u nU-֙P3p6 f o)>oh?=ΗOqңq 92R>ry^z՛%Y?hdJ\Ȝ~zoܣ[ :c ߒ\^9ھj]̷vHŻ/{Ds_ |xfdL-7nsl>.>s__znpu@Ǟ9TW|l ; @AK /|``hh~'DH:'] :2Y©'u}gCwI 砆duM|nBMP,Lۧ)5>9kzކ|j=1EdRFuݒɣ0zIMgzkR(;9:k >)CUOMi x+Q7]s<TYny 2sǻs/jL,0?0K<^{3Rnw5rS@JU?{H.y; ,[s v- 0Sta (Q>ܰ_~1CNB,/e5%Y3muZp_j9H<0/$\MoM;wӸQ΢[v'|sʾ3M,i~L={|; .'1bsa% :/P3 Tۏzذad'ӐGO&d=1DCq9Qjj@^K- VГ,;^rv6 $\0;@@w>s)؂W8K7GQ.PS<`@3/6B'7,Z?.dŶc^rUgE2{cO16 DVU%p>Ot+]ct?nkR]p<&7y~5+Koej.5<|]psz(>0;/sOhἀ&ln dtLZ{<<%$0&vR s.CO=\{ q9vD'T7/xky$ Y?鿸D7p>w՗7 ww u}å2LB0@afDZMNߖS .˻Yr݄uR@i@G SCEFۿ}Vb:{\W' **6:9mt)Pcqlĥ nthjwxa*. Ҝo{xnûwg)XqJQN,˗R@Ԕf{nz2_?3^2U,7\TSrsZB&Ij'.۾);6";'lzwh@_sN'+O (z\ZnL?S$P&.5[\4,X ^WlW@F~0[ׇ|}59^_z^5L(\ՓY !ݲw3ّ A%~uB. 7ve$SFmu20TZ&R;(xj'|y;޽TƮ(O0-G}-֫q+yW;{v7fg=Spmf|yC24vuȎߓ {|]&3^>{'r契v!//Mu@f?n`ah K'MoPh'3Kd0]XGS 1vVSAW7彖G| /_4U&/F^!O,/+ y'﷐e r")yqҫgCS@V友 }u9@_~xaxchj7IcвץS~:& GG~@u-iS2oex98sx L?^a!G MV #}Lw.sq|j dgs W%f$yڡN 37^u=U4VP_a'36'{=J:!9l'U\,#)ώHM{5ܢVNAߞYvlhezxǦ>Xvq@14 :y<9 ng{@xiA Y0n5|v~ ͮK,;#M㧏-#Cd5LF&P#{0U7YMƇ|Vƺg`v0e W6ƁVVB|5`4Ԯ6?0wò<޷p-\]aa/[6ƮM~nnblՃ0@L~'U6g:FDo0?4Y|ѝ}߇lzBzi"UUUAaXcy?7tq>qҰ7<|Wrί%atcr\ZhkÈa\dgAٷG_6w_}[B \f{|X~k_n:~ 9.Z(Z"8r~_^]3{kXXа=c&08 fv-671,f5b` 7%7=Iyf7RVdJo/0qݰԀS ;_r Ѹi{#)՘P9;u%-xږ pj|E|}='`~yu°1 JE ,>z :j̺]PN'?"H62{T?,g.f~Kڟ)W#n ~ [>f"U FJ\r7nv9jm8Zv|fD3յOy ґTX^O8yL Ǚ`cڽLL "0-?Al2Ȥf85s?_@j򺿜{>nyy|QaԟM^xQ=<@L'ټj~ >7 6*H̛4ٺQd `Oֹ H "? <Iz'Waȕ- FF G5.~d:y=;?d7%lNJ`?_D_,Clhn`}p1P@}Pl TZ)zC1q9d>>Wލ36xkZ _\[g9k.|?͘`Y<M~ʘX X~'6?Ff'-I&>W=X~\/[o}[OPvL R$z*WGS8\ofXtw+s5*{ܫUo7&{A,-!$]vY}ou [9pp9 jK8.c_kr:4f3]y1]7@";%y#gp1ˣ ,[r_{;>9^=ԛrw~K3v X[00ֲ cl ,'%RF4$671tv8NUg7ݰ'x *RUU2"_26SW/tSG1 -x~-\(l%Yrs< Ѿa渦 :55C_q'T׏b#bxޥN5o6M(cjM1[A^8B>&#n( Nߞڙm}6! z;2k60 /~<&¬< : m:`8 v<` ,)܀OTPM$' ^yʍ}| ۺzQU* 9=?v䀃:cژ dՏͯR;ƻt7rI&ؑTvPTTڍu?(q43@|&y[/^n*'0C3yN{u7-Nw: y}N:e; @`8u '%~~]-o/~ypp,`wf X8$)+{C;XF!ԛݔk,wgqy@ nG,qUaUU$}5VCӛn=~EFZ>;x+f%sV'Η (0ܞ=tc9Ptv+6/=Rb0&@,9GsGU wd1@S+0feN/?y ˱f1!svoi?à \ 4w=8x!T?+Hnl 7* =q?q_v?hrŶ|J$`\~}xQfH f/zӱ 50<`r~)g@Nr[zr@$׋6zvr򐬗 +˝ u&곿qgpMqӥBV%ο1c/x Y=㟺6sa6śre/.?>Pwp d> ƴ?%1p(e ][~J*V*RU5 pq|Ee[<ν]\vc"y/!w y3qvB]km">tuYoZfD`l[/ϷNJGr88>[yRNO[4U&F&/p$bun]e޼w(s-mLϝz`Ì*5㭛Xf6 u0ݗ}F5cƃ[s%8ן:u睻Q۽Ly3={889, bT62I&2oMe#OLgsnL|r=f*25UI@+_);ptGۄٓ~תl|pk3d*]sw.T].oLOtD-m0llL'Q,oƟsbn)g_'`& ^\w~v̽"oG|3Aρ < p_|i}]kW ;0$s맆qj` L=u{? T6RFA)Mo;sTÐ@cxZޏ8[Lӱž:S-j.IH񥙿@W'_-:1Ol)^І'L tt<qii[SMWq7%?Bײl L{F_]yh:}o`c Cߏ`I Hy|Q~3C?o[cXOO-w}7 7y02g-JNQW*઼S܉JΦ]3SeۿW<~ͭ0!N@>U,4f$; h&:v4]|}&PxcYoco>t`ۍ ܾn+z0mOIu ?zJlۧf>r?L-O .o3}<w|ӯDhn `nUU(0ᙎLݞv&յ^I=09\3|N^Tlz?p:NO3~sX3CYUu4@c &c0jc9*D @ >L0֖FߙI5S?G1lsۖ[[Z髝ܝ-KS:o7W%QatYrh!ڴ6_Y=G C.-8)wVdi$y.3.>$Nn?s#D.ʞm:c~a/pe:uY_@IS[=s|{DW0P]g wlMP7 I$P@N%05y02!)3SU $ް`n( 6+fͺ[0`7Jw#mkLewٍ6?;Im7k>\Ø̮۾چ 2 txkdChNEUmgJOk%ಒ?zS7xb`3tD}`&<[:6  OYϴ6@sH-)> @E/WG{TTyL'W/J@̧|UN>tn (o&ǘ烋}G \NPxXp l $ q[:)WHP^$JJ$=Ҙmp +{Opc oajRJ0sz ؈ekhe;ǫ箋Fc@΢2}:`u*J{',\2<bMͅ$grL= *z(ڿߕ#{eU|{֟|m5ޤ+X@fl>0{O^.1V> =4>8=}{yɡR#!x8ƾx: ?@ͩ* D a *|SksQsyz@@`6?(iԼ%a @̳茗}} i"1*u9 ZDv k6V>wZ^۩FKS ==쀋ذ7Lݹ~ ¢ٿy͝PS?ߙy0 p'5UȩL㳑l6ynb]??tP@:1ӵއ$^ c79d).duT2s2s\k`y:NN r(Ӝ_bΌ9\릺%&>G$T ,kl&7dImCcwap[~uwe2,bjJI Nr1Z‘n9cmTJxnDmZ$,_7DP {`.o,@K]=C #0y`b!?{˿ Y^a\OTZ}Γ=ϐõ+=ټ'i~%'ӣy^뽿qof V*'OuNgù @?ǯX-i=RZqP7JIjwK@3Hr6X=*3/] k=D JgY.F#Ho[(Ouw :,3λL\×T0 '⻾#gnXwoB?m=e, 0f/x)3MMċ5;tbmJӣ_?Xw[>P_"LJ xE_,O-p7ղn@Lfw3 peW~ϗ~`fSfft =/-Z 3 k7=KM?i^P,gCzNwg i * OggSfED)WrwwkmvT6B 1kMn;K)Ds Xfun',^%ð-ǰȴ*TK-?7cP G;(ЍB/_=h]k2|ӫqkxC;`ި_gEjCJAĿhEyir6r41#jj5,RԿn3 tNp΢R<7w*F̗޹ ~Hc@ix`}3zм! Wjc6n{;P}``f慜Â?@'A=3]gzV(pM Kx'PD'JẶߙB G4;x"XuݭZD*L0oFÓ7}SN P)jΝ;k@gV4=6a]ՂJ|{ѡ/Dzs<~shk ?EQ|̛~v~nz5AK>38kgBwD)~N<|-|O_i;'1]̮g}7l7x ȬS7ߏ}`.>پY_ц>0$Q?A''3wr5{w (v5C , (EDxȵB$7S*`a|ɍq+>z?Sŋ`qpvr覓Ytt ]~~ه/JbTFg}kӿ5:oݎC^T9̳8,5KH >`vo29TS@3 ,9=Q!)a6ŀ{Ƿ|z >8H~8~4lY`jp'og"6q}3 Q,TLdUQxC_oIqT^NK/7P mxPY|I\@ P<4X $7`Dp=S*RA)Re]Jۚ!Ko`Q5Z1@JΫm-+0Gavi+^x5ڕ)a-*V')n״;{Wvo>5Bukx!x&-~Gu3K ꖇ= _ǒP wyc'9-wS|i!U̝.W@DZ@7Q7w `pysA>^L":kӝ]5δ[oQkGO]]Qy*NxF3uW^ 5l}UЙe?c81M%6lNDox  Pv6%Kޯ Iyfُ/s]D5RT\l`፵w:CYcשt'vmZNebo N3bk^oN?Utϡ0Czc88@ PDpIfz\?vMO;_ЍGWO8r}M6 0y)` ^N qo/ mSEkM~eIƷ?`3 ]{:)WŐ̸ d%eHdaS2N[,OJ ēm}PdH)O* ^fOf8( '% (fv?;v#E|+@>knf&PSJTv|<++xaUݎyG\Ĺn%>NnqqʅK7U{Bb>߇i sҳ1_M}a0txv .1eA;+@A=0ۂ lGIo7i>sB@dE4<44p(=u&3I;0?xin~뉖zqˋ]3jz[p_Zrܑ+&~aLbFKSJ AGR$[0 vD'J@T@ x2(}Ѽxn2nkv1gCP @ (tώskNkx=>n3cInʜn뙚 ͎}U`k>10vfs)Wcl &y^ =UErANUןL t ?a֨ @_ϙT}/'zXps3=dT]]S&]o`orط*">"i^O_oU2tM||w!z3buɬScuC{4MPކ.Q2=BcHAv7MJp+{̨l? aBp~ECwyC՟m˙D dudm.<lja֍|OU&/Aޚxzxuvbzؤ?/;&fP.I_p>pIwҀ7kL-MLl#_ܧOflx{sm7T]t]6@<Ǻ\\Z05 Vq'w2m8%  d~{h؇ ༳r=)w]p3 eA~j_9N>fJv   ֛f>>]}*3ʩ{~faz)6'w 23: data[0] = x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.initcolor = self.color self.board.board_bg.color = self.color self.board.board_bg.update_me = True self.board.add_unit(0,0,data[0],1,classes.board.Label,"Copyright (C) 2012 - 2013 Ireneusz Imiolek",self.color,"",1) self.board.add_unit(0,1,data[0],1,classes.board.Label,"Game ideas: Kamila Roszak-Imiolek, Ireneusz Imiolek",self.color,"",2) self.board.add_unit(0,2,data[0],1,classes.board.Label,"",self.color,"",2) self.board.add_unit(0,3,data[0],1,classes.board.Label,"Laby, 2010 by Mehdi Cherti(mehdidc)",self.color,"",2) self.board.add_unit(0,4,data[0],1,classes.board.Label,"Sounds by various authors who contributed their works to freesound.org",self.color,"",2) self.board.add_unit(0,5,data[0],1,classes.board.Label,"Images by various authors who contributed their works to openclipart.org",self.color,"",2) self.board.add_unit(0,6,data[0],1,classes.board.Label,"Please view credits.txt for more info about authors of media files used in this project",self.color,"",2) self.board.add_unit(0,7,data[0],1,classes.board.Label,"",self.color,"",2) self.board.add_unit(0,8,data[0],1,classes.board.Label,"Licence",self.color,"",1) self.board.add_unit(0,9,data[0],6,classes.board.Label,["This program is free software: you can redistribute it and/or modify", "it under the terms of the GNU General Public License as published by", "the Free Software Foundation, either version 3 of the License, or", "(at your option) any later version.", "You should have received a copy of the GNU General Public License", "along with this program. If not, see ."],self.color,"",2) #self.outline_all(1,1) for each in self.board.units: each.font_color = font_color def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game007.py0000644000175000017500000002115512201770064016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,27) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): self.vis_buttons = [0,1,1,0,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = True self.board.draw_grid = False s = random.randrange(150, 190, 2) v = random.randrange(230, 255, 2) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,30,230) #highlight 1 self.color = color0 self.highlight_color = ex.hsv_to_rgb(h,230,150) font_color = ex.hsv_to_rgb(h,70,230) white = ((255,255,255)) self.level.game_step = 0 self.start_sequence = True self.completed_mode = False self.game_over_mode = False self.disp_counter = 0 self.disp_len = 3 self.found = set() #setting level variable #data = [x_count, y_count, number_count, top_limit, ordered] if self.level.lvl == 1: data = [13,9,0,3,3,1] elif self.level.lvl == 2: data = [13,9,0,3,3,2] elif self.level.lvl == 3: data = [13,9,0,3,3,3] elif self.level.lvl == 4: data = [13,9,0,3,4,4] elif self.level.lvl == 5: data = [13,9,0,3,4,5] elif self.level.lvl == 6: data = [13,9,0,3,4,6] elif self.level.lvl == 7: data = [12,9,0,4,4,7] elif self.level.lvl == 8: data = [12,9,0,4,4,8] elif self.level.lvl == 9: data = [12,9,0,4,4,9] elif self.level.lvl == 10: data = [12,9,0,4,5,10] elif self.level.lvl == 11: data = [12,9,0,4,5,11] elif self.level.lvl == 12: data = [12,9,0,4,5,12] elif self.level.lvl == 13: data = [13,9,0,5,5,13] elif self.level.lvl == 14: data = [13,9,0,5,5,14] elif self.level.lvl == 15: data = [13,9,0,5,5,15] elif self.level.lvl == 16: data = [13,9,0,5,6,16] elif self.level.lvl == 17: data = [13,9,0,5,6,17] elif self.level.lvl == 18: data = [13,9,0,5,6,18] elif self.level.lvl == 19: data = [12,9,0,6,6,19] elif self.level.lvl == 20: data = [12,9,0,6,6,20] elif self.level.lvl == 21: data = [12,9,0,6,6,21] elif self.level.lvl == 22: data = [12,9,0,6,7,22] elif self.level.lvl == 23: data = [12,9,0,6,7,23] elif self.level.lvl == 24: data = [12,9,0,6,7,24] elif self.level.lvl == 25: data = [13,9,0,7,7,25] elif self.level.lvl == 26: data = [13,9,0,7,7,26] elif self.level.lvl == 27: data = [13,9,0,7,7,27] #self.chapters = [1,3,5,7,9,11,13,15,17] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: data[0] = self.get_x_count(data[1],even=True) else: data[0] = self.get_x_count(data[1],even=False) self.data = data self.square_count = self.data[3]*self.data[4] if self.square_count % 2 == 0: a = 0 else: a = 1 self.max_games = self.square_count // 2 + a self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.current_count = data[5] self.level.games_per_lvl = self.current_count self.choice_list = [x for x in range(1,data[2]+1)] self.shuffled = self.choice_list[:] random.shuffle(self.shuffled) h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]#-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3])//2 #side margin width self.board.add_door(w2,h1,data[3],data[4],classes.board.Door,"",white,"") x = w2 y = h1 for i in range(self.square_count): caption = str(i+1) self.board.add_unit(x,y,1,1,classes.board.Letter,caption,color0,"",3) self.board.ships[i].highlight = False self.board.ships[i].readable = False self.board.ships[i].font_color = font_color if x >= w2+data[3]-1: x = w2 y += 1 else: x += 1 self.outline_all(0,1) #horizontal if data[4] < 8: self.board.add_unit(0,0,data[0],h1,classes.board.Obstacle,"",white,"",7)#top if data[4] < 9: self.board.add_unit(0,h1+data[4],data[0],h2,classes.board.Obstacle,"",white,"",7)#bottom 1 #side obstacles if data[3]<12: self.board.add_unit(0,h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#left self.board.add_unit(w2+data[3],h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#right self.board.all_sprites_list.move_to_front(self.board.units[0]) self.draw_nums() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.show_msg == False and self.start_sequence==False: if 0 <= self.board.active_ship < self.square_count: active = self.board.ships[self.board.active_ship] if active.unit_id in self.chosen: active.initcolor = self.highlight_color active.color = self.highlight_color len1 = len(self.found) self.found.add(active.unit_id) len2 = len(self.found) if len2 > len1: self.level.game_step+=1 self.mainloop.redraw_needed[1] = True if len(self.found)==self.current_count: self.completed_mode = True self.ai_enabled = True else: active.initcolor = (255,0,0) active.color = (255,0,0) self.game_over_mode = True #self.game_over() self.ai_enabled = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def draw_nums(self): choice = [x for x in range(self.square_count)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:self.current_count] def next_level(self): self.level.levelup() def game_over(self): self.current_count = self.data[5] self.level.load_level() def highlight_colors(self): for each in self.board.ships: if each.unit_id in self.chosen: each.initcolor = self.highlight_color each.color = self.highlight_color each.update_me = True self.mainloop.redraw_needed[0] = True self.mainloop.redraw_needed[1] = True def reset_colors(self): for each in self.board.ships: each.initcolor = self.color each.color = self.color each.update_me = True self.mainloop.redraw_needed[0] = True def ai_walk(self): if self.start_sequence: if self.disp_counter < self.disp_len: if self.disp_counter == 0: self.highlight_colors() self.disp_counter += 1 else: self.reset_colors() self.start_sequence = False self.ai_enabled = False self.disp_counter = 0 elif self.completed_mode: self.disp_counter += 1 if self.disp_counter > 1:# self.disp_len: self.completed_mode = False self.disp_counter = 0 self.next_level() elif self.game_over_mode: self.disp_counter += 1 self.highlight_colors() if self.disp_counter > 2:# self.disp_len: self.game_over_mode = False self.disp_counter = 0 self.game_over() def check_result(self): passpysiogame-1.30.811/game_boards/game067.py0000644000175000017500000002607312201770064016742 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import classes.board import random import pygame import sys from math import sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) self.max_size = 99 self.board.draw_grid = False def create_game_objects(self, level = 1): #create non-movable objects self.active_tool = 0 self.active_letter = "Α" self.active_word = "Άλογο" self.var_brush = 1 s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 255) letter_color = ex.hsv_to_rgb(h,s,v) self.bg_color = [255,255,255] color = [255,255,255] data = [35,24,0,6] font_size = 13 font_size2 = 14 self.brush_size = data[3] #stretch width to fit the screen size max_x_count = self.get_x_count(data[1],even=None) if max_x_count > 35: data[0] = max_x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) #canvas self.board.add_unit(10,0,data[0]-16,data[1],classes.board.Letter,"",color,"",font_size) self.canvas_block = self.board.ships[0] self.canvas_block.set_outline([0,54,229],1) self.canvas_block.font3 = self.board.font_sizes[font_size2] images = ["paint_pencil.png","paint_brush.png","paint_wide_brush.png","paint_rect.png","paint_circle.png","paint_eraser.png","paint_bucket.png"] x=0 y=0 i_chr = 65 alphabet = self.lang.alphabet_uc[:] alphabet.extend(self.lang.alphabet_lc) for i in range(0,60): if i < 48: caption = alphabet[i] else: caption = str(i-47) self.board.add_unit(x,y,2,2,classes.board.Letter,caption,letter_color,"",0) y += 2 i_chr += 1 if y > 23: y = 0 x += 2 self.board.add_door(0,0,2,2,classes.board.Door,"",color,"") self.board.add_door(data[0]-1,15,1,1,classes.board.Door,"",color,"") tool_len = len(self.board.ships) tool_max = tool_len - 3 h = 0 s = 250 v = 70 #number of available color spaces minus 2 for black and white number_of_colors = data[1]*6 - 2 number_of_hues = 24 #13 number_of_col_per_hue = 6#number_of_colors // number_of_hues #if number_of_col_per_hue > 3: v_num = (255-v)//(number_of_col_per_hue) #greyscale grey_num = 6 #number_of_colors+2 - number_of_hues * number_of_col_per_hue if grey_num > 1: grey_v_num = (255 // (grey_num-1)) else: grey_v_num = 0 grey_count = 0 for j in range(0,data[1]): for i in range(data[0]-6, data[0]): color2 = ex.hsv_to_rgb(h,s,v) self.board.add_unit(i,j,1,1,classes.board.Letter,"",color2,"",2) if h < 249: if i < data[0]-1: v += v_num else: v = 70 s = 250 h += 11 if h > 248: if grey_count == 0: s = 0 v = 0 grey_count += 1 else: v += grey_v_num self.active_color = self.board.ships[161].initcolor self.size_display = self.board.units[0] self.tool_door = self.board.units[-2] self.color_door = self.board.units[-1] self.btn_down = False #points self.p_first = [0,0] self.p_last = [0,0] self.p_prev = [0,0] self.p_current = [0,0] self.outline_all(1,1) doors = [self.tool_door,self.color_door] for each in doors: each.door_outline = True each.perm_outline_color = [255,0,0] self.board.all_sprites_list.move_to_front(each) for each in self.board.ships: each.outline = False each.immobilize() self.canvas = pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.canvas.fill(self.canvas_block.initcolor) self.paint_bg_letter() self.canvas_org = self.canvas.copy() #pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: # Change the x/y screen coordinates to grid coordinates pos = event.pos active = self.board.active_ship if event.button == 1: if active == 0: self.btn_down = True canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_first = canvas_pos self.p_prev = canvas_pos self.p_current = canvas_pos self.paint_pencil(0) pygame.mouse.set_cursor(*pygame.cursors.broken_x) elif 0 < active < 61: self.active_letter = self.board.ships[self.board.active_ship].value #self.active_word = self.word_list[self.board.active_ship-1] self.tool_door.set_pos(self.board.active_ship_pos) self.paint_bg_letter() elif active > 60: self.active_color = self.board.ships[active].initcolor self.color_door.set_pos(self.board.active_ship_pos) elif event.type == pygame.MOUSEMOTION and self.btn_down == True: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_prev = self.p_current self.p_current = canvas_pos self.paint_pencil(1) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: #drop the new object onto the painting canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_last = canvas_pos self.paint_pencil(2) else: if self.btn_down: self.screen_restore() self.copy_to_screen() self.btn_down = False def paint_bg_letter(self): txt = self.active_letter val = ex.unival(txt) text = self.canvas_block.font.render("%s" % (val), 1, (220, 220, 220, 0)) font_x = ((self.board.scale*self.canvas_block.grid_w-self.canvas_block.font.size(val)[0])//2) font_y = ((self.board.scale*self.canvas_block.grid_h-self.canvas_block.font.size(val)[1])//2) #- 3*self.board.scale self.canvas.fill([255,255,255]) self.canvas.blit(text, (font_x,font_y)) #self.canvas.blit(text2, (font_x2,font_y2)) self.copy_to_screen() #states => mouse states => 0 - mouse_btn_down, 1 - mouse_move, 2 - mouse_btn_up def paint_pencil(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() pygame.draw.circle(self.canvas, self.active_color, self.p_current, self.brush_size//2,0) self.copy_to_screen() elif state == 1: width = self.brush_size if self.brush_size > 2: if self.brush_size % 2 == 0: r = self.brush_size // 2 width = self.brush_size +3 else: r = self.brush_size // 2# - 1 width = self.brush_size+2 pygame.draw.circle(self.canvas, self.active_color, self.p_current, r,0) if self.brush_size > 3: self.draw_line(self.p_prev,self.p_current,self.brush_size,self.brush_size) else: pygame.draw.line(self.canvas, self.active_color, self.p_prev, self.p_current,width) self.copy_to_screen() def draw_line(self,p1,p2,bs1,bs2): #find points for the corners of the polygon using Tales Theorem #and draw the polygon - rotated rectangle or trapezium and 2 circles at the ends of the 'line' v = sv.Vector2.from_points(p1, p2) if v[0] != 0 or v[1] != 0: bs1 = bs1//2 bs2 = bs2//2 #vector length v_len = sqrt(v[0]*v[0] + v[1]*v[1]) x1 = v[1]*bs1/v_len y1 = v[0]*bs1/v_len if bs1 != bs2: x2 = v[1]*bs2/v_len y2 = v[0]*bs2/v_len else: x2 = x1 y2 = y1 points = [] points.append([int(p1[0]-x1),int(p1[1]+y1)]) points.append([int(p1[0]+x1),int(p1[1]-y1)]) points.append([int(p2[0]+x2),int(p2[1]-y2)]) points.append([int(p2[0]-x2),int(p2[1]+y2)]) pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) pygame.draw.circle(self.canvas, self.active_color, p1, bs1,0) pygame.draw.circle(self.canvas, self.active_color, p2, bs2,0) def backup_canvas(self): self.canvas_org = self.canvas_block.painting.copy() def copy_to_screen(self): self.canvas_block.painting = self.canvas.copy() self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True def screen_restore(self): self.canvas = self.canvas_org.copy() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game041.py0000644000175000017500000003741712201770064016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex from classes.simple_vector import Vector2 import pygame import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,2,15) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #data = [x_count, y_count, square_num, canvas_height, non_vertical, color_difference, games_per_level, mess_drawing_function] #setting up game flow / level dificulty if self.level.lvl == 1: data = [11,9,3,6,2,50,2,self.straight_lines,3] elif self.level.lvl == 2: data = [11,9,5,6,2,35,2,self.straight_lines,2] elif self.level.lvl == 3: data = [11,9,7,6,2,25,2,self.straight_lines,1] elif self.level.lvl == 4: data = [11,9,9,6,2,20,2,self.straight_lines,1] elif self.level.lvl == 5: data = [11,9,3,6,2,50,3,self.bezier_lines,3] elif self.level.lvl == 6: data = [11,9,5,6,2,35,3,self.bezier_lines,2] elif self.level.lvl == 7: data = [11,9,7,6,2,25,3,self.bezier_lines,1] elif self.level.lvl == 8: data = [11,9,9,6,2,20,3,self.bezier_lines,1] elif self.level.lvl == 9: data = [11,9,3,6,2,50,4,self.bezier2x_lines,3] elif self.level.lvl == 10: data = [11,9,5,6,2,35,4,self.bezier2x_lines,2] elif self.level.lvl == 11: data = [11,9,7,6,2,25,4,self.bezier2x_lines,1] elif self.level.lvl == 12: data = [11,9,9,6,1,20,4,self.bezier2x_lines,1] elif self.level.lvl == 13: data = [11,9,3,6,2,50,4,self.bezier3x_simplified,3] elif self.level.lvl == 14: data = [11,9,5,6,2,35,4,self.bezier3x_simplified,2] elif self.level.lvl == 15: data = [11,9,9,6,1,20,4,self.random_lines,1] self.chapters = [1,5,9,13,15] #rescale the number of squares horizontally to better match the screen width x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.data = data self.colors = [] self.all_colors = [[224,26,26],[224,107,26],[216,224,26],[80,224,26],[28,169,20],[26,97,224],[42,26,224],[151,23,196],[204,24,192]] self.level.games_per_lvl = data[6] self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) s = random.randrange(5, 20) v = random.randrange(240, 250) h = random.randrange(0, 255) color = ex.hsv_to_rgb(h,s,v) self.board.add_unit(0,1,data[0],data[3],classes.board.Obstacle,"",color) self.board.units[0].set_outline(0,1) self.top_colors = [] h = random.randrange(0, 75, 1) start_from = (data[0]-data[2])//2 end_at = start_from+data[2] j=1 for i in range(start_from, end_at): s = random.randrange(180, 250, 5) v = random.randrange(180, 250, 5) color = ex.hsv_to_rgb(h+(i-start_from)*data[5],s,v) self.colors.append(self.all_colors[j-1]) #self.board.add_unit(i,0,1,1,classes.board.Label,str(j),color,"",3) #self.board.add_unit(x,y,1,1,classes.board.ImgShip,"",apple_bg,data[6]) self.board.add_door(i,0,1,1,classes.board.Door,"",color,"b"+str(j)+".png") self.board.add_unit(i,data[1]-1,1,1,classes.board.ImgShip,"",color,"t"+str(j)+".png") self.board.ships[-1].outline=False self.board.units[-1].outline=False j += data[8] self.colors_completed = self.colors[:] self.draw_the_mess(data,start_from,end_at) for i in range(data[0]): if self.solution_positions[i] == 1: self.board.add_door(i,data[1]-2,1,1,classes.board.Door,"",color,"") self.board.units[-1].door_outline = True def draw_the_mess(self,data,start_from,end_at): #set up the beginning and ending positions #starting points: step = self.board.scale self._step = step half_st = round(self.board.scale/2) self.possible_positions = [] self.start_positions = [] self.end_positions = [] self.ready_lines = [] indexes = [] self.solution = [] self.solution_colors = [] self.solution_positions = [] for i in range(data[0]): next_step = [i*step+half_st,step*data[3]-1] self.possible_positions.append(next_step) indexes.append(i) self.solution_positions.append(0) for i in range(start_from, end_at): next_step = [i*step+half_st,0] self.start_positions.append(next_step) #repeat until the difference is larger than 2 steps picked = next_step while (picked[0] < (next_step[0]+(step*data[4]))) and (picked[0] > (next_step[0]-(step*data[4]))): index = random.randrange(0,len(indexes)) picked = self.possible_positions[indexes[index]] self.end_positions.append(picked) self.solution.append(indexes[index]) del(indexes[index]) #get a list of positions where the squares should be dragged to for i in range(0,len(self.solution)): self.solution_positions[self.solution[i]]=1 self.canvas = pygame.Surface([self.board.units[0].grid_w*self.board.scale, self.board.units[0].grid_h*self.board.scale-1]) self.canvas.fill(self.board.units[0].initcolor) #create randomized lines for i in range(data[2]): data[7](data, self.canvas, i) #and draw them all at once in a separate loop self.draw_lines() def draw_lines(self): self.canvas.fill(self.board.units[0].initcolor) self.swap_colors() for i in range(self.data[2]): pygame.draw.aalines(self.canvas, self.colors_completed[i], False, self.ready_lines[i]) self.board.units[0].painting = self.canvas.copy() self.board.units[0].update_me = True def swap_colors(self): for each_item in self.board.ships: if each_item.grid_y == 7 and each_item.grid_x == self.solution[each_item.unit_id]: self.colors_completed[each_item.unit_id] = self.colors[each_item.unit_id] else: self.colors_completed[each_item.unit_id] = [0,0,0] def straight_lines(self, data, canvas, i): self.ready_lines.append([self.start_positions[i],self.end_positions[i]]) def bezier_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end_midifier], [end]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] modifiers=[[0,0],[0,0]] modifiers[0]=[random.randrange(0,self.layout.game_w),random.randrange(self._step*2,self._step*data[3])] modifiers[1]=[random.randrange(0,self.layout.game_w),random.randrange(0,self._step*(data[3]-2))] points = [Vector2(self.start_positions[i]), Vector2(modifiers[0]), Vector2(self.end_positions[i]), Vector2(modifiers[1])] bezier_points = ex.DrawBezier(points) self.ready_lines.append(bezier_points) def bezier2x_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end], [end_midifier]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] canvas_w = self.layout.game_w canvas_h = self._step*data[3] x_center = self.layout.game_w //2 y_center = self._step*data[3]//2 bezier = [[[0,0] for j in range(4)] for j in range(2)] #line 1 start bezier[0][0] = Vector2(self.start_positions[i]) bezier[0][1] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step*2,canvas_h-self._step))#mod1 #first point modifier #line 1 end bezier[0][2] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,canvas_h-self._step)) #first line end bezier[0][3] = Vector2(ex.rand_safe_curve(bezier[0][2],canvas_w,canvas_h)) #line 3 start bezier[1][0] = bezier[0][2] bezier[1][1] = bezier[0][2] + Vector2(-(Vector2.from_points(bezier[0][2], bezier[0][3]))) #5th point modifier #line 3 end bezier[1][2] = Vector2(self.end_positions[i]) #last point bezier[1][3] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,self._step*(data[3]-1))) #6th point modifier bezier_points = [] for j2 in range(2): bezier_points.extend(ex.DrawBezier(bezier[j2])) self.ready_lines.append(bezier_points) def bezier3x_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end], [end_midifier]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] canvas_w = self.layout.game_w canvas_h = self._step*data[3] x_center = self.layout.game_w //2 y_center = self._step*data[3]//2 bezier = [[[0,0] for j in range(4)] for j in range(3)] #line 1 start bezier[0][0] = Vector2(self.start_positions[i]) bezier[0][1] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step*2,canvas_h-self._step))#mod1 #first point modifier #line 1 end bezier[0][2] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,canvas_h-self._step)) #first line end bezier[0][3] = Vector2(ex.rand_safe_curve(bezier[0][2],canvas_w,canvas_h)) #line 2 start bezier[1][0] = bezier[0][2] bezier[1][1] = bezier[0][2] + Vector2(-(Vector2.from_points(bezier[0][2], bezier[0][3]))) #3rd point modifier #line 2 end if bezier[0][2][0] > x_center: #if first point is on the right the second will be on the left x_range = [self._step,x_center] else: x_range = [x_center,canvas_w-self._step] if bezier[0][2][1] > y_center: #if first point is on the bottom the second will be on the over the center y_range = [self._step,y_center] else: y_range = [y_center,canvas_h-self._step] bezier[1][2] = Vector2(random.randrange(*x_range),random.randrange(*y_range)) #second line end bezier[1][3] = Vector2(ex.rand_safe_curve(bezier[1][2],canvas_w,canvas_h)) #line 3 start bezier[2][0] = bezier[1][2] bezier[2][1] = bezier[1][2] + Vector2(-(Vector2.from_points(bezier[1][2], bezier[1][3]))) #5th point modifier #line 3 end bezier[2][2] = Vector2(self.end_positions[i]) #last point bezier[2][3] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,self._step*(data[3]-1))) #6th point modifier bezier_points = [] for j in range(3): bezier_points.extend(ex.DrawBezier(bezier[j])) self.ready_lines.append(bezier_points) def bezier3x_simplified(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end], [end_midifier]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] canvas_w = self.layout.game_w canvas_h = self._step*data[3] x_center = self.layout.game_w //2 y_center = self._step*data[3]//2 first = self.start_positions last = self.end_positions bezier = [[[0,0] for j in range(4)] for j in range(3)] #points = ex.simplified_points(self.start_positions[i],self.end_positions[i],canvas_w,canvas_h,x_center,y_center,self._step) bezier[0][0] = Vector2(first[i]) bezier[0][1] = Vector2(random.randrange(first[i][0] - self._step*2,first[i][0]+self._step*2),random.randrange(self._step*3,canvas_h))#mod1 #first point modifier #p1 if first[i][0] < x_center: x_range = (first[i][0]+self._step,canvas_w-self._step) else: x_range = (self._step, first[i][0]-self._step) y_range = (self._step, y_center-self._step//2) #line 1 end bezier[0][2] = Vector2(random.randrange(*x_range),random.randrange(*y_range))#Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,canvas_h-self._step)) #first line end bezier[0][3] = Vector2(bezier[0][2][0],bezier[0][2][1]-self._step) #modifier2 = (x, y-step) #modifier3 = (x, y+step) #line 2 start bezier[1][0] = bezier[0][2] bezier[1][1] = Vector2(bezier[0][2][0],bezier[0][2][1]+self._step)#bezier[0][2] + Vector2(-(Vector2.from_points(bezier[0][2], bezier[0][3]))) #3rd point modifier #p2 if last[i][0] < x_center: x_range = (last[i][0]+self._step, canvas_w-self._step) p4_x_mod = last[i][0]-self._step else: x_range = (self._step, last[i][0]-self._step) p4_x_mod = last[i][0]+self._step y_range = (canvas_h-y_center,round(canvas_h-self._step*0.5)) #modifier2 = (x+step,y-step) #modifier3 = (x-step,y+step) bezier[1][2] = Vector2(random.randrange(*x_range),random.randrange(*y_range)) #second line end bezier[1][3] = Vector2(bezier[1][2][0]+self._step,bezier[1][2][1]-self._step) #line 3 start bezier[2][0] = bezier[1][2] bezier[2][1] = Vector2(bezier[1][2][0]-self._step,bezier[1][2][1]+self._step)#bezier[1][2] + Vector2(-(Vector2.from_points(bezier[1][2], bezier[1][3]))) #5th point modifier #line 3 end bezier[2][2] = Vector2(self.end_positions[i]) #last point bezier[2][3] = Vector2(p4_x_mod,random.randrange(2 * self._step,canvas_h - self._step)) #Vector2(random.randrange(self.end_positions[i][0]-self._step//2,self.end_positions[i][0]+self._step//2),random.randrange(self._step*(data[3]-3),self._step*(data[3]-1))) #6th point modifier bezier_points = [] #print(bezier) #labels = ["p1s","mod","p1e","mod","p2s","mod","p2e","mod","p3s","mod","p3e","mod"] for j in range(3): bezier_points.extend(ex.DrawBezier(bezier[j])) self.ready_lines.append(bezier_points) def random_lines(self, data, canvas, i): #draw each line using different function functions = [self.straight_lines,self.bezier_lines,self.bezier2x_lines] index = random.randrange(3) functions[index](data, canvas, i) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONUP and event.button == 1: self.draw_lines() self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: correct = True if self.solution_positions == self.board.grid[7]: for each_item in self.board.ships: if each_item.grid_x != self.solution[each_item.unit_id]: correct = False break else: correct = False if correct == True: self.level.next_board() else: self.changed_since_check = False self.say(self.d["Please try again."]) self.level.try_again() pysiogame-1.30.811/game_boards/game076.py0000644000175000017500000004334712201770064016745 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,6) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color #font_color = ex.hsv_to_rgb(227,255,50) #font_color = (85,0,212) font_color = (50,0,150) self.grey = (200,200,200) self.greyoutline = (190,190,190) self.font_hl = (100,0,250) self.font_hl2 = (250,0,200) self.font_hl3 = (200,0,250) self.hint1_fcol = (100,0,250) self.hint2_fcol = (200,0,0) self.hint3_fcol = (250,0,200) self.task_str_color = ex.hsv_to_rgb(200,200,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) self.white = white if self.level.lvl == 1: rngs = [3,9,20,50] elif self.level.lvl == 2: rngs = [3,9,50,99] elif self.level.lvl == 3: rngs = [3,9,100,150] elif self.level.lvl == 4: rngs = [3,9,200,500] elif self.level.lvl == 5: rngs = [3,9,500,999] elif self.level.lvl == 6: rngs = [20,50,21,99] if self.lang.lang == 'pl': self.divisor_pos = 1 else: self.divisor_pos = 0 data = [39,25] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [0,1,1,1,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) nr1 = random.randrange(rngs[0],rngs[1]) nr2 = random.randrange(rngs[2],rngs[3]) self.n1 = nr1 * nr2 self.n2 = nr1 self.sumn1n2 = nr2 #self.n1+self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 0 self.correct = False self.carryl = [] self.resultl = [] self.nums1l = [] self.nums2l = [] self.ship_id = 0 self.up_count = 0 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.divisor_pos == 0: r_offset = 0 d_offset = 0 ds_offset = 0 d_str = "¥" d_h = 3 num2_align = 2 else: r_offset = 4 d_offset = self.n1sl*2+1 ds_offset = self.n1sl*2-3 d_str = "÷" d_h = 4 num2_align = 1 if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " ÷ " + self.n2s + " = " + qm #question self.board.add_unit(1,0,data[0]-1-self.sumn1n2sl*2-1-self.n1sl*2 ,2,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 self.question = self.board.units[-1] j = 0 xs = self.data[0]-self.n1sl*2 #first number for i in range(self.n1sl): self.board.add_unit(xs+i*2-r_offset,3,2,2,classes.board.Label,self.n1s[i],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i j += 1 #second number self.board.add_unit(data[0]-4-j*2+d_offset,3,3,2,classes.board.Label,self.n2s,white,"",21) self.num2 = self.board.units[-1] self.num2.align = num2_align line = "―" * (self.n1sl*2) self.board.add_unit(data[0]-self.n1sl*2-r_offset,2,self.n1sl*2,1,classes.board.Label,line,white,"",21) self.board.add_unit(data[0]-self.n1sl*2-1+ds_offset,2,1,d_h,classes.board.Label,d_str,white,"",21) self.division_sign = self.board.units[-1] self.resl = [] self.nbel = [] self.mpll = [] self.subl = [] self.minl = [] # to store minus signs res = [0 for i in range(self.n1sl)] nbr = [0 for i in range(self.n1sl)] nbe = [0 for i in range(self.n1sl)] mpl = [0 for i in range(self.n1sl)] sub = [0 for i in range(self.n1sl)] #[res,nbr,mpl,sub,line] yp = [0,3,5,8,7] xp = [xs,xs,xs+2,xs+2,xs] self.activables = 0 for i in range(self.n1sl): if i > 0: nbr[i] = sub[i-1] * 10 + int(self.n1s[i]) nbe[i] = int(self.n1s[i]) self.board.add_unit(xp[1]-r_offset,yp[1],2,2,classes.board.Letter,"",white,"",21)#str(nbe[i]) self.nbel.append(self.board.ships[-1]) self.nbel[-1].pos_id = i self.activables += 1 elif i == 0: nbr[i] = int(self.n1s[i]) nbe[i] = int(self.n1s[i]) res[i] = nbr[i] / self.n2 self.board.add_unit(xp[0]-r_offset,yp[0],2,2,classes.board.Letter,"",white,"",21)#str(res[i]) self.resl.append(self.board.ships[-1]) self.resl[-1].pos_id = i self.activables += 1 mpl[i] = self.n2 * res[i] mpls = str(mpl[i]) mplsl = len(mpls) self.board.add_unit(xp[2]-mplsl*2 - 2-r_offset,yp[2],2,2,classes.board.Label,"-",white,"",21) self.minl.append(self.board.units[-1]) self.mpll.append([]) for j in range(mplsl): self.board.add_unit(xp[2]-mplsl*2 + j*2-r_offset,yp[2],2,2,classes.board.Letter,"",white,"",21)#mpls[j] self.mpll[i].append(self.board.ships[-1]) self.mpll[i][-1].pos_id = i self.mpll[i][-1].posy_id = j self.activables += 1 sub[i] = nbr[i] - mpl[i] subs = str(sub[i]) subsl = len(subs) self.subl.append([]) for j in range(subsl): self.board.add_unit(xp[3]-subsl*2 + j*2-r_offset,yp[3],2,2,classes.board.Letter,"",white,"",21)#subs[j] self.subl[i].append(self.board.ships[-1]) self.subl[i][-1].pos_id = i self.subl[i][-1].posy_id = j self.activables += 1 self.board.add_unit(xp[4]+(2-len(str(nbr[i]))*2)-r_offset,yp[4],len(str(nbr[i]))*2,1,classes.board.Label,line,white,"",21) for i in range(5): xp[i] += 2 if i > 0: yp[i] += 5 hint_offset = len(self.resl)*2 + 6 self.board.add_unit(0,5,data[0]-hint_offset,2,classes.board.Label,"",white,"",22) self.hint1 = self.board.units[-1] self.hint1.align = 1 self.board.add_unit(0,7,data[0]-hint_offset,2,classes.board.Label,"",white,"",22) self.hint2 = self.board.units[-1] self.hint2.align = 1 self.board.add_unit(0,9,data[0]-hint_offset,2,classes.board.Label,"",white,"",22) self.hint3 = self.board.units[-1] self.hint3.align = 1 self.board.add_unit(0,15,data[0]-hint_offset,2,classes.board.Letter,self.lang.d["demo start"] ,white,"",22) self.next_step_btn = self.board.ships[-1] self.next_step_btn.readable = False self.all_a_count = len(self.board.ships)-1 self.home_square = self.board.ships[0] self.board.active_ship = self.home_square.unit_id self.current_pos = self.home_square.unit_id for each in self.board.ships: each.immobilize() self.res = res self.nbr = nbr self.nbe = nbe self.mpl = mpl self.sub = sub self.sub_len = len(sub) self.deactivate_colors() #self.reactivate_colors() self.board.units[0].font_color = self.task_str_color self.next_step_btn.font_color = (0,200,0) self.next_step_btn.set_outline(self.white, 1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and (event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT): #self.home_sqare_switch(self.board.active_ship+1) self.next_step() elif event.type == pygame.MOUSEBUTTONUP: #self.home_sqare_switch(self.board.active_ship) if self.board.active_ship == self.next_step_btn.unit_id: if self.current_pos + 1 > self.all_a_count:#if self.cursor_pos == self.sumn1n2sl+1: self.level.next_board_load() else: self.next_step() def next_step(self): self.next_step_btn.value = self.lang.d["demo next step"] self.home_sqare_switch(self.current_pos) self.current_pos += 1 if self.current_pos+1 > self.all_a_count: self.next_step_btn.value = self.lang.d["demo next eg"] self.next_step_btn.update_me == True def home_sqare_switch(self, activate): if activate >= 0 and activate < self.activables: #self.sumn1n2sl * 2 - 1: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 2) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 2) #if self.home_square in self.resultl: self.reactivate_colors() #self.home_square.font_color = self.font_hl #self.home_square = self.ans_h #self.board.active_ship == self.ans_h.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey each.set_outline(self.greyoutline, 1) each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True def reactivate_colors(self): self.board.units[0].font_color = self.task_str_color if self.home_square in self.resl: if self.home_square.pos_id == 0: self.nums1l[0].font_color = self.font_hl3 else: for each in self.subl[self.home_square.pos_id-1]: each.font_color = self.font_hl3 each.set_outline(self.font_hl3, 1) self.nbel[self.home_square.pos_id-1].font_color = self.font_hl3 self.nbel[self.home_square.pos_id-1].set_outline(self.font_hl3, 1) self.num2.font_color = self.font_hl2 if self.divisor_pos == 1: self.division_sign.font_color = self.font_hl2 elif self.home_square in self.nbel: self.nums1l[self.home_square.pos_id].font_color = self.font_hl3 else: f = False for each in self.mpll: for e in each: if self.home_square == e: f = True #it's in this sublist - now highlight entire sublist for e2 in each: e2.font_color = self.font_hl e2.set_outline(self.font_hl2, 1) #eself.home_square.set_outline(self.font_hl, 2) #highlight multiplied numbers self.num2.font_color = self.font_hl2 self.resl[self.home_square.pos_id].font_color = self.font_hl3 self.resl[self.home_square.pos_id].set_outline(self.font_hl3, 1) break if not f: for each in self.subl: for e in each: if self.home_square == e: for e2 in each: e2.font_color = self.font_hl e2.set_outline(self.font_hl2, 1) if self.home_square.pos_id == 0: self.nums1l[0].font_color = self.font_hl3 self.mpll[0][0].font_color = self.font_hl2 self.mpll[0][0].set_outline(self.font_hl2, 1) else: #highlight all previous subtract + dropped number for e2 in self.subl[self.home_square.pos_id-1]: e2.font_color = self.font_hl3 e2.set_outline(self.font_hl3, 1) self.nbel[self.home_square.pos_id-1].font_color = self.font_hl3 self.nbel[self.home_square.pos_id-1].set_outline(self.font_hl3, 1) #highlight previous multiplication result for e2 in self.mpll[self.home_square.pos_id]: e2.font_color = self.font_hl2 e2.set_outline(self.font_hl2, 1) self.minl[self.home_square.pos_id].font_color = self.font_hl3 break self.hint1.font_color = self.hint1_fcol self.hint2.font_color = self.hint2_fcol self.hint3.font_color = self.hint3_fcol self.next_step_btn.font_color = self.font_hl self.auto_fill() self.home_square.set_outline(self.hint2_fcol, 3) self.home_square.font_color = self.hint2_fcol self.next_step_btn.set_outline(self.white, 1) def auto_fill(self): #self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color s = "0" self.hint1.value = "" self.hint2.value = "" self.hint3.value = "" multiplication_string = "" val = 0 #self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square in self.resl: if self.home_square.pos_id == 0: #self.nums1l[0].font_color = self.font_hl3 rem = "" if self.sub[self.home_square.pos_id] > 0: rem = "(%s %d)" % (self.lang.d["remainder"], self.sub[self.home_square.pos_id]) self.hint1.value = "%s ÷ %s = %s %s" % (self.nums1l[0].value, self.num2.value, str(self.res[0]),rem) else: rem = "" if self.home_square.pos_id < self.sub_len-1: if self.sub[self.home_square.pos_id] > 0: rem = "(%s %d)" % (self.lang.d["remainder"], self.sub[self.home_square.pos_id]) self.hint1.value = "%d ÷ %s = %d %s" % (self.nbr[self.home_square.pos_id], self.num2.value, self.res[self.home_square.pos_id], rem) self.hint2.value = "%s %s" % (self.lang.d["demo write"], self.res[self.home_square.pos_id]) self.resl[self.home_square.pos_id].value = str(self.res[self.home_square.pos_id]) elif self.home_square in self.nbel: self.hint2.value = "%s %s" % (self.lang.d["demo rewrite"], self.nums1l[self.home_square.pos_id].value) self.nbel[self.home_square.pos_id-1].value = str(self.nbe[self.home_square.pos_id]) else: f = False for each in self.mpll: for e in each: if self.home_square == e: f = True break if not f: #sub self.hint1.value = "%d - %d = %d" % (self.nbr[self.home_square.pos_id], self.mpl[self.home_square.pos_id], self.sub[self.home_square.pos_id]) n = str(self.sub[self.home_square.pos_id])[self.home_square.posy_id] self.subl[self.home_square.pos_id][self.home_square.posy_id].value = n self.hint2.value = "%s %s" % (self.lang.d["demo write"], n) if self.home_square.pos_id == self.sub_len-1: self.hint3.value = "%s: %d" % (self.lang.d["demo_result"], self.sumn1n2) self.question.value = "%s ÷ %s = %d" % (self.n1s, self.n2s, self.sumn1n2) for each in self.resl: each.set_outline(self.white, 1) each.font_color = self.hint3_fcol else: #multi self.hint1.value = "%d × %s = %d" % (self.res[self.home_square.pos_id], self.num2.value, self.mpl[self.home_square.pos_id]) n = str(self.mpl[self.home_square.pos_id])[self.home_square.posy_id] self.mpll[self.home_square.pos_id][self.home_square.posy_id].value = n self.hint2.value = "%s %s" % (self.lang.d["demo write"], n) def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game048.py0000644000175000017500000001215612201770064016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,6) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) #data = [x_count, y_count, letter_count, top_limit, ordered] if self.level.lvl == 1: data = [11,6,3,True,1] elif self.level.lvl == 2: data = [11,6,3,False,1] elif self.level.lvl == 3: data = [11,6,5,True,1] elif self.level.lvl == 4: data = [11,6,5,False,1] elif self.level.lvl == 5: data = [11,6,7,True,1] elif self.level.lvl == 6: data = [11,6,7,False,1] elif self.level.lvl == 7: data = [11,6,9,True,1] elif self.level.lvl == 8: data = [11,6,9,False,1] elif self.level.lvl == 9: data = [11,6,11,True,1] elif self.level.lvl == 10: data = [11,6,11,False,1] self.chapters = [1,3,5,7,9,10] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.alphabet = self.lang.alphabet_uc self.alph_len = len(self.alphabet) self.num_list = [] self.indexes = [] self.choice_indexes = [x for x in range(self.alph_len)] if data[3] == True: choice_list = [x for x in range(self.alph_len-data[2])] index = random.randrange(0,len(choice_list)) n = 0 for i in range(data[2]): self.num_list.append(choice_list[index]+n) self.indexes.append(index+n) n += 1 else: choice_list = [x for x in range(self.alph_len)] for i in range(data[2]): index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) self.indexes.append(choice_list[index]) del(choice_list[index]) self.indexes.sort() shuffled = self.num_list[:] random.shuffle(shuffled) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [0 for x in range(data[0])] #find position of first door square x = (data[0]-data[2])//2 #add objects to the board for i in range(data[2]): self.board.add_door(x+i,0,1,1,classes.board.Door,"",color,"") self.board.units[i].door_outline = True h = random.randrange(0, 255, 5) y = random.randrange(1,5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = self.alphabet[shuffled[i]] self.board.add_unit(x+i,y,1,1,classes.board.Letter,caption,number_color,"",data[4]) self.solution_grid[x+i]=1 for each in self.board.units: self.board.all_sprites_list.move_to_front(each) instruction = self.d["Re-arrange alphabetical"] self.board.add_unit(0,5,11,1,classes.board.Letter,instruction,color0,"",7) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[0] == self.solution_grid: ships = [] #collect value and x position on the grid from ships list for i in range(self.data[2]): ships.append([self.board.ships[i].grid_x,self.board.ships[i].value]) ships_sorted = sorted(ships) correct = True for i in range(self.data[2]): if i < self.data[2]-1: if ships_sorted[i][1] != self.alphabet[self.indexes[i]]: correct = False if correct == True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."]) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True) pysiogame-1.30.811/game_boards/game069.py0000644000175000017500000002425012201770064016737 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color #font_color = ex.hsv_to_rgb(227,255,50) #font_color = (85,0,212) font_color = (50,0,150) self.grey = (200,200,200) self.font_hl = (100,0,250) self.task_str_color = ex.hsv_to_rgb(200,200,230) #font_result = ex.hsv_to_rgb(225,70,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) self.level.games_per_lvl = 5 if self.level.lvl == 1: rngs = [10,20,10,20] self.level.games_per_lvl = 2 elif self.level.lvl == 2: rngs = [20,50,20,50] self.level.games_per_lvl = 2 elif self.level.lvl == 3: rngs = [50,150,50,99] self.level.games_per_lvl = 2 elif self.level.lvl == 4: rngs = [150,500,50,100] elif self.level.lvl == 5: rngs = [500,1000,100,500] elif self.level.lvl == 6: rngs = [700,1500,500,999] elif self.level.lvl == 7: rngs = [1500,2500,500,1500] elif self.level.lvl == 8: rngs = [2500,5000,1500,2500] elif self.level.lvl == 9: rngs = [5000,10000,2500,5000] elif self.level.lvl == 10: rngs = [10000,84999,5000,15000] data = [39,18] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.n1 = random.randrange(rngs[0],rngs[1]) self.n2 = random.randrange(rngs[2],rngs[3]) self.sumn1n2 = self.n1+self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 0 self.correct = False self.carryl = [] self.resultl = [] self.nums1l = [] self.nums2l = [] self.ship_id = 0 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " + " + self.n2s + " = " + qm #question self.board.add_unit(1,0,data[0]-1-self.sumn1n2sl*3 ,3,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 #carry 1 for i in range(self.sumn1n2sl - 1): self.board.add_unit(data[0]-5-i*3,1,1,1,classes.board.Letter,"",white,"",0) self.carryl.append(self.board.ships[-1]) self.carryl[-1].set_outline(self.grey, 2) self.carryl[-1].pos_id = i #self.carryl[0].set_outline(font_result, 2) #first number for i in range(self.n1sl): self.board.add_unit(data[0]-3-i*3,2,3,3,classes.board.Label,self.n1s[-(i+1)],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i #second number i = 0 for i in range(self.n2sl): self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,self.n2s[-(i+1)],white,"",21) self.nums2l.append(self.board.units[-1]) self.nums2l[-1].pos_id = i i += 1 self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,"+",white,"",21) self.plus_label = self.board.units[-1] #line line = "―" * (self.sumn1n2sl*2) self.board.add_unit(data[0]-self.sumn1n2sl*3,8,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) #result for i in range(self.sumn1n2sl): self.board.add_unit(data[0]-3-i*3,9,3,3,classes.board.Letter,"",white,"",21) self.resultl.append(self.board.ships[-1]) self.resultl[-1].set_outline(self.grey, 2) self.resultl[-1].pos_id = i self.resultl[0].set_outline(self.activated_col, 3) self.home_square = self.resultl[0] self.board.active_ship = self.home_square.unit_id #self.board.units[0].font_color = font_color #self.board.units[1].font_color = (0,0,255) #self.outline_all(1,1) for each in self.board.ships: each.immobilize() self.deactivate_colors() self.reactivate_colors() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT: self.home_sqare_switch(self.board.active_ship+1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT: self.home_sqare_switch(self.board.active_ship-1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_UP: self.home_sqare_switch(self.board.active_ship-self.sumn1n2sl+1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_DOWN: self.home_sqare_switch(self.board.active_ship+self.sumn1n2sl) elif event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and not self.correct: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else: char = event.unicode if (len(char)>0 and lhv < 2 and char in self.digits): if self.home_square in self.resultl: if lhv == 1: s = self.home_square.value + char if s[0] == "0": self.home_square.value = char else: n = int(s) if n < 20: self.home_square.value = str(n % 10) try: self.carryl[self.home_square.pos_id].value = "1" self.carryl[self.home_square.pos_id].update_me = True except: pass else: self.home_square.value = char # else: self.home_square.value = char elif self.home_square in self.carryl: if char == "1": self.home_square.value = char else: self.home_square.value = "" self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.MOUSEBUTTONUP: self.home_sqare_switch(self.board.active_ship) def home_sqare_switch(self, activate): if activate < 0 or activate > self.sumn1n2sl * 2 - 1: activate = self.sumn1n2sl-1 if activate >= 0 and activate < self.sumn1n2sl * 2 - 1: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 2) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 3) #if self.home_square in self.resultl: self.reactivate_colors() self.home_square.font_color = self.font_hl #self.home_square = self.ans_h #self.board.active_ship == self.ans_h.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True def reactivate_colors(self): self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square.pos_id > 0: self.carryl[self.home_square.pos_id-1].font_color = self.font_hl if (self.n1sl > self.home_square.pos_id): self.nums1l[self.home_square.pos_id].font_color = self.font_hl if (self.n2sl > self.home_square.pos_id): self.nums2l[self.home_square.pos_id].font_color = self.font_hl self.resultl[self.home_square.pos_id].font_color = self.font_hl def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: s = "" for each in reversed(self.resultl): s += each.value if s == self.sumn1n2s: self.level.next_board() else: self.level.try_again() pysiogame-1.30.811/game_boards/game033.py0000644000175000017500000001254012201770064016725 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,15) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,6) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) if self.level.lvl == 1: data = [11,6,3,9,2,3] elif self.level.lvl == 2: data = [11,6,3,20,2,5] elif self.level.lvl == 3: data = [11,6,3,99,2,5] elif self.level.lvl == 4: data = [11,6,5,9,3,3] elif self.level.lvl == 5: data = [11,6,5,20,3,5] elif self.level.lvl == 6: data = [11,6,5,99,3,5] elif self.level.lvl == 7: data = [11,6,7,9,4,3] elif self.level.lvl == 8: data = [11,6,7,20,4,5] elif self.level.lvl == 9: data = [11,6,7,99,4,5] elif self.level.lvl == 10: data = [11,6,9,9,5,3] elif self.level.lvl == 11: data = [11,6,9,20,5,5] elif self.level.lvl == 12: data = [11,6,9,99,5,5] elif self.level.lvl == 13: data = [11,6,11,9,6,3] elif self.level.lvl == 14: data = [11,6,11,20,6,5] elif self.level.lvl == 15: data = [11,6,11,99,6,5] self.chapters = [1,4,7,10,13,15] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.num_list = [] self.num_list2 = [] sign = ["+","-"] for i in range(data[4]): num1 = random.randrange(1,data[3]) rand_sign = sign[random.randrange(2)] if rand_sign == "+": num2 = random.randrange(0,data[3]) else: num2 = random.randrange(0,num1) expr = str(num1) + rand_sign + str(num2) self.num_list.append(expr) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [0 for x in range(data[0])] self.expression = [" " for x in range(data[0])] #find position of first door square xd = (data[0]-data[2])//2 #add objects to the board h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 for i in range(0,data[4]): x2 = xd+i*2 caption = self.num_list[i] self.board.add_unit(x2,2,1,1,classes.board.Label,caption,number_color,"",data[5]) self.solution_grid[x2]=1 self.expression[x2]=str(self.num_list[i]) if i< data[4]-1: self.solution_grid[x2+1]=1 h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 indu = len(self.board.units) inds = len(self.board.ships) for i in range(0,data[4]-1): self.board.add_unit(xd+i*2+1,1,1,3,classes.board.Letter,[">","=","<"],number_color,"",data[5]) self.board.add_door(xd+i*2+1,2,1,1,classes.board.Door,"",color,"") self.board.units[indu + i].door_outline = True self.board.ships[inds + i].readable = False self.board.all_sprites_list.move_to_front(self.board.units[indu + i]) instruction = self.d["Drag the slider"] self.board.add_unit(0,5,11,1,classes.board.Letter,instruction,color0,"",7) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: #if self.board.grid[2] == self.solution_grid: for i in range(len(self.board.ships)-1): #if self.board.ships[i].grid_y == 2: #if the sign is on line with expression #value = self.board.ships[i].value value = self.board.ships[i].value[2 - self.board.ships[i].grid_y] if value == "=": value = "==" self.expression[self.board.ships[i].grid_x]=value eval_string = ''.join(self.expression) eval_string.strip() if eval(eval_string)==True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."]) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game029.py0000644000175000017500000000733012201770064016733 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.board import classes.laby import classes.extras as ex import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,3,7) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,7) def create_game_objects(self, level = 1): s = random.randrange(150, 205, 5) v = random.randrange(150, 205, 5) h = random.randrange(0, 255, 5) color = ex.hsv_to_rgb(h,s,v) #data = [0:x_count, 1:y_count, 2:games_per_level, 3:bug_img, 4:level_maps] if self.level.lvl == 1: #img_ 77x77 data = [11,7,10,"mouse_77.png","cheese_77.png"] elif self.level.lvl == 2: data = [13,9,10,"mouse_77.png","cheese_77.png"] elif self.level.lvl == 3: data = [17,11,10,"mouse_77.png","cheese_77.png"] elif self.level.lvl == 4: data = [19,13,10,"mouse_77.png","cheese_77.png"] elif self.level.lvl == 5: data = [23,15,10,"mouse_77.png","cheese_77.png"] elif self.level.lvl == 6: data = [25,17,10,"mouse_77.png","cheese_77.png"] elif self.level.lvl == 7: data = [27,19,10,"mouse_77.png","cheese_77.png"] self.auto_checking = True #rescale the number of squares horizontally to better match the screen width x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.data = data self.vis_buttons = [0,1,1,1,1,1,1,0,1] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.mylaby = classes.laby.laby((data[0]+1)//2,(data[1]+1)//2,0,0,scale) self.mylaby.generate_laby() laby_grid = self.mylaby.labi_to_array() self.solution = [data[0]-1,data[1]-1] self.board.add_door(self.solution[0],self.solution[1],1,1,classes.board.Door,"",((255,255,255)),data[4]) self.board.units[0].outline=False x = 0 y = 0 for j in range(data[1]): for i in range(data[0]): if laby_grid[j][i] == 1: self.board.add_unit(i,j,1,1,classes.board.Obstacle,"",color) self.ships_count = len(self.board.ships) self.board.add_unit(x,y,1,1,classes.board.ImgShipRota,"",((255,255,255)),data[3]) self.board.ships[0].outline=False self.board.ships[0].draggable=False self.board.ships[0].audible = True self.board.all_sprites_list.move_to_front(self.board.ships[0]) self.board.active_ship = 0 self.ship_id = 0 def handle(self,event): if event.type == pygame.MOUSEBUTTONDOWN: pass else: gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if self.board.ships[0].grid_pos == self.solution: self.check_result() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def after_keydown_move(self): self.changed_since_check = True self.check_result() def check_result(self): if self.changed_since_check: if self.board.ships[self.board.active_ship].grid_pos == self.solution: self.level.next_board() else: self.changed_since_check = False pysiogame-1.30.811/game_boards/game010.py0000644000175000017500000003105412201770064016721 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import classes.board import random import pygame from math import sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) self.max_size = 99 self.board.draw_grid = False def create_game_objects(self, level = 1): #create non-movable objects self.active_tool = 0 self.active_letter = "A" self.active_word = "Apple" self.word_pos_y = 0 self.var_brush = 1 s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 255) letter_color = ex.hsv_to_rgb(h,s,v) self.bg_color = [255,255,255] color = [255,255,255] data = [35,26,0,8] font_size = 12 font_size2 = 14 self.brush_size = data[3] #stretch width to fit the screen size max_x_count = self.get_x_count(data[1],even=None) if max_x_count > 35: data[0] = max_x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) #canvas self.board.add_unit(10,0,data[0]-16,data[1],classes.board.Letter,"",color,"",font_size) self.canvas_block = self.board.ships[0] self.canvas_block.set_outline([0,54,229],1) #self.canvas_block.font2 = self.board.font_sizes[font_size+4] self.canvas_block.font3 = self.board.font_sizes[font_size2] images = ["paint_pencil.png","paint_brush.png","paint_wide_brush.png","paint_rect.png","paint_circle.png","paint_eraser.png","paint_bucket.png"] x=0 y=0 i_chr = 65 for i in range(0,65): if i <52: caption = chr(i_chr) else: caption = str(i-52) self.board.add_unit(x,y,2,2,classes.board.Letter,caption,letter_color,"",0) y += 2 i_chr += 1 if y > 24: y = 0 x += 2 if i == 25: i_chr = 97 if i == 51: i_chr = 48 self.board.add_door(0,0,2,2,classes.board.Door,"",color,"") self.board.add_door(data[0]-1,17,1,1,classes.board.Door,"",color,"") tool_len = len(self.board.ships) tool_max = tool_len - 3 self.word_list = ['Apple', 'Bear', 'Car', 'Dog', 'Egg', 'Flower', 'Goat','House', 'Ice', 'Jar', 'Kite', 'Leaf', 'Mug', 'Nut', 'Owl', 'Pig', 'Queen', 'Rabbit', 'Snake', 'Turtle', 'Unit', 'Violin', 'Wagon', 'X-ray', 'Yarn', 'Zebra','apple', 'bear', 'car', 'dog', 'egg', 'flower', 'goat', 'house', 'ice', 'jar', 'kite', 'leaf', 'mug', 'nut', 'owl', 'pig', 'queen', 'rabbit', 'snake', 'turtle', 'unit', 'violin', 'wagon', 'x-ray', 'yarn', 'zebra','zero','one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine','ten', 'eleven', 'twelve'] #color pallette h = 0 s = 250 v = 70 #number of available color spaces minus 2 for black and white number_of_colors = data[1]*6 - 2 number_of_hues = 24#13 number_of_col_per_hue = 6#number_of_colors // number_of_hues #if number_of_col_per_hue > 3: v_num = (255-v)//(number_of_col_per_hue) #greyscale grey_num = 6 #number_of_colors+2 - number_of_hues * number_of_col_per_hue if grey_num > 1: grey_v_num = (255 // (grey_num-1)) else: grey_v_num = 0 grey_count = 0 for j in range(0,data[1]): for i in range(data[0]-6, data[0]): color2 = ex.hsv_to_rgb(h,s,v) self.board.add_unit(i,j,1,1,classes.board.Letter,"",color2,"",2) if h < 249: if i < data[0]-1: v += v_num else: v = 70 s = 250 h += 10 if h > 248: if grey_count == 0: s = 0 v = 0 grey_count += 1 else: v += grey_v_num self.active_color = self.board.ships[173].initcolor self.size_display = self.board.units[0] self.tool_door = self.board.units[-2] self.color_door = self.board.units[-1] self.btn_down = False #points self.p_first = [0,0] self.p_last = [0,0] self.p_prev = [0,0] self.p_current = [0,0] self.outline_all(1,1) doors = [self.tool_door,self.color_door] for each in doors: each.door_outline = True each.perm_outline_color = [255,0,0] self.board.all_sprites_list.move_to_front(each) for each in self.board.ships: each.outline = False each.immobilize() self.canvas = pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.canvas.fill(self.canvas_block.initcolor) self.paint_bg_letter() self.canvas_org = self.canvas.copy() #pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: # Change the x/y screen coordinates to grid coordinates pos = event.pos active = self.board.active_ship if event.button == 1: if active == 0: self.btn_down = True canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_first = canvas_pos self.p_prev = canvas_pos self.p_current = canvas_pos #depending on starting position - increase or decrease the line width if canvas_pos[1] > self.word_pos_y: self.brush_size = self.data[3]//2 else: self.brush_size = self.data[3] self.paint_pencil(0) pygame.mouse.set_cursor(*pygame.cursors.broken_x) elif 0 < active < 66: self.active_letter = self.board.ships[self.board.active_ship].value self.active_word = self.word_list[self.board.active_ship-1]#"Zebra"#self.active_letter self.tool_door.set_pos(self.board.active_ship_pos) self.paint_bg_letter() elif active > 65: self.active_color = self.board.ships[active].initcolor self.color_door.set_pos(self.board.active_ship_pos) elif event.type == pygame.MOUSEMOTION and self.btn_down == True: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_prev = self.p_current self.p_current = canvas_pos self.paint_pencil(1) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: #drop the new object onto the painting canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_last = canvas_pos self.paint_pencil(2) else: if self.btn_down: self.screen_restore() self.copy_to_screen() self.btn_down = False def paint_bg_letter(self): txt = self.active_letter text = self.canvas_block.font.render("%s" % (txt), 1, (220, 220, 220, 0)) #text_arrows = self.canvas_block.font2.render("%s" % (txt), 1, (220, 0, 0, 0)) font_x = ((self.board.scale*self.canvas_block.grid_w-self.canvas_block.font.size(txt)[0])//2) font_y = ((self.board.scale*self.canvas_block.grid_h-self.canvas_block.font.size(txt)[1])//2) - 5*self.board.scale txt2 = self.active_word text2 = self.canvas_block.font3.render("%s" % (txt2), 1, (220, 220, 220, 0)) font_x2 = ((self.board.scale*self.canvas_block.grid_w-self.canvas_block.font3.size(txt2)[0])//2) font_y2 = ((self.board.scale*self.canvas_block.grid_h-self.canvas_block.font3.size(txt2)[1])//2) + 8*self.board.scale self.word_pos_y = font_y2 self.canvas.fill([255,255,255]) self.canvas.blit(text, (font_x,font_y)) #self.canvas.blit(text_arrows, (font_x,font_y)) self.canvas.blit(text2, (font_x2,font_y2)) self.copy_to_screen() #states => mouse states => 0 - mouse_btn_down, 1 - mouse_move, 2 - mouse_btn_up def paint_pencil(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() pygame.draw.circle(self.canvas, self.active_color, self.p_current, self.brush_size//2,0) self.copy_to_screen() elif state == 1: width = self.brush_size if self.brush_size > 2: if self.brush_size % 2 == 0: r = self.brush_size // 2 width = self.brush_size +3 else: r = self.brush_size // 2# - 1 width = self.brush_size+2 pygame.draw.circle(self.canvas, self.active_color, self.p_current, r,0) if self.brush_size > 3: self.draw_line(self.p_prev,self.p_current,self.brush_size,self.brush_size) else: pygame.draw.line(self.canvas, self.active_color, self.p_prev, self.p_current,width) self.copy_to_screen() def draw_line(self,p1,p2,bs1,bs2): #find points for the corners of the polygon using Tales Theorem #and draw the polygon - rotated rectangle or trapezium and 2 circles at the ends of the 'line' v = sv.Vector2.from_points(p1, p2) if v[0] != 0 or v[1] != 0: bs1 = bs1//2 bs2 = bs2//2 #vector length v_len = sqrt(v[0]*v[0] + v[1]*v[1]) x1 = v[1]*bs1/v_len y1 = v[0]*bs1/v_len if bs1 != bs2: x2 = v[1]*bs2/v_len y2 = v[0]*bs2/v_len else: x2 = x1 y2 = y1 points = [] points.append([int(p1[0]-x1),int(p1[1]+y1)]) points.append([int(p1[0]+x1),int(p1[1]-y1)]) points.append([int(p2[0]+x2),int(p2[1]-y2)]) points.append([int(p2[0]-x2),int(p2[1]+y2)]) pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) pygame.draw.circle(self.canvas, self.active_color, p1, bs1,0) pygame.draw.circle(self.canvas, self.active_color, p2, bs2,0) def backup_canvas(self): self.canvas_org = self.canvas_block.painting.copy() def copy_to_screen(self): self.canvas_block.painting = self.canvas.copy() self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True def screen_restore(self): self.canvas = self.canvas_org.copy() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game021.py0000644000175000017500000006010112201770064016716 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import classes.board import random import pygame from math import sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) self.max_size = 99 def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False self.active_tool = 0 self.brush_size = 5 self.brush_height = 4 #used by brush2 only self.var_brush = 1 self.sizing = False self.history = [] self.undo_step = 0 self.bg_color = [255,255,255] color = [255,255,255] data = [39,27] self.slider_color = [50, 50, 250] self.slider_bg_col = [200,200,255] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > data[0]: data[0] = x_count else: y_count = self.get_y_count(data[0],even=None) data[1] = y_count-1 self.data = data self.vis_buttons = [0,0,0,0,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.slider_min = self.mainloop.size[0] - 8 * self.layout.scale self.slider_max = self.mainloop.size[0] - 2 #canvas self.board.add_unit(0,3,data[0],data[1]-6,classes.board.Letter,"",color,"",2) self.canvas_block = self.board.ships[0] self.canvas_block.set_outline([0,54,229],1) #tools images = ["paint_pencil.png","paint_brush.png","paint_wide_brush.png","paint_line.png","paint_rect.png","paint_circle.png","paint_eraser.png","paint_bucket.png"] #captions = ["pencil","brush","brush","rectangle","circle","eraser","fill"] j = 7 for i in range(8): self.board.add_unit(j,0,3,3,classes.board.ImgShip,"",color,images[i]) j += 3 #brush size #self.board.add_unit(data[0]-6,1,1,2,classes.board.Letter,"-",color,"",1) #self.board.add_unit(data[0]-5,1,2,2,classes.board.Label,"5",color,"",0) #self.board.add_unit(data[0]-3,1,1,2,classes.board.Letter,"+",color,"",1) self.board.add_unit(data[0]-8,1,8,2,classes.board.Letter,"",color,"",0) self.size_slider = self.board.ships[-1] #self.board.add_unit(data[0]-2,1,2,2,classes.board.Letter,"+",color,"",0) self.board.add_unit(data[0]-8,0,8,1,classes.board.Label,self.d["brush size"] + ": " + str(self.brush_size),color,"",0) self.board.add_unit(0,0,3,3,classes.board.ImgShip,"",color,"paint_undo.png") self.board.add_unit(3,0,3,3,classes.board.ImgShip,"",color,"paint_redo.png") self.board.add_door(7,0,3,3,classes.board.Door,"",color,"") self.board.add_door(0,data[1]-3,1,1,classes.board.Door,"",color,"") tool_len = len(self.board.ships) tool_max = tool_len - 3 #color pallette h = 0 s = 250 v = 100 #number of available color spaces minus 2 for black and white number_of_colors = data[0]*3 - 2 number_of_hues = 13 number_of_col_per_hue = number_of_colors // number_of_hues if number_of_col_per_hue > 3: v_num = (255-v)//(number_of_col_per_hue-3) else: v_num = 150 #greyscale grey_num = number_of_colors+2 - number_of_hues * number_of_col_per_hue if grey_num > 1: grey_v_num = (255 // (grey_num-1)) else: grey_v_num = 0 grey_count = 0 self.color_start = len(self.board.ships) for j in range(data[1]-3,data[1]): for i in range(data[0]): color2 = ex.hsv_to_rgb(h,s,v) self.board.add_unit(i,j,1,1,classes.board.Letter,"",color2,"",2) #self.board.ships[-1].highlight = False if h < 255: if v <= (255-v_num): v += v_num else: if s > 115: s -= 70 else: v = 100 s = 250 h += 20 if h > 255: if grey_count == 0: s = 0 v = 0 grey_count += 1 else: v += grey_v_num self.active_color = self.board.ships[tool_len+1].initcolor self.size_display = self.board.units[0] self.tool_door = self.board.units[-2] self.color_door = self.board.units[-1] self.btn_down = False self.paint_function = [self.paint_pencil, self.paint_brush1, self.paint_brush2, self.paint_line, self.paint_rect, self.paint_circle, self.paint_eraser, self.paint_bucket] #points self.p_first = [0,0] self.p_last = [0,0] self.p_prev = [0,0] self.p_current = [0,0] doors = [self.tool_door,self.color_door] for each in doors: each.door_outline = True self.board.all_sprites_list.move_to_front(each) for each in self.board.ships: each.outline = False each.immobilize() each.readable = False #set outline for tools for i in range(1,self.color_start): self.board.ships[i].set_outline([0,54,229],1) for i in range(2): self.board.units[i].set_outline([0,54,229],1) self.canvas = pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.canvas.fill(self.canvas_block.initcolor) self.canvas_org = self.canvas.copy() #pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.history.append(self.canvas.copy()) self.slider_canvas = pygame.Surface([self.size_slider.grid_w*self.board.scale, self.size_slider.grid_h*self.board.scale-1]) self.slider_bg_lines = [[0,self.board.scale],[8*self.board.scale,2],[8*self.board.scale,2*self.board.scale-4]] self.draw_slider(self.brush_size) #self.outline_all(1,1) def draw_slider(self, size): #midpoint = ((self.size_slider.grid_w * self.board.scale)*size) / 100 x = (((self.size_slider.grid_w * self.board.scale)-10)*size) / 100 slider_rect = [x,0,10,2*self.board.scale] self.slider_canvas.fill(self.size_slider.initcolor) pygame.draw.polygon(self.slider_canvas, self.slider_bg_col, self.slider_bg_lines, 0) pygame.draw.rect(self.slider_canvas, self.slider_color, slider_rect, 0) self.size_slider.painting = self.slider_canvas.copy() self.size_slider.update_me = True self.mainloop.redraw_needed[0] = True def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: # Change the x/y screen coordinates to grid coordinates pos = event.pos active = self.board.active_ship if event.button == 1: if active == 0: self.btn_down = True canvas_pos = [pos[0]-self.layout.menu_w,pos[1]-3*self.layout.scale] self.p_first = canvas_pos self.p_prev = canvas_pos self.p_current = canvas_pos self.paint_function[self.active_tool](0) pygame.mouse.set_cursor(*pygame.cursors.broken_x) #start of painting done here elif 0 < active < 9: self.active_tool = active - 1 self.tool_door.set_pos(self.board.active_ship_pos) elif active == 9: self.change_size(pos, 0) #elif active == 10: # self.size_up() #elif active == 11: # self.size_down(5) #elif active == 12: # self.size_up(5) elif active == 10: self.undo() elif active == 11: self.redo() elif active >= self.color_start: self.active_color = self.board.ships[active].initcolor self.color_door.set_pos(self.board.active_ship_pos) elif event.type == pygame.MOUSEMOTION and self.btn_down == True: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and column >= 0 and 2 < row < self.data[1]-3: canvas_pos = [pos[0]-self.layout.menu_w,pos[1]-3*self.layout.scale] self.p_prev = self.p_current self.p_current = canvas_pos self.paint_function[self.active_tool](1) elif active == 9 and self.sizing == True and column >= self.data[0]-8 and row < 3: self.change_size(pos, 1) elif active == 9: self.sizing = False self.btn_down = False elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and column >= 0 and 2 < row < self.data[1]-3: #drop the new object onto the painting canvas_pos = [pos[0]-self.layout.menu_w,pos[1]-3*self.layout.scale] self.p_last = canvas_pos self.paint_function[self.active_tool](2) self.update_history() elif active == 9 and self.sizing == True and column >= self.data[0]-8 and row < 3: self.change_size(pos, 2) else: if self.btn_down: self.screen_restore() self.copy_to_screen() self.sizing == False self.btn_down = False def change_size(self, pos, stage): if stage == 0: self.sizing = True self.btn_down = True self.apply_size(pos) elif stage == 1: self.apply_size(pos) elif stage == 2: self.apply_size(pos) self.btn_down = False self.sizing = False self.size_slider.update_me = True self.size_display.update_me = True self.mainloop.redraw_needed[0] = True def apply_size(self, pos): size = int(((pos[0] - self.slider_min) * 100.0 ) / (self.slider_max - self.slider_min)) self.brush_size = size #self.size_slider.value = str(self.brush_size) self.size_display.value = self.d["brush size"] + ": " + str(self.brush_size) self.draw_slider(size) #states => mouse states => 0 - mouse_btn_down, 1 - mouse_move, 2 - mouse_btn_up def paint_pencil(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() pygame.draw.circle(self.canvas, self.active_color, self.p_current, self.brush_size//2,0) self.copy_to_screen() elif state == 1: width = self.brush_size if self.brush_size > 2: if self.brush_size % 2 == 0: r = self.brush_size // 2 width = self.brush_size +3 else: r = self.brush_size // 2# - 1 width = self.brush_size+2 pygame.draw.circle(self.canvas, self.active_color, self.p_current, r,0) if self.brush_size > 3: self.draw_line(self.p_prev,self.p_current,self.brush_size,self.brush_size) else: pygame.draw.line(self.canvas, self.active_color, self.p_prev, self.p_current,width) self.copy_to_screen() def paint_brush1(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() self.copy_to_screen() elif state == 1: if self.var_brush < self.brush_size: self.var_brush +=1 self.draw_line(self.p_prev,self.p_current,self.var_brush-1,self.var_brush) self.copy_to_screen() elif state == 2: self.var_brush = 1 def paint_brush2_old(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() elif state == 1: if self.brush_size > 5: step = 3 else: step = 1 for i in range(-(self.brush_size//2),self.brush_size//2,step): pygame.draw.line(self.canvas, self.active_color, [self.p_prev[0]-i,self.p_prev[1]], [self.p_current[0]-i,self.p_current[1]],5) self.copy_to_screen() def paint_brush2(self,state): if self.brush_size > 0: if state == 0: if self.brush_size % 2 != 0: self.brush_size += 1 self.size_display.value = str(self.brush_size) self.size_display.update_me = True self.backup_canvas() rectangle = [self.p_first[0]-self.brush_size//2,self.p_first[1]-self.brush_height//2,self.brush_size,self.brush_height] pygame.draw.rect(self.canvas, self.active_color, rectangle, 0) self.copy_to_screen() elif state == 1: rectangle = [self.p_current[0]-self.brush_size//2,self.p_current[1]-self.brush_height//2,self.brush_size,self.brush_height] pygame.draw.rect(self.canvas, self.active_color, rectangle, 0) points = self.get_corners() pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) self.copy_to_screen() elif state == 2: rectangle = [self.p_last[0]-self.brush_size//2,self.p_last[1]-self.brush_height//2,self.brush_size,self.brush_height] pygame.draw.rect(self.canvas, self.active_color, rectangle, 0) self.copy_to_screen() def get_corners(self): r1 = [self.p_prev[0]-self.brush_size//2,self.p_prev[1]-self.brush_height//2,self.brush_size,self.brush_height] r2 = [self.p_current[0]-self.brush_size//2,self.p_current[1]-self.brush_height//2,self.brush_size,self.brush_height] p1 = [[r1[0],r1[1]],[r1[0]+r1[2],r1[1]],[r1[0]+r1[2]-1,r1[1]+r1[3]-1],[r1[0],r1[1]+r1[3]]] p2 = [[r2[0],r2[1]],[r2[0]+r2[2],r2[1]],[r2[0]+r2[2]-1,r2[1]+r2[3]-1],[r2[0],r2[1]+r2[3]]] dist = sv.Vector2.from_points(self.p_prev, self.p_current) if (dist[0]>=0 and dist[1]<=0) or (dist[0]<=0 and dist[1]>=0): cr = [p1[0],p2[0],p2[2],p1[2]] else: cr = [p1[1],p2[1],p2[3],p1[3]] return cr def paint_line(self,state): if state == 0: self.backup_canvas() elif state == 1: self.screen_restore() pygame.draw.aaline(self.canvas, self.active_color, self.p_first, self.p_current, 1) self.copy_to_screen() elif state == 2: if self.brush_size > 0: self.screen_restore() if self.brush_size > 3: self.draw_line(self.p_first,self.p_last,self.brush_size,self.brush_size) else: pygame.draw.line(self.canvas, self.active_color, self.p_first, self.p_current, self.brush_size) self.copy_to_screen() def draw_line(self,p1,p2,bs1,bs2): #find points for the corners of the polygon using Tales Theorem #and draw the polygon - rotated rectangle or trapezium and 2 circles at the ends of the 'line' v = sv.Vector2.from_points(p1, p2) if v[0] != 0 or v[1] != 0: bs1 = bs1//2 bs2 = bs2//2 #vector length v_len = sqrt(v[0]*v[0] + v[1]*v[1]) x1 = v[1]*bs1/v_len y1 = v[0]*bs1/v_len if bs1 != bs2: x2 = v[1]*bs2/v_len y2 = v[0]*bs2/v_len else: x2 = x1 y2 = y1 points = [] points.append([int(p1[0]-x1),int(p1[1]+y1)]) points.append([int(p1[0]+x1),int(p1[1]-y1)]) points.append([int(p2[0]+x2),int(p2[1]-y2)]) points.append([int(p2[0]-x2),int(p2[1]+y2)]) pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) pygame.draw.circle(self.canvas, self.active_color, p1, bs1,0) pygame.draw.circle(self.canvas, self.active_color, p2, bs2,0) def paint_rect(self,state): if state == 0: self.backup_canvas() elif state == 1: lt = [min(self.p_first[0],self.p_current[0]),min(self.p_first[1],self.p_current[1])] rb = [max(self.p_first[0],self.p_current[0]),max(self.p_first[1],self.p_current[1])] rectangle = [lt[0],lt[1],rb[0]-lt[0],rb[1]-lt[1]] dist = sv.Vector2.from_points(lt, rb) if min(dist) > 2: self.screen_restore() pygame.draw.rect(self.canvas, self.active_color, rectangle, 1) self.copy_to_screen() elif state == 2: lt = [min(self.p_first[0],self.p_last[0]),min(self.p_first[1],self.p_last[1])] rb = [max(self.p_first[0],self.p_last[0]),max(self.p_first[1],self.p_last[1])] rectangle = [lt[0],lt[1],rb[0]-lt[0],rb[1]-lt[1]] if self.brush_size > 0: self.screen_restore() dist = sv.Vector2.from_points(lt, rb) dist = self.v2_to_int(dist) if min(dist)//2 > self.brush_size: border_width = self.brush_size if border_width > 4: borders = [] if border_width % 2 == 0: bw2=border_width // 2 - 1 else: bw2=border_width // 2 border_rects = [] #top border_rects.append([lt[0]-bw2,lt[1]-bw2,dist[0]+border_width-1,border_width]) #bottom border_rects.append([rb[0]-dist[0]-bw2,rb[1]-bw2,dist[0]+border_width-1,border_width]) for each in border_rects: pygame.draw.rect(self.canvas, self.active_color, each, 0) else: border_width = 0 else: border_width = 0 #rectangle = [self.p_first[0], self.p_first[1], self.p_last[0]-self.p_first[0],self.p_last[1]-self.p_first[1]] pygame.draw.rect(self.canvas, self.active_color, rectangle, border_width) self.copy_to_screen() def paint_circle(self,state): if state == 0: self.backup_canvas() elif state == 1: lt = [min(self.p_first[0],self.p_current[0]),min(self.p_first[1],self.p_current[1])] rb = [max(self.p_first[0],self.p_current[0]),max(self.p_first[1],self.p_current[1])] rectangle = [lt[0],lt[1],rb[0]-lt[0],rb[1]-lt[1]] dist = sv.Vector2.from_points(lt, rb) if min(dist) > 2: self.screen_restore() pygame.draw.rect(self.canvas, self.active_color, rectangle, 1) pygame.draw.ellipse(self.canvas, self.active_color, rectangle, 1) self.copy_to_screen() elif state == 2: lt = [min(self.p_first[0],self.p_last[0]),min(self.p_first[1],self.p_last[1])] rb = [max(self.p_first[0],self.p_last[0]),max(self.p_first[1],self.p_last[1])] rectangle = [lt[0],lt[1],rb[0]-lt[0],rb[1]-lt[1]] if self.brush_size > 0: dist = sv.Vector2.from_points(lt, rb) if min(dist)//2 > self.brush_size+2: border_width = self.brush_size else: border_width = 0 else: border_width = 0 #rectangle = [self.p_first[0], self.p_first[1], self.p_last[0]-self.p_first[0],self.p_last[1]-self.p_first[1]] self.screen_restore() pygame.draw.ellipse(self.canvas, self.active_color, rectangle, border_width) if border_width > 4: fillup_rect1 = [lt[0]+1,lt[1]+1,rb[0]-lt[0]-0.5,rb[1]-lt[1]-0.5] fillup_rect2 = [lt[0]+1,lt[1]+0.5,rb[0]-lt[0]-1,rb[1]-lt[1]-0.5] fillup_rect3 = [lt[0]+0.5,lt[1]+1,rb[0]-lt[0]-0.5,rb[1]-lt[1]-1] pygame.draw.ellipse(self.canvas, self.active_color, fillup_rect1, border_width-1) pygame.draw.ellipse(self.canvas, self.active_color, fillup_rect2, border_width) pygame.draw.ellipse(self.canvas, self.active_color, fillup_rect2, border_width) self.copy_to_screen() def paint_eraser(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() pygame.draw.circle(self.canvas, self.bg_color, self.p_current, self.brush_size//2,0) self.copy_to_screen() elif state == 1: pygame.draw.line(self.canvas, self.bg_color, self.p_prev, self.p_current,self.brush_size) pygame.draw.circle(self.canvas, self.bg_color, self.p_current, self.brush_size//2,0) self.copy_to_screen() def paint_bucket(self,state): if state == 0: self.backup_canvas() self.canvas.fill(self.active_color) self.bg_color = self.active_color self.copy_to_screen() def backup_canvas(self): self.canvas_org = self.canvas_block.painting.copy() def copy_to_screen(self): self.canvas_block.painting = self.canvas.copy() self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True def screen_restore(self): self.canvas = self.canvas_org.copy() self.var_brush = 1 def undo(self): #print("undo") hist_len = len(self.history) if self.undo_step < hist_len-1: self.undo_step += 1 self.canvas = self.history[-self.undo_step-1].copy() self.copy_to_screen() def redo(self): if self.undo_step > 0: #hist_len = len(self.history) self.undo_step -= 1 self.canvas = self.history[-self.undo_step-1].copy() self.copy_to_screen() def update_history(self): if self.undo_step != 0: hist_len = len(self.history) for i in range(self.undo_step): del(self.history[-1]) self.undo_step = 0 self.history.append(self.canvas.copy()) def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def v2_to_int(self,vector): integers = [int(each) for each in vector] return integers def check_result(self): passpysiogame-1.30.811/game_boards/game032.py0000644000175000017500000001234612201770064016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,15) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,6) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) if self.level.lvl == 1: data = [11,6,3,9,2,1] elif self.level.lvl == 2: data = [11,6,3,20,2,2] elif self.level.lvl == 3: data = [11,6,3,99,2,2] elif self.level.lvl == 4: data = [11,6,5,9,3,1] elif self.level.lvl == 5: data = [11,6,5,20,3,2] elif self.level.lvl == 6: data = [11,6,5,99,3,2] elif self.level.lvl == 7: data = [11,6,7,9,4,1] elif self.level.lvl == 8: data = [11,6,7,20,4,2] elif self.level.lvl == 9: data = [11,6,7,99,4,2] elif self.level.lvl == 10: data = [11,6,9,9,5,1] elif self.level.lvl == 11: data = [11,6,9,20,5,2] elif self.level.lvl == 12: data = [11,6,9,99,5,2] elif self.level.lvl == 13: data = [11,6,11,9,6,2] elif self.level.lvl == 14: data = [11,6,11,20,6,2] elif self.level.lvl == 15: data = [11,6,11,999,6,4] self.chapters = [1,4,7,10,13,15] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.num_list = [] choice_list = [x for x in range(data[3])] for i in range(data[4]): index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [0 for x in range(data[0])] self.expression = [" " for x in range(data[0])] #find position of first door square xd = (data[0]-data[2])//2 #add objects to the board h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 for i in range(0,data[4]): x2 = xd+i*2 caption = str(self.num_list[i]) self.board.add_unit(x2,2,1,1,classes.board.Label,caption,number_color,"",data[5]) self.solution_grid[x2]=1 self.expression[x2]=str(self.num_list[i]) if i< data[4]-1: self.solution_grid[x2+1]=1 h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 indu = len(self.board.units) inds = len(self.board.ships) for i in range(0,data[4]-1): self.board.add_unit(xd+i*2+1,1,1,3,classes.board.Letter,[">","=","<"],number_color,"",data[5]) self.board.add_door(xd+i*2+1,2,1,1,classes.board.Door,"",color,"") self.board.units[indu + i].door_outline = True self.board.ships[inds + i].readable = False self.board.all_sprites_list.move_to_front(self.board.units[indu + i]) instruction = self.d["Drag the slider"] self.board.add_unit(0,5,11,1,classes.board.Letter,instruction,color0,"",7) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.changed_since_check = True #to make it possible to confirm if numbers are equal self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: #if self.board.grid[2] == self.solution_grid: for i in range(len(self.board.ships)-1): #if self.board.ships[i].grid_y == 2: #if the sign is on line with expression #calculate the active value based on grid_y of the slider value = self.board.ships[i].value[2 - self.board.ships[i].grid_y] if value == "=": value = "==" self.expression[self.board.ships[i].grid_x]=value eval_string = ''.join(self.expression) eval_string.strip() if eval(eval_string)==True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game031.py0000644000175000017500000001463512201770064016732 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,18,9) def create_game_objects(self, level = 1): self.vis_buttons = [0,1,1,1,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) white = (255,255,255) #data = [18,9] numbero = 5 if self.level.lvl == 1: numbero = 6 elif self.level.lvl == 2: numbero = 7 elif self.level.lvl == 3: numbero = 8 elif self.level.lvl == 4: numbero = 9 elif self.level.lvl == 5: numbero = 10 elif self.level.lvl == 6: numbero = 11 elif self.level.lvl == 7: numbero = 12 elif self.level.lvl == 8: numbero = 13 elif self.level.lvl == 9: numbero = 14 elif self.level.lvl == 10: numbero = 15 data = [numbero*2,numbero] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.digits = ["0","1","2","3","4","5","6","7","8","9"] self.number_hat = [] for i in range(1,data[0]+1,2): for j in range(1,data[1]+1): mul = ((i+1)//2)*j if i == 1 or j == 1: caption = str(mul) else: caption = "" key = "%02d%02d" % ((i+1)//2, j) self.number_hat.append(key) self.board.add_unit(i-1,j-1,2,1,classes.board.Label,caption,white,"",1) self.next_number() self.outline_all(0,1) #self.level.lvl = "" self.level.game_step = 0 self.level.games_per_lvl = len(self.number_hat)+1 def next_number(self): s = random.randrange(150, 225, 5) v = random.randrange(190, 225, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) ln = len(self.number_hat) if ln > 0: index = random.randrange(0,ln) choice = self.number_hat[index] del(self.number_hat[index]) num1 = int(choice[0:2]) num2 = int(choice[2:]) self.solution = [num1,num2,num1 * num2] #unique = set() for i in range(1,self.data[0]+1,2): for j in range(1,self.data[1]+1): unit_id = self.board.get_unit_id(i-1,j-1) if (i+1)//2 == num1 and j == num2: color=color0 self.board.units[unit_id].font_color = color3 elif (i+1)//2 == num1 or j == num2: color=color1 self.board.units[unit_id].font_color = color1 elif (i+1)//2 == num2 and j == num1:#? color=color2 self.board.units[unit_id].font_color = color2 else: color = color2#! self.board.units[unit_id].font_color = color1 mul = ((i+1)//2)*j #unique.add(mul) if i == 1 or j == 1: caption = str(mul) if (i+1)//2 == num1 or j == num2: self.board.units[unit_id].font_color = color3# ! else: self.board.units[unit_id].font_color = color1 else: caption = "" #self.board.units[unit_id].font_color = color3 self.board.units[unit_id].color = color self.board.units[unit_id].update_me = True self.outline_all(0,1) self.home_square = self.board.units[(num1-1)*self.data[1] + num2-1] self.mainloop.redraw_needed[0] = True else: self.level.next_board() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else:#if not self.board.grid[4][18]: char = event.unicode if char in self.digits: if len(char)>0 and lhv < 3: self.home_square.value += char else: self.home_square.value = char self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.home_square.value != "" and (int(self.home_square.value) == self.solution[2]): self.quick_passed() else: self.failed() def passed(self): #tts = self.d["Perfect!"]+" "+str(self.solution[0])+" "+self.d["multiplied by"]+" "+str(self.solution[1])+" "+self.d["equals"]+" "+str(self.solution[2]) self.level.next_board(tts) def quick_passed(self): #tts = self.d["Perfect!"] self.level.game_step += 1 self.next_number() #self.level.next_board(tts) def failed(self): #self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False self.home_square.value = "" self.home_square.update_me = True self.mainloop.redraw_needed[0] = True pysiogame-1.30.811/game_boards/game026.py0000644000175000017500000001763712201770064016743 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random from math import pi,cos,sin class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,3) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,9,5) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color = ((255,255,255)) white = ((255,255,255)) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders self.font_color = ex.hsv_to_rgb(h,255,100) if self.level.lvl == 1: data = [9,5,3,5,2,5] elif self.level.lvl == 2: data = [9,5,3,7,2,5] elif self.level.lvl == 3: data = [9,5,3,10,2,5] self.data = data self.board.level_start(data[0],data[1],self.layout.scale) self.num_list = [] self.num_list2 = [] sign = "/" numbers = [] for i in range(data[4]): num1 = random.randrange(1,data[3]-1) num2 = random.randrange(num1+1,data[3]) numbers.append([num1,num2]) expr = str(float(num1)) + sign + str(float(num2)) #disp = str(num1) + sign + str(num2) disp = ["",str(num1),str(num2),""] self.num_list.append(expr) self.num_list2.append(disp) #create table to store the solution self.solution_grid = [1,1,1,1,1,1,1,1,1] self.expression = [" " for x in range(data[0])] #find position of first door square xd = (data[0]-data[2])//2 #add objects to the board self.board.add_unit(0,1,3,3,classes.board.Label,"",white,"",data[5]) self.board.add_unit(6,1,3,3,classes.board.Label,"",white,"",data[5]) size = self.board.scale center = [size//2,size//2] for i in range(0,data[4]): x2 = xd+i*2 caption = self.num_list2[i] self.board.add_unit(x2,2,1,1,classes.board.Label,caption,color1,"",data[5]) self.board.units[-1].font_color = self.font_color self.board.units[i+2].set_outline(0,1) self.draw_fractions(self.board.units[i+2].painting,size,center,color1) self.board.units[i+2].image = self.board.units[i+2].painting.copy() self.expression[x2]=str(self.num_list[i]) if i< data[4]-1: self.solution_grid[x2+1]=1 signs = [" < "," = "," > "]*(data[4]-1) if self.level.lvl > 12: signs.append(" < ") #just for the symetry for i in range(len(signs)): if len(signs) < data[0]: if i==0 and len(signs)%2 == 0: x=data[0]//2 y=3 else: x = (data[0]-len(signs))//2 y=0 else: if i < data[0]: x=0 y=0 else: x = ((data[0] - (len(signs) - data[0]))//2)-data[0] y=3 self.board.add_unit(x+i,y,1,1,classes.board.Letter,signs[i],color1,"",data[5]) self.board.ships[-1].font_color = self.font_color self.board.ships[i].readable = False self.board.ships[i].set_outline(0,1) #self.outline_all(0,1) ind = len(self.board.units) for i in range(0,data[4]-1): self.board.add_door(xd+i*2+1,2,1,1,classes.board.Door,"",white,"") self.board.units[ind + i].door_outline = True self.board.all_sprites_list.move_to_front(self.board.units[ind + i]) instruction = self.d["Drag lt"] self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,color0,"",9) self.board.ships[-1].font_color = self.font_color self.board.ships[-1].immobilize() self.board.ships[-1].speaker_val = self.d["Drag lt2"] self.board.ships[-1].set_outline(0,1) self.board.ships[-1].speaker_val_update = False size = self.board.units[0].grid_w*self.board.scale center = [size//2,size//2] for i in range(2): canvas = pygame.Surface([size, size-1]) canvas.fill(self.board.units[i].initcolor) self.draw_circles(numbers[i],canvas,size,center,color1)#data[7](data, canvas, i) self.board.units[i].painting = canvas.copy() def draw_fractions(self,canvas,size,center,color): lh = max(int(size * 0.05),2) pygame.draw.line(canvas,self.font_color,[center[0]-size//7,center[1]-lh//2],[center[0]+size//7,center[1]-lh//2],lh) def draw_circles(self,numbers,canvas,size,center,color): angle_step = 2*pi/numbers[1] angle_start= -pi/2 angle_arc_start = -pi/2 r = size//2 - size//20 angle = angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] #manually draw the arc - the 100% width of the arc does not impress i = 0 while angle < angle_e: #maximum of 158 lines per pi x=(r-2)*cos(angle)+center[0] y=(r-2)*sin(angle)+center[1] pygame.draw.line(canvas,color,[center[0],center[1]],[x,y],5) i += 1 angle = angle_start + 0.02*(i) points = [] multipoints = [] for i in range(numbers[1]): #angle for line angle = angle_start + angle_step*i # Calculate the x,y for the end point x=r*cos(angle)+center[0] y=r*sin(angle)+center[1] multipoints.append([x,y]) #draw clipping polygon points.append(center) for i in range(numbers[0],numbers[1]): points.append(multipoints[i]) points.append([center[0],center[1]-r]) pygame.draw.polygon(canvas, (255,255,255), points, 0) if numbers == [1,2]:#white area to the left... pygame.draw.line(canvas,(255,255,255),[center[0]-3,center[1]-r],[center[0]-3,center[1]+r],6) #Draw the line from the center to the calculated end points for each in multipoints: pygame.draw.aaline(canvas,self.color2,center,each) pygame.draw.circle(canvas,self.color2,center,r,2) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[2] == self.solution_grid: for i in range(len(self.board.ships)-1): if self.board.ships[i].grid_y == 2: #if the sign is on line with expression value = self.board.ships[i].value if value == " = ": value = "==" self.expression[self.board.ships[i].grid_x]=value eval_string = s = ''.join(self.expression) eval_string.strip() if eval(eval_string)==True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True)pysiogame-1.30.811/game_boards/game058.py0000644000175000017500000002635212201770064016742 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,5) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = True color = ex.hsv_to_rgb(225,15,235) self.col_bg = (180,180,180) self.white_color = (255,255,255) self.red_color = (255,220,220) self.green_color = (220,255,220) self.blue_color = (220,220,250) self.red_color2 = (255,0,0) self.green_color2 = (0,255,0) self.blue_color2 = (0,0,255) self.turn=1 font_color = ex.hsv_to_rgb(227,255,50) if self.level.lvl == 1: data = [10,12,2] elif self.level.lvl == 2: data = [10,14,2] elif self.level.lvl == 3: data = [10,16,1] elif self.level.lvl == 4: data = [10,18,0] elif self.level.lvl == 5: data = [10,20,0] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=True) if x_count > 10: data[0] = x_count self.data = data self.scores = [0,0,0] self.score_board = [] self.imgs=[] self.moves_taken = 0 self.max_moves = self.data[0]*(self.data[1]-3) self.game_state = [[0 for x in range(0,data[1])] for y in range(0,data[0])] self.lookaround = [[-1,-1],[0,-1],[1,-1],[1,0],[1,1],[0,1],[-1,1],[-1,0]] self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.line_color = self.col_bg self.board.board_bg.update_me = True #player label self.board.add_unit(1,0,data[0]-6,1,classes.board.Letter,self.d["Player"] +" 1",self.red_color2,"",self.data[2]) self.board.add_unit(1,1,data[0]-6,1,classes.board.Letter,self.d["Player"] +" 2",self.green_color,"",self.data[2]) self.board.add_unit(1,2,data[0]-6,1,classes.board.Letter,self.d["Player"] +" 3",self.blue_color,"",self.data[2]) #player colour label self.board.add_unit(data[0]-5,0,1,1,classes.board.ImgShip,"x",self.red_color,"tictactoe_x.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-5,1,1,1,classes.board.ImgShip,"o",self.green_color,"tictactoe_o.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-5,2,1,1,classes.board.ImgShip,"s",self.blue_color,"tictactoe_s.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-4,0,1,1,classes.board.ImgShip,"x",self.red_color,"tictactoe_x2.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-4,1,1,1,classes.board.ImgShip,"o",self.green_color,"tictactoe_o2.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-4,2,1,1,classes.board.ImgShip,"s",self.blue_color,"tictactoe_s2.png",0) self.imgs.append(self.board.ships[-1].img.copy()) #score counters self.board.add_unit(data[0]-3,0,3,1,classes.board.Letter,str(self.scores[0]),self.red_color,"",0) self.score_board.append(self.board.ships[-1]) self.board.add_unit(data[0]-3,1,3,1,classes.board.Letter,str(self.scores[1]),self.green_color,"",0) self.score_board.append(self.board.ships[-1]) self.board.add_unit(data[0]-3,2,3,1,classes.board.Letter,str(self.scores[1]),self.blue_color,"",0) self.score_board.append(self.board.ships[-1]) #indicator self.board.add_unit(0,0,1,1,classes.board.ImgShip,"",self.red_color,"tictactoe_v.png",0) self.ind = self.board.ships[-1] self.legend_count = len(self.board.ships) for k in range(self.legend_count): self.board.ships[k].immobilize() self.board.ships[k].readable=False self.board.ships[k].outline=False k=self.legend_count for j in range(3,data[1]): for i in range(data[0]): self.board.add_unit(i,j,1,1,classes.board.ImgShip,"",color,"tictactoe_y.png",0) self.board.ships[k].immobilize(); self.board.ships[k].readable=False self.board.ships[k].outline=False k+=1 #self.outline_all(1,1) for each in self.board.units: each.font_color = font_color def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.show_msg == False: if self.board.active_ship >= self.legend_count: active = self.board.ships[self.board.active_ship] if len(active.value)==0: if self.turn==1: active.initcolor = self.red_color active.value = "x" active.img = self.imgs[0].copy() self.game_state[active.grid_x][active.grid_y]=1 self.board._place_unit(self.ind.unit_id, (0,1)) self.look_around(active) self.move_taken(active) self.turn=2 self.board.ships[0].color=self.red_color self.board.ships[1].color=self.green_color2 self.board.ships[2].color=self.blue_color elif self.turn==2: active.initcolor = self.green_color active.value = "o" active.img = self.imgs[1].copy() self.game_state[active.grid_x][active.grid_y]=2 self.board._place_unit(self.ind.unit_id, (0,2)) self.look_around(active) self.move_taken(active) self.turn=3 self.board.ships[0].color=self.red_color self.board.ships[1].color=self.green_color self.board.ships[2].color=self.blue_color2 elif self.turn==3: active.initcolor = self.blue_color active.value = "s" active.img = self.imgs[2].copy() self.game_state[active.grid_x][active.grid_y]=3 self.board._place_unit(self.ind.unit_id, (0,0)) self.look_around(active) self.move_taken(active) self.turn=1 self.board.ships[0].color=self.red_color2 self.board.ships[1].color=self.green_color self.board.ships[2].color=self.blue_color self.board.ships[0].update_me = True self.board.ships[1].update_me = True self.board.ships[2].update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def move_taken(self,active): self.moves_taken += 1 if self.moves_taken == self.max_moves: if self.scores[0] == self.scores[1] == self.scores[2]: self.board.ships[0].value+=" "+self.d["Game Draw"] self.board.ships[1].value+=" "+self.d["Game Draw"] self.board.ships[2].value+=" "+self.d["Game Draw"] else: if self.scores[0] >= self.scores[1] and self.scores[0] >= self.scores[1]: #Player1 - Winner self.board.ships[0].value+=" "+self.d["Won"] if self.scores[1] >= self.scores[0] and self.scores[1] >= self.scores[2]: #Player1 - Winner self.board.ships[1].value+=" "+self.d["Won"] if self.scores[2] >= self.scores[0] and self.scores[2] >= self.scores[1]: #Player1 - Winner self.board.ships[2].value+=" "+self.d["Won"] self.board.ships[0].update_me = True self.board.ships[1].update_me = True self.board.ships[2].update_me = True def look_around(self,active): matched = [] for i in range(8): first_pos = [active.grid_x + self.lookaround[i][0],active.grid_y + self.lookaround[i][1]] if 0<=first_pos[0]0: matched.append([active.grid_x,active.grid_y]) matched_set = set() for each in matched: matched_set.add(tuple(each)) self.game_state[each[0]][each[1]] = 0 ship_id = (each[0] + (each[1]-3)*self.data[0])+self.legend_count self.board.ships[ship_id].value = " " self.board.ships[ship_id].img = self.imgs[self.turn+2].copy() self.board.ships[ship_id].update_me = True self.scores[self.turn-1]+=len(matched_set) self.score_board[0].value=str(self.scores[0]) self.score_board[0].update_me=True self.score_board[1].value=str(self.scores[1]) self.score_board[1].update_me=True self.score_board[2].value=str(self.scores[2]) self.score_board[2].update_me=True def check_result(self): pass pysiogame-1.30.811/game_boards/game036.py0000644000175000017500000001300412201770064016724 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,12) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,4) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) font_color = ex.hsv_to_rgb(h,255,140) if self.level.lvl == 1: data = [11,4,3,9,2,1] elif self.level.lvl == 2: data = [11,4,3,20,2,2] elif self.level.lvl == 3: data = [11,4,3,99,2,2] elif self.level.lvl == 4: data = [11,4,5,9,3,1] elif self.level.lvl == 5: data = [11,4,5,20,3,2] elif self.level.lvl == 6: data = [11,4,5,99,3,2] elif self.level.lvl == 7: data = [11,4,7,9,4,1] elif self.level.lvl == 8: data = [11,4,7,20,4,2] elif self.level.lvl == 9: data = [11,4,7,99,4,2] elif self.level.lvl == 10: data = [11,4,9,9,5,1] elif self.level.lvl == 11: data = [11,4,9,20,5,2] elif self.level.lvl == 12: data = [11,4,9,99,5,2] self.chapters = [1,4,7,10,12] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) signs = ["+","-"] self.ship_id = -1 self.total = 0 while self.total < 2: #get random numbers until sum of all numbers is over 1 (does not prevent negative numbers in mid calculation) self.num_list = [] self.sign_list = [] expr = [] choice_list = [x for x in range(1,data[3])] for i in range(data[4]): index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) expr.append(str(choice_list[index])) if i < data[4]-1: sign_ind = random.randrange(2) self.sign_list.append(signs[sign_ind]) expr.append(str(signs[sign_ind])) eval_string = ''.join(expr) eval_string.strip() self.total = eval(eval_string) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [0 for x in range(data[0])] self.expression = [" " for x in range(data[0])] #find position of first door square xd = (data[0]-data[2])//2 #add objects to the board h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 for i in range(0,data[4]): x2 = xd+i*2-1 caption = str(self.num_list[i]) self.board.add_unit(x2,1,1,1,classes.board.Label,caption,number_color,"",data[5]) self.solution_grid[x2]=1 self.expression[x2]=str(self.num_list[i]) if i< data[4]-1: self.solution_grid[x2+1]=1 self.expression[x2+1]=self.sign_list[i] self.board.add_unit(x2+1,1,1,1,classes.board.Label,"=",number_color,"",data[5]) self.board.add_unit(x2+2,1,1,1,classes.board.Label,str(self.total),number_color,"",data[5]) #signs = ["<","=",">"]*(data[4]-1) h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 indu = len(self.board.units) inds = len(self.board.ships) for i in range(0,data[4]-1): self.board.add_unit(xd+i*2+1-1,0,1,2,classes.board.Letter,signs,number_color,"",data[5]) self.board.add_door(xd+i*2+1-1,1,1,1,classes.board.Door,"",color,"") self.board.units[indu + i].door_outline = True self.board.ships[inds + i].readable = False self.board.all_sprites_list.move_to_front(self.board.units[indu + i]) instruction = self.d["Drag the slider"] self.board.add_unit(0,3,11,1,classes.board.Letter,instruction,color0,"",7) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: for i in range(len(self.board.ships)-1): #calculate the active value based on grid_y of the slider value = self.board.ships[i].value[1 - self.board.ships[i].grid_y] self.expression[self.board.ships[i].grid_x]=value eval_string = ''.join(self.expression) eval_string.strip() if eval(eval_string)==self.total: #True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game065.py0000644000175000017500000005744712201770064016751 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import pygame import copy import classes.board import random from math import pi,cos,acos,sin,asin,sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,12,8) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,19,10) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.hand_id = 0 self.hand_coords = [[],[]] self.board.draw_grid = False #create non-movable objects color = (255,255,255) white = (255,255,255) gray = (100,100,100) red = (150,30,30) color1 = ex.hsv_to_rgb(225,70,230) color3 = ex.hsv_to_rgb(225,255,255) color5 = ex.hsv_to_rgb(225,180,240) color7 = ex.hsv_to_rgb(225,10,255) color2 = ex.hsv_to_rgb(170,70,230) color4 = ex.hsv_to_rgb(170,255,255) color6 = ex.hsv_to_rgb(170,180,240) color8 = ex.hsv_to_rgb(170,10,255) self.colors = [color1,color2] self.colors2 = [color3,color4] self.colors3 = [color5,color6] self.colors4 = [color7,color8] if self.level.lvl == 1: data = [19,12,True,True,False,False,True,False,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60,15) elif self.level.lvl == 2: data = [19,12,True,True,False,False,False,True,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 3: data = [19,12,True,True,False,False,False,False,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 4: data = [19,12,True,True,False,False,False,False,False,False,True,20] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 5: data = [19,12,True,True,False,False,False,True,False,False,True,20] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 6: data = [19,12,True,True,False,False,True,False,False,False,True,20] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 7: data = [19,12,True,False,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 8: data = [19,12,True,False,False,True,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) #visual display properties self.show_outer_ring = data[2] self.show_minutes = data[3] self.show_24h = data[4] self.show_only_quarters_h = data[5] self.show_only_quarters_m = data[6] self.show_only_fives_m = data[7] self.show_only_spare_variable = data[8] self.show_highlight = data[9] self.show_hour_offset = data[10] self.level.games_per_lvl = data[11] tt = [random.choice(h_pool), random.choice(m_pool)] self.target_time = tt #[random.choice(h_pool), random.choice(m_pool)] """ text_string = "" d["time_string_to"] = "za %s %s" #ie. za pięć dziesiąta d["time_string_past"] = "% po %" #ie. pięć po drugiej d["time_string_half"] = "wpół do %s" #ie. wpół do dziewiątej d["time_string_q_to"] = "za kwadrans %s" d["time_string_q_past"] = "kwadrans po %s" d["time_string_full"] = "%s godzina" """ #workaround to accomodate the language differences over the half hour issue, some languages use it as half to the hour (ie. Polish) and some half past the hour (ie. English). if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": #if (tt[1] < 30 and self.lang.d["time_string_half_to"] != "") or (tt[1] <= 30 and self.lang.d["time_string_half_past"] != "") : h_index = tt[0]-1 #else: if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] if tt[1] < 30: m = tt[1] else: m = 60 - tt[1] if m < 30: minutes = self.lang.d["minute_numbers_1to29"][m-1] else: h_index = tt[0]-1 if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] m = tt[1] minutes = self.lang.n2txt(m) """ if m <= 29: minutes = self.lang.d["minute_numbers_1to29"][m-1] else: tens = self.lang.numbers2090[(m/10)-2] ones = self.lang.d["minute_numbers_1to29"][(m % 10)-1] minutes = tens + " " + ones """ if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": if tt[1] == 0: self.text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: self.text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: self.text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": self.text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: self.text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: self.text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: self.text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] < 30: if self.lang.d["time_string_past_mh"] != "": self.text_string = self.lang.d["time_string_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_past_hm"] != "": self.text_string = self.lang.d["time_string_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: self.text_string = "" elif tt[1] > 30: if self.lang.d["time_string_to_mh"] != "": self.text_string = self.lang.d["time_string_to_mh"] % (minutes, self.lang.d["hours_c"][h_indexp1]) elif self.lang.d["time_string_to_hm"] != "": self.text_string = self.lang.d["time_string_to_hm"] % (self.lang.d["hours_c"][h_indexp1], minutes) else: self.text_string = "" else: if tt[1] == 0: self.text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: self.text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: if self.lang.d["time_string_q_to"] != "": self.text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif self.lang.d["time_string_3q_past"] != "": self.text_string = self.lang.d["time_string_3q_past"] % self.lang.d["hours_c"][h_index] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": self.text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: self.text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: self.text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: if self.lang.d["time_string_one_to"] != "": self.text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] else: if self.lang.d["time_string_1_59_past_mh"] != "": self.text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": self.text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: if self.lang.d["time_string_1_59_past_mh"] != "": self.text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": self.text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: self.text_string = "" self.time = [6,0] self.tm = self.time[:] self.digits = ["0","1","2","3","4","5","6","7","8","9"] x_count = self.get_x_count(data[1],even=True) if x_count > data[0]: data[0] = x_count self.font_size = 0 self.data = data self.left_offset = (data[0] - 10)//2 self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],self.layout.scale) self.size = self.board.scale*10 ans_offset = 10+(data[0]-15)//2 self.board.add_unit(0,0,data[0],1,classes.board.Label,self.lang.d["Set_clock"],white,"",1) self.board.units[-1].font_color = gray #self.board.units[-1].align = 1 #self.board.add_unit(10,4,data[0]-10,2,classes.board.Label,self.lang.d["Set_clock_instr"],white,"",2) #self.board.units[-1].font_color = gray """ self.board.add_unit(ans_offset+2,2,1,2,classes.board.Label,":",white,"",0) self.board.add_unit(ans_offset+3,2,2,2,classes.board.Label,"%02d" % self.target_time[1],white,"",0) self.ans_m = self.board.units[-1] """ """ self.board.add_unit(0,10,data[0],1,classes.board.Label,"Quarter past twelve",white,"",2) self.time_text = self.board.units[-1] self.time_text.align = 1 self.time_text.font_color = color4 """ self.center = [self.size//2,self.size//2] self.board.add_unit(self.left_offset,2,10,10,classes.board.Ship,"",white,"",self.font_size) self.clock_canvas = self.board.ships[-1] self.board.add_unit(0,1,data[0],1,classes.board.Letter,self.text_string,white,"",1) self.time_text = self.board.ships[-1] self.time_text.font_color = red self.time_text.immobilize() self.board.active_ship = self.clock_canvas.unit_id self.clock_canvas.font = self.clock_canvas.board.font_sizes[2] self.clock_canvas.font2 = self.clock_canvas.board.font_sizes[7] self.clock_canvas.immobilize() self.canvas = pygame.Surface([self.size, self.size-1]) self.canvas.fill((255,255,255)) self.hands_vars() self.draw_hands()#data[7](data, canvas, i) self.clock_canvas.hidden_value = [2,3]#numbers[i] self.clock_canvas.font_color = color2 self.clock_canvas.painting = self.canvas.copy() def hands_vars(self): numbers = [2,2] self.angle_step_12 = 2*pi/12 self.angle_step_60 = 2*pi/60 self.angle_start= -pi/2 angle_arc_start = -pi/2 self.r = self.size//3+self.size//10 #rs = [r*0.6, r*0.85,r*0.5] self.rs = [self.r*0.6, self.r*0.85,self.r*0.6] angle = self.angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] #a1 = angle_start + (2*pi/12)*time[0] def draw_hands(self): if self.show_hour_offset: a1 = self.angle_start + (2*pi/12)*self.time[0] + (self.angle_step_12*(2*pi/60)*self.time[1])/(2*pi) else: a1 = self.angle_start + (2*pi/12)*self.time[0] a2 = self.angle_start + (2*pi/60)*self.time[1] self.angles = [a1,a2] rs = self.rs time = self.time if self.show_outer_ring: pygame.draw.circle(self.canvas,self.colors4[1],self.center,int(rs[1]+10),0) pygame.draw.circle(self.canvas,self.colors2[1],self.center,int(rs[1]+10),1) pygame.draw.circle(self.canvas,self.colors4[0],self.center,int(rs[2]+10),0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,int(rs[2]+10),1) if self.show_outer_ring: for i in range(60): val = str(i+1) if self.show_only_quarters_m: if (i+1)%15 != 0: val = "" elif self.show_only_fives_m: if (i+1)%5 != 0: val = "" if i == 59: val = "0" a = self.angle_start + self.angle_step_60*(i+1) if self.show_minutes: font_size = self.clock_canvas.font2.size(val) #if self.show_highlight: if not self.show_highlight or (i+1 == time[1] or (time[1] == 0 and i==59)): text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors2[1]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors[1]) x3=(rs[1]+30+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[1]+30+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) if self.show_only_quarters_m or self.show_only_fives_m: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 else: marklen = 25 else: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 if self.show_outer_ring: x1=(rs[1]+10)*cos(a)+self.center[0] y1=(rs[1]+10)*sin(a)+self.center[1] x2=(rs[1]+marklen)*cos(a)+self.center[0] y2=(rs[1]+marklen)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[1], [x1,y1],[x2,y2]) for i in range(12): val = str(i+1) if self.show_only_quarters_h: if (i+1)%3 != 0: val = "" #a = angle_start + angle_step_12*(i+1) a = self.angle_start + self.angle_step_12*(i+1) x1=(rs[2]+10)*cos(a)+self.center[0] y1=(rs[2]+10)*sin(a)+self.center[1] x2=(rs[2]+20)*cos(a)+self.center[0] y2=(rs[2]+20)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[0], [x1,y1],[x2,y2]) font_size = self.clock_canvas.font.size(val) if not self.show_highlight or i+1 == time[0]: text = self.clock_canvas.font.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_canvas.font.render("%s" % (val), 1, self.colors[0]) x3=(rs[2]+20+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[2]+20+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) if self.show_24h: if i+13 == 24: val = "0" v = 0 else: val = str(i+13) v = i + 13 font_size = self.clock_canvas.font2.size(val) if not self.show_highlight or v == time[0]: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors[0]) x3=(rs[0]+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[0]+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) hand_width = [self.r//14,self.r//18] start_offset = [self.size//10,self.size//12] for i in range(2): #angle for line angle = self.angles[i]#angle_start + angle_step*i x0=self.center[0] - start_offset[i]*cos(angle) y0=self.center[1] - start_offset[i]*sin(angle) # Calculate the x,y for the end point x1=rs[i]*cos(angle)+self.center[0] y1=rs[i]*sin(angle)+self.center[1] #x2=h_size[i]*cos(angle-pi/2)+center[0] #y2=h_size[i]*sin(angle-pi/2)+center[1] #x3=h_size[i]*cos(angle+pi/2)+center[0] #y3=h_size[i]*sin(angle+pi/2)+center[1] x2=hand_width[i]*cos(angle-pi/2)+self.center[0] y2=hand_width[i]*sin(angle-pi/2)+self.center[1] x3=hand_width[i]*cos(angle+pi/2)+self.center[0] y3=hand_width[i]*sin(angle+pi/2)+self.center[1] points = [[x0,y0],[x2,y2],[x1,y1],[x3,y3]] shadow = [[x0,y0],[x2,y2],[x1,y1]] self.hand_coords[i] = points pygame.draw.polygon(self.canvas, self.colors[i], points, 0) pygame.draw.polygon(self.canvas, self.colors3[i], shadow, 0) # Draw the line from the center to the calculated end point line_through = [[x0,y0],[x1,y1]] pygame.draw.aalines(self.canvas, self.colors2[i], True, points) pygame.draw.aalines(self.canvas, self.colors2[i], True, line_through) pygame.draw.circle(self.canvas,self.colors[0],self.center,self.size//50,0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//50,1) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//70,1) self.clock_canvas.update_me = True self.mainloop.redraw_needed[0] = True def vector_len(self,v): return sqrt(v[0]**2 + v[1]**2) def scalar_product(self,v1,v2): return sum([v1[i]*v2[i] for i in range(len(v1))]) def angle(self,v1,v2): return self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2)) def is_contained(self, pos, coords_id = 0): v0 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][1]) v1 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][1]) v2 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][3]) v3 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][3]) v4 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][1]) v5 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][3]) a1 = 1 - self.angle(v0,v1) #corner 1 a2 = 1 - self.angle(v2,v3) #corner 2 a3 = 1 - self.angle(v0,v4)#point to arm1 of corner1 a4 = 1 - self.angle(v1,v4)#point to arm2 of corner1 a5 = 1 - self.angle(v2,v5)#point to arm1 of corner2 a6 = 1 - self.angle(v3,v5)#point to arm2 of corner2 if (a3+a4) < a1 and (a5+a6) < a2: return True return False def current_angle(self, pos,r): cosa = (pos[0] - self.center[0]) / r sina = (pos[1] - self.center[1]) / r if 0 <= cosa <= 1 and -1 <= sina <= 0: angle = pi/2 - acos(cosa) elif 0 <= cosa <= 1 and 0 <= sina <= 1: angle = acos(cosa)+pi/2 #ok elif -1 <= cosa <= 0 and 0 <= sina <= 1: angle = acos(cosa)+ pi/2 #ok elif -1 <= cosa <= 0 and -1 <= sina <= 0: angle = 2*pi+ pi/2 - acos(cosa) return angle def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up self.tm = self.time[:] if event.type == pygame.MOUSEMOTION and self.hand_id > 0: pos = [event.pos[0]-self.layout.menu_w-self.left_offset*self.layout.scale,event.pos[1]-self.layout.scale*2] r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 if self.hand_id == 1: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: self.tm[0] = 12 else: self.tm[0] = int(h) elif self.hand_id == 2: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) if 0 <= self.tm[1] < 5 and 55 <= self.time[1] <= 59: if self.tm[0] == 12: self.tm[0] = 1 else: self.tm[0] += 1 elif 0 <= self.time[1] < 5 and 55 <= self.tm[1] <= 59: if self.tm[0] == 1: self.tm[0] = 12 else: self.tm[0] -= 1 elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: active = self.board.active_ship pos = [event.pos[0]-self.layout.menu_w-self.left_offset*self.layout.scale,event.pos[1]-self.layout.scale*2] if active == 0: r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 self.hand_id = 0 if self.is_contained(pos, coords_id = 0): self.hand_id = 1 #print("activated: %d" % self.hand_id) elif self.is_contained(pos, coords_id = 1): self.hand_id = 2 #print("activated: %d" % self.hand_id) elif self.rs[0]*1.1 > r: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: h = 12 self.tm[0] = int(h) else: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: self.hand_id = 0 if self.tm != self.time: self.time = self.tm[:] self.draw_hands() self.clock_canvas.painting = self.canvas.copy() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.time == self.target_time: self.level.next_board() else: self.level.try_again() pysiogame-1.30.811/game_boards/game040.py0000644000175000017500000003665112201770064016734 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex from classes.simple_vector import Vector2 import pygame import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,2,15) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #data = [x_count, y_count, square_num, canvas_height, non_vertical, color_difference, games_per_level, mess_drawing_function] #setting up game flow / level dificulty if self.level.lvl == 1: data = [11,9,3,6,2,50,2,self.straight_lines] elif self.level.lvl == 2: data = [11,9,5,6,2,35,2,self.straight_lines] elif self.level.lvl == 3: data = [11,9,7,6,2,25,2,self.straight_lines] elif self.level.lvl == 4: data = [11,9,9,6,2,20,2,self.straight_lines] elif self.level.lvl == 5: data = [11,9,3,6,2,50,3,self.bezier_lines] elif self.level.lvl == 6: data = [11,9,5,6,2,35,3,self.bezier_lines] elif self.level.lvl == 7: data = [11,9,7,6,2,25,3,self.bezier_lines] elif self.level.lvl == 8: data = [11,9,9,6,2,20,3,self.bezier_lines] elif self.level.lvl == 9: data = [11,9,3,6,2,50,4,self.bezier2x_lines] elif self.level.lvl == 10: data = [11,9,5,6,2,35,4,self.bezier2x_lines] elif self.level.lvl == 11: data = [11,9,7,6,2,25,4,self.bezier2x_lines] elif self.level.lvl == 12: data = [11,9,9,6,1,20,4,self.bezier2x_lines] elif self.level.lvl == 13: data = [11,9,3,6,2,50,4,self.bezier3x_simplified] elif self.level.lvl == 14: data = [11,9,5,6,2,35,4,self.bezier3x_simplified] elif self.level.lvl == 15: data = [11,9,9,6,1,20,4,self.random_lines] self.chapters = [1,5,9,13,15] #rescale the number of squares horizontally to better match the screen width x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.data = data self.colors = [] self.level.games_per_lvl = data[6] self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) s = random.randrange(5, 20) v = random.randrange(240, 250) h = random.randrange(0, 255) color = ex.hsv_to_rgb(h,s,v) self.board.add_unit(0,1,data[0],data[3],classes.board.Obstacle,"",color) self.top_colors = [] h = random.randrange(0, 75, 1) start_from = (data[0]-data[2])//2 end_at = start_from+data[2] j=1 for i in range(start_from, end_at): s = random.randrange(180, 250, 5) v = random.randrange(180, 250, 5) color = ex.hsv_to_rgb(h+(i-start_from)*data[5],s,v) self.colors.append(color) self.board.add_unit(i,0,1,1,classes.board.Label,str(j),color,"",3) self.board.add_unit(i,data[1]-1,1,1,classes.board.Letter,str(j),color,"",3) self.board.ships[-1].highlight = False self.board.ships[-1].outline_highlight = True j += 1 #self.top_colors.append(color) self.colors_completed = self.colors[:] self.outline_all(0,1) self.draw_the_mess(data,start_from,end_at) for i in range(data[0]): if self.solution_positions[i] == 1: self.board.add_door(i,data[1]-2,1,1,classes.board.Door,"",color,"") self.board.units[-1].door_outline = True def draw_the_mess(self,data,start_from,end_at): #set up the beginning and ending positions #starting points: step = self.board.scale self._step = step half_st = round(self.board.scale/2) self.possible_positions = [] self.start_positions = [] self.end_positions = [] self.ready_lines = [] indexes = [] self.solution = [] self.solution_colors = [] self.solution_positions = [] for i in range(data[0]): next_step = [i*step+half_st,step*data[3]-1] self.possible_positions.append(next_step) indexes.append(i) self.solution_positions.append(0) for i in range(start_from, end_at): next_step = [i*step+half_st,0] self.start_positions.append(next_step) #repeat until the difference is larger than 2 steps picked = next_step while (picked[0] < (next_step[0]+(step*data[4]))) and (picked[0] > (next_step[0]-(step*data[4]))): index = random.randrange(0,len(indexes)) picked = self.possible_positions[indexes[index]] self.end_positions.append(picked) self.solution.append(indexes[index]) del(indexes[index]) #get a list of positions where the squares should be dragged to for i in range(0,len(self.solution)): self.solution_positions[self.solution[i]]=1 self.canvas = pygame.Surface([self.board.units[0].grid_w*self.board.scale, self.board.units[0].grid_h*self.board.scale-1]) self.canvas.fill(self.board.units[0].initcolor) #create randomized lines for i in range(data[2]): data[7](data, self.canvas, i) #and draw them all at once in a separate loop self.draw_lines() def draw_lines(self): self.canvas.fill(self.board.units[0].initcolor) self.swap_colors() for i in range(self.data[2]): pygame.draw.aalines(self.canvas, self.colors_completed[i], False, self.ready_lines[i]) self.board.units[0].painting = self.canvas.copy() self.board.units[0].update_me = True def swap_colors(self): for each_item in self.board.ships: if each_item.grid_y == 7 and each_item.grid_x == self.solution[each_item.unit_id]: self.colors_completed[each_item.unit_id] = self.colors[each_item.unit_id] else: self.colors_completed[each_item.unit_id] = [0,0,0] def straight_lines(self, data, canvas, i): self.ready_lines.append([self.start_positions[i],self.end_positions[i]]) def bezier_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end_midifier], [end]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] modifiers=[[0,0],[0,0]] modifiers[0]=[random.randrange(0,self.layout.game_w),random.randrange(self._step*2,self._step*data[3])] modifiers[1]=[random.randrange(0,self.layout.game_w),random.randrange(0,self._step*(data[3]-2))] points = [Vector2(self.start_positions[i]), Vector2(modifiers[0]), Vector2(self.end_positions[i]), Vector2(modifiers[1])] bezier_points = ex.DrawBezier(points) self.ready_lines.append(bezier_points) def bezier2x_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end], [end_midifier]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] canvas_w = self.layout.game_w canvas_h = self._step*data[3] x_center = self.layout.game_w //2 y_center = self._step*data[3]//2 bezier = [[[0,0] for j in range(4)] for j in range(2)] #line 1 start bezier[0][0] = Vector2(self.start_positions[i]) bezier[0][1] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step*2,canvas_h-self._step))#mod1 #first point modifier #line 1 end bezier[0][2] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,canvas_h-self._step)) #first line end bezier[0][3] = Vector2(ex.rand_safe_curve(bezier[0][2],canvas_w,canvas_h)) #line 3 start bezier[1][0] = bezier[0][2] bezier[1][1] = bezier[0][2] + Vector2(-(Vector2.from_points(bezier[0][2], bezier[0][3]))) #5th point modifier #line 3 end bezier[1][2] = Vector2(self.end_positions[i]) #last point bezier[1][3] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,self._step*(data[3]-1))) #6th point modifier bezier_points = [] for j2 in range(2): bezier_points.extend(ex.DrawBezier(bezier[j2])) self.ready_lines.append(bezier_points) def bezier3x_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end], [end_midifier]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] canvas_w = self.layout.game_w canvas_h = self._step*data[3] x_center = self.layout.game_w //2 y_center = self._step*data[3]//2 bezier = [[[0,0] for j in range(4)] for j in range(3)] #line 1 start bezier[0][0] = Vector2(self.start_positions[i]) bezier[0][1] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step*2,canvas_h-self._step))#mod1 #first point modifier #line 1 end bezier[0][2] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,canvas_h-self._step)) #first line end bezier[0][3] = Vector2(ex.rand_safe_curve(bezier[0][2],canvas_w,canvas_h)) #line 2 start bezier[1][0] = bezier[0][2] bezier[1][1] = bezier[0][2] + Vector2(-(Vector2.from_points(bezier[0][2], bezier[0][3]))) #3rd point modifier #line 2 end if bezier[0][2][0] > x_center: #if first point is on the right the second will be on the left x_range = [self._step,x_center] else: x_range = [x_center,canvas_w-self._step] if bezier[0][2][1] > y_center: #if first point is on the bottom the second will be on the over the center y_range = [self._step,y_center] else: y_range = [y_center,canvas_h-self._step] bezier[1][2] = Vector2(random.randrange(*x_range),random.randrange(*y_range)) #second line end bezier[1][3] = Vector2(ex.rand_safe_curve(bezier[1][2],canvas_w,canvas_h)) #line 3 start bezier[2][0] = bezier[1][2] bezier[2][1] = bezier[1][2] + Vector2(-(Vector2.from_points(bezier[1][2], bezier[1][3]))) #5th point modifier #line 3 end bezier[2][2] = Vector2(self.end_positions[i]) #last point bezier[2][3] = Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,self._step*(data[3]-1))) #6th point modifier bezier_points = [] for j in range(3): bezier_points.extend(ex.DrawBezier(bezier[j])) #pygame.draw.aalines(canvas, (0, 0, 0), False, bezier_points) self.ready_lines.append(bezier_points) def bezier3x_simplified(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end], [end_midifier]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] canvas_w = self.layout.game_w canvas_h = self._step*data[3] x_center = self.layout.game_w //2 y_center = self._step*data[3]//2 first = self.start_positions last = self.end_positions bezier = [[[0,0] for j in range(4)] for j in range(3)] bezier[0][0] = Vector2(first[i]) bezier[0][1] = Vector2(random.randrange(first[i][0] - self._step*2,first[i][0]+self._step*2),random.randrange(self._step*3,canvas_h))#mod1 #first point modifier #p1 if first[i][0] < x_center: x_range = (first[i][0]+self._step,canvas_w-self._step) else: x_range = (self._step, first[i][0]-self._step) y_range = (self._step, y_center-self._step//2) #line 1 end bezier[0][2] = Vector2(random.randrange(*x_range),random.randrange(*y_range))#Vector2(random.randrange(self._step,canvas_w-self._step),random.randrange(self._step,canvas_h-self._step)) #first line end bezier[0][3] = Vector2(bezier[0][2][0],bezier[0][2][1]-self._step) #modifier2 = (x, y-step) #modifier3 = (x, y+step) #line 2 start bezier[1][0] = bezier[0][2] bezier[1][1] = Vector2(bezier[0][2][0],bezier[0][2][1]+self._step)#bezier[0][2] + Vector2(-(Vector2.from_points(bezier[0][2], bezier[0][3]))) #3rd point modifier #p2 if last[i][0] < x_center: x_range = (last[i][0]+self._step, canvas_w-self._step) p4_x_mod = last[i][0]-self._step else: x_range = (self._step, last[i][0]-self._step) p4_x_mod = last[i][0]+self._step y_range = (canvas_h-y_center,round(canvas_h-self._step*0.5)) #modifier2 = (x+step,y-step) #modifier3 = (x-step,y+step) bezier[1][2] = Vector2(random.randrange(*x_range),random.randrange(*y_range)) #second line end bezier[1][3] = Vector2(bezier[1][2][0]+self._step,bezier[1][2][1]-self._step) #line 3 start bezier[2][0] = bezier[1][2] bezier[2][1] = Vector2(bezier[1][2][0]-self._step,bezier[1][2][1]+self._step)#bezier[1][2] + Vector2(-(Vector2.from_points(bezier[1][2], bezier[1][3]))) #5th point modifier #line 3 end bezier[2][2] = Vector2(self.end_positions[i]) #last point bezier[2][3] = Vector2(p4_x_mod,random.randrange(2 * self._step,canvas_h - self._step)) #Vector2(random.randrange(self.end_positions[i][0]-self._step//2,self.end_positions[i][0]+self._step//2),random.randrange(self._step*(data[3]-3),self._step*(data[3]-1))) #6th point modifier bezier_points = [] #print(bezier) #labels = ["p1s","mod","p1e","mod","p2s","mod","p2e","mod","p3s","mod","p3e","mod"] for j in range(3): bezier_points.extend(ex.DrawBezier(bezier[j])) self.ready_lines.append(bezier_points) def random_lines(self, data, canvas, i): #draw each line using different function functions = [self.straight_lines,self.bezier_lines,self.bezier2x_lines] index = random.randrange(3) functions[index](data, canvas, i) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONUP and event.button == 1: self.draw_lines() self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: #self.result = [] correct = True if self.solution_positions == self.board.grid[7]: for each_item in self.board.ships: if each_item.grid_x != self.solution[each_item.unit_id]: correct = False break else: correct = False if correct == True: self.level.next_board() else: self.changed_since_check = False self.say(self.d["Please try again."]) self.level.try_again() pysiogame-1.30.811/game_boards/game070.py0000644000175000017500000003154712201770064016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color #font_color = ex.hsv_to_rgb(227,255,50) #font_color = (85,0,212) font_color = (50,0,150) self.grey = (200,200,200) self.font_hl = (100,0,250) self.task_str_color = ex.hsv_to_rgb(200,200,230) #font_result = ex.hsv_to_rgb(225,70,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) self.level.games_per_lvl = 5 if self.level.lvl == 1: rngs = [20,50,10,19] self.level.games_per_lvl = 2 elif self.level.lvl == 2: rngs = [50,100,20,49] self.level.games_per_lvl = 2 elif self.level.lvl == 3: rngs = [100,250,50,99] self.level.games_per_lvl = 2 elif self.level.lvl == 4: rngs = [250,500,100,249] elif self.level.lvl == 5: rngs = [500,1000,100,499] elif self.level.lvl == 6: rngs = [700,1500,250,699] elif self.level.lvl == 7: rngs = [1500,2500,500,1499] elif self.level.lvl == 8: rngs = [2500,5000,1500,2499] elif self.level.lvl == 9: rngs = [5000,10000,2500,4999] elif self.level.lvl == 10: rngs = [10000,84999,5000,9999] data = [39,18] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.n1 = random.randrange(rngs[0],rngs[1]) self.n2 = random.randrange(rngs[2],rngs[3]) self.sumn1n2 = self.n1-self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 0 self.correct = False self.carry1l = [] self.carry10l = [] self.resultl = [] self.nums1l = [] self.nums2l = [] self.ship_id = 0 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " - " + self.n2s + " = " + qm #question self.board.add_unit(1,0,data[0]-3-(max(self.n1sl,self.n2sl))*3 ,3,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 #borrow 1 for i in range(self.n1sl - 1): self.board.add_unit(data[0]-6-i*3,0,1,1,classes.board.Label,"-",white,"",0) self.board.add_unit(data[0]-5-i*3,0,1,1,classes.board.Letter,"",white,"",1) self.carry1l.append(self.board.ships[-1]) self.carry1l[-1].set_outline(self.grey, 2) self.carry1l[-1].pos_id = i self.board.units[-1].align = 2 #add 10 for i in range(self.n1sl - 1): self.board.add_unit(data[0]-3-i*3,1,1,1,classes.board.Label,"+",white,"",0) self.board.add_unit(data[0]-2-i*3,1,1,1,classes.board.Letter,"",white,"",1) self.carry10l.append(self.board.ships[-1]) self.carry10l[-1].set_outline(self.grey, 2) self.carry10l[-1].pos_id = i self.board.units[-1].align = 2 self.board.add_unit(data[0]-2-self.n1sl*3,0,2,1,classes.board.Label,"-1",white,"",0) self.board.add_unit(data[0]-2-self.n1sl*3,1,2,1,classes.board.Label,"+10",white,"",0) #self.carryl[0].set_outline(font_result, 2) #first number for i in range(self.n1sl): self.board.add_unit(data[0]-3-i*3,2,3,3,classes.board.Label,self.n1s[-(i+1)],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i #second number i = 0 for i in range(self.n2sl): self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,self.n2s[-(i+1)],white,"",21) self.nums2l.append(self.board.units[-1]) self.nums2l[-1].pos_id = i i += 1 self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,"-",white,"",21) self.plus_label = self.board.units[-1] #line line = "―" * (self.sumn1n2sl*2) self.board.add_unit(data[0]-self.sumn1n2sl*3,8,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) #result for i in range(self.sumn1n2sl): self.board.add_unit(data[0]-3-i*3,9,3,3,classes.board.Letter,"",white,"",21) self.resultl.append(self.board.ships[-1]) self.resultl[-1].set_outline(self.grey, 2) self.resultl[-1].pos_id = i self.resultl[0].set_outline(self.activated_col, 3) self.home_square = self.resultl[0] self.board.active_ship = self.home_square.unit_id #self.board.units[0].font_color = font_color #self.board.units[1].font_color = (0,0,255) #self.outline_all(1,1) self.activable_count = len(self.board.ships) for each in self.board.ships: each.immobilize() self.deactivate_colors() self.reactivate_colors() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT: self.home_sqare_switch(self.board.active_ship+1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT: self.home_sqare_switch(self.board.active_ship-1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_UP: if self.home_square in self.resultl: self.home_sqare_switch(self.board.active_ship-self.n1sl+1) elif self.home_square in self.carry10l: self.home_sqare_switch(self.board.active_ship-self.n1sl+1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_DOWN: self.home_sqare_switch(self.board.active_ship+self.n1sl-1) elif event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and not self.correct: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else: char = event.unicode if (len(char)>0 and lhv < 3 and char in self.digits): if self.home_square in self.resultl: if lhv == 1: s = self.home_square.value + char if s[0] == "0": self.home_square.value = char else: n = int(s) if n < 20: self.home_square.value = str(n % 10) else: self.home_square.value = char else: self.home_square.value = char elif self.home_square in self.carry1l: if char == "1": self.home_square.value = "1" self.carry10l[self.home_square.pos_id].value = "10" else: self.home_square.value = "" self.carry10l[self.home_square.pos_id].value = "" self.carry10l[self.home_square.pos_id].update_me = True elif self.home_square in self.carry10l: if lhv == 0: if char == "1": self.home_square.value = "10" elif lhv == 1: if char == "0": self.home_square.value = "10" else: self.home_square.value = "" else: if char == "1": self.home_square.value = "10" else: self.home_square.value = "" if self.home_square.value == "10": self.carry1l[self.home_square.pos_id].value = "1" else: self.carry1l[self.home_square.pos_id].value = "" self.carry1l[self.home_square.pos_id].update_me = True self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.MOUSEBUTTONUP: self.home_sqare_switch(self.board.active_ship) def home_sqare_switch(self, activate): if activate < 0 or activate > self.activable_count: activate = self.activable_count - self.sumn1n2sl if activate >= 0 and activate < self.activable_count: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 2) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 3) #if self.home_square in self.resultl: self.reactivate_colors() self.home_square.font_color = self.font_hl #self.home_square = self.ans_h #self.board.active_ship == self.ans_h.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True def reactivate_colors(self): self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square in self.carry1l: #if self.home_square.pos_id >= 0 and self.home_square.pos_id < self.n1sl-1: self.carry10l[self.home_square.pos_id].font_color = self.font_hl elif self.home_square in self.carry10l: #if self.home_square.pos_id >= 0 and self.home_square.pos_id < self.n1sl-1: self.carry1l[self.home_square.pos_id].font_color = self.font_hl elif self.home_square in self.resultl: if self.home_square.pos_id > 0: self.carry1l[self.home_square.pos_id-1].font_color = self.font_hl if self.home_square.pos_id >= 0 and self.home_square.pos_id < self.n1sl-1: self.carry10l[self.home_square.pos_id].font_color = self.font_hl if (self.n1sl > self.home_square.pos_id): self.nums1l[self.home_square.pos_id].font_color = self.font_hl if (self.n2sl > self.home_square.pos_id): self.nums2l[self.home_square.pos_id].font_color = self.font_hl self.resultl[self.home_square.pos_id].font_color = self.font_hl def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: s = "" for each in reversed(self.resultl): s += each.value if s == self.sumn1n2s: self.level.next_board() else: self.level.try_again() pysiogame-1.30.811/game_boards/game051.py0000644000175000017500000002155612201770064016734 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import math import pygame def cubicInt(t, a, b): weight = t*t*(3-2*t) return a + weight*(b-a) def get_r(r, y, b): #red x0 = cubicInt(b, 1.0, 0.163) x1 = cubicInt(b, 1.0, 0.0) x2 = cubicInt(b, 1.0, 0.5) x3 = cubicInt(b, 1.0, 0.2) y0 = cubicInt(y, x0, x1) y1 = cubicInt(y, x2, x3) return int(math.ceil(255 * cubicInt(r, y0, y1))) def get_g(r, y, b): #green x0 = cubicInt(b, 1.0, 0.373) x1 = cubicInt(b, 1.0, 0.66) x2 = cubicInt(b, 0.0, 0.0) x3 = cubicInt(b, 0.5, 0.094) y0 = cubicInt(y, x0, x1) y1 = cubicInt(y, x2, x3) return int(math.ceil(255 * cubicInt(r, y0, y1))) def get_b(r, y, b): #blue x0 = cubicInt(b, 1.0, 0.6) x1 = cubicInt(b, 0.0, 0.2) x2 = cubicInt(b, 0.0, 0.5) x3 = cubicInt(b, 0.0, 0.0) y0 = cubicInt(y, x0, x1) y1 = cubicInt(y, x2, x3) return int(math.ceil(255 * cubicInt(r, y0, y1))) def ryb_to_rgb(r,y,b): if 0 <= r <= 1 and 0 <= y <= 1 and 0 <= b <= 1: rgb = [[],[],[]] rgb[0] = get_r(r,y,b) rgb[1] = get_g(r,y,b) rgb[2] = get_b(r,y,b) return rgb else: return (255,255,255) class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color = ex.hsv_to_rgb(225,15,235) color2 = (255,255,255) self.col_r = (254,39,18) self.col_y = (254,254,51) self.col_b = (2,71,254) self.col_k = (0,0,0) self.col_e = (255,255,255) self.col_e2 = (245,245,245) self.col_e3 = (235,235,235) colorkey = (2,2,2) #self.col_bg = (255,246,219) self.col_bg = (255,255,255) data = [30,23] x_count = self.get_x_count(data[1],even=True) if x_count > 30: data[0] = x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.initcolor = self.col_bg self.board.board_bg.color = self.col_bg self.board.board_bg.update_me = True self.board.moved = self.moved y = data[1]-3 self.rybke_g = [y,y,y,y,y] self.rybke = [0,0,0,0,0] self.board.add_unit(1,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"tube_r.png") self.board.add_unit(4,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"tube_y.png") self.board.add_unit(7,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"tube_b.png") self.board.add_unit(10,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"tube_k.png") self.board.add_unit(13,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"tube_e.png") for each in self.board.ships: each.outline = False each.audible = False #add colour container self.board.add_unit(16,0,data[0]-16,data[1],classes.board.Label,"",self.col_e,"",0) self.canvas = self.board.units[0] self.canvas_center = [(self.canvas.grid_w*self.board.scale)//2,(self.canvas.grid_h*self.board.scale)//2] #adding borders between the colour tubes self.board.add_unit(0,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(3,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(6,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(9,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(12,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(15,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) #adding colour guides self.board.add_door(1,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_r, 1) self.board.add_door(4,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_y, 1) self.board.add_door(7,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_b, 1) self.board.add_door(10,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_k, 1) self.board.add_door(13,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_e3, 1) #adding colour strips self.board.add_door(1,data[1]-1,2,1,classes.board.Door,"",self.col_r,"",0) self.board.add_door(4,data[1]-1,2,1,classes.board.Door,"",self.col_y,"",0) self.board.add_door(7,data[1]-1,2,1,classes.board.Door,"",self.col_b,"",0) self.board.add_door(10,data[1]-1,2,1,classes.board.Door,"",self.col_k,"",0) self.board.add_door(13,data[1]-1,2,1,classes.board.Door,"",self.col_e2,"",0) for i in range(8,24-7): if i>12: self.board.units[i].image.set_colorkey(colorkey) self.board.all_sprites_list.move_to_back(self.board.units[i]) else: self.board.all_sprites_list.move_to_front(self.board.units[i]) self.canvas.set_outline([255,229,127],1) self.canv = pygame.Surface([self.canvas.grid_w*self.board.scale, self.canvas.grid_h*self.board.scale-1]) self.board.all_sprites_list.move_to_back(self.board.board_bg) self.mix() def mix(self): #get the volume for i in range(5): self.rybke_g[i] = self.board.ships[i].grid_y self.rybke[i] = ((self.data[1]-3) - self.rybke_g[i])*5 #calculate the RYB ratio ratio = [0,0,0] total = self.rybke[0] + self.rybke[1] + self.rybke[2] total_bw = self.rybke[3] + self.rybke[4] mixed_total = total + total_bw hsl = [0,0,0] info = "" if total == 0: if total_bw > 0: white_ratio = ((self.rybke[4]*100//total_bw)*255)//100 e = [white_ratio,white_ratio,white_ratio] rgb = e else: rgb = (0,0,0) elif total > 0: m = max(self.rybke[0:3]) for i in range(3): ratio[i] = self.rybke[i]/(m*1.0) rgb = ryb_to_rgb(ratio[0],ratio[1],ratio[2]) #ryb color converted - now time to add some black and/or white paint #add black if self.rybke[3] > 0 or self.rybke[4] > 0: hsl = ex.rgb_to_hsl(rgb[0],rgb[1],rgb[2]) x = 0 if self.rybke[3] > 0: k = self.rybke[3]*100//mixed_total #(total+self.rybke[3]) xk = k*hsl[2]//100 x -= xk if self.rybke[4] > 0: e = self.rybke[4]*100//mixed_total #(total+self.rybke[4]) xe = e*(255-hsl[2])//100 x += xe desaturator = total_bw - (max(self.rybke[3:5]) - min(self.rybke[3:5])) d = desaturator*100//mixed_total #% xd = d*hsl[1]//100 rgb = ex.hsl_to_rgb(hsl[0],hsl[1]-xd,hsl[2]+x) self.canv.fill(self.col_e) #draw container x = self.canvas_center[0] - 5*self.board.scale w = 10*self.board.scale y = self.board.scale h = (self.canvas.grid_h-2)*self.board.scale container_lines = [[x,y],[x,y+h],[x+w,y+h],[x+w,y]] pygame.draw.lines(self.canv, [0,0,0], False, container_lines, 1) #fill the container h = mixed_total*self.board.scale//25 y = (self.canvas.grid_h-1)*self.board.scale - h pygame.draw.rect(self.canv, rgb, [x+1,y,w-1,h],0) self.canvas.painting = self.canv.copy() self.canvas.update_me = True self.update_sliders() def update_sliders(self): for i in range(5): strip = self.board.units[i+12] strip.grid_y = self.rybke_g[i]+3 strip.grid_h = self.data[1]-strip.grid_y strip.pos_update() strip.update_me = True def moved(self): self.mix() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game027.py0000644000175000017500000001524412201770064016734 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,20,10) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects self.board.draw_grid = False s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) white = ((255,255,255)) #data = [x_count, y_count, number of items on the list, top_quntity,font-size] if self.level.lvl == 1: #images 42x42 data = [20,14,3,3,2] elif self.level.lvl == 2: data = [20,14,3,5,2] elif self.level.lvl == 3: data = [20,14,3,7,2] elif self.level.lvl == 4: data = [20,14,4,3,2] elif self.level.lvl == 5: data = [20,14,4,5,2] elif self.level.lvl == 6: data = [20,14,4,7,2] elif self.level.lvl == 7: data = [20,14,5,3,2] elif self.level.lvl == 8: data = [20,14,5,5,2] elif self.level.lvl == 9: data = [20,14,6,3,2] elif self.level.lvl == 10: data = [20,14,6,5,2] #rescale the number of squares horizontally to better match the screen width x_count = self.get_x_count(data[1],even=None) if x_count > 20 : data[0] = x_count self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) shelf_len = 7 #basket basket_w = data[0]- shelf_len - 1 self.board.add_door(data[0]-basket_w,data[1]-6,basket_w,5,classes.board.Door,"",white,"") self.board.units[0].door_outline = True #basket image - 260 x 220 self.board.add_door(data[0]-6,data[1]-6,6,5,classes.board.Door,"",white,"basket.png") self.board.add_unit(data[0]-7,0,7,1,classes.board.Label,self.d["Shopping List"],white,"",data[4]+1) f_end = ".png" items = ["fr_apple1","fr_apple2","fr_strawberry","fr_pear","fr_orange","fr_onion","fr_tomato","fr_lemon","fr_cherry","fr_pepper","fr_carrot","fr_banana","fr_wmelon"] self.items = items singular_items = self.lang.fruit #["green apple","red apple","strawberry","pear","orange","onion","tomato","lemon","cherry","pepper","carrot","banana","watermelon"] multiple_items_1 = self.lang.fruits_1 #["green apples","red apples","strawberries","pears","oranges","onions","tomatoes","lemons","cherries","peppers","carrots","bananas","watermelons"] multiple_items_2 = self.lang.fruits_2 self.singular_items = singular_items item_indexes = [x for x in range(len(items))] #quantities = [x for x in range(1,data[3]+1)] self.chosen_items = [[],[]] self.solution = {} #pick items and quantities for i in range(data[2]): index = random.randrange(0,len(item_indexes)) self.chosen_items[0].append(item_indexes[index]) quantity = random.randrange(1,data[3]+1) self.chosen_items[1].append(quantity) self.solution[str(item_indexes[index])] = quantity del(item_indexes[index]) #create shopping list for i in range(data[2]): ind = self.chosen_items[0][i] if self.chosen_items[1][i]>1: if self.chosen_items[1][i] in self.lang.plural_rules[0]: caption = multiple_items_1[ind] else: caption = multiple_items_2[ind] else: caption = singular_items[ind] self.board.add_unit(data[0]-7,i+1,1,1,classes.board.Label,str(self.chosen_items[1][i]) +" ",white,"",data[4]) self.board.add_unit(data[0]-6,i+1,1,1,classes.board.ImgShip,"",white,items[ind]+f_end,data[4]) self.board.add_unit(data[0]-5,i+1,5,1,classes.board.Label,caption,white,"",data[4]) self.board.ships[i].immobilize() self.board.ships[i].outline = False self.board.units[-1].align = 1 #rearange z-order of red outlines (shopping list and basket) for i in range(2): self.board.all_sprites_list.move_to_front(self.board.units[i]) #put stuff on shelves: for i in range(len(items)): image = items[i]+f_end for j in range(0,shelf_len): self.board.add_unit(j,i,1,1,classes.board.ImgShip,singular_items[i],white,image,data[4]) self.board.ships[-1].audible = False self.board.all_sprites_list.move_to_front(self.board.units[0]) instruction = self.d["Check the shopping list"] self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,color0,"",3) self.board.ships[-1].set_outline(0, 1) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: #checking what sprites collide with the basket sprite purchased = pygame.sprite.spritecollide(self.board.units[0], self.board.ship_list, False, collided = None) result = {} #count each item and check if they are the items from the shopping list for i in range(len(self.items)): count = 0 for each in purchased: if each.value == self.singular_items[i]: #self.items[i]: count += 1 if count > 0: result[str(i)] = count if result == self.solution: self.level.next_board() else: self.say(self.d["Please try again."]) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game044.py0000644000175000017500000001773112201770064016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,20) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): self.vis_buttons = [0,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects self.board.draw_grid = False s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 outline_color = ((150,150,150)) white = ((255,255,255)) #setting level variable #data = [x_count, y_count, number_count, top_limit, ordered] data = [7,6,8,3,3] self.chapters = [1,5,10,15,20] #rescale the number of squares horizontally to better match the screen width data[0] = self.get_x_count(data[1],even=False) self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) if self.mainloop.m.game_variant == 0: image_src = [os.path.join('memory', "m_img%da.png" % (i)) for i in range(1,21)] grey_image_src = [os.path.join('memory', "m_img%db.png" % (i)) for i in range(1,22)] elif self.mainloop.m.game_variant == 1: image_src = [os.path.join('memory', "f_img%da.png" % (i)) for i in range(1,21)] grey_image_src = [os.path.join('memory', "m_img22b.png")] elif self.mainloop.m.game_variant == 2: image_src = [os.path.join('memory', "n_img%da.png" % (i)) for i in range(2,22)] grey_image_src = [os.path.join('memory', "m_img22b.png")] self.bg_img_src = image_src[self.level.lvl-1] #os.path.join('memory', "m_img13a.png") if len(grey_image_src) > 1: self.bg_img_grey_src = grey_image_src[self.level.lvl-1] #os.path.join('memory', "m_img13b.png") else: self.bg_img_grey_src = grey_image_src[0] self.bg_img = classes.board.ImgSurf(self.board,3,3,white,self.bg_img_src) self.finished = False self.choice_list = [x for x in range(1,data[2]+1)] self.shuffled = self.choice_list[:] random.shuffle(self.shuffled) inversions = ex.inversions(self.shuffled) if inversions % 2 != 0: #if number of inversions is odd it is unsolvable #in unsolvable combinations swapping 2 squares will make it solvable temp = self.shuffled[0] self.shuffled[0]=self.shuffled[1] self.shuffled[1]=temp color = ((255,255,255)) h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3])//2 #side margin width self.check = [h1,h2,w2] self.board.add_door(w2,h1,data[3],data[4],classes.board.Door,"",color,self.bg_img_grey_src) self.board.units[0].image.set_colorkey((1,2,3)) #self.board.units[0].door_outline = True #create table to store 'binary' solution #find position of first door square x = w2 y = h1 self.mini_grid = [] #add objects to the board line = [] h_start = random.randrange(0, 155, 5) h_step = 100 // (data[2]) for i in range(data[2]): h = (h_start + (self.shuffled[i]-1)*h_step) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = str(self.shuffled[i]) #self.board.add_unit(x,y,1,1,classes.board.Letter,caption,number_color,"",2) #self.board.add_unit(x,y,1,1,classes.board.ImgShip,caption,white,image_src[self.shuffled[i]]) self.board.add_unit(x,y,1,1,classes.board.ImgShip,caption,white,self.bg_img_src) self.board.ships[-1].img = self.bg_img.img.copy() self.board.ships[-1].readable = False #self.board.ships[-1].perm_outline_color = outline_color offset_x = 0 offset_y = 0 if self.shuffled[i] in [2,5,8]: offset_x = self.board.scale - 0 elif self.shuffled[i] in [3,6]: offset_x = (self.board.scale - 0)*2 if self.shuffled[i] in [4,5,6]: offset_y = self.board.scale - 0 elif self.shuffled[i] in [7,8]: offset_y = (self.board.scale - 0)*2 self.board.ships[-1].img_pos = (-offset_x,-offset_y) line.append(i) x += 1 if x >= w2+data[3] or i == data[2]-1: x = w2 y += 1 self.mini_grid.append(line) line=[] #mini img below game self.board.add_unit(w2+data[3]-2,data[1]-1,1,1,classes.board.ImgShip,"",white,self.bg_img_src) self.preview = self.board.ships[-1] self.preview.immobilize() self.preview.outline = False #draw 4 lines on the mini preview step = self.board.scale // 3 pygame.draw.line(self.preview.img,outline_color,[step,0],[step,step*3],1) pygame.draw.line(self.preview.img,outline_color,[step*2,0],[step*2,step*3],1) pygame.draw.line(self.preview.img,outline_color,[0,step],[step*3,step],1) pygame.draw.line(self.preview.img,outline_color,[0,step*2],[step*3,step*2],1) self.preview.update_me = True self.outline_all(outline_color,1) #horizontal self.board.add_unit(0,0,data[0],1,classes.board.Obstacle,"",white,"",7)#top self.board.add_unit(0,h1+data[4],data[0],1,classes.board.Obstacle,"",white,"",7)#bottom 1 #side obstacles self.board.add_unit(0,h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#left self.board.add_unit(w2+data[3],h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#right #self.board.all_sprites_list.move_to_front(self.board.units[0]) self.board.all_sprites_list.move_to_back(self.board.units[0]) self.board.all_sprites_list.move_to_back(self.board.board_bg) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONUP: self.check_result() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check and self.finished == False: ships = [] current = [x for x in range(self.data[2]+1)]#self.choice_list[:] #collect value and x position on the grid from ships list for i in range(len(self.board.ships)-1): x = self.board.ships[i].grid_x-self.check[2] y = self.board.ships[i].grid_y-self.check[0] w = self.data[3] h = self.data[4] pos = x + (y*w) current[pos]=int(self.board.ships[i].value) del(current[-1]) if self.choice_list == current: self.finished = True self.board.units[0].img = self.bg_img.img.copy() self.board.all_sprites_list.move_to_front(self.board.units[0]) self.board.units[0].update_me = True #copied from level controller: index = random.randrange(0,len(self.d["Great job!"])) praise = self.d["Great job!"][index] self.say(praise,6) self.board.units[2].value = praise self.board.units[2].update_me = True pysiogame-1.30.811/game_boards/game038.py0000644000175000017500000001273412201770064016737 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random import colorsys import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 225) #languages with standard letters in number names self.safe_langs = ["en_gb", "en_us", "it", "gr", "ru"] self.letter_color = ex.hsv_to_rgb(h,s,v) #[round(each*255) for each in rgb] font_color = ex.hsv_to_rgb(h,s,75) outline_color = ex.hsv_to_rgb(h,s+50,v-50) frame_color = [255,255,255] card_color = ex.hsv_to_rgb(h+10,s-25,v) data = [14,10] #stretch width to fit the screen size data[0] = self.get_x_count(data[1],even=True) if data[0]<14: data[0]=14 self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) image_src = [os.path.join('memory', "n_img%da.png" % (i)) for i in range(1,22)] self.word_list = self.lang.numbers # ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty'] self.card_fronts = [] x = 0 x2 = (data[0] - (20 - data[0]))//2 y = 0 for i in range(1,21): self.board.add_unit(x,y,1,1,classes.board.Letter,str(i),self.letter_color,"",2) self.board.ships[-1].font_color = font_color self.board.ships[i-1].set_outline(outline_color,1) self.card_fronts.append(classes.board.ImgSurf(self.board,2,2,frame_color,image_src[i])) x += 1 if x >= data[0]: x = x2 y = data[1]-1 x=(data[0]-4)//2 y=1 self.board.add_unit(x-2,y+5,2,2,classes.board.ImgShip,"1",frame_color,image_src[1]) self.board.add_unit(x-2,y+1,2,4,classes.board.Label,"1",frame_color,"",18) #self.board.add_unit(x-2,y+3,2,2,classes.board.Label,"1",frame_color,"",13) #frame size 432 x 288 self.board.add_unit(x,y+1,6,4,classes.board.MultiImgSprite,self.word_list[0],frame_color,"flashcard_numbers.jpg",row_data=[5,4]) self.board.add_unit(x,y+5,6,1,classes.board.Letter,self.word_list[0],frame_color,"",2) font_size = 15 handwritten = self.word_list[0] if self.lang.lang == "gr": font_size = 19 elif self.lang.lang == "ru": font_size = 15 self.board.add_unit(x,y+6,6,1,classes.board.Letter,handwritten,frame_color,"",font_size) self.board.add_door(x-2,y+1,8,6,classes.board.Door,"",card_color,"") self.board.units[1].door_outline = True self.board.all_sprites_list.move_to_front(self.board.units[1]) self.slide = self.board.ships[21] self.slide.build_frame_flow(20) self.slide.correction = True self.slide.perm_outline = True for each in self.board.ships: each.immobilize() self.board.ships[20].outline = False self.active_item = self.board.ships[0] self.active_item.color = (255,255,255) self.prev_item = self.active_item def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: self.active_item = self.board.ships[self.board.active_ship] if self.active_item.unit_id < 20: if self.prev_item != None: self.prev_item.color = self.letter_color self.prev_item.update_me = True self.active_item.color = (255,255,255) self.create_card(self.active_item) self.prev_item = self.active_item self.mainloop.redraw_needed[0] = True def create_card(self, active): self.board.units[0].value = active.value #self.board.units[1].value = active.value self.board.ships[20].value = active.value self.board.ships[20].img = self.card_fronts[active.unit_id].img.copy() self.board.ships[22].value = self.word_list[active.unit_id] self.board.ships[23].value = self.word_list[active.unit_id] #if self.lang.lang in self.safe_langs: self.board.ships[23].value = self.word_list[active.unit_id] #else: # self.board.ships[23].value = "" self.mainloop.redraw_needed[0] = True self.slide.set_frame(active.unit_id) self.board.active_ship = -1 self.slide.update_me = True for i in [0,1]: self.board.units[i].update_me = True for i in [20,21,22,23]: self.board.ships[i].update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game004.py0000644000175000017500000001356412201770064016732 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,6) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,23,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(150, 225, 5) v = random.randrange(190, 225, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) white = (255,255,255) #data = [x_count, y_count, range_from, range_to, max_sum_range, image] if self.level.lvl == 1: data = [23,9] elif self.level.lvl == 2: data = [23,9] color1 = color0 elif self.level.lvl == 3: data = [23,9] color1 = color2 = color0 elif self.level.lvl == 4: data = [23,9] color1 = color2 = color0 elif self.level.lvl == 5: data = [23,9] color0 = (0,0,0) elif self.level.lvl == 6: data = [23,9] color2 = color1 = color0 = (0,0,0) color3 = (40,40,40) self.data = data self.board.level_start(data[0],data[1],self.layout.scale) num1 = random.randrange(1,10) num2 = random.randrange(1,10) self.solution = [num1,num2,num1 * num2] self.digits = ["0","1","2","3","4","5","6","7","8","9"] unique = set() for i in range(1,10): for j in range(1,10): if i == num1 and j == num2: color=color0 elif i == num1 or j == num2: color=color1 elif self.level.lvl == 2 and (i == num2 or j == num1):color=color1 else: color = color2 mul = i*j unique.add(mul) caption = str(mul) self.board.add_unit(i-1,j-1,1,1,classes.board.Label,caption,color,"",2) self.board.add_unit(9,0,1,9,classes.board.Obstacle,"",color3) unique = sorted(unique) #draw outline with selectable numbers self.multi = dict() s = 180 v = 240 h = 7 color = ex.hsv_to_rgb(h,s,v) x = 11 y = 0 for i in range(36): if i < 9: x += 1 elif i == 9: x = 22 elif i < 18: y += 1 elif i == 18: x = 20 elif i < 27: x -= 1 elif i == 27: x = 10 elif i <= 36: y -= 1 color = ex.hsv_to_rgb(h*i,s,v) self.multi[str(unique[i])]=i caption = str(unique[i]) self.board.add_unit(x,y,1,1,classes.board.Letter,caption,color,"",2) self.board.ships[-1].audible = False x=14 y=4 captions = [str(num1),chr(215),str(num2),"="] if self.level.lvl < 4: color = self.board.ships[self.multi[str(self.solution[2])]].initcolor else: color = (255,255,255)#color4 for i in range(4): self.board.add_unit(x+i,y,1,1,classes.board.Label,captions[i],color,"",2) self.outline_all(0,1) self.board.add_door(18,y,1,1,classes.board.Door,"",white,"",font_size = 2) self.home_square = self.board.units[86] self.home_square.door_outline = True self.board.all_sprites_list.move_to_front(self.home_square) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] elif not self.board.grid[4][18]: char = event.unicode if len(char)>0 and lhv < 2 and char in self.digits: self.home_square.value += char self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.MOUSEMOTION and self.drag: if self.board.grid[4][18]: self.home_square.value = "" self.home_square.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[4][18]: sol = self.board.ships[self.multi[str(self.solution[2])]] if sol.grid_x == 18 and sol.grid_y == 4: self.passed() else: self.failed() else: if self.home_square.value != "" and (int(self.home_square.value) == self.solution[2]): self.quick_passed() else: self.failed() def passed(self): tts = self.d["Perfect!"]+" "+str(self.solution[0])+" "+self.d["multiplied by"]+" "+str(self.solution[1])+" "+self.d["equals"]+" "+str(self.solution[2]) self.level.next_board(tts) def quick_passed(self): tts = self.d["Perfect!"] self.level.next_board(tts) def failed(self): self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game053.py0000644000175000017500000001336512201770065016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import math import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color = ex.hsv_to_rgb(225,15,235) color2 = (255,255,255) self.col_r = (255,0,0) self.col_g = (0,255,0) self.col_b = (0,0,255) self.col_k = (0,0,0) self.col_e = (255,255,255) colorkey = (2,2,2) self.col_bg = self.col_k #(255,246,219) data = [32,23] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=True) if x_count > 32: data[0] = x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.initcolor = self.col_bg self.board.board_bg.color = self.col_bg self.board.board_bg.update_me = True self.board.moved = self.moved y = data[1]-3 self.rgb_g = [y,y,y] self.rgbx3 = [self.col_k,self.col_k,self.col_k] self.board.add_unit(1,y,2,3,classes.board.ImgAlphaShip,"",self.col_r,"light_r.png") self.board.add_unit(4,y,2,3,classes.board.ImgAlphaShip,"",self.col_g,"light_g.png") self.board.add_unit(7,y,2,3,classes.board.ImgAlphaShip,"",self.col_b,"light_b.png") for each in self.board.ships: each.outline = False each.audible = False each.image.set_colorkey(each.initcolor) #add colour circles - canvas self.board.add_unit(10,0,data[0]-10,data[1],classes.board.Label,"",self.col_e,"",0) self.canvas = self.board.units[0] self.canvas_center = [(self.canvas.grid_w*self.board.scale)//2,(self.canvas.grid_h*self.board.scale)//2] #adding borders between the colour tubes self.board.add_unit(0,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(3,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(6,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(9,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) #adding colour guides self.board.add_door(1,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_r, 1) self.board.add_door(4,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_g, 1) self.board.add_door(7,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_b, 1) #adding colour strips self.board.add_door(1,data[1]-1,2,1,classes.board.Door,"",self.col_r,"",0) self.board.add_door(4,data[1]-1,2,1,classes.board.Door,"",self.col_g,"",0) self.board.add_door(7,data[1]-1,2,1,classes.board.Door,"",self.col_b,"",0) #self.color_info = self.board.units[-1] for i in [5,6,7,8,9,10]: if i>7: self.board.units[i].image.set_colorkey(colorkey) self.board.all_sprites_list.move_to_back(self.board.units[i]) else: self.board.all_sprites_list.move_to_front(self.board.units[i]) self.canvas.set_outline([255,229,127],1) self.canv = [] for i in range(4): self.canv.append(pygame.Surface([self.canvas.grid_w*self.board.scale, self.canvas.grid_h*self.board.scale-1])) self.board.all_sprites_list.move_to_back(self.board.board_bg) self.mix() def mix(self): for i in range(3): self.rgb_g[i] = self.board.ships[i].grid_y self.update_sliders() self.canv[3].fill(self.col_k) ct = self.canvas_center radius = 9*self.board.scale x = 1*self.board.scale rect = [[ct[0],ct[1]-x],[ct[0]-x,ct[1]+x],[ct[0]+x,ct[1]+x]] for i in range(3): pygame.draw.circle(self.canv[i], self.rgbx3[i], rect[i], radius, 0) self.canv[3].blit(self.canv[i],[0,0],special_flags = pygame.BLEND_ADD) self.canvas.painting = self.canv[3].copy() self.canvas.update_me = True def update_sliders(self): for i in range(3): strip = self.board.units[i+8] strip.grid_y = self.rgb_g[i] strip.grid_h = self.data[1]-strip.grid_y+3 col = [] for each in strip.initcolor: if each > 0: if strip.grid_y == 20: col.append(0) elif strip.grid_y == 0: col.append(255) else: step = 255 / 20.0 col.append(int(255 - (strip.grid_y) * step)) else: col.append(0) self.rgbx3[i] = col strip.color = col strip.pos_update() strip.update_me = True def moved(self): self.mix() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((0,0,0)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game072.py0000644000175000017500000003441612201770065016737 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,10,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color font_color = (50,0,150) self.grey = (200,200,200) self.greyoutline = (190,190,190) self.font_hl = (100,0,250) self.font_hl2 = (250,0,200) self.font_hl3 = (200,0,250) self.task_str_color = ex.hsv_to_rgb(200,200,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) self.white = white self.level.games_per_lvl = 5 self.auto_select = True if self.level.lvl == 1: rngs = [2,5,20,50] elif self.level.lvl == 2: rngs = [3,9,20,50] elif self.level.lvl == 3: rngs = [3,9,50,99] elif self.level.lvl == 4: rngs = [3,9,100,150] elif self.level.lvl == 5: rngs = [3,9,200,500] elif self.level.lvl == 6: rngs = [3,9,500,999] elif self.level.lvl == 7: rngs = [20,50,21,99] elif self.level.lvl == 8: rngs = [3,9,200,500] self.auto_select = False elif self.level.lvl == 9: rngs = [3,9,500,999] self.auto_select = False elif self.level.lvl == 10: rngs = [20,50,21,99] self.auto_select = False if self.lang.lang == 'pl': self.divisor_pos = 1 else: self.divisor_pos = 0 data = [39,25] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) nr1 = random.randrange(rngs[0],rngs[1]) nr2 = random.randrange(rngs[2],rngs[3]) self.n1 = nr1 * nr2 self.n2 = nr1 self.sumn1n2 = nr2 #self.n1+self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 0 self.correct = False self.carryl = [] self.resultl = [] self.nums1l = [] self.nums2l = [] self.ship_id = 0 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.divisor_pos == 0: r_offset = 0 d_offset = 0 ds_offset = 0 d_str = "¥" d_h = 3 num2_align = 2 else: r_offset = 4 d_offset = self.n1sl*2+1 ds_offset = self.n1sl*2-3 d_str = "÷" d_h = 4 num2_align = 1 if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " ÷ " + self.n2s + " = " + qm #question self.board.add_unit(1,0,data[0]-1-self.sumn1n2sl*2-1-self.n1sl*2 ,2,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 j = 0 xs = self.data[0]-self.n1sl*2 #first number for i in range(self.n1sl): self.board.add_unit(xs+i*2-r_offset,3,2,2,classes.board.Label,self.n1s[i],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i j += 1 self.board.add_unit(data[0]-4-j*2+d_offset,3,3,2,classes.board.Label,self.n2s,white,"",21) self.num2 = self.board.units[-1] self.num2.align = num2_align line = "―" * (self.n1sl*2) self.board.add_unit(data[0]-self.n1sl*2-r_offset,2,self.n1sl*2,1,classes.board.Label,line,white,"",21) self.board.add_unit(data[0]-self.n1sl*2-1+ds_offset,2,1,d_h,classes.board.Label,d_str,white,"",21) self.division_sign = self.board.units[-1] self.resl = [] self.nbel = [] self.mpll = [] self.subl = [] self.minl = [] # to store minus signs res = [0 for i in range(self.n1sl)] nbr = [0 for i in range(self.n1sl)] nbe = [0 for i in range(self.n1sl)] mpl = [0 for i in range(self.n1sl)] sub = [0 for i in range(self.n1sl)] #[res,nbr,mpl,sub,line] yp = [0,3,5,8,7] xp = [xs,xs,xs+2,xs+2,xs] self.activables = 0 for i in range(self.n1sl): if i > 0: nbr[i] = sub[i-1] * 10 + int(self.n1s[i]) nbe[i] = int(self.n1s[i]) self.board.add_unit(xp[1]-r_offset,yp[1],2,2,classes.board.Letter,"",white,"",21) self.nbel.append(self.board.ships[-1]) self.nbel[-1].pos_id = i self.activables += 1 elif i == 0: nbr[i] = int(self.n1s[i]) nbe[i] = int(self.n1s[i]) res[i] = nbr[i] / self.n2 self.board.add_unit(xp[0]-r_offset,yp[0],2,2,classes.board.Letter,"",white,"",21) self.resl.append(self.board.ships[-1]) self.resl[-1].pos_id = i self.activables += 1 mpl[i] = self.n2 * res[i] mpls = str(mpl[i]) mplsl = len(mpls) self.board.add_unit(xp[2]-mplsl*2 - 2-r_offset,yp[2],2,2,classes.board.Label,"-",white,"",21) self.minl.append(self.board.units[-1]) self.mpll.append([]) for j in range(mplsl): self.board.add_unit(xp[2]-mplsl*2 + j*2-r_offset,yp[2],2,2,classes.board.Letter,"",white,"",21) self.mpll[i].append(self.board.ships[-1]) self.mpll[i][-1].pos_id = i self.mpll[i][-1].posy_id = j self.activables += 1 sub[i] = nbr[i] - mpl[i] subs = str(sub[i]) subsl = len(subs) self.subl.append([]) for j in range(subsl): self.board.add_unit(xp[3]-subsl*2 + j*2-r_offset,yp[3],2,2,classes.board.Letter,"",white,"",21) self.subl[i].append(self.board.ships[-1]) self.subl[i][-1].pos_id = i self.subl[i][-1].posy_id = j self.activables += 1 self.board.add_unit(xp[4]+(2-len(str(nbr[i]))*2)-r_offset,yp[4],len(str(nbr[i]))*2,1,classes.board.Label,line,white,"",21) for i in range(5): xp[i] += 2 if i > 0: yp[i] += 5 self.home_square = self.board.ships[0] self.board.active_ship = self.home_square.unit_id for each in self.board.ships: each.immobilize() self.deactivate_colors() self.reactivate_colors() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT: self.home_sqare_switch(self.board.active_ship+1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT: self.home_sqare_switch(self.board.active_ship-1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_UP: self.home_sqare_switch(self.board.active_ship-self.sumn1n2sl+1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_DOWN: self.home_sqare_switch(self.board.active_ship+self.sumn1n2sl) elif event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and not self.correct: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else: char = event.unicode if (len(char)>0 and lhv < 2 and char in self.digits): self.home_square.value = char #if self.home_square in self.nbel: if self.auto_select: self.home_sqare_switch(self.board.active_ship+1) else: self.home_square.value = "" self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.MOUSEBUTTONUP: self.home_sqare_switch(self.board.active_ship) def home_sqare_switch(self, activate): if activate >= 0 and activate < self.activables: #self.sumn1n2sl * 2 - 1: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 2) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 2) #if self.home_square in self.resultl: self.reactivate_colors() self.home_square.font_color = self.font_hl #self.home_square = self.ans_h #self.board.active_ship == self.ans_h.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey each.set_outline(self.greyoutline, 1) each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True def reactivate_colors(self): #self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square in self.resl: if self.home_square.pos_id == 0: self.nums1l[0].font_color = self.font_hl3 else: for each in self.subl[self.home_square.pos_id-1]: each.font_color = self.font_hl3 each.set_outline(self.font_hl3, 1) self.nbel[self.home_square.pos_id-1].font_color = self.font_hl3 self.nbel[self.home_square.pos_id-1].set_outline(self.font_hl3, 1) self.num2.font_color = self.font_hl2 if self.divisor_pos == 1: self.division_sign.font_color = self.font_hl2 elif self.home_square in self.nbel: self.nums1l[self.home_square.pos_id].font_color = self.font_hl3 else: f = False for each in self.mpll: for e in each: if self.home_square == e: f = True #it's in this sublist - now highlight entire sublist for e2 in each: e2.font_color = self.font_hl e2.set_outline(self.font_hl2, 1) #highlight multiplied numbers self.num2.font_color = self.font_hl2 self.resl[self.home_square.pos_id].font_color = self.font_hl3 self.resl[self.home_square.pos_id].set_outline(self.font_hl3, 1) break if not f: for each in self.subl: for e in each: if self.home_square == e: #print("in subtraction") for e2 in each: e2.font_color = self.font_hl e2.set_outline(self.font_hl2, 1) #highlight subtracted numbers if self.home_square.pos_id == 0: self.nums1l[0].font_color = self.font_hl3 self.mpll[0][0].font_color = self.font_hl2 self.mpll[0][0].set_outline(self.font_hl2, 1) else: #highlight all previous subtract + dropped number for e2 in self.subl[self.home_square.pos_id-1]: e2.font_color = self.font_hl3 e2.set_outline(self.font_hl3, 1) self.nbel[self.home_square.pos_id-1].font_color = self.font_hl3 self.nbel[self.home_square.pos_id-1].set_outline(self.font_hl3, 1) #highlight previous multiplication result for e2 in self.mpll[self.home_square.pos_id]: e2.font_color = self.font_hl2 e2.set_outline(self.font_hl2, 1) self.minl[self.home_square.pos_id].font_color = self.font_hl3 break self.home_square.set_outline(self.font_hl, 3) self.home_square.font_color = self.font_hl def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: s = "" for each in self.resl: s += each.value if int(s) == self.sumn1n2: self.level.next_board() else: self.level.try_again() pysiogame-1.30.811/game_boards/game054.py0000644000175000017500000001754212201770065016740 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import math import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,999,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color = ex.hsv_to_rgb(225,15,235) color2 = (255,255,255) self.col_r = (255,0,0) self.col_g = (0,255,0) self.col_b = (0,0,255) self.col_k = (0,0,0) self.col_e = (255,255,255) colorkey = (2,2,2) self.col_bg = self.col_k #(255,246,219) data = [32,23] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=True) if x_count > 32: data[0] = x_count self.data = data self.vis_buttons = [1,0,0,0,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.initcolor = self.col_bg self.board.board_bg.color = self.col_bg self.board.board_bg.update_me = True self.board.moved = self.moved self.choice_list = [] step = 255 / 20.0 for i in range(21): self.choice_list.append(int(255 - i*step)) self.picked = [] for i in range(3): self.picked.append(self.choice_list[random.randrange(0,len(self.choice_list))]) y = data[1]-3 self.rgb_g = [y,y,y] self.rgbx3 = [self.col_k,self.col_k,self.col_k] self.board.add_unit(1,y,2,3,classes.board.ImgAlphaShip,"",self.col_r,"light_r.png") self.board.add_unit(4,y,2,3,classes.board.ImgAlphaShip,"",self.col_g,"light_g.png") self.board.add_unit(7,y,2,3,classes.board.ImgAlphaShip,"",self.col_b,"light_b.png") for each in self.board.ships: each.outline = False each.audible = False each.image.set_colorkey(each.initcolor) #add colour circles - canvas self.board.add_unit(10,0,data[0]-10,data[1],classes.board.Label,"",self.col_e,"",0) self.canvas = self.board.units[0] self.canvas_center = [(self.canvas.grid_w*self.board.scale)//2,(self.canvas.grid_h*self.board.scale)//2] #adding borders between the colour tubes self.board.add_unit(0,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(3,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(6,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(9,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) #adding colour guides self.board.add_door(1,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_r, 1) self.board.add_door(4,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_g, 1) self.board.add_door(7,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_b, 1) #adding colour strips self.board.add_door(1,data[1]-1,2,1,classes.board.Door,"",self.col_r,"",0) self.board.add_door(4,data[1]-1,2,1,classes.board.Door,"",self.col_g,"",0) self.board.add_door(7,data[1]-1,2,1,classes.board.Door,"",self.col_b,"",0) #self.color_info = self.board.units[-1] for i in [5,6,7,8,9,10]: if i>7: self.board.units[i].image.set_colorkey(colorkey) self.board.all_sprites_list.move_to_back(self.board.units[i]) else: self.board.all_sprites_list.move_to_front(self.board.units[i]) self.canvas.set_outline([255,229,127],1) self.canv = [] for i in range(4): self.canv.append(pygame.Surface([self.canvas.grid_w*self.board.scale, self.canvas.grid_h*self.board.scale-1])) self.board.all_sprites_list.move_to_back(self.board.board_bg) self.mix() def mix(self): for i in range(3): self.rgb_g[i] = self.board.ships[i].grid_y self.update_sliders() self.canv[3].fill(self.col_k) ct = self.canvas_center radius = 9*self.board.scale radius2 = 5*self.board.scale x = 1*self.board.scale rect = [[ct[0],ct[1]-x],[ct[0]-x,ct[1]+x],[ct[0]+x,ct[1]+x]] for i in range(3): pygame.draw.circle(self.canv[i], self.rgbx3[i], rect[i], radius, 0) self.canv[3].blit(self.canv[i],[0,0],special_flags = pygame.BLEND_ADD) pygame.draw.circle(self.canv[3], self.picked, ct, radius2, 0) #self.canv[3].blit(self.canv[4],[0,0]) self.canvas.painting = self.canv[3].copy() self.canvas.update_me = True def update_sliders(self): for i in range(3): strip = self.board.units[i+8] strip.grid_y = self.rgb_g[i]+3-3 strip.grid_h = self.data[1]-strip.grid_y+3 col = [] for each in strip.initcolor: if each > 0: if strip.grid_y == 20: col.append(0) elif strip.grid_y == 0: col.append(255) else: step = 255 / 20.0 col.append(int(255 - (strip.grid_y) * step)) else: col.append(0) self.rgbx3[i] = col strip.color = col strip.pos_update() strip.update_me = True def moved(self): self.mix() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((0,0,0)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): #print(self.rgbx3) r = self.rgbx3[0][0] g = self.rgbx3[1][1] b = self.rgbx3[2][2] if self.picked != [r,g,b]: help = "" if self.picked[0] > r: #help += " more red; " help += " %s %s; " % (self.d['more color'], self.d['of red'][0]) elif self.picked[0] < r: #help += " less red; " help += " %s %s; " % (self.d['less color'], self.d['of red'][0]) else: #help += " red is ok; " help += " %s %s; " % (self.d['of red'][1],self.d['color is ok']) if self.picked[1] > g: #help += " more green; " help += " %s %s; " % (self.d['more color'], self.d['of green'][0]) elif self.picked[1] < g: #help += " less green; " help += " %s %s; " % (self.d['less color'], self.d['of green'][0]) else: #help += " green is ok; " help += " %s %s; " % (self.d['of green'][1],self.d['color is ok']) if self.picked[2] > b: #help += " more blue; " help += " %s %s; " % (self.d['more color'], self.d['of blue'][0]) elif self.picked[2] < b: #help += " less blue; " help += " %s %s; " % (self.d['less color'], self.d['of blue'][0]) else: #help += " blue is ok." help += " %s %s; " % (self.d['of blue'][1],self.d['color is ok']) self.say(help) self.level.try_again() else: self.level.next_board() pysiogame-1.30.811/game_boards/game005.py0000644000175000017500000001150112201770065016721 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,6) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) #data = [x_count, y_count, number_count, top_limit, ordered] if self.level.lvl == 1: data = [11,6,3,9,True,1] elif self.level.lvl == 2: data = [11,6,3,9,False,1] elif self.level.lvl == 3: data = [11,6,5,15,True,2] elif self.level.lvl == 4: data = [11,6,5,15,False,2] elif self.level.lvl == 5: data = [11,6,7,20,True,2] elif self.level.lvl == 6: data = [11,6,7,20,False,2] elif self.level.lvl == 7: data = [11,6,9,99,True,2] elif self.level.lvl == 8: data = [11,6,9,99,False,2] elif self.level.lvl == 9: data = [11,6,11,99,True,2] elif self.level.lvl == 10: data = [11,6,11,99,False,2] self.chapters = [1,3,5,7,9,10] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.num_list = [] if data[4] == True: choice_list = [x for x in range(data[3]-data[2])] index = random.randrange(0,len(choice_list)) n = 0 for i in range(data[2]): self.num_list.append(choice_list[index]+n) n += 1 else: choice_list = [x for x in range(data[3])] for i in range(data[2]): index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) del(choice_list[index]) shuffled = self.num_list[:] random.shuffle(shuffled) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [0 for x in range(data[0])] #find position of first door square x = (data[0]-data[2])//2 #add objects to the board for i in range(data[2]): self.board.add_door(x+i,0,1,1,classes.board.Door,"",color,"") self.board.units[i].door_outline = True h = random.randrange(0, 255, 5) y = random.randrange(1,5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = str(shuffled[i]) self.board.add_unit(x+i,y,1,1,classes.board.Letter,caption,number_color,"",data[5]) self.solution_grid[x+i]=1 for each in self.board.units: self.board.all_sprites_list.move_to_front(each) instruction = self.d["Re-arrange ascending"] self.board.add_unit(0,5,11,1,classes.board.Letter,instruction,color0,"",7) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[0] == self.solution_grid: ships = [] #collect value and x position on the grid from ships list for i in range(self.data[2]): ships.append([int(self.board.ships[i].value),self.board.ships[i].grid_x]) ships_sorted = sorted(ships) correct = True for i in range(self.data[2]): if i < self.data[2]-1: if ships_sorted[i][1]>ships_sorted[i+1][1]: correct = False if correct == True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."]) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True)pysiogame-1.30.811/game_boards/game025.py0000644000175000017500000002161012201770065016725 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import game_boards.game023_lvls as gl import classes.extras as ex import classes.board import random import sys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,5) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,27,19) def create_game_objects(self, level = 1): self.vis_buttons = [0,1,1,1,1,1,1,0,1] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects self.change_count = 0 self.ai_enabled = True s = random.randrange(150, 205, 5) v = random.randrange(150, 205, 5) h = random.randrange(0, 255, 5) color = ex.hsv_to_rgb(h,s,v) color1 = ex.hsv_to_rgb(h,40,230) #label color2 = ex.hsv_to_rgb(h,150,230) #completed color3 = ex.hsv_to_rgb(h,255,230) #current self.clr = [color1,color2,color3] white = (255,255,255) if self.level.lvl == 1: #img_ 32x32 data = [27,19,10,"bug_32.png",2,gl.lvl1] elif self.level.lvl == 2: #img_ 32x32 data = [27,19,10,"bug_32.png",3,gl.lvl1] elif self.level.lvl == 3: #img_ 32x32 data = [27,19,10,"bug_32.png",4,gl.lvl1] elif self.level.lvl == 4: #img_ 32x32 data = [27,19,10,"bug_32.png",5,gl.lvl1] elif self.level.lvl == 5: #img_ 32x32 data = [27,19,10,"bug_32.png",6,gl.lvl1] self.data = data #self.word_set = self.lang.di[data[4]][1:] self.board.level_start(data[0],data[1],self.layout.scale) self.solution = [data[0]-2,data[1]-2] letter_table = [] letter_table.extend(self.lang.alphabet_lc) letter_table.extend(self.lang.accents_lc) self.word = self.lang.di[data[4]][random.randrange(1,self.lang.di[data[4]][0])] if sys.version_info < (3, 0): self.wordu = unicode(self.word,"utf-8") word_len = len(self.wordu) self.word_l = [] #dirty way of replacing the word with letters from alphabet for each in self.wordu: for i in range(len(letter_table)): if each == unicode(letter_table[i],"utf-8"): self.word_l.append(letter_table[i]) self.word = self.word_l self.s_word = ''.join(self.word_l) else: word_len = len(self.word) self.word_l = self.word self.s_word = self.word self.word = list(self.word) self.word_len = word_len self.remaining = self.word_len+0 shuffled = self.word[:] self.searched_letter = self.word[0] board_number = random.randrange(1, data[5][0][0]+1) #self.level.game_step w = self.word_len x = (data[0]-w)//2 x2= data[0]//2 midscreen = data[1]//2 for i in range(self.word_len): if i == 0: colr = color3 else:colr = color1 self.board.add_unit(x+i,midscreen,1,1,classes.board.Label,self.word[i],colr,"",1) self.board.units[i].set_outline(0,1) avail = [[[],[]],[[],[]]] for j in range(data[1]): for i in range(data[0]): if data[5][board_number][j][i] == 1: self.board.add_unit(i,j,1,1,classes.board.Obstacle,"",color) #create availability table: else: if (1 < i < data[0]-2) and ((1 < j < midscreen-2) or ( midscreen+2 < j < data[1]-2)): if i%4 == 0: #create table 1 if j < midscreen - 2: avail[0][0].append([i,j]) else: avail[0][1].append([i,j]) elif (i+2)%4 == 0: #create table 2 if j < midscreen - 2: avail[1][0].append([i,j]) else: avail[1][1].append([i,j]) #select positions: self.letter_pos = [] col = [[],[]] ln = [[len(avail[0][0]),len(avail[0][1])],[len(avail[1][0]),len(avail[1][1])]] av1 = random.randrange(0,2) av2 = 0 for i in range(self.word_len): if i > self.word_len//2: av2 = 1 not_in = True while not_in: pos = avail[av1][av2][random.randrange(0,ln[av1][av2])] if pos[0] not in col[av2]: not_in = False col[av2].append(pos[0]) self.letter_pos.append(pos) self.board.add_door(pos[0],pos[1],1,1,classes.board.PickUp,shuffled[i],white) self.letter_pos2 = self.letter_pos[:] #add the bug self.board.add_unit(x2,midscreen-1,1,1,classes.board.ImgShipRota,"",white,data[3]) self.board.ships[0].audible = True self.board.ships[0].outline=False self.board.ships[0].draggable=False self.board.all_sprites_list.move_to_front(self.board.ships[0]) self.board.add_unit(0,0,1,1,classes.board.AIUnit,"",white,"bug2_32.png") self.board.add_unit(data[0]-1,0,1,1,classes.board.AIUnit,"",white,"bug2_32.png") self.board.add_unit(0,data[1]-1,1,1,classes.board.AIUnit,"",white,"bug2_32.png") self.board.add_unit(data[0]-1,data[1]-1,1,1,classes.board.AIUnit,"",white,"bug2_32.png") for each in self.board.aiunits: each.outline=False self.ships_count = len(self.board.ships) self.board.active_ship = 0 self.ship_id = 0 self.units_len = len(self.board.units) self.say(self.s_word,2) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def walk_through(self): for i in range(self.word_len): if self.board.ships[self.board.active_ship].grid_pos == self.letter_pos[i]: if self.word[i] == self.searched_letter: self.remaining -= 1 self.letter_pos[i] = [-1,-1] if self.remaining == 0: self.say(self.s_word+".") self.level.next_board() else: self.searched_letter = self.word[self.word_len - self.remaining] #change colors rem = self.word_len - self.remaining self.board.units[rem].color=self.clr[2] self.board.units[rem-1].color=self.clr[1] self.board.units[rem].set_outline(0,1) self.board.units[rem-1].set_outline(0,1) self.board.units[rem].update_me = True self.board.units[rem-1].update_me = True for j in range(self.units_len-self.word_len, self.units_len): if self.board.ships[self.board.active_ship].grid_pos == self.board.units[j].grid_pos: self.board.units[j].kill() self.mainloop.redraw_needed[0] = True self.say(self.word[i]) break break else: self.level.game_over() break def ai_walk(self): for i in range(len(self.board.aiunits)): ai = self.board.aiunits[i] #calculate the back back = [-ai.move_dir[0],-ai.move_dir[1]] #build a list of positions to check (front, left, right) first_choice = [ai.move_dir] if ai.move_dir[0] == 0: first_choice.extend([[-1,0],[1,0]]) else: first_choice.extend([[0,-1],[0,1]]) #look around check front, left and right if non of them are ok go back possible = [] for each in first_choice: if self.board._isfree(ai.grid_x + each[0], ai.grid_y + each[1],ai.grid_w,ai.grid_h): possible.append(each) if len(possible) == 0: possible.append(back) ai.change_dir(possible) mdir = ai.move_dir self.board.move(i, mdir[0],mdir[1], ai=True) ai.turn(mdir) def after_keydown_move(self): self.walk_through() def check_result(self): if self.changed_since_check: self.walk_through() pysiogame-1.30.811/game_boards/game035.py0000644000175000017500000001324212201770065016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,5) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,23,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(150, 225, 5) v = random.randrange(190, 225, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) white = (255,255,255) #color4 = color0 #apple_bg = [255,255,255] #data = [x_count, y_count, range_from, range_to, max_sum_range, image] if self.level.lvl == 1: data = [23,9] elif self.level.lvl == 2: data = [23,9] color1 = color0 elif self.level.lvl == 3: data = [23,9] color1 = color2 = color0 elif self.level.lvl == 4: data = [23,9] color1 = color2 = color0 elif self.level.lvl == 5: data = [23,9] color2 = color1 = color0 = (0,0,0) color3 = (40,40,40) self.data = data self.board.level_start(data[0],data[1],self.layout.scale) num1 = random.randrange(1,10) num2 = random.randrange(1,10) self.solution = [num1,num2,num1 * num2] self.digits = ["0","1","2","3","4","5","6","7","8","9"] unique = set() for i in range(1,10): for j in range(1,10): if i == num1 and j == num2: color=color0 elif i == num1 or j == num2: color=color1 elif self.level.lvl == 2 and (i == num2 or j == num1):color=color1 else: color = color2 mul = i*j unique.add(mul) caption = " " + str(mul) + " " self.board.add_unit(i-1,j-1,1,1,classes.board.Label,caption,color,"",2) self.board.add_unit(9,0,1,9,classes.board.Obstacle,"",color3) unique = sorted(unique) #draw outline with selectable numbers self.multi = dict() s = 180 v = 240 h = 7 color = ex.hsv_to_rgb(h,s,v) x = 11 y = 0 for i in range(9): x += 1 color = ex.hsv_to_rgb(h*i,s,v) self.multi[str(unique[i])]=i caption = str(unique[i]) self.board.add_unit(x,y,1,1,classes.board.Letter,caption,color,"",2) self.board.ships[-1].audible = False x=14 y=4 #? x 5 = 25 captions = [str(num1*num2),chr(247),str(num1),"="] if self.level.lvl < 4: color = self.board.ships[self.solution[1]-1].initcolor else: color = (255,255,255)#color4 for i in range(4): self.board.add_unit(x+i,y,1,1,classes.board.Label,captions[i],color,"",2) self.outline_all(0,1) self.board.add_door(18,y,1,1,classes.board.Door,"",white,"",font_size = 2) self.home_square = self.board.units[86] self.home_square.door_outline = True self.board.all_sprites_list.move_to_front(self.home_square) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] elif not self.board.grid[4][18]: char = event.unicode if len(char)>0 and char in self.digits: self.home_square.value = char self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.MOUSEMOTION and self.drag: if self.board.grid[4][18]: self.home_square.value = "" self.home_square.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[4][18]: sol = self.board.ships[self.solution[1]-1] if sol.grid_x == 18 and sol.grid_y == 4: self.passed() else: self.failed() else: if self.home_square.value != "" and (int(self.home_square.value) == self.solution[1]): self.quick_passed() else: self.failed() def passed(self): tts = self.d["Perfect!"]+" "+str(self.solution[2])+" "+self.d["divided by"]+" "+str(self.solution[0])+" "+self.d["equals"]+" "+str(self.solution[1]) self.level.next_board(tts) def quick_passed(self): tts = self.d["Perfect!"] self.level.next_board(tts) def failed(self): self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game023.py0000644000175000017500000001707612201770065016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import game_boards.game023_lvls as gl import classes.extras as ex import classes.board import random import sys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,5) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,27,19) def create_game_objects(self, level = 1): self.vis_buttons = [0,1,1,1,1,1,1,0,1] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects self.change_count = 0 s = random.randrange(150, 205, 5) v = random.randrange(150, 205, 5) h = random.randrange(0, 255, 5) color = ex.hsv_to_rgb(h,s,v) color1 = ex.hsv_to_rgb(h,40,230) #label color2 = ex.hsv_to_rgb(h,150,230) #completed color3 = ex.hsv_to_rgb(h,255,230) #current self.clr = [color1,color2,color3] white = (255,255,255) #data = [0:x_count, 1:y_count, 2:games_per_level, 3:bug_img, 4:level_maps] if self.level.lvl == 1: #img_ 32x32 data = [27,19,10,"bug_32.png",2,gl.lvl1] elif self.level.lvl == 2: #img_ 32x32 data = [27,19,10,"bug_32.png",3,gl.lvl1] elif self.level.lvl == 3: #img_ 32x32 data = [27,19,10,"bug_32.png",4,gl.lvl1] elif self.level.lvl == 4: #img_ 32x32 data = [27,19,10,"bug_32.png",5,gl.lvl1] elif self.level.lvl == 5: #img_ 32x32 data = [27,19,10,"bug_32.png",6,gl.lvl1] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.solution = [data[0]-2,data[1]-2] letter_table = [] letter_table.extend(self.lang.alphabet_lc) letter_table.extend(self.lang.accents_lc) self.word = self.lang.di[data[4]][random.randrange(1,self.lang.di[data[4]][0])] if sys.version_info < (3, 0): self.wordu = unicode(self.word,"utf-8") word_len = len(self.wordu) self.word_l = [] #dirty way of replacing the word with letters from alphabet for each in self.wordu: for i in range(len(letter_table)): if each == unicode(letter_table[i],"utf-8"): self.word_l.append(letter_table[i]) self.word = self.word_l self.s_word = ''.join(self.word_l) else: word_len = len(self.word) self.word_l = self.word self.s_word = self.word self.word = list(self.word) self.word_len = word_len self.remaining = self.word_len+0 shuffled = self.word[:] self.searched_letter = self.word[0] board_number = random.randrange(1, data[5][0][0]+1) #self.level.game_step w = self.word_len x = (data[0]-w)//2 x2= data[0]//2 midscreen = data[1]//2 for i in range(self.word_len): if i == 0: colr = color3 else:colr = color1 self.board.add_unit(x+i,midscreen,1,1,classes.board.Label,self.word[i],colr,"",1) self.board.units[i].set_outline(0,1) avail = [[[],[]],[[],[]]] for j in range(data[1]): for i in range(data[0]): if data[5][board_number][j][i] == 1: self.board.add_unit(i,j,1,1,classes.board.Obstacle,"",color) #create availability table: else: if (1 < i < data[0]-2) and ((1 < j < midscreen-2) or ( midscreen+2 < j < data[1]-2)): if i%4 == 0: #create table 1 if j < midscreen - 2: avail[0][0].append([i,j]) else: avail[0][1].append([i,j]) elif (i+2)%4 == 0: #create table 2 if j < midscreen - 2: avail[1][0].append([i,j]) else: avail[1][1].append([i,j]) #select positions: self.letter_pos = [] col = [[],[]] ln = [[len(avail[0][0]),len(avail[0][1])],[len(avail[1][0]),len(avail[1][1])]] av1 = random.randrange(0,2) av2 = 0 for i in range(self.word_len): if i > self.word_len//2: av2 = 1 not_in = True while not_in: pos = avail[av1][av2][random.randrange(0,ln[av1][av2])] if pos[0] not in col[av2]: not_in = False col[av2].append(pos[0]) self.letter_pos.append(pos) self.board.add_door(pos[0],pos[1],1,1,classes.board.PickUp,shuffled[i],white) self.letter_pos2 = self.letter_pos[:] #add the bug self.board.add_unit(x2,midscreen-1,1,1,classes.board.ImgShipRota,"",white,data[3]) self.board.ships[0].audible = True self.board.ships[0].outline=False self.board.ships[0].draggable=False self.board.all_sprites_list.move_to_front(self.board.ships[0]) self.ships_count = len(self.board.ships) self.board.active_ship = 0 self.ship_id = 0 self.units_len = len(self.board.units) self.say(self.s_word,2) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def walk_through(self): for i in range(self.word_len): if self.board.ships[self.board.active_ship].grid_pos == self.letter_pos[i]: if self.word[i] == self.searched_letter: self.remaining -= 1 self.letter_pos[i] = [-1,-1] if self.remaining == 0: self.say(self.s_word+".") self.level.next_board() else: self.searched_letter = self.word[self.word_len - self.remaining] #change colors rem = self.word_len - self.remaining self.board.units[rem].color=self.clr[2] self.board.units[rem-1].color=self.clr[1] self.board.units[rem].set_outline(0,1) self.board.units[rem-1].set_outline(0,1) self.board.units[rem].update_me = True self.board.units[rem-1].update_me = True for j in range(self.units_len-self.word_len, self.units_len): if self.board.ships[self.board.active_ship].grid_pos == self.board.units[j].grid_pos: self.board.units[j].kill() self.mainloop.redraw_needed[0] = True self.say(self.word[i]) break break else: self.level.game_over() break def after_keydown_move(self): self.walk_through() def check_result(self): if self.changed_since_check: self.walk_through() pysiogame-1.30.811/game_boards/game002.py0000644000175000017500000000756612201770065016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color1 = ex.hsv_to_rgb(225,15,235) color2 = ex.hsv_to_rgb(235,15,245) font_color = ex.hsv_to_rgb(227,255,50) data = [15,10] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 15: data[0] = x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.add_unit(0,0,data[0],1,classes.board.Label,self.lang.d["Translators"],color2,"",4) self.board.add_unit(0,1,3,1,classes.board.Label,["English (UK & US)","Polish"],color1,"",6) self.board.add_unit(3,1,data[0]-3,1,classes.board.Label,["Kamila Roszak-Imiolek, Ireneusz Imiolek", "(any ideas for improvement welcome)"],color1,"",6) #self.board.add_unit(0,2,3,1,classes.board.Label,"English (US)",color,"",6) #self.board.add_unit(3,2,data[0]-3,1,classes.board.Label,"Kamila Roszak-Imiolek, Ireneusz Imiolek",color,"",6) #self.board.add_unit(0,2,3,1,classes.board.Label,"Polish",color,"",6) #self.board.add_unit(3,2,data[0]-3,1,classes.board.Label,"Kamila Roszak-Imiolek, Ireneusz Imiolek",color,"",6) self.board.add_unit(0,2,3,1,classes.board.Label,"Greek",color2,"",6) self.board.add_unit(3,2,data[0]-3,1,classes.board.Label,["Στέλιος, versys650gr, sdim and other members of","The Official Greek Community of Linux Mint - http://linuxmint.gr"],color2,"",6) self.board.add_unit(0,3,3,1,classes.board.Label,"Spanish",color1,"",6) self.board.add_unit(3,3,data[0]-3,1,classes.board.Label,["Miriam Ruiz","http://www.miriamruiz.es"],color1,"",6) self.board.add_unit(0,4,3,1,classes.board.Label,"Portuguese",color2,"",6) self.board.add_unit(3,4,data[0]-3,1,classes.board.Label,"Américo Monteiro",color2,"",6) self.board.add_unit(0,5,3,1,classes.board.Label,"French",color1,"",6) self.board.add_unit(3,5,data[0]-3,1,classes.board.Label,"Not Translated",color1,"",6) self.board.add_unit(0,6,3,1,classes.board.Label,"Italian",color2,"",6) self.board.add_unit(3,6,data[0]-3,1,classes.board.Label,"Giuliano",color2,"",6) self.board.add_unit(0,7,3,1,classes.board.Label,"German",color1,"",6) self.board.add_unit(3,7,data[0]-3,1,classes.board.Label,"Not Translated",color1,"",6) self.board.add_unit(0,8,3,1,classes.board.Label,"Russian",color2,"",6) self.board.add_unit(3,8,data[0]-3,1,classes.board.Label,["Anton Kayukov (Антон Каюков)","(uncompleted - anyone with spare time willing to help?)"],color2,"",6) self.board.add_unit(0,9,3,1,classes.board.Label,"Finnish",color1,"",6) self.board.add_unit(3,9,data[0]-3,1,classes.board.Label,"Not Translated",color1,"",6) self.outline_all(1,1) for each in self.board.units: each.font_color = font_color each.align = 1 self.board.units[0].align = 0 def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): pass pysiogame-1.30.811/game_boards/game068.py0000644000175000017500000003044012201770065016735 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import classes.board import random import pygame from math import sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) self.max_size = 99 self.board.draw_grid = False def create_game_objects(self, level = 1): #create non-movable objects self.active_tool = 0 self.active_letter = "A" self.active_word = "Apple" #self.word_pos_y = 0 self.var_brush = 1 s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 255) letter_color = ex.hsv_to_rgb(h,s,v) self.bg_color = [255,255,255] color = [255,255,255] data = [35,26,0,8] font_size = 20 #font_size2 = 14 self.brush_size = data[3] #stretch width to fit the screen size max_x_count = self.get_x_count(data[1],even=None) if max_x_count > 35: data[0] = max_x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) #canvas self.board.add_unit(10,0,data[0]-16,data[1],classes.board.Letter,"",color,"",font_size) self.canvas_block = self.board.ships[0] self.canvas_block.set_outline([0,54,229],1) #self.canvas_block.font2 = self.board.font_sizes[font_size+4] #self.canvas_block.font3 = self.board.font_sizes[font_size2] images = ["paint_pencil.png","paint_brush.png","paint_wide_brush.png","paint_rect.png","paint_circle.png","paint_eraser.png","paint_bucket.png"] x=0 y=0 i_chr = 65 for i in range(0,65): if i <52: caption = chr(i_chr) else: caption = str(i-52) self.board.add_unit(x,y,2,2,classes.board.Letter,caption,letter_color,"",0) y += 2 i_chr += 1 if y > 24: y = 0 x += 2 if i == 25: i_chr = 97 if i == 51: i_chr = 48 self.board.add_door(0,0,2,2,classes.board.Door,"",color,"") self.board.add_door(data[0]-1,17,1,1,classes.board.Door,"",color,"") tool_len = len(self.board.ships) tool_max = tool_len - 3 #self.word_list = ['Apple', 'Bear', 'Car', 'Dog', 'Egg', 'Flower', 'Goat','House', 'Ice', 'Jar', 'Kite', 'Leaf', 'Mug', 'Nut', 'Owl', 'Pig', 'Queen', 'Rabbit', 'Snake', 'Turtle', 'Unit', 'Violin', 'Wagon', 'X-ray', 'Yarn', 'Zebra','apple', 'bear', 'car', 'dog', 'egg', 'flower', 'goat', 'house', 'ice', 'jar', 'kite', 'leaf', 'mug', 'nut', 'owl', 'pig', 'queen', 'rabbit', 'snake', 'turtle', 'unit', 'violin', 'wagon', 'x-ray', 'yarn', 'zebra','zero','one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine','ten', 'eleven', 'twelve'] #color pallette h = 0 s = 250 v = 70 #number of available color spaces minus 2 for black and white number_of_colors = data[1]*6 - 2 number_of_hues = 24#13 number_of_col_per_hue = 6#number_of_colors // number_of_hues #if number_of_col_per_hue > 3: v_num = (255-v)//(number_of_col_per_hue) #greyscale grey_num = 6 #number_of_colors+2 - number_of_hues * number_of_col_per_hue if grey_num > 1: grey_v_num = (255 // (grey_num-1)) else: grey_v_num = 0 grey_count = 0 for j in range(0,data[1]): for i in range(data[0]-6, data[0]): color2 = ex.hsv_to_rgb(h,s,v) self.board.add_unit(i,j,1,1,classes.board.Letter,"",color2,"",2) if h < 249: if i < data[0]-1: v += v_num else: v = 70 s = 250 h += 10 if h > 248: if grey_count == 0: s = 0 v = 0 grey_count += 1 else: v += grey_v_num self.active_color = self.board.ships[173].initcolor self.size_display = self.board.units[0] self.tool_door = self.board.units[-2] self.color_door = self.board.units[-1] self.btn_down = False #points self.p_first = [0,0] self.p_last = [0,0] self.p_prev = [0,0] self.p_current = [0,0] self.outline_all(1,1) doors = [self.tool_door,self.color_door] for each in doors: each.door_outline = True each.perm_outline_color = [255,0,0] self.board.all_sprites_list.move_to_front(each) for each in self.board.ships: each.outline = False each.immobilize() self.canvas = pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.canvas.fill(self.canvas_block.initcolor) self.paint_bg_letter() self.canvas_org = self.canvas.copy() #pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: # Change the x/y screen coordinates to grid coordinates pos = event.pos active = self.board.active_ship if event.button == 1: if active == 0: self.btn_down = True canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_first = canvas_pos self.p_prev = canvas_pos self.p_current = canvas_pos self.paint_pencil(0) pygame.mouse.set_cursor(*pygame.cursors.broken_x) elif 0 < active < 66: self.active_letter = self.board.ships[self.board.active_ship].value #self.active_word = self.word_list[self.board.active_ship-1]#"Zebra"#self.active_letter self.tool_door.set_pos(self.board.active_ship_pos) self.paint_bg_letter() elif active > 65: self.active_color = self.board.ships[active].initcolor self.color_door.set_pos(self.board.active_ship_pos) elif event.type == pygame.MOUSEMOTION and self.btn_down == True: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_prev = self.p_current self.p_current = canvas_pos self.paint_pencil(1) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: #drop the new object onto the painting canvas_pos = [pos[0]-self.layout.menu_w-10*self.layout.scale,pos[1]] self.p_last = canvas_pos self.paint_pencil(2) else: if self.btn_down: self.screen_restore() self.copy_to_screen() self.btn_down = False def paint_bg_letter(self): txt = self.active_letter text = self.canvas_block.font.render("%s" % (txt), 1, (220, 220, 220, 0)) #text_arrows = self.canvas_block.font2.render("%s" % (txt), 1, (220, 0, 0, 0)) font_x = ((self.board.scale*self.canvas_block.grid_w-self.canvas_block.font.size(txt)[0])//2) font_y = ((self.board.scale*self.canvas_block.grid_h-self.canvas_block.font.size(txt)[1])//2) """ txt2 = self.active_word text2 = self.canvas_block.font3.render("%s" % (txt2), 1, (220, 220, 220, 0)) font_x2 = ((self.board.scale*self.canvas_block.grid_w-self.canvas_block.font3.size(txt2)[0])//2) font_y2 = ((self.board.scale*self.canvas_block.grid_h-self.canvas_block.font3.size(txt2)[1])//2) + 8*self.board.scale self.word_pos_y = font_y2 """ self.canvas.fill([255,255,255]) self.canvas.blit(text, (font_x,font_y)) #self.canvas.blit(text_arrows, (font_x,font_y)) #self.canvas.blit(text2, (font_x2,font_y2)) self.copy_to_screen() #states => mouse states => 0 - mouse_btn_down, 1 - mouse_move, 2 - mouse_btn_up def paint_pencil(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() pygame.draw.circle(self.canvas, self.active_color, self.p_current, self.brush_size//2,0) self.copy_to_screen() elif state == 1: width = self.brush_size if self.brush_size > 2: if self.brush_size % 2 == 0: r = self.brush_size // 2 width = self.brush_size +3 else: r = self.brush_size // 2# - 1 width = self.brush_size+2 pygame.draw.circle(self.canvas, self.active_color, self.p_current, r,0) if self.brush_size > 3: self.draw_line(self.p_prev,self.p_current,self.brush_size,self.brush_size) else: pygame.draw.line(self.canvas, self.active_color, self.p_prev, self.p_current,width) self.copy_to_screen() def draw_line(self,p1,p2,bs1,bs2): #find points for the corners of the polygon using Tales Theorem #and draw the polygon - rotated rectangle or trapezium and 2 circles at the ends of the 'line' v = sv.Vector2.from_points(p1, p2) if v[0] != 0 or v[1] != 0: bs1 = bs1//2 bs2 = bs2//2 #vector length v_len = sqrt(v[0]*v[0] + v[1]*v[1]) x1 = v[1]*bs1/v_len y1 = v[0]*bs1/v_len if bs1 != bs2: x2 = v[1]*bs2/v_len y2 = v[0]*bs2/v_len else: x2 = x1 y2 = y1 points = [] points.append([int(p1[0]-x1),int(p1[1]+y1)]) points.append([int(p1[0]+x1),int(p1[1]-y1)]) points.append([int(p2[0]+x2),int(p2[1]-y2)]) points.append([int(p2[0]-x2),int(p2[1]+y2)]) pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) pygame.draw.circle(self.canvas, self.active_color, p1, bs1,0) pygame.draw.circle(self.canvas, self.active_color, p2, bs2,0) def backup_canvas(self): self.canvas_org = self.canvas_block.painting.copy() def copy_to_screen(self): self.canvas_block.painting = self.canvas.copy() self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True def screen_restore(self): self.canvas = self.canvas_org.copy() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game047.py0000644000175000017500000001213212201770065016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,6) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) #data = [x_count, y_count, letter_count, top_limit, ordered] if self.level.lvl == 1: data = [11,6,3,True,1] elif self.level.lvl == 2: data = [11,6,3,False,1] elif self.level.lvl == 3: data = [11,6,5,True,1] elif self.level.lvl == 4: data = [11,6,5,False,1] elif self.level.lvl == 5: data = [11,6,7,True,1] elif self.level.lvl == 6: data = [11,6,7,False,1] elif self.level.lvl == 7: data = [11,6,9,True,1] elif self.level.lvl == 8: data = [11,6,9,False,1] elif self.level.lvl == 9: data = [11,6,11,True,1] elif self.level.lvl == 10: data = [11,6,11,False,1] self.chapters = [1,3,5,7,9,10] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.alphabet = self.lang.alphabet_lc self.alph_len = len(self.alphabet) self.num_list = [] self.indexes = [] self.choice_indexes = [x for x in range(self.alph_len)] if data[3] == True: choice_list = [x for x in range(self.alph_len-data[2])] index = random.randrange(0,len(choice_list)) n = 0 for i in range(data[2]): self.num_list.append(choice_list[index]+n) self.indexes.append(index+n) n += 1 else: choice_list = [x for x in range(self.alph_len)] for i in range(data[2]): index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) self.indexes.append(choice_list[index]) del(choice_list[index]) self.indexes.sort() shuffled = self.num_list[:] random.shuffle(shuffled) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [0 for x in range(data[0])] #find position of first door square x = (data[0]-data[2])//2 #add objects to the board for i in range(data[2]): self.board.add_door(x+i,0,1,1,classes.board.Door,"",color,"") self.board.units[i].door_outline = True h = random.randrange(0, 255, 5) y = random.randrange(1,5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = self.alphabet[shuffled[i]] self.board.add_unit(x+i,y,1,1,classes.board.Letter,caption,number_color,"",data[4]) self.solution_grid[x+i]=1 for each in self.board.units: self.board.all_sprites_list.move_to_front(each) instruction = self.d["Re-arrange alphabetical"] self.board.add_unit(0,5,11,1,classes.board.Letter,instruction,color0,"",7) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((0,0,0)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[0] == self.solution_grid: ships = [] #collect value and x position on the grid from ships list for i in range(self.data[2]): ships.append([self.board.ships[i].grid_x,self.board.ships[i].value]) ships_sorted = sorted(ships) correct = True for i in range(self.data[2]): if i < self.data[2]-1: if ships_sorted[i][1] != self.alphabet[self.indexes[i]]: correct = False if correct == True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."]) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True)pysiogame-1.30.811/game_boards/game009.py0000644000175000017500000001254712201770065016740 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False s = random.randrange(30, 50) v = random.randrange(230, 255) h = random.randrange(0, 225) letter_color = ex.hsv_to_rgb(h,s,v) white = ((255,255,255)) outline_color = ex.hsv_to_rgb(h,s+50,v-50) frame_color = [255,255,255] card_color = ex.hsv_to_rgb(h+10,s-25,v) font_color = ex.hsv_to_rgb(h,255,140) data = [15,10] #stretch width to fit the screen size data[0] = self.get_x_count(data[1],even=False) if data[0]<15: data[0]=15 self.data = data self.x_offset = (data[0]-15)//2 self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) t_area = "½ah" self.shape_names = self.lang.shape_names #self.shape_names = ["Equilateral Triangle", "Isosceles Triangle", "Acute Triangle", "Right Triangle", "Obtuse Triangle", "Square", "Rectangle", "Trapezium", "Isosceles Trapezium", "Rhombus", "Parallelogram", "Pentagon", "Hexagon", "Circle", "Ellipse"] self.shape_areas = ["½ah", "½ah", "½ah", "½ab", "½ah", "a²", "ab", "½(a+b)h", "½(a+b)h", "ah", "ah", "------", "------", "πr²", "πab"] self.shape_circ = ["3a", "a + 2b", "a + b + c", "a + b + c", "a + b + c", "4a", "2a + 2b", "a + b + c + d", "a + b + 2c", "4a", "2a + 2b", "5a", "6a", "2πr", "------"] x = self.x_offset #x2 = (data[0] - (26 - data[0]))//2 y = 0 for i in range(15): self.board.add_unit(x,y,1,1,classes.board.Letter,self.shape_names[i],white,"",2) #self.board.ships[i].perm_outline = True #self.board.ships[i].set_outline(outline_color,1) self.board.ships[-1].font_color=(255,255,255,0) x += 1 x=(data[0]-4)//2 y=1 self.shape_count = len(self.board.ships) #Card self.board.add_unit(x-2,y+1,9,2,classes.board.Letter,self.shape_names[0],card_color,"",2) self.board.add_unit(x+2,y+3,5,1,classes.board.Letter,self.d["area:"],card_color,"",3) self.board.add_unit(x+2,y+4,5,1,classes.board.Label,t_area,card_color,"",3) self.board.add_unit(x+2,y+5,5,1,classes.board.Letter,self.d["perimeter:"],card_color,"",3) self.board.add_unit(x+2,y+6,5,1,classes.board.Label,"3a",card_color,"",3) #frame size 288 x 216 self.board.add_unit(x-2,y+3,4,4,classes.board.MultiImgSprite,self.shape_names[0],card_color,"flashcard_shapes.jpg",row_data=[15,1]) self.board.add_door(x-2,y+1,9,6,classes.board.Door,"",card_color,"") self.board.add_door(x-5,0,15,1,classes.board.Door,"",card_color,"flashcard_shapes_72.jpg") #self.board.add_door(x,y+2,4,3,classes.board.Door,"",card_color,"") self.board.units[2].door_outline = True self.board.units[2].perm_outline_color = font_color self.board.all_sprites_list.move_to_front(self.board.units[2]) self.board.all_sprites_list.move_to_front(self.board.units[3]) self.slide = self.board.ships[self.shape_count+3] self.slide.build_frame_flow(self.shape_count+3) self.slide.correction = True #self.slide.set_outline(outline_color,1) self.slide.perm_outline = True self.slide.perm_outline_color = font_color for each in self.board.ships: each.immobilize() each.font_color = font_color for each in self.board.units: each.font_color = font_color #self.outline_all(1,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONUP: self.active_item = self.board.ships[self.board.active_ship] if self.active_item.unit_id < self.shape_count: self.create_card(self.active_item) def create_card(self, active): #self.say(active.value[0]) self.board.ships[self.shape_count].value = self.shape_names[active.unit_id] self.board.units[0].value = self.shape_areas[active.unit_id] self.board.units[1].value = self.shape_circ[active.unit_id] self.slide.value = self.shape_names[active.unit_id] self.mainloop.redraw_needed[0] = True self.slide.set_frame(active.unit_id) self.board.active_ship = -1 self.slide.update_me = True for i in [0,1]: self.board.units[i].update_me = True self.board.ships[self.shape_count].update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game015.py0000644000175000017500000001632112201770065016727 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,14) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects self.board.draw_grid = False s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 white = ((255,255,255)) #setting level variable #data = [x_count, y_count, number_count, top_limit, ordered] if self.level.lvl == 1: data = [13,9,5,3,2] elif self.level.lvl == 2: data = [13,9,8,3,3] elif self.level.lvl == 3: data = [12,9,7,4,2] elif self.level.lvl == 4: data = [12,9,11,4,3] elif self.level.lvl == 5: data = [12,9,15,4,4] elif self.level.lvl == 6: data = [13,9,9,5,2] elif self.level.lvl == 7: data = [13,9,14,5,3] elif self.level.lvl == 8: data = [13,9,19,5,4] elif self.level.lvl == 9: data = [13,9,24,5,5] elif self.level.lvl == 10: data = [12,9,11,6,2] elif self.level.lvl == 11: data = [12,9,17,6,3] elif self.level.lvl == 12: data = [12,9,23,6,4] elif self.level.lvl == 13: data = [12,9,29,6,5] elif self.level.lvl == 14: data = [12,9,35,6,6] self.chapters = [1,3,6,10,14] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: data[0] = self.get_x_count(data[1],even=True) else: data[0] = self.get_x_count(data[1],even=False) self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.choice_list = [x for x in range(1,data[2]+1)] self.shuffled = self.choice_list[:] random.shuffle(self.shuffled) """ If the grid size is odd, then the number of inversions in a solvable situation are even. If the grid size is even, and the blank is on an odd row (first, third etc), then the number of inversions in a solvable situation are odd. If the grid size is even, and the blank is on an even row (second, fourth etc), then the number of inversions in a solvable situation are even. """ inversions = ex.inversions(self.shuffled) if inversions % 2 != 0: #if number of inversions is odd it is unsolvable #in unsolvable combinations swapping 2 squares will make it solvable temp = self.shuffled[0] self.shuffled[0]=self.shuffled[1] self.shuffled[1]=temp color = ((255,255,255)) h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3])//2 #side margin width self.check = [h1,h2,w2] self.board.add_door(w2,h1,data[3],data[4],classes.board.Door,"",color,"") #self.board.units[0].door_outline = True #create table to store 'binary' solution #find position of first door square x = w2 y = h1 self.mini_grid = [] #add objects to the board line = [] h_start = random.randrange(0, 155, 5) h_step = 100 // (data[2]) for i in range(data[2]): h = (h_start + (self.shuffled[i]-1)*h_step) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = str(self.shuffled[i]) self.board.add_unit(x,y,1,1,classes.board.Letter,caption,number_color,"",2) self.board.ships[-1].readable = False line.append(i) x += 1 if x >= w2+data[3] or i == data[2]-1: x = w2 y += 1 self.mini_grid.append(line) line=[] instruction = self.d["Re-arrange right"] self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,color0,"",5)#bottom 2 self.board.ships[-1].immobilize() self.outline_all(0,1) #horizontal self.board.add_unit(0,0,data[0],h1,classes.board.Obstacle,"",white,"",7)#top self.board.add_unit(0,h1+data[4],data[0],h2,classes.board.Obstacle,"",white,"",7)#bottom 1 #side obstacles self.board.add_unit(0,h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#left self.board.add_unit(w2+data[3],h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#right self.board.all_sprites_list.move_to_front(self.board.units[0]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: ships = [] current = [x for x in range(self.data[2]+1)]#self.choice_list[:] #collect value and x position on the grid from ships list for i in range(len(self.board.ships)-1): x = self.board.ships[i].grid_x-self.check[2] y = self.board.ships[i].grid_y-self.check[0] w = self.data[3] h = self.data[4] pos = x + (y*w) current[pos]=int(self.board.ships[i].value) del(current[-1]) if self.choice_list == current: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False """ If the grid size is odd, then the number of inversions in a solvable situation are even. If the grid size is even, and the blank is on an odd row (first, third etc), then the number of inversions in a solvable situation are odd. If the grid size is even, and the blank is on an even row (second, fourth etc), then the number of inversions in a solvable situation are even. Consider the following configuration in the 3 x 2 case: 4 5 1 3 2 The equivalent permutation is 4, 5, 1, 3, 2. The number of inversions is 3 + 3 + 1 = 7. n = 3, so n is odd. Therefore, the number of inversions in a legal configuration must be even. It's not, so this configuration is illegal. Here's another example. Considering the following 4 x 2 case: 7 2 1 4 6 3 5 The equivalent permutation is 7, 2, 1, 4, 6, 3, 5. The number of inversions is 6 + 1 + 1 + 2 = 10. In this case, n = 4, so n is even. m = 2 and i = 1, so m - i is odd and we are in case 1.1c of the proof -> the number of inversions must be odd. They are not, so this configuration is illegal. """pysiogame-1.30.811/game_boards/game011.py0000644000175000017500000001050012201770065016714 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,9) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,14,5) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) white = [255,255,255] #data = [x_count, y_count, number_count, top_limit, ordered] if self.level.lvl == 1: data = [14,5,10,10,1] elif self.level.lvl == 2: data = [14,5,10,20,2] elif self.level.lvl == 3: data = [14,5,10,99,2] elif self.level.lvl == 4: data = [14,5,15,20,2] elif self.level.lvl == 5: data = [14,5,15,50,2] elif self.level.lvl == 6: data = [14,5,15,99,2] elif self.level.lvl == 7: data = [14,5,20,30,2] elif self.level.lvl == 8: data = [14,5,20,50,2] elif self.level.lvl == 9: data = [14,5,20,99,2] self.chapters = [1,4,7,9] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.num_list = [] choice_list = [x for x in range(1,data[3]+1)] for i in range(data[2]): index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) del(choice_list[index]) color = ((255,255,255)) #find position of first door square x = data[0]-1 #(data[0]-data[2])//2 y = data[1]-2 #add objects to the board for i in range(data[2]): h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = str(self.num_list[i]) self.board.add_unit(x,y,1,1,classes.board.Letter,caption,number_color,"",data[4]) x -= 1 if x <= 3: x = data[0]-1 y -= 1 self.board.add_unit(0,0,4,2,classes.board.Letter,self.d["Even"],color0,"",1) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.board.add_unit(0,2,4,2,classes.board.Letter,self.d["Odd"],color0,"",1) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.board.add_door(4,0,data[0]-4,2,classes.board.Door,"",white,"") self.board.units[-1].door_outline = True instruction = self.d["Find and separate"] self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,color0,"",7) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.outline_all(0,1) self.board.all_sprites_list.move_to_front(self.board.units[-1]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: correct = True for i in range(len(self.board.ships)-3): each = self.board.ships[i] #for each in self.board.ships: if each.grid_y < 2 and self.num_list[each.unit_id]%2 != 0 \ or each.grid_y > 1 and self.num_list[each.unit_id]%2 == 0: correct = False if correct == True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game039.py0000644000175000017500000002044112201770065016733 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,11) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,10,7) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 255) color1 = ex.hsv_to_rgb(h,s,v) color2 = ex.hsv_to_rgb(h,150,v) color3 = ex.hsv_to_rgb(h,150,75) #self.chapters = [1,12,23,30,36] #data = [0-x_count, 1-y_count, 2-bottom_range1, 3-top_range1, 4-bottom_range2, 5-top_range2, 6-operator, 7-font_size] if self.mainloop.m.game_variant == 0: self.level.lvl_count = 11 if self.level.lvl == 1:#addition - ch0 data = [10,7,1,5,1,5,"+",2] elif self.level.lvl == 2: data = [10,7,3,9,1,5,"+",2] elif self.level.lvl == 3: data = [10,7,5,15,3,9,"+",2] elif self.level.lvl == 4: data = [10,7,5,15,5,15,"+",2] elif self.level.lvl == 5: data = [10,7,15,55,5,35,"+",2] elif self.level.lvl == 6: data = [10,7,35,75,15,25,"+",2] elif self.level.lvl == 7: data = [10,7,55,99,55,99,"+",2] elif self.level.lvl == 8: data = [10,7,100,250,100,250,"+",4] elif self.level.lvl == 9: data = [10,7,300,500,250,499,"+",4] elif self.level.lvl == 10: data = [10,7,400,650,150,349,"+",4] elif self.level.lvl == 11: data = [10,7,500,850,100,149,"+",4] elif self.mainloop.m.game_variant == 1: self.level.lvl_count = 11 if self.level.lvl == 1:#subtraction - ch1 data = [10,7,3,10,1,0,"-",2] elif self.level.lvl == 2: data = [10,7,5,10,3,0,"-",2] elif self.level.lvl == 3: data = [10,7,10,15,3,0,"-",2] elif self.level.lvl == 4: data = [10,7,15,20,5,0,"-",2] elif self.level.lvl == 5: data = [10,7,20,49,9,0,"-",2] elif self.level.lvl == 6: data = [10,7,49,99,9,0,"-",2] elif self.level.lvl == 7: data = [10,7,100,250,30,0,"-",4] elif self.level.lvl == 8: data = [10,7,100,250,30,0,"-",4] elif self.level.lvl == 9: data = [10,7,100,250,30,0,"-",4] elif self.level.lvl == 10: data = [10,7,250,499,50,0,"-",4] elif self.level.lvl == 11: data = [10,7,499,999,99,0,"-",4] elif self.mainloop.m.game_variant == 2: self.level.lvl_count = 7 if self.level.lvl > 7: self.level.lvl = 7 if self.level.lvl == 1:#multiplication - ch2 data = [10,7,1,3,1,3,"*",2] elif self.level.lvl == 2: data = [10,7,1,9,1,2,"*",2] elif self.level.lvl == 3: data = [10,7,2,6,2,6,"*",2] elif self.level.lvl == 4: data = [10,7,2,7,3,7,"*",2] elif self.level.lvl == 5: data = [10,7,2,9,2,9,"*",2] elif self.level.lvl == 6: data = [10,7,2,15,2,15,"*",4] elif self.level.lvl == 7: data = [10,7,2,20,2,20,"*",4] elif self.mainloop.m.game_variant == 3: self.level.lvl_count = 7 if self.level.lvl > 7: self.level.lvl = 7 if self.level.lvl == 1:#division - ch3 data = [10,7,1,3,1,3,"/",2] elif self.level.lvl == 2: data = [10,7,1,9,1,2,"/",2] elif self.level.lvl == 3: data = [10,7,2,6,2,6,"/",2] elif self.level.lvl == 4: data = [10,7,2,7,3,7,"/",2] elif self.level.lvl == 5: data = [10,7,2,9,2,9,"/",2] elif self.level.lvl == 6: data = [10,7,2,15,2,15,"/",4] elif self.level.lvl == 7: data = [10,7,2,20,2,20,"/",4] #stretch width to fit the screen size data[0] = self.get_x_count(data[1],even=True) if data[0] < 8: data[0] = 8 self.data = data self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.num_list = [] self.num_list2 = [] self.solution = [] for i in range(5): if data[6]=="+": first_num = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],data[5]+1) self.solution.append(first_num + second_num) elif data[6]=="-": first_num = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],first_num-1) self.solution.append(first_num - second_num) elif data[6]=="*": first_num = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],data[5]+1) self.solution.append(first_num * second_num) elif data[6]=="/": #reversed multiplication - looking for the first factor first = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],data[5]+1) first_num = first * second_num self.solution.append(first) self.num_list.append(first_num) self.num_list2.append(second_num) self.shuffled = self.solution[:] random.shuffle(self.shuffled) #create objects if data[6]=="*": operator = chr(215) elif data[6]=="/": operator = chr(247) else: operator = data[6] x = (data[0]-4)//2 y = 1 for i in range(5): caption = "%d %s %d" % (self.num_list[i],operator,self.num_list2[i]) self.board.add_unit(x,y,2,1,classes.board.Label,caption,color1,"",data[7]) self.board.add_unit(x+2,y,1,1,classes.board.Label,"=",color1,"",data[7]) self.board.add_door(x+3,y,1,1,classes.board.Door,"",color1,"") self.board.units[-1].door_outline = True self.board.add_unit(x+5,y,1,1,classes.board.Letter,str(self.shuffled[i]),color2,"",data[7]) self.board.ships[-1].audible = False self.outline_all(1,1) y += 1 for i in range(2,15,3): self.board.all_sprites_list.move_to_front(self.board.units[i]) for each in self.board.units: each.font_color = color3 for each in self.board.ships: each.font_color = color3 def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: correct = True for i in range(5): if self.board.ships[i].grid_x == self.board.units[-1].grid_x and 0 < self.board.ships[i].grid_y < 6: #if position from the left is in line with target squares if self.board.ships[i].value != str(self.solution[self.board.ships[i].grid_y-1]): correct = False break else: correct = False break if correct: tts = self.d["Perfect! Task solved!"] self.level.next_board(tts) else: self.say(self.d["Please try again."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game008.py0000644000175000017500000000764712201770065016744 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import pygame import random import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False color = ((252,252,252)) mask_color = color data = [7,3] #stretch width to fit the screen size max_x_count = self.get_x_count(data[1],even=False) if max_x_count > 7: data[0] = max_x_count self.data = data self.center = self.data[0] // 2 self.vis_buttons = [0,0,0,0,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) images = [os.path.join('memory', "m_img%da.png" % (i)) for i in range(1,20)] masks = [os.path.join('memory', "m_img%db.png" % (i)) for i in range(1,20)] choice = [x for x in range(0,19)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:5] self.shuffled2 = self.chosen[:] random.shuffle(self.shuffled2) x = self.center - 2 for i in range(5): self.board.add_door(x+i,0,1,1,classes.board.Door,str(self.chosen[i]),mask_color,masks[self.chosen[i]]) self.board.add_unit(x+i,2,1,1,classes.board.ImgShip,str(self.shuffled2[i]),color,images[self.shuffled2[i]]) #bg_color = tuple(self.board.ships[0].img.get_at((1,1))) for each in self.board.ships: self.board.all_sprites_list.move_to_front(each) each.outline = False each.readable = False #each.image.set_alpha(150) #each.img.set_colorkey(bg_color[:3]) for each in self.board.units: each.outline = False def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: if self.board.active_ship >= 0: active = self.board.ships[self.board.active_ship] active.image.set_alpha(150) elif event.type == pygame.MOUSEBUTTONUP: if self.board.active_ship >= 0: active = self.board.ships[self.board.active_ship] active.image.set_alpha(255) self.check_result() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: #checking copied from number sorting game and re-done if self.board.grid[0][self.center-2:self.center+3] == [1,1,1,1,1]: #self.solution_grid: ships = [] units = [] #collect value and x position on the grid from ships list for i in range(5): ships.append([self.board.ships[i].grid_x, int(self.board.ships[i].value)]) units.append([self.board.units[i].grid_x, int(self.board.units[i].value)]) ships.sort() units.sort() correct = True for i in range(5): if i < 4: if ships[i][1] != units[i][1]: correct = False if correct == True: self.level.next_board() else: pass #self.say(self.d["Sorry! It is wrong."],6) #self.changed_since_check = Falsepysiogame-1.30.811/game_boards/game019.py0000644000175000017500000002101112201770065016723 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,11) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,7) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 255) color1 = ex.hsv_to_rgb(h,s,v) color2 = ex.hsv_to_rgb(h,150,v) color3 = ex.hsv_to_rgb(h,150,75) #self.chapters = [1,12,23,30,36] #data = [0-x_count, 1-y_count, 2-bottom_range1, 3-top_range1, 4-bottom_range2, 5-top_range2, 6-operator, 7-font_size] if self.mainloop.m.game_variant == 0: self.level.lvl_count = 11 if self.level.lvl == 1:#addition - ch0 data = [11,7,1,5,1,5,"+",2] elif self.level.lvl == 2: data = [11,7,3,9,1,5,"+",2] elif self.level.lvl == 3: data = [11,7,5,15,3,9,"+",2] elif self.level.lvl == 4: data = [11,7,5,15,5,15,"+",2] elif self.level.lvl == 5: data = [11,7,15,55,5,35,"+",2] elif self.level.lvl == 6: data = [11,7,35,75,15,25,"+",2] elif self.level.lvl == 7: data = [11,7,55,99,55,99,"+",2] elif self.level.lvl == 8: data = [11,7,100,250,100,250,"+",4] elif self.level.lvl == 9: data = [11,7,300,500,250,499,"+",4] elif self.level.lvl == 10: data = [11,7,400,650,150,349,"+",4] elif self.level.lvl == 11: data = [11,7,500,850,100,149,"+",4] elif self.mainloop.m.game_variant == 1: self.level.lvl_count = 11 if self.level.lvl == 1:#subtraction - ch1 data = [11,7,3,10,1,0,"-",2] elif self.level.lvl == 2: data = [11,7,5,10,3,0,"-",2] elif self.level.lvl == 3: data = [11,7,10,15,3,0,"-",2] elif self.level.lvl == 4: data = [11,7,15,20,5,0,"-",2] elif self.level.lvl == 5: data = [11,7,20,49,9,0,"-",2] elif self.level.lvl == 6: data = [11,7,49,99,9,0,"-",2] elif self.level.lvl == 7: data = [11,7,100,250,30,0,"-",4] elif self.level.lvl == 8: data = [11,7,100,250,30,0,"-",4] elif self.level.lvl == 9: data = [11,7,100,250,30,0,"-",4] elif self.level.lvl == 10: data = [11,7,250,499,50,0,"-",4] elif self.level.lvl == 11: data = [11,7,499,999,99,0,"-",4] elif self.mainloop.m.game_variant == 2: self.level.lvl_count = 7 if self.level.lvl > 7: self.level.lvl = 7 if self.level.lvl == 1:#multiplication - ch2 data = [11,7,1,3,1,3,"*",2] elif self.level.lvl == 2: data = [11,7,1,9,1,2,"*",2] elif self.level.lvl == 3: data = [11,7,2,6,2,6,"*",2] elif self.level.lvl == 4: data = [11,7,2,7,3,7,"*",2] elif self.level.lvl == 5: data = [11,7,2,9,2,9,"*",2] elif self.level.lvl == 6: data = [11,7,2,15,2,15,"*",4] elif self.level.lvl == 7: data = [11,7,2,20,2,20,"*",4] elif self.mainloop.m.game_variant == 3: self.level.lvl_count = 7 if self.level.lvl > 7: self.level.lvl = 7 if self.level.lvl == 1:#division - ch3 data = [11,7,1,3,1,3,"/",2] elif self.level.lvl == 2: data = [11,7,1,9,1,2,"/",2] elif self.level.lvl == 3: data = [11,7,2,6,2,6,"/",2] elif self.level.lvl == 4: data = [11,7,2,7,3,7,"/",2] elif self.level.lvl == 5: data = [11,7,2,9,2,9,"/",2] elif self.level.lvl == 6: data = [11,7,2,15,2,15,"/",4] elif self.level.lvl == 7: data = [11,7,2,20,2,20,"/",4] #stretch width to fit the screen size data[0] = self.get_x_count(data[1],even=False) if data[0] < 9: data[0] = 9 self.data = data self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.num_list = [] self.num_list2 = [] self.solution = [] for i in range(5): if data[6]=="+": first_num = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],data[5]+1) self.solution.append(first_num + second_num) elif data[6]=="-": first_num = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],first_num-1) self.solution.append(first_num - second_num) elif data[6]=="*": first_num = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],data[5]+1) self.solution.append(first_num * second_num) elif data[6]=="/": #reversed multiplication - looking for the first factor first = random.randrange(data[2],data[3]+1) second_num = random.randrange(data[4],data[5]+1) first_num = first * second_num self.solution.append(first) self.num_list.append(first_num) self.num_list2.append(second_num) self.shuffled = self.num_list2[:] #self.solution[:] random.shuffle(self.shuffled) #create objects if data[6]=="*": operator = chr(215) elif data[6]=="/": operator = chr(247) else: operator = data[6] x = (data[0]-5)//2 y = 1 for i in range(5): caption = "%d %s %d" % (self.num_list[i],operator,self.num_list2[i]) self.board.add_unit(x,y,1,1,classes.board.Label,str(self.num_list[i]),color1,"",data[7]) self.board.add_unit(x+1,y,1,1,classes.board.Label,operator,color1,"",data[7]) self.board.add_door(x+2,y,1,1,classes.board.Door,"",color1,"") self.board.units[-1].door_outline = True self.board.add_unit(x+3,y,1,1,classes.board.Label,"=",color1,"",data[7]) self.board.add_unit(x+4,y,1,1,classes.board.Label,str(self.solution[i]),color1,"",data[7]) self.board.add_unit(x+6,y,1,1,classes.board.Letter,str(self.shuffled[i]),color2,"",data[7]) self.board.ships[-1].audible = False y += 1 self.outline_all(1,1) for i in range(2,25,5): self.board.all_sprites_list.move_to_front(self.board.units[i]) for each in self.board.units: each.font_color = color3 for each in self.board.ships: each.font_color = color3 def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: correct = True for i in range(5): if self.board.ships[i].grid_x == self.board.units[-3].grid_x and 0 < self.board.ships[i].grid_y < 6: #if position from the left is in line with target squares if self.board.ships[i].value != str(self.num_list2[self.board.ships[i].grid_y-1]): correct = False break else: correct = False break if correct: tts = self.d["Perfect! Task solved!"] self.level.next_board(tts) else: self.say(self.d["Please try again."]) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/__init__.py0000644000175000017500000000010512201770065017320 0ustar tigertiger# -*- coding: utf-8 -*- __all__ = ["game%03i" % i for i in range(79)]pysiogame-1.30.811/game_boards/game064.py0000644000175000017500000006671012201770065016742 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import pygame import copy import classes.board import random from math import pi,cos,acos,sin,asin,sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,12,8) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,19,10) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.hand_id = 0 self.hand_coords = [[],[]] self.board.draw_grid = False #create non-movable objects color = (255,255,255) white = (255,255,255) gray = (100,100,100) """ s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 color2 = ex.hsv_to_rgb(120,s,v) #highlight 2 """ """ color1 = ex.hsv_to_rgb(0,70,230) color3 = ex.hsv_to_rgb(0,255,255) color5 = ex.hsv_to_rgb(0,180,240) color2 = ex.hsv_to_rgb(160,70,230) color4 = ex.hsv_to_rgb(160,255,255) color6 = ex.hsv_to_rgb(160,180,240) """ color1 = ex.hsv_to_rgb(225,70,230) color3 = ex.hsv_to_rgb(225,255,255) color5 = ex.hsv_to_rgb(225,180,240) color7 = ex.hsv_to_rgb(225,10,255) color2 = ex.hsv_to_rgb(170,70,230) color4 = ex.hsv_to_rgb(170,255,255) color6 = ex.hsv_to_rgb(170,180,240) color8 = ex.hsv_to_rgb(170,10,255) self.colors = [color1,color2] self.colors2 = [color3,color4] self.colors3 = [color5,color6] self.colors4 = [color7,color8] """ color1 = pygame.Color(218,122,122,150) #ex.hsv_to_rgb(0,70,230) color3 = pygame.Color(200,0,0,200) #ex.hsv_to_rgb(0,255,200) color2 = pygame.Color(122,145,218,150)#ex.hsv_to_rgb(160,70,230) color4 = pygame.Color(0,47,200,200)#ex.hsv_to_rgb(160,255,200) """ #self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders #data = [10,10] if self.level.lvl == 1: data = [19,10,True,True,False,False,True,False,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60,15) elif self.level.lvl == 2: data = [19,10,True,True,False,False,False,True,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 3: data = [19,10,True,True,False,False,False,False,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 4: data = [19,10,True,True,False,False,False,False,False,False,True,20] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 5: data = [19,10,True,True,False,False,False,True,False,False,True,20] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 6: data = [19,10,True,True,False,False,True,False,False,False,True,20] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 7: data = [19,10,True,False,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 8: data = [19,10,True,False,False,True,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) #visual display properties self.show_outer_ring = data[2] self.show_minutes = data[3] self.show_24h = data[4] self.show_only_quarters_h = data[5] self.show_only_quarters_m = data[6] self.show_only_fives_m = data[7] self.show_only_spare_variable = data[8] self.show_highlight = data[9] self.show_hour_offset = data[10] self.level.games_per_lvl = data[11] tt = [random.choice(h_pool), random.choice(m_pool)] self.target_time = tt if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": #if (tt[1] < 30 and self.lang.d["time_string_half_to"] != "") or (tt[1] <= 30 and self.lang.d["time_string_half_past"] != "") : h_index = tt[0]-1 #else: if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] if tt[1] < 30: m = tt[1] else: m = 60 - tt[1] if m < 30: minutes = self.lang.d["minute_numbers_1to29"][m-1] else: h_index = tt[0]-1 if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] m = tt[1] minutes = self.lang.n2txt(m) """ if m <= 29: minutes = self.lang.d["minute_numbers_1to29"][m-1] else: tens = self.lang.numbers2090[(m/10)-2] ones = self.lang.d["minute_numbers_1to29"][(m % 10)-1] minutes = tens + " " + ones """ if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": if tt[1] == 0: self.text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: self.text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: self.text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": self.text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: self.text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: self.text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: self.text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] < 30: if self.lang.d["time_string_past_mh"] != "": self.text_string = self.lang.d["time_string_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_past_hm"] != "": self.text_string = self.lang.d["time_string_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: self.text_string = "" elif tt[1] > 30: if self.lang.d["time_string_to_mh"] != "": self.text_string = self.lang.d["time_string_to_mh"] % (minutes, self.lang.d["hours_c"][h_indexp1]) elif self.lang.d["time_string_to_hm"] != "": self.text_string = self.lang.d["time_string_to_hm"] % (self.lang.d["hours_c"][h_indexp1], minutes) else: self.text_string = "" else: if tt[1] == 0: self.text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: self.text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: if self.lang.d["time_string_q_to"] != "": self.text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif self.lang.d["time_string_3q_past"] != "": self.text_string = self.lang.d["time_string_3q_past"] % self.lang.d["hours_c"][h_index] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": self.text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: self.text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: self.text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: if self.lang.d["time_string_one_to"] != "": self.text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] else: if self.lang.d["time_string_1_59_past_mh"] != "": self.text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": self.text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: if self.lang.d["time_string_1_59_past_mh"] != "": self.text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": self.text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: self.text_string = "" self.time = [6,0] self.tm = self.time[:] self.digits = ["0","1","2","3","4","5","6","7","8","9"] x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.font_size = 0 self.data = data self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],self.layout.scale) self.size = self.board.scale*10 ans_offset = 10+(data[0]-15)//2 self.board.add_unit(10,0,data[0]-10,2,classes.board.Label,self.lang.d["Set_clock"],white,"",2) self.board.units[-1].font_color = gray self.board.add_unit(10,4,data[0]-10,2,classes.board.Label,self.lang.d["Set_clock_instr"],white,"",2) self.board.units[-1].font_color = gray self.board.add_unit(ans_offset,2,2,1,classes.board.Label,"%02d" % self.target_time[0],white,"",0) self.ans_h = self.board.units[-1] self.board.add_unit(ans_offset+2,2,1,1,classes.board.Label,":",white,"",0) self.board.add_unit(ans_offset+3,2,2,1,classes.board.Label,"%02d" % self.target_time[1],white,"",0) self.ans_m = self.board.units[-1] """ self.board.add_unit(0,10,data[0],1,classes.board.Label,"Quarter past twelve",white,"",2) self.time_text = self.board.units[-1] self.time_text.align = 1 self.time_text.font_color = color4 """ #self.ans_h.set_outline(color3, 5) #self.ans_m.set_outline(color4, 5) self.ans_h.align = 2 self.ans_m.align = 1 self.ans_h.immobilize() self.ans_m.immobilize() self.ans_h.font_color = color3 self.ans_m.font_color = color4 self.center = [self.size//2,self.size//2] self.board.add_unit(0,0,10,10,classes.board.Ship,"",white,"",self.font_size) self.clock_canvas = self.board.ships[-1] self.board.active_ship = self.clock_canvas.unit_id self.clock_canvas.font = self.clock_canvas.board.font_sizes[2] self.clock_canvas.font2 = self.clock_canvas.board.font_sizes[7] self.clock_canvas.immobilize() self.board.add_unit(10,3,data[0]-10,1,classes.board.Letter,self.text_string,white,"",4) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = gray self.canvas = pygame.Surface([self.size, self.size-1]) self.canvas.fill((255,255,255)) self.hands_vars() self.draw_hands()#data[7](data, canvas, i) self.clock_canvas.hidden_value = [2,3]#numbers[i] self.clock_canvas.font_color = color2 self.clock_canvas.painting = self.canvas.copy() def hands_vars(self): numbers = [2,2] self.angle_step_12 = 2*pi/12 self.angle_step_60 = 2*pi/60 self.angle_start= -pi/2 angle_arc_start = -pi/2 self.r = self.size//3+self.size//10 #rs = [r*0.6, r*0.85,r*0.5] self.rs = [self.r*0.6, self.r*0.85,self.r*0.6] angle = self.angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] #a1 = angle_start + (2*pi/12)*time[0] def draw_hands(self): if self.show_hour_offset: a1 = self.angle_start + (2*pi/12)*self.time[0] + (self.angle_step_12*(2*pi/60)*self.time[1])/(2*pi) else: a1 = self.angle_start + (2*pi/12)*self.time[0] a2 = self.angle_start + (2*pi/60)*self.time[1] self.angles = [a1,a2] rs = self.rs time = self.time if self.show_outer_ring: pygame.draw.circle(self.canvas,self.colors4[1],self.center,int(rs[1]+10),0) pygame.draw.circle(self.canvas,self.colors2[1],self.center,int(rs[1]+10),1) pygame.draw.circle(self.canvas,self.colors4[0],self.center,int(rs[2]+10),0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,int(rs[2]+10),1) if self.show_outer_ring: for i in range(60): val = str(i+1) if self.show_only_quarters_m: if (i+1)%15 != 0: val = "" elif self.show_only_fives_m: if (i+1)%5 != 0: val = "" if i == 59: val = "0" a = self.angle_start + self.angle_step_60*(i+1) if self.show_minutes: font_size = self.clock_canvas.font2.size(val) #if self.show_highlight: if not self.show_highlight or (i+1 == time[1] or (time[1] == 0 and i==59)): text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors2[1]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors[1]) x3=(rs[1]+30+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[1]+30+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 #x3=(rs[0]+20 + self.clock_canvas.font.size(val)[0]//2)*cos(a)+center[0] #y3=(rs[0]+20 + self.clock_canvas.font.size(val)[1]//2)*sin(a)+center[1] self.canvas.blit(text, (x3,y3)) if self.show_only_quarters_m or self.show_only_fives_m: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 else: marklen = 25 else: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 if self.show_outer_ring: x1=(rs[1]+10)*cos(a)+self.center[0] y1=(rs[1]+10)*sin(a)+self.center[1] x2=(rs[1]+marklen)*cos(a)+self.center[0] y2=(rs[1]+marklen)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[1], [x1,y1],[x2,y2]) for i in range(12): val = str(i+1) if self.show_only_quarters_h: if (i+1)%3 != 0: val = "" #a = angle_start + angle_step_12*(i+1) a = self.angle_start + self.angle_step_12*(i+1) x1=(rs[2]+10)*cos(a)+self.center[0] y1=(rs[2]+10)*sin(a)+self.center[1] x2=(rs[2]+20)*cos(a)+self.center[0] y2=(rs[2]+20)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[0], [x1,y1],[x2,y2]) font_size = self.clock_canvas.font.size(val) if not self.show_highlight or i+1 == time[0]: text = self.clock_canvas.font.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_canvas.font.render("%s" % (val), 1, self.colors[0]) x3=(rs[2]+20+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[2]+20+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) if self.show_24h: if i+13 == 24: val = "0" v = 0 else: val = str(i+13) v = i + 13 font_size = self.clock_canvas.font2.size(val) if not self.show_highlight or v == time[0]: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors[0]) x3=(rs[0]+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[0]+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) hand_width = [self.r//14,self.r//18] start_offset = [self.size//10,self.size//12] for i in range(2): #angle for line angle = self.angles[i]#angle_start + angle_step*i x0=self.center[0] - start_offset[i]*cos(angle) y0=self.center[1] - start_offset[i]*sin(angle) # Calculate the x,y for the end point x1=rs[i]*cos(angle)+self.center[0] y1=rs[i]*sin(angle)+self.center[1] #x2=h_size[i]*cos(angle-pi/2)+center[0] #y2=h_size[i]*sin(angle-pi/2)+center[1] #x3=h_size[i]*cos(angle+pi/2)+center[0] #y3=h_size[i]*sin(angle+pi/2)+center[1] x2=hand_width[i]*cos(angle-pi/2)+self.center[0] y2=hand_width[i]*sin(angle-pi/2)+self.center[1] x3=hand_width[i]*cos(angle+pi/2)+self.center[0] y3=hand_width[i]*sin(angle+pi/2)+self.center[1] points = [[x0,y0],[x2,y2],[x1,y1],[x3,y3]] shadow = [[x0,y0],[x2,y2],[x1,y1]] self.hand_coords[i] = points #if i < numbers[0]: pygame.draw.polygon(self.canvas, self.colors[i], points, 0) pygame.draw.polygon(self.canvas, self.colors3[i], shadow, 0) # Draw the line from the center to the calculated end point line_through = [[x0,y0],[x1,y1]] pygame.draw.aalines(self.canvas, self.colors2[i], True, points) pygame.draw.aalines(self.canvas, self.colors2[i], True, line_through) pygame.draw.circle(self.canvas,self.colors[0],self.center,self.size//50,0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//50,1) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//70,1) self.clock_canvas.update_me = True self.mainloop.redraw_needed[0] = True def vector_len(self,v): return sqrt(v[0]**2 + v[1]**2) def scalar_product(self,v1,v2): return sum([v1[i]*v2[i] for i in range(len(v1))]) def angle(self,v1,v2): return self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2)) def is_contained(self, pos, coords_id = 0): v0 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][1]) v1 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][1]) v2 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][3]) v3 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][3]) v4 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][1]) v5 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][3]) a1 = 1 - self.angle(v0,v1) #corner 1 a2 = 1 - self.angle(v2,v3) #corner 2 a3 = 1 - self.angle(v0,v4)#point to arm1 of corner1 a4 = 1 - self.angle(v1,v4)#point to arm2 of corner1 a5 = 1 - self.angle(v2,v5)#point to arm1 of corner2 a6 = 1 - self.angle(v3,v5)#point to arm2 of corner2 if (a3+a4) < a1 and (a5+a6) < a2: return True return False def current_angle(self, pos,r): #print(r), #print(self.rs[0]), cosa = (pos[0] - self.center[0]) / r sina = (pos[1] - self.center[1]) / r if 0 <= cosa <= 1 and -1 <= sina <= 0: angle = pi/2 - acos(cosa) elif 0 <= cosa <= 1 and 0 <= sina <= 1: angle = acos(cosa)+pi/2 #ok elif -1 <= cosa <= 0 and 0 <= sina <= 1: angle = acos(cosa)+ pi/2 #ok elif -1 <= cosa <= 0 and -1 <= sina <= 0: angle = 2*pi+ pi/2 - acos(cosa) return angle def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up self.tm = self.time[:] if event.type == pygame.MOUSEMOTION and self.hand_id > 0: pos = [event.pos[0]-self.layout.menu_w,event.pos[1]] r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 if self.hand_id == 1: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: self.tm[0] = 12 else: self.tm[0] = int(h) elif self.hand_id == 2: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) if 0 <= self.tm[1] < 5 and 55 <= self.time[1] <= 59: if self.tm[0] == 12: self.tm[0] = 1 else: self.tm[0] += 1 elif 0 <= self.time[1] < 5 and 55 <= self.tm[1] <= 59: if self.tm[0] == 1: self.tm[0] = 12 else: self.tm[0] -= 1 elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: active = self.board.active_ship pos = [event.pos[0]-self.layout.menu_w,event.pos[1]] if active == 0: r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 self.hand_id = 0 if self.is_contained(pos, coords_id = 0): self.hand_id = 1 #print("activated: %d" % self.hand_id) elif self.is_contained(pos, coords_id = 1): self.hand_id = 2 #print("activated: %d" % self.hand_id) elif self.rs[0]*1.1 > r: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: h = 12 self.tm[0] = int(h) else: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: self.hand_id = 0 #self.is_contained(pos, 1) if self.tm != self.time: self.time = self.tm[:] self.draw_hands() self.clock_canvas.painting = self.canvas.copy() """ if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and not self.correct: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else: char = event.unicode if (len(char)>0 and lhv < 2 and char in self.digits): if lhv == 0: self.home_square.value += char elif lhv == 1: if self.home_square == self.ans_h: if self.show_24h: n = int(self.home_square.value + char) if n > 23: self.home_square.value = char else: self.home_square.value += char else: n = int(self.home_square.value + char) if n > 12: self.home_square.value = char else: self.home_square.value += char if self.home_square == self.ans_m: n = int(self.home_square.value + char) if n > 59: self.home_square.value = char else: self.home_square.value += char elif lhv == 2: self.home_square.value = char if self.home_square == self.ans_h and self.time[0] == int(self.ans_h.value): self.next_field() self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.KEYDOWN and (event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER) and self.board.active_ship == self.ans_h.unit_id: if self.time[0] == int(self.ans_h.value): self.next_field() elif event.type == pygame.MOUSEBUTTONUP: self.home_square.update_me = True if self.board.active_ship == self.ans_h.unit_id: self.home_square.perm_outline_width = 5 self.home_square = self.ans_h self.board.active_ship == self.ans_h.unit_id elif self.board.active_ship == self.ans_m.unit_id: self.home_square.perm_outline_width = 5 self.home_square = self.ans_m self.board.active_ship == self.ans_m.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True """ def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.time == self.target_time: self.level.next_board() else: self.level.try_again() pysiogame-1.30.811/game_boards/game071.py0000644000175000017500000003430112201770065016727 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,7) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color #font_color = ex.hsv_to_rgb(227,255,50) #font_color = (85,0,212) font_color = (50,0,150) self.grey = (200,200,200) self.greyoutline = (190,190,190) self.grey2 = (150,150,150) self.font_hl = (100,0,250) self.font_hl2 = (250,0,200) self.task_str_color = ex.hsv_to_rgb(200,200,230) #font_result = ex.hsv_to_rgb(225,70,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) self.level.games_per_lvl = 5 if self.level.lvl == 1: rngs = [11,50,11,20] self.level.games_per_lvl = 2 elif self.level.lvl == 2: rngs = [20,50,20,30] self.level.games_per_lvl = 2 elif self.level.lvl == 3: rngs = [50,150,30,75] self.level.games_per_lvl = 2 elif self.level.lvl == 4: rngs = [150,500,50,75] elif self.level.lvl == 5: rngs = [500,1000,75,100] elif self.level.lvl == 6: rngs = [1000,2500,100,299] elif self.level.lvl == 7: rngs = [2500,9999,250,999] data = [39,24] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.n1 = random.randrange(rngs[0],rngs[1]) self.n2 = random.randrange(rngs[2],rngs[3]) self.sumn1n2 = self.n1*self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 0 self.correct = False self.carryl = [] self.carrylall = [] self.carrysuml = [] self.semiresultl = [] self.semiresultlall = [] self.semiresultlengths = [] self.resultl = [] self.all_count = 0 for i in range(self.n2sl): self.carryl.append([]) self.semiresultl.append([]) if int(self.n2s[self.n2sl-1-i]) == 0: self.semiresultlengths.append(self.n1sl) else: self.semiresultlengths.append(len(str(int(self.n2s[self.n2sl-1-i])*self.n1))) self.semi_count = sum(self.semiresultlengths) self.nums1l = [] self.nums2l = [] self.ship_id = 0 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " × " + self.n2s + " = " + qm #question self.board.add_unit(1,3,data[0]-1-self.sumn1n2sl*3 ,3,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 #carry 1 for i in range(self.n2sl): for j in range(self.n1sl): self.board.add_unit(data[0]-5-j*3,2-i,1,1,classes.board.Letter,"",white,"",0) self.carryl[i].append(self.board.ships[-1]) self.carryl[i][-1].set_outline(self.grey, 1) self.carryl[i][-1].pos_id = j self.carryl[i][-1].posy_id = i self.carrylall.append(self.carryl[i][-1]) #first number for i in range(self.n1sl): self.board.add_unit(data[0]-3-i*3,3,3,3,classes.board.Label,self.n1s[-(i+1)],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i #second number i = 0 for i in range(self.n2sl): self.board.add_unit(data[0]-3-i*3,6,3,3,classes.board.Label,self.n2s[-(i+1)],white,"",21) self.nums2l.append(self.board.units[-1]) self.nums2l[-1].pos_id = i i += 1 self.board.add_unit(data[0]-3-i*3,6,3,3,classes.board.Label,"×",white,"",21) self.plus_label = self.board.units[-1] #line line = "―" * (self.sumn1n2sl*2) self.board.add_unit(data[0]-self.sumn1n2sl*3,9,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) for i in range(self.sumn1n2sl - 2): self.board.add_unit(data[0]-8-i*3,10,1,1,classes.board.Letter,"",white,"",0) self.carrysuml.append(self.board.ships[-1]) self.carrysuml[-1].set_outline(self.grey, 1) self.carrysuml[-1].pos_id = i for j in range(self.n2sl): for i in range(self.semiresultlengths[j]): self.board.add_unit(data[0]-3-i*3-j*3,11+j*3,3,3,classes.board.Letter,"",white,"",21) self.semiresultl[j].append(self.board.ships[-1]) self.semiresultl[j][-1].set_outline(self.grey, 1) self.semiresultl[j][-1].pos_id = i self.semiresultl[j][-1].posy_id = j self.semiresultlall.append(self.semiresultl[j][-1]) self.board.add_unit(data[0]-self.sumn1n2sl*3,10+self.n2sl*3+1,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) self.board.add_unit(data[0]-(self.sumn1n2sl+1)*3,7+self.n2sl*3+1,3,3,classes.board.Label," + ",white,"",21) self.plus2_label = self.board.units[-1] for i in range(self.sumn1n2sl): self.board.add_unit(data[0]-3-i*3,10+self.n2sl*3+2,3,3,classes.board.Letter,"",white,"",21) self.resultl.append(self.board.ships[-1]) self.resultl[-1].set_outline(self.grey, 1) self.resultl[-1].pos_id = i self.resultl[0].set_outline(self.activated_col, 1) self.home_square = self.semiresultl[0][0] self.board.active_ship = self.home_square.unit_id self.all_count = sum(self.semiresultlengths) + self.n1sl + self.n2sl + self.sumn1n2sl * 2 - 2 + (self.sumn1n2sl - 1) * self.n2sl self.all_a_count = len(self.board.ships) #self.all_count - self.n1sl - self.n2sl for each in self.board.ships: each.immobilize() self.deactivate_colors() self.reactivate_colors() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT: self.home_sqare_switch(self.board.active_ship+1) elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT: self.home_sqare_switch(self.board.active_ship-1) elif event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and not self.correct: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else: char = event.unicode if (len(char)>0 and lhv < 2 and char in self.digits): if True: #self.home_square in self.resultl: if lhv == 1: s = self.home_square.value + char if s[0] == "0": self.home_square.value = char else: n = int(s) if n < 20: self.home_square.value = str(n % 10) try: self.carryl[self.home_square.pos_id].value = "1" self.carryl[self.home_square.pos_id].update_me = True except: pass else: self.home_square.value = char else: self.home_square.value = char elif self.home_square in self.carryl: if char == "1": self.home_square.value = char else: self.home_square.value = "" self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.MOUSEBUTTONUP: self.home_sqare_switch(self.board.active_ship) def home_sqare_switch(self, activate): if activate < 0 or activate > self.all_a_count: #self.sumn1n2sl * 2 - 1: activate = self.all_a_count if activate >= 0 and activate < self.all_a_count: #self.sumn1n2sl * 2 - 1: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 1) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 2) self.reactivate_colors() self.home_square.font_color = self.font_hl self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey each.set_outline(self.greyoutline, 1) each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True def reactivate_colors(self): self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square in self.carrylall: #self.home_square.font_color = self.font_hl self.nums1l[self.home_square.pos_id].font_color = self.font_hl self.nums2l[self.home_square.posy_id].font_color = self.font_hl self.semiresultl[self.home_square.posy_id][self.home_square.pos_id].font_color = self.font_hl self.semiresultl[self.home_square.posy_id][self.home_square.pos_id].set_outline(self.font_hl2, 2) if self.home_square.pos_id+1 < self.semiresultlengths[self.home_square.posy_id]: self.semiresultl[self.home_square.posy_id][self.home_square.pos_id+1].font_color = self.grey2 self.semiresultl[self.home_square.posy_id][self.home_square.pos_id+1].set_outline(self.grey2, 2) elif self.home_square in self.semiresultlall: if self.home_square.pos_id < self.n1sl: self.nums1l[self.home_square.pos_id].font_color = self.font_hl self.nums2l[self.home_square.posy_id].font_color = self.font_hl if self.home_square.pos_id > 0:# self.n1sl: self.carryl[self.home_square.posy_id][self.home_square.pos_id-1].font_color = self.font_hl self.carryl[self.home_square.posy_id][self.home_square.pos_id-1].set_outline(self.grey2, 2) if self.home_square.pos_id < self.n1sl: self.semiresultl[self.home_square.posy_id][self.home_square.pos_id].font_color = self.grey2 self.carryl[self.home_square.posy_id][self.home_square.pos_id].set_outline(self.font_hl2, 2) elif self.home_square in self.resultl: for i in range(self.n2sl): if self.semiresultlengths[i] > self.home_square.pos_id - i >= 0: self.semiresultl[i][self.home_square.pos_id-i].font_color = self.font_hl self.semiresultl[i][self.home_square.pos_id-i].set_outline(self.grey2, 2) if self.home_square.pos_id > 1: self.carrysuml[self.home_square.pos_id-2].font_color = self.font_hl self.carrysuml[self.home_square.pos_id-2].set_outline(self.grey2, 2) if self.home_square.pos_id > 0 and self.home_square.pos_id < self.sumn1n2sl-1: self.carrysuml[self.home_square.pos_id-1].font_color = self.grey2 self.carrysuml[self.home_square.pos_id-1].set_outline(self.font_hl2, 2) self.plus_label.font_color = self.grey self.plus2_label.font_color = self.font_hl elif self.home_square in self.carrysuml: for i in range(self.n2sl): if self.semiresultlengths[i] > self.home_square.pos_id - i + 1 >= 0: self.semiresultl[i][self.home_square.pos_id-i+1].font_color = self.font_hl self.semiresultl[i][self.home_square.pos_id-i+1].set_outline(self.grey2, 2) self.resultl[self.home_square.pos_id+1].font_color = self.font_hl self.resultl[self.home_square.pos_id+1].set_outline(self.grey2, 2) self.plus_label.font_color = self.grey self.plus2_label.font_color = self.font_hl def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: s = "" for each in reversed(self.resultl): s += each.value if s == self.sumn1n2s: self.level.next_board() else: self.level.try_again() pysiogame-1.30.811/game_boards/game046.py0000644000175000017500000001317412201770065016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,3,5) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,8) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(100, 121, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color = ex.hsv_to_rgb(h,s,v) outline_color = ex.hsv_to_rgb(h,255,140) self.font_color = outline_color apple_bg = [255,255,255] #data = [x_count, y_count, range_from, range_to, max_sum_range, image, sign] if self.mainloop.m.game_variant == 0: if self.level.lvl == 1: data = [11,8,1,5,5,3,"fr_apple2.png","n",0] elif self.level.lvl == 2: data = [11,8,1,6,6,2,"fr_apple1.png","n",0] elif self.level.lvl == 3: data = [11,8,2,6,6,3,"fr_pear.png","n",0] elif self.level.lvl == 4: data = [11,8,3,7,7,3,"fr_orange.png","n",0] elif self.level.lvl == 5: data = [11,8,3,8,8,2,"fr_plum.png","n",0] elif self.mainloop.m.game_variant == 1: if self.level.lvl == 1: data = [11,8,1,6,6,2,"fr_cherry.png","+",2] elif self.level.lvl == 2: data = [11,8,1,7,7,2,"fr_wmelon.png","+",2] elif self.level.lvl == 3: data = [11,8,1,8,8,2,"fr_lemon.png","+",2] elif self.level.lvl == 4: data = [11,8,1,9,9,2,"fr_banana.png","+",2] elif self.level.lvl == 5: data = [11,8,1,10,10,2,"fr_strawberry.png","+",2] elif self.mainloop.m.game_variant == 2: if self.level.lvl == 1: data = [11,8,2,6,6,2,"fr_tomato.png","-",2] elif self.level.lvl == 2: data = [11,8,2,7,7,2,"fr_pepper.png","-",2] elif self.level.lvl == 3: data = [11,8,2,8,8,2,"fr_carrot.png","-",2] elif self.level.lvl == 4: data = [11,8,2,9,9,2,"fr_onion.png","-",2] elif self.level.lvl == 5: data = [11,8,2,10,10,2,"fr_broccoli.png","-",2] #rescale the number of squares horizontally to better match the screen width x_count = self.get_x_count(data[1],even=None) if x_count > 11: data[0] = x_count self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) choice_list = [x for x in range(data[2],data[3])]*data[5] self.num_list = [] self.num_list2 = [] self.solution = [] for i in range(data[1]): index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) if data[7]=="n": self.solution.append(choice_list[index]) second_num = 0 elif data[7]=="+": second_range = data[4]-choice_list[index] second_num = random.randrange(1,second_range+1) self.solution.append(choice_list[index] + second_num) else: second_range = choice_list[index]-1 second_num = random.randrange(1,second_range+1) self.solution.append(choice_list[index] - second_num) self.num_list2.append(second_num) del(choice_list[index]) if data[7]=="n": total = sum(self.num_list)#+sum(self.num_list2) elif data[7]=="+": total = sum(self.num_list)+sum(self.num_list2) else: total = sum(self.num_list)-sum(self.num_list2) for i in range(data[1]): if data[7]=="n": rhs = "" else: rhs = data[7] + str(self.num_list2[i]) caption = str(self.num_list[i]) + rhs self.board.add_unit(0,i,1,1,classes.board.Label,caption,color,"",data[8]) self.board.units[i].set_outline(outline_color,1) self.board.units[i].font_color = self.font_color x = data[0]-1 y = 0 apple_count = 0 for i in range(1,total+1): if y >= data[1]: y = 0 x -= 1 self.board.add_unit(x,y,1,1,classes.board.ImgShip,"",apple_bg,data[6]) self.board.ships[-1].audible = False y += 1 def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: self.result = [] for each_list in self.board.grid: total = 0 i = 0 for each_item in each_list: if i > 0: total += each_item i += 1 self.result.append(total) if self.result == self.solution: self.level.next_board() else: self.say(self.d["Please try again."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game023_lvls.py0000644000175000017500000010234412201770065017767 0ustar tigertiger# -*- coding: utf-8 -*- """ lvl3=[] lvl4=[] lvl5=[]""" lvl1=[[10], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]], [[0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0]], [[0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0]], [[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]] """ lvl2=[[17], [[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0]], [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0]], [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]], [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]]] """ pysiogame-1.30.811/game_boards/game003.py0000644000175000017500000002407112201770065016725 0ustar tigertiger# -*- coding: utf-8 -*- from __future__ import with_statement import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import os, sys import classes.board import random import pygame import pickle class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,2,2) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False s = 20 #random.randrange(20, 40) v = random.randrange(200, 255) h = random.randrange(0, 255) white = ((255,255,255)) color = white #ex.hsv_to_rgb(h,s,v) self.file_data = self.mainloop.config.settings flag_files = self.mainloop.lang.flag_files # ["flag_uk.png","flag_us.png","flag_pl.png","flag_gr.png","flag_es.png","flag_pt.png","flag_fr.png","flag_it.png","flag_de.png","flag_ru.png","flag_fi.png"] self.lang_titles = self.mainloop.lang.lang_titles #["English","American English","Polski","Ελληνικά","Español","Português","Français","Italiano","Deutsch","Русский","Suomalainen"] self.all_lng = self.mainloop.lang.all_lng #["en_gb", "en_us", "pl", "gr", "es","pt","fr","it","de","ru","fi"] self.ok_lng = self.mainloop.lang.ok_lng #["en_gb", "en_us", "pl", "gr", "es"] if self.mainloop.config.google_trans_languages == True: self.languages = self.all_lng else: self.languages = self.ok_lng door_pos = [] self.lang_count = len(self.languages) data = [22,15] max_x_count = self.get_x_count(data[1],even=True) if max_x_count > self.lang_count*2 and max_x_count > 24: data[0] = max_x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) self.center = self.data[0] // 2 x = self.center - self.lang_count #determining the position of markers for current language and speaker settings for i in range(self.lang_count): if self.lang.lang == self.languages[i]: door_pos.append(i) self.file_data[0] = self.languages[i] break if self.mainloop.speaker.talkative: door_pos.append(1) else: door_pos.append(0) if self.mainloop.config.google_trans_languages: door_pos.append(1) else: door_pos.append(0) if self.mainloop.config.fullscreen: door_pos.append(1) else: door_pos.append(0) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.add_door(x+door_pos[0]*2,3,2,2,classes.board.Door,"",white) self.board.add_door(self.center - door_pos[1]*2,7,2,2,classes.board.Door,"",white) #self.board.add_door(self.center - door_pos[2]*2,11,2,2,classes.board.Door,"",white) self.board.add_door(data[0]-1-door_pos[2],13,1,1,classes.board.Door,"",white) self.board.add_door(data[0]-1-door_pos[3],14,1,1,classes.board.Door,"",white) #username box frame self.board.add_door(self.center-4,11,8,1,classes.board.Door,self.file_data[4],white,font_size = 2) self.home_square = self.board.units[-1] self.home_square.font_color = (0,127,0) for i in range(5): self.board.units[i].door_outline = True self.board.add_unit(0,0,data[0],2,classes.board.Label,self.d["Preferences"],color,"",0) self.board.add_unit(0,6,data[0],1,classes.board.Label,self.d["Reader"]+":",color,"",2) self.board.add_unit(self.center - 2,7,2,2,classes.board.ImgShip,"",white,"flag_green.png") self.board.add_unit(self.center,7,2,2,classes.board.ImgShip,"",white,"flag_red.png") self.board.add_unit(0,10,data[0],1,classes.board.Label,self.d["UserName"]+":",color,"",2) self.board.add_unit(2,13,data[0]-4,1,classes.board.Label,self.lang.d["enable_untranslated"],color,"",3) self.board.add_unit(data[0]-2,13,1,1,classes.board.ImgShip,"",white,"flag_green.png") self.board.add_unit(data[0]-1,13,1,1,classes.board.ImgShip,"",white,"flag_red.png") self.board.add_unit(2,14,data[0]-4,1,classes.board.Label,self.lang.d["Fullscreen:"],color,"",3) self.board.add_unit(data[0]-2,14,1,1,classes.board.ImgShip,"",white,"flag_green.png") self.board.add_unit(data[0]-1,14,1,1,classes.board.ImgShip,"",white,"flag_red.png") self.board.add_unit(0,2,data[0],1,classes.board.Label,self.d["Language"]+":",color,"",2) for i in range(self.lang_count): self.board.add_unit(x+i*2,3,2,2,classes.board.ImgShip,"",white,flag_files[i]) for each in self.board.ships: each.immobilize() each.readable = False each.outline = False for each in self.board.units: each.door_outline = True self.board.all_sprites_list.move_to_front(each) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: active = self.board.active_ship if event.button == 1: toggle = False if active == 0: #turn on espeak self.mainloop.speaker.talkative = True self.file_data[1] = 1 self.board.units[1].set_pos(self.board.active_ship_pos) elif active == 1: #turn off espeak self.mainloop.speaker.talkative = False self.file_data[1] = 0 self.board.units[1].set_pos(self.board.active_ship_pos) elif active == 2: #turn on google translated languages self.mainloop.config.google_trans_languages = True self.file_data[2] = 1 self.board.units[2].set_pos(self.board.active_ship_pos) elif active == 3: #turn off google translated images - reset to English to avoid out of index problem self.mainloop.config.google_trans_languages = False self.file_data[2] = 0 self.board.units[2].set_pos(self.board.active_ship_pos) if self.lang.lang not in self.ok_lng: self.change_language(self.languages[0],self.lang_titles[0],0) elif active == 4: #turn on fullscreen display if self.mainloop.config.fullscreen == False: toggle = True else: toggle = False #self.mainloop.config.fullscreen = True self.file_data[3] = 1 self.board.units[3].set_pos(self.board.active_ship_pos) elif active == 5: #turn off fullscreen display if self.mainloop.config.fullscreen == True: toggle = True else: toggle = False #self.mainloop.config.fullscreen = False self.file_data[3] = 0 self.board.units[3].set_pos(self.board.active_ship_pos) elif active > 5: #change language if self.lang.lang != self.languages[active - 6]: self.change_language(self.languages[active - 6],self.lang_titles[active - 6],active-6) if active >= 0: self.save_settings_file() if toggle: self.mainloop.fullscreen_toggle(self.mainloop.info) else: self.level.load_level() if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else: char = event.unicode if len(char)>0 and lhv < 25: self.home_square.value += char self.home_square.font_color = (127,0,0) self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN: self.file_data[4] = self.home_square.value self.home_square.font_color = (0,127,0) self.home_square.update_me = True self.mainloop.redraw_needed[0] = True self.mainloop.user_name = self.home_square.value self.save_settings_file() def change_language(self,lng,lng_title,file_data_0): self.lang.lang = lng self.lang.get_lang_attr() self.d = self.lang.d self.mainloop.speaker.restart_server() self.mainloop.m.lang_change() self.file_data[0] = file_data_0 self.board.units[0].set_pos(self.board.active_ship_pos) self.mainloop.redraw_needed = [True,True,True] self.say(lng_title) self.mainloop.info.update_fonts() def save_settings_file(self): 'save language settings to file' self.mainloop.config.settings = [self.lang.lang, self.file_data[1], self.file_data[2], self.file_data[3], self.file_data[4],self.file_data[5],self.file_data[6]] self.mainloop.config.save_settings() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game037.py0000644000175000017500000001275512201770065016742 0ustar tigertiger# -*- coding: utf-8 -*- #English Only Game import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 225) #ex.hsv_to_rgb(h,s,v) #rgb = colorsys.hsv_to_rgb(h,s,v) self.letter_color = ex.hsv_to_rgb(h,s,v) font_color = ex.hsv_to_rgb(h,s,75) outline_color = ex.hsv_to_rgb(h,s+50,v-50) frame_color = [255,255,255] card_color = ex.hsv_to_rgb(h+10,s-25,v) data = [14,10] #stretch width to fit the screen size data[0] = self.get_x_count(data[1],even=True) if data[0]<14: data[0]=14 self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) #self.prev_item = None self.word_list = ['Ant', 'Boat', 'Cat', 'Duck', 'Elephant', 'Fish', 'Grapes', 'House', 'Igloo', 'Jar', 'Key', 'Lion', 'Mouse', 'Notebook', 'Owl', 'Parrot', 'Queen', 'Rabbit', 'Sun', 'Teapot', 'Umbrella', 'Violin', 'Window', 'Xylophone', 'Yarn', 'Zebra'] x = 0 x2 = (data[0] - (26 - data[0]))//2 y = 0 for i in range(26): self.board.add_unit(x,y,1,1,classes.board.Letter,chr(i+65)+chr(i+97),self.letter_color,"",2) self.board.ships[i].readable = False self.board.ships[i].set_outline(outline_color,1) x += 1 if x >= data[0]: x = x2 y = data[1]-1 x=(data[0]-4)//2 y=1 #Card self.board.add_unit(x,y+1,2,1,classes.board.Label,"A",card_color,"",0) self.board.add_unit(x+2,y+1,2,1,classes.board.Label,"a",card_color,"",0) self.board.add_unit(x-2,y+1,2,4,classes.board.Label,"A",card_color,"",18) #self.board.add_unit(x-2,y+3,2,2,classes.board.Label,"A",card_color,"",13) self.board.add_unit(x+4,y+1,2,4,classes.board.Label,"a",card_color,"",18) #self.board.add_unit(x+4,y+3,2,2,classes.board.Label,"a",card_color,"",13) self.board.add_unit(x,y+2,4,3,classes.board.MultiImgSprite,self.word_list[0],card_color,"flashcard_images.jpg",row_data=[10,8]) self.board.add_unit(x-2,y+5,8,1,classes.board.Letter,self.word_list[0],card_color,"",2) self.board.add_unit(x-2,y+6,8,1,classes.board.Letter,self.word_list[0],card_color,"",15) if self.mainloop.lang.lang not in ['en_gb', 'en_us']: for i in range(-3,0): self.board.ships[i].readable = False self.board.add_door(x-2,y+1,8,6,classes.board.Door,"",card_color,"") self.board.units[4].door_outline = True self.board.all_sprites_list.move_to_front(self.board.units[4]) self.slide = self.board.ships[26] self.slide.build_frame_flow(26) self.slide.correction = True self.slide.perm_outline = True for each in self.board.ships: each.immobilize() each.font_color = font_color for each in self.board.units: each.font_color = font_color self.active_item = self.board.ships[0] self.active_item.color = (255,255,255) self.prev_item = self.active_item def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: self.active_item = self.board.ships[self.board.active_ship] if self.active_item.unit_id < 26: if self.prev_item != None: self.prev_item.color = self.letter_color self.prev_item.update_me = True self.active_item.color = (255,255,255) self.create_card(self.active_item) self.prev_item = self.active_item self.mainloop.redraw_needed[0] = True def create_card(self, active): self.say(active.value[0]) self.board.units[0].value = active.value[0] self.board.units[1].value = active.value[1] self.board.units[2].value = active.value[0] #self.board.units[3].value = active.value[0] self.board.units[3].value = active.value[1] #self.board.units[5].value = active.value[1] self.board.ships[26].value = self.word_list[active.unit_id] self.board.ships[27].value = self.word_list[active.unit_id] self.board.ships[28].value = self.word_list[active.unit_id] self.mainloop.redraw_needed[0] = True self.slide.set_frame(active.unit_id) self.board.active_ship = -1 self.slide.update_me = True for i in [0,1,2,3]: self.board.units[i].update_me = True for i in [26,27,28]: self.board.ships[i].update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game042.py0000644000175000017500000003145712201770065016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,4) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,5,3) def create_game_objects(self, level = 1): #create non-movable objects white = ((255,255,255)) if self.level.lvl == 1: choice = [x for x in range(0,21)] self.color_choice = [self.d["white"],self.d["black"],self.d["grey"],self.d["red"],self.d["orange"],self.d["yellow"],self.d["olive"],self.d["green"],self.d["sea green"],self.d["teal"],self.d["blue"],self.d["navy"],self.d["purple"],self.d["violet"],self.d["magenta"],self.d["indigo"],self.d["pink"],self.d["maroon"],self.d["brown"],self.d["aqua"],self.d["lime"]] #self.color_choice= ["white", "black", "grey", "red", "orange", "yellow", "olive", "green", "sea green","teal", "blue", "navy", "purple", "violet", "magenta", "indigo", "pink" "maroon", "brown", "aqua", "lime" ] self.hue_choice = [[255,255,255],[2,2,2], [140,140,140],[255,0,0],[255,138,0],[255,255,0],[181,219,3],[0,160,0],[41,131,82],[0,130,133],[0,0,255],[0,0,132],[132,0,132],[239,131,239],[255,0,255],[74,0,132],[255,20,138],[132,0,0], [140,69,16], [0,255,255], [0,255,0]] self.hue_choice2 =[[150,150,150],[100,100,100],[100,100,100],[200,0,0],[200,80,0], [200,200,0],[121,159,3],[0,100,0],[31,100,52],[0,90,90], [0,0,200],[0,0,82], [92,0,92], [189,81,189], [200,0,200],[44,0,82], [200,10,88], [100,0,0], [100,39,6], [0,200,200], [0,200,0]] self.font_color =[[0,0,0], [225,225,225],[0,0,0], [100,0,0],[100,40,0], [100,100,0],[60,80,3], [0,50,0],[11,50,22], [0,40,40], [0,0,100],[0,0,255],[255,0,255],[95,41,95], [100,0,100],[140,0,255],[100,5,48], [200,50,50], [200,100,26], [0,155,155], [0,155,0]] self.init_font_color = [[230,230,230],[2,2,2], [140,140,140],[255,0,0],[255,138,0],[255,255,0],[181,219,3],[0,160,0],[41,131,82],[0,130,133],[0,0,255],[0,0,132],[132,0,132],[239,131,239],[255,0,255],[74,0,132],[255,20,138],[132,0,0], [140,69,16], [0,255,255], [0,255,0]] elif self.level.lvl == 2: choice = [x for x in range(0,13)] self.color_choice = [self.d["white"],self.d["black"],self.d["grey"],self.d["red"],self.d["orange"],self.d["yellow"],self.d["olive"],self.d["green"],self.d["blue"],self.d["navy"],self.d["purple"],self.d["pink"],self.d["brown"]] #self.color_choice= ["white", "black", "grey", "red", "orange", "yellow", "olive", "green", "blue", "navy", "purple", "pink"] self.hue_choice = [[255,255,255],[2,2,2], [140,140,140],[255,0,0],[255,138,0],[255,255,0],[181,219,3],[0,160,0],[0,0,255], [0,0,132],[132,0,132],[255,20,138],[140,69,16]] self.hue_choice2 =[[150,150,150],[100,100,100],[100,100,100],[200,0,0],[200,80,0], [200,200,0],[121,159,3],[0,100,0],[0,0,200], [0,0,82], [92,0,92], [200,10,88],[100,39,6]] self.font_color =[[0,0,0], [225,225,225],[0,0,0], [100,0,0],[100,40,0], [100,100,0],[60,80,3], [0,50,0],[0,0,100], [0,0,255],[255,0,255],[100,5,48],[200,100,26]] self.init_font_color = [[0,0,0] for i in range(13)] elif self.level.lvl >= 3: choice = [x for x in range(0,21)] self.color_choice = [self.d["white"],self.d["black"],self.d["grey"],self.d["red"],self.d["orange"],self.d["yellow"],self.d["olive"],self.d["green"],self.d["sea green"],self.d["teal"],self.d["blue"],self.d["navy"],self.d["purple"],self.d["violet"],self.d["magenta"],self.d["indigo"],self.d["pink"],self.d["maroon"],self.d["brown"],self.d["aqua"],self.d["lime"]] #self.color_choice= ["white", "black", "grey", "red", "orange", "yellow", "olive", "green", "sea green","teal", "blue", "navy", "purple", "violet", "magenta", "indigo", "pink" "maroon", "brown", "aqua", "lime" ] self.hue_choice = [[255,255,255],[2,2,2], [140,140,140],[255,0,0],[255,138,0],[255,255,0],[181,219,3],[0,160,0],[41,131,82],[0,130,133],[0,0,255],[0,0,132],[132,0,132],[239,131,239],[255,0,255],[74,0,132],[255,20,138],[132,0,0], [140,69,16], [0,255,255], [0,255,0]] self.hue_choice2 =[[150,150,150],[100,100,100],[100,100,100],[200,0,0],[200,80,0], [200,200,0],[121,159,3],[0,100,0],[31,100,52],[0,90,90], [0,0,200],[0,0,82], [92,0,92], [189,81,189], [200,0,200],[44,0,82], [200,10,88], [100,0,0], [100,39,6], [0,200,200], [0,200,0]] self.font_color =[[0,0,0], [225,225,225],[0,0,0], [100,0,0],[100,40,0], [100,100,0],[60,80,3], [0,50,0],[11,50,22], [0,40,40], [0,0,100],[0,0,255],[255,0,255],[95,41,95], [100,0,100],[140,0,255],[100,5,48], [200,50,50], [200,100,26], [0,155,155], [0,155,0]] self.init_font_color = [[0,0,0] for i in range(21)] data = [5,3] if self.lang.lang in ["en_gb","en_us"]: font_size = 10 else: font_size = 11 #stretch width to fit the screen size max_x_count = self.get_x_count(data[1],even=False) if max_x_count > 5: data[0] = max_x_count self.data = data self.center = self.data[0] // 2 self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:5] self.shuffled2 = self.chosen[:] random.shuffle(self.shuffled2) x = self.center - 2 for i in range(5): self.board.add_door(x+i,0,1,1,classes.board.Door,self.color_choice[self.chosen[i]],white) self.board.add_unit(x+i,2,1,1,classes.board.Letter,self.color_choice[self.shuffled2[i]],white,"",font_size) font_color = self.init_font_color[self.shuffled2[i]] if self.level.lvl == 1: self.board.ships[i].font_color = font_color elif self.level.lvl == 4: self.board.ships[i].readable = False for each in self.board.ships: self.board.all_sprites_list.move_to_front(each) each.highlight = False each.outline_highlight = True each.set_outline([180,180,250],1) for each in self.board.units: each.outline = False each.show_value = False #splash polygon - unscalled - size 200x200 lines = [[135, 128],[133, 132],[135, 137],[157, 157],[158, 161],[155, 165],[150, 166],[146, 163],[133, 140],[129, 138],[125, 139], [122, 142],[122, 144],[128, 157],[128, 159],[126, 161],[123, 161],[121, 160],[114, 147],[112, 145],[107, 145],[104, 148], [104, 154],[110, 179],[111, 186],[110, 192],[105, 194],[100, 193],[98, 188],[98, 180],[101, 154],[100, 148],[96, 146], [93, 147],[92, 149],[88, 163],[86, 165],[83, 165],[80, 164],[80, 161],[80, 158],[83, 147],[82, 143],[73, 139], [65, 143],[55, 167],[52, 174],[48, 179],[42, 178],[37, 174],[38, 169],[43, 163],[57, 151],[63, 144],[67, 137], [66, 129],[60, 126],[51, 138],[47, 141],[44, 142],[40, 140],[38, 136],[40, 134],[44, 131],[57, 124],[56, 117], [51, 114],[43, 120],[40, 122],[38, 124],[36, 124],[34, 122],[34, 119],[36, 117],[50, 111],[52, 108],[53, 102], [51, 98],[46, 96],[38, 97],[11, 103],[5, 103],[3, 99],[4, 94],[10, 92],[36, 94],[44, 94],[50, 91], [53, 87],[52, 83],[46, 81],[21, 79],[14, 78],[9, 76],[8, 73],[10, 71],[15, 71],[22, 72],[45, 77], [51, 77],[53, 74],[52, 69],[40, 60],[39, 57],[39, 55],[41, 53],[44, 53],[47, 54],[55, 59],[58, 59], [61, 58],[62, 55],[61, 52],[54, 43],[54, 41],[55, 38],[58, 37],[61, 39],[71, 51],[74, 52],[80, 50], [81, 46],[80, 40],[77, 32],[66, 18],[62, 12],[61, 6],[65, 3],[70, 2],[74, 6],[76, 13],[79, 30], [81, 37],[86, 42],[91, 43],[95, 41],[95, 39],[93, 28],[93, 25],[93, 23],[96, 22],[99, 22],[100, 24], [100, 28],[99, 39],[101, 41],[103, 42],[106, 42],[108, 40],[111, 29],[112, 26],[114, 25],[117, 24],[119, 26], [120, 29],[119, 33],[116, 45],[117, 48],[119, 50],[122, 50],[135, 33],[137, 31],[140, 31],[142, 34],[142, 37], [133, 53],[133, 56],[134, 59],[137, 59],[141, 56],[155, 40],[160, 36],[164, 35],[169, 38],[170, 42],[168, 46], [163, 50],[146, 59],[144, 62],[145, 66],[149, 67],[160, 64],[162, 63],[164, 64],[165, 66],[165, 69],[164, 71], [150, 77],[148, 79],[148, 84],[150, 88],[155, 89],[173, 81],[179, 79],[183, 79],[185, 83],[186, 90],[184, 93], [180, 95],[175, 94],[158, 95],[154, 99],[153, 103],[156, 106],[163, 108],[185, 113],[190, 115],[191, 118],[189, 122], [184, 121],[163, 111],[156, 109],[151, 110],[147, 115],[145, 120],[146, 124],[151, 128],[163, 135],[168, 139],[171, 142], [171, 146],[167, 146],[162, 144],[158, 140],[149, 132],[144, 128],[140, 127]] size = self.board.units[0].grid_w*self.board.scale #new point = size * orig_point / 200 self.scaled_lines = [[int(size * each[0] / 200.0), int(size * each[1] / 200.0)] for each in lines] for i in range(5): #h = random.randrange(0, 255) color1 = self.hue_choice[self.chosen[i]] #ex.hsv_to_rgb(h,s,v) color2 = self.hue_choice2[self.chosen[i]] #ex.hsv_to_rgb(h,255,255) canvas = pygame.Surface([size, size-1]) canvas.fill(self.board.units[i].initcolor) self.draw_splash(canvas,size,color1,color2)#data[7](data, canvas, i) self.board.units[i].painting = canvas.copy() def draw_splash(self,canvas,size,color,outline_color): pygame.draw.polygon(canvas, color, self.scaled_lines,0) pygame.draw.aalines(canvas, outline_color, True, self.scaled_lines) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEMOTION: if self.drag and self.mouse_entered_new: self.swap_font_color() def after_keydown_move(self): #in case somebody uses keyboard to move the labels self.swap_font_color() def swap_font_color(self): active_ship = self.board.ships[self.board.active_ship] if active_ship.grid_y == 0: active_ship.initcolor = self.hue_choice[self.chosen[active_ship.grid_x]] active_ship.color = active_ship.initcolor #background 'door' #bgd = self.hue_choice[self.chosen[active_ship.grid_x]] #if bgd in [[2,2,2],[0,0,132],[132,0,132],[74,0,132]]: active_ship.font_color = self.font_color[self.chosen[active_ship.grid_x]] #(255,85,85,0) #else: # active_ship.font_color = (0,0,0,0) else: active_ship.initcolor = [255,255,255] active_ship.color = active_ship.initcolor if self.level.lvl == 1: active_ship.font_color = self.init_font_color[self.shuffled2[self.board.active_ship]] else: active_ship.font_color = (0,0,0,0) active_ship.image.set_colorkey(active_ship.initcolor) active_ship.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: #checking copied from number sorting game and re-done if self.board.grid[0][self.center-2:self.center+3] == [1,1,1,1,1]: #self.solution_grid: ships = [] units = [] #collect value and x position on the grid from ships list for i in range(5): ships.append([self.board.ships[i].grid_x, self.board.ships[i].value]) units.append([self.board.units[i].grid_x, self.board.units[i].value]) #ships_sorted = sorted(ships) ships.sort() units.sort() correct = True for i in range(5): if i < 4: if ships[i][1] != units[i][1]: correct = False if correct == True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."]) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True)pysiogame-1.30.811/game_boards/game055.py0000644000175000017500000001711612201770065016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import math import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,999,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color = ex.hsv_to_rgb(225,15,235) color2 = (255,255,255) self.col_c = (0,255,255) self.col_m = (255,0,255) self.col_y = (255,255,0) self.col_k = (0,0,0) self.col_e = (255,255,255) colorkey = (2,2,2) self.col_bg = self.col_e#(255,246,219) data = [32,23] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=True) if x_count > 32: data[0] = x_count self.data = data self.vis_buttons = [1,0,0,0,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.initcolor = self.col_bg self.board.board_bg.color = self.col_bg self.board.board_bg.update_me = True self.board.moved = self.moved step = 255 / 20.0 self.picked_steps = [] self.picked = [] for i in range(3): self.picked_steps.append(random.randrange(0,21)) self.cmy = [int(self.picked_steps[i]*step) for i in range(3)] self.picked_rgb = [255 - self.cmy[i] for i in range(3)] y = data[1]-3 self.rgb_g = [y,y,y] self.rgbx3 = [self.col_e,self.col_e,self.col_e] self.board.add_unit(1,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"brush_c.png") self.board.add_unit(4,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"brush_m.png") self.board.add_unit(7,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"brush_y.png") for each in self.board.ships: each.outline = False each.audible = False #add colour container self.board.add_unit(10,0,data[0]-10,data[1],classes.board.Label,"",self.col_e,"",0) self.canvas = self.board.units[0] self.canvas_center = [(self.canvas.grid_w*self.board.scale)//2,(self.canvas.grid_h*self.board.scale)//2] #adding borders between the colour tubes self.board.add_unit(0,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(3,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(6,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(9,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) #adding colour guides self.board.add_door(1,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_c, 1) self.board.add_door(4,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_m, 1) self.board.add_door(7,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_y, 1) #adding colour strips self.board.add_door(1,data[1]-1,2,1,classes.board.Door,"",self.col_c,"",0) self.board.add_door(4,data[1]-1,2,1,classes.board.Door,"",self.col_m,"",0) self.board.add_door(7,data[1]-1,2,1,classes.board.Door,"",self.col_y,"",0) #self.color_info = self.board.units[-1] for i in [5,6,7,8,9,10]: if i>7: self.board.units[i].image.set_colorkey(colorkey) self.board.all_sprites_list.move_to_back(self.board.units[i]) else: self.board.all_sprites_list.move_to_front(self.board.units[i]) self.board.all_sprites_list.move_to_back(self.board.board_bg) self.canvas.set_outline([255,229,127],1) self.canv = [] for i in range(4): self.canv.append(pygame.Surface([self.canvas.grid_w*self.board.scale, self.canvas.grid_h*self.board.scale-1])) self.board.all_sprites_list.move_to_back(self.board.board_bg) self.mix() def mix(self): for i in range(3): self.rgb_g[i] = self.board.ships[i].grid_y self.update_sliders() #for i in range(4): self.canv[3].fill(self.col_e) ct = self.canvas_center radius = 9*self.board.scale radius2 = 5*self.board.scale x = 1*self.board.scale rect = [[ct[0],ct[1]-x],[ct[0]-x,ct[1]+x],[ct[0]+x,ct[1]+x]] for i in range(3): pygame.draw.circle(self.canv[i], self.rgbx3[i], rect[i], radius, 0) self.canv[3].blit(self.canv[i],[0,0],special_flags = pygame.BLEND_SUB) pygame.draw.circle(self.canv[3], self.cmy, ct, radius2, 0) self.canvas.painting = self.canv[3].copy() self.canvas.update_me = True def update_sliders(self): for i in range(3): strip = self.board.units[i+8] strip.grid_y = self.rgb_g[i]+3 strip.grid_h = self.data[1]-strip.grid_y col = [] step = 255 / 20.0 for each in strip.initcolor: if each == 0: if strip.grid_y == 23: col.append(255) elif strip.grid_y == 3: col.append(0) else: col.append(int((strip.grid_y-3) * step)) else: col.append(255) col2 = [255-col[0],255-col[1],255-col[2]] self.rgbx3[i] = col2 strip.color = col strip.pos_update() strip.update_me = True def moved(self): self.mix() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.picked_steps != self.rgb_g: help = "" if self.picked_steps[0] < self.rgb_g[0]: help += " %s %s; " % (self.d['more color'], self.d['of cyan'][0]) elif self.picked_steps[0] > self.rgb_g[0]: help += " %s %s; " % (self.d['less color'], self.d['of cyan'][0]) else: help += " %s %s; " % (self.d['of cyan'][1],self.d['color is ok']) if self.picked_steps[1] < self.rgb_g[1]: help += " %s %s; " % (self.d['more color'], self.d['of magenta'][0]) elif self.picked_steps[1] > self.rgb_g[1]: help += " %s %s; " % (self.d['less color'], self.d['of magenta'][0]) else: help += " %s %s; " % (self.d['of magenta'][1],self.d['color is ok']) if self.picked_steps[2] < self.rgb_g[2]: help += " %s %s; " % (self.d['more color'], self.d['of yellow'][0]) elif self.picked_steps[2] > self.rgb_g[2]: help += " %s %s; " % (self.d['less color'], self.d['of yellow'][0]) else: help += " %s %s; " % (self.d['of yellow'][1],self.d['color is ok']) self.say(help) self.level.try_again() else: self.level.next_board() pysiogame-1.30.811/game_boards/game024.py0000644000175000017500000011564512201770065016740 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import classes.board import random import pygame import math import sys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,2) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) self.max_size = 99 def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False self.brush_size = 2 self.max_points = 4 self.prev_snap = None self.color_s = random.randrange(50, 90, 5) self.color_v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) self.bg_color = [255,255,255] color = [255,255,255] txt_color = ((0,25,160)) white = ((255,255,255)) self.guides_color = [200,200,200] #self.quadi_names = [self.lang.d["quadrilateral"],self.lang.d["trapezium"],self.lang.d["parallelogram"],self.lang.d["rhombus"],self.lang.d["square"],self.lang.d["rectangle"],self.lang.d["right_trapezium"],self.lang.d["iso_trapezium"],self.lang.d["u_trapezium"]] #self.tria_names = [self.lang.d["triangle"],self.lang.d["right_iso_tria"],self.lang.d["right_tria"],self.lang.d["equi_tria"],self.lang.d["acute_iso_tria"],self.lang.d["acute_tria"],self.lang.d["obtuse_iso_tria"],self.lang.d["obtuse_tria"]] self.shape_names = [self.lang.d["quadrilateral"],self.lang.d["trapezium"],self.lang.d["parallelogram"],self.lang.d["rhombus"],self.lang.d["square"],self.lang.d["rectangle"],self.lang.d["right_trapezium"],self.lang.d["iso_trapezium"],self.lang.d["u_trapezium"],"", self.lang.d["triangle"],self.lang.d["right_iso_tria"],self.lang.d["right_tria"],self.lang.d["equi_tria"],self.lang.d["acute_iso_tria"],self.lang.d["acute_tria"],self.lang.d["obtuse_iso_tria"],self.lang.d["obtuse_tria"],self.lang.d["circle"]] #self.shape_names =[0 lf.lang.d["quadrilateral"],1 lf.lang.d["trapezium"],2 lf.lang.d["parallelogram"],3 lf.lang.d["rhombus"],4 lf.lang.d["square"],5 lf.lang.d["rectangle"],6 lf.lang.d["right_trapezium"],7 lf.lang.d["iso_trapezium"],8 lf.lang.d["u_trapezium"],9, 10 f.lang.d["triangle"],11 f.lang.d["right_iso_tria"],12 f.lang.d["right_tria"],13 f.lang.d["equi_tria"],14 f.lang.d["acute_iso_tria"],15 f.lang.d["acute_tria"],16 f.lang.d["obtuse_iso_tria"],17 f.lang.d["obtuse_tria"],18 f.lang.d["circle"]] if self.level.lvl == 1: self.choice = [1,2,4,5,6,7,10,11,12,14,15,16,17,18] self.check_sizes = False if self.level.lvl == 2: self.choice = [1,2,4,5,6,7,10,11,12,14,15,17,18] self.check_sizes = True self.chosen_shape_name = "" self.chosen = 0 self.shape_id = -1 self.tria_variant = 0 data = [25,12] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > data[0]: data[0] = x_count else: y_count = self.get_y_count(data[0],even=None) if y_count > data[1]: data[1] = y_count-1 self.data = data self.mainloop.info.hide_buttons(0,1,1,1,1,1,1,0,0) self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) if self.mainloop.lang.lang == 'gr': size_instr_font_size = 2 else: size_instr_font_size = 2 self.guide_scale = self.board.scale//2 self.left_padding = 2 self.px_padding = self.left_padding * scale + self.layout.menu_w #canvas self.board.add_unit(self.left_padding,2,data[0]-self.left_padding,data[1]-2,classes.board.Letter,"",color,"",21) self.canvas_block = self.board.ships[-1] self.canvas_block.set_outline([0,54,229],1) self.canvas_block.font_color = txt_color self.canvas_block.font2 = self.board.font_sizes[2] self.canvas_block.align = 2 self.board.add_unit(0,0,data[0]-3,1,classes.board.Letter,"",color,"",2) self.name_label = self.board.ships[-1] self.name_label.align = 1 self.name_label.font_color = txt_color self.board.add_unit(0,1,data[0]-3,1,classes.board.Letter,"",color,"",size_instr_font_size) self.size_instr = self.board.ships[-1] self.size_instr.align = 1 self.size_instr.font_color = txt_color #Well done! #self.board.add_unit(data[0]-8,0,5,1,classes.board.Letter,"",color,"",2) #self.well_done = self.board.ships[-1] #self.well_done.align = 1 #self.well_done.font_color = txt_color #self.board.add_unit(data[0]-3,0,3,2,classes.board.Label,"Next >>",color,"",2) #self.board.add_unit(data[0]-3,0,3,2,classes.board.ImgShip,"next",white,"c_quati.png",0) self.board.add_unit(data[0]-3,0,3,2,classes.board.MultiImgSprite,"",white,"next.png",0,frame_flow = [0,1],frame_count=2,row_data=[2,1]) self.next_btn = self.board.ships[-1] #self.board.units[-1].set_outline((200,200,255),1) self.board.add_unit(0,2,2,2,classes.board.ImgShip,"",white,"c_quati.png",0) self.poli_btn = self.board.ships[-1] self.board.add_unit(0,4,2,2,classes.board.ImgShip,"",white,"c_tria.png",0) self.tria_btn = self.board.ships[-1] self.board.add_unit(0,6,2,2,classes.board.ImgShip,"",white,"c_circle.png",0) self.circle_btn = self.board.ships[-1] self.board.add_unit(0,8,2,4,classes.board.Label,"",color,"",4) self.lengths = self.board.units[-1] self.lengths.align = 1 self.btn_down = False for each in self.board.ships: each.outline = False each.immobilize() #each.readable = False self.canvas = pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.name = None self.new_screen() #self.vectors = [] self.board.add_door(0,2,2,2,classes.board.Door,"",color,"") self.tool_door = self.board.units[-1] self.tool_door.door_outline = True self.board.all_sprites_list.move_to_front(self.tool_door) #self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,"Play with shapes",color,"",3) #self.board.ships[1].immobilize() #self.outline_all(1,1) self.pick_shape() self.reset() def pick_shape(self): #self.chosen_group = random.randrange(0, 2) #self.choice = [1,2,4,5,6,7,10,11,12,14,15,17,18] prev_chosen = self.chosen while (self.chosen == prev_chosen): self.chosen = random.choice(self.choice) self.chosen_shape_name = self.shape_names[self.chosen] if self.level.lvl == 1: self.name_label.value = self.lang.d["draw_instr1"] % self.chosen_shape_name else: self.name_label.value = self.lang.d["draw_instr2"] % self.chosen_shape_name self.tria_variant = 0 if self.check_sizes: self.shape_sizes = [4,4,4,4] if self.chosen in [1,6]: #non special case trapeziums and right trapeziums b1 = random.randrange(4,11) b2 = random.randrange(2,b1) #make it shorter than b1 h = random.randrange(2,9) self.shape_sizes = [b1,b2,h] self.size_instr.value = self.lang.d["size_instr_0"] % (self.shape_sizes[0],self.shape_sizes[1],self.shape_sizes[2]) elif self.chosen == 7: #iso_trapezium b1 = random.randrange(4,11,2) b2 = random.randrange(2,b1,2) h = random.randrange(2,8) self.shape_sizes = [b1,b2,h] self.size_instr.value = self.lang.d["size_instr_0"] % (self.shape_sizes[0],self.shape_sizes[1],self.shape_sizes[2]) elif self.chosen == 2: #parallelogram b1 = random.randrange(4,11) h = random.randrange(2,7) self.shape_sizes = [b1,h] self.size_instr.value = self.lang.d["size_instr_3"] % (self.shape_sizes[0],self.shape_sizes[1]) elif self.chosen == 4: #square b1 = random.randrange(2,11) self.shape_sizes = [b1] self.size_instr.value = self.lang.d["size_instr_1"] % (self.shape_sizes[0]) elif self.chosen == 5: #rectangle - make sure it's not a square b1 = random.randrange(3,11) b2_choice = range(2,b1) b2_choice.extend(range(b1+1,11)) b2 = random.choice(b2_choice) self.shape_sizes = [b1,b2] self.size_instr.value = self.lang.d["size_instr_2"] % (self.shape_sizes[0],self.shape_sizes[1]) elif self.chosen == 11: #right iso tria b1 = random.randrange(2,11) self.shape_sizes = [b1,b1] self.size_instr.value = self.lang.d["size_instr_6"] % (self.shape_sizes[0]) elif self.chosen == 12: #right tria - force it to be non iso self.tria_variant = random.randrange(0,2) if self.tria_variant == 0: b1 = random.randrange(4,10) b2_choice = range(2,b1) b2_choice.extend(range(b1+1,11)) b2 = random.choice(b2_choice) self.shape_sizes = [b1,b2] self.size_instr.value = self.lang.d["size_instr_5"] % (self.shape_sizes[0],self.shape_sizes[1]) else: b1 = random.randrange(4,11,2) self.shape_sizes = [b1] self.size_instr.value = self.lang.d["size_instr_7"] % (self.shape_sizes[0]) elif self.chosen in [10,14,15,17]: if self.chosen == 14: #acute iso tria b1 = random.randrange(4,11,2) h = random.randrange(b1//2+1,11) elif self.chosen == 15: #acute tria b1 = random.randrange(4,11) h = random.randrange(b1//2+1,11) elif self.chosen in [10,17]: #other triangles + obtuse ones b1 = random.randrange(2,11) h = random.randrange(2,11) self.shape_sizes = [b1,h] """ if self.chosen == 17: self.size_instr.value = self.lang.d["size_instr_8"] % (self.shape_sizes[0],self.shape_sizes[1]) else: """ self.size_instr.value = self.lang.d["size_instr_4"] % (self.shape_sizes[0],self.shape_sizes[1]) """ elif self.chosen in [10,15,17]: b1 = random.randrange(2,12) h = random.randrange(2,10) self.shape_sizes = [b1,h] self.size_instr.value = self.lang.d["size_instr_4"] % (self.shape_sizes[0],self.shape_sizes[1]) """ elif self.chosen == 18: #circle r = random.randrange(2,10) self.shape_sizes = [r] self.size_instr.value = self.lang.d["size_instr_9"] % (self.shape_sizes[0]) else: self.size_instr.value = "" #"( "+str(self.shape_sizes[0])+", "+ str(self.shape_sizes[1])+", "+ str(self.shape_sizes[2])+", "+ str(self.shape_sizes[3]) + ")" self.name_label.update_me = True self.size_instr.update_me = True self.new_screen() def is_near(self, a, b): """ float comparison function returns True if the difference between numbers is no larger than the epsilon """ epsilon = 0.00001 if b - epsilon < a < b + epsilon: return True return False def validate_shape(self): #self.chosen_shape_name == self.name: #self.shape_names = [self.lang.d["quadrilateral"],self.lang.d["trapezium"],self.lang.d["parallelogram"],self.lang.d["rhombus"],self.lang.d["square"],self.lang.d["rectangle"],self.lang.d["right_trapezium"],self.lang.d["iso_trapezium"],self.lang.d["u_trapezium"],"", self.lang.d["triangle"],self.lang.d["right_iso_tria"],self.lang.d["right_tria"],self.lang.d["equi_tria"],self.lang.d["acute_iso_tria"],self.lang.d["acute_tria"],self.lang.d["obtuse_iso_tria"],self.lang.d["obtuse_tria"],self.lang.d["circle"]] #self.shape_names =[0 lf.lang.d["quadrilateral"],1 lf.lang.d["trapezium"],2 lf.lang.d["parallelogram"],3 lf.lang.d["rhombus"],4 lf.lang.d["square"],5 lf.lang.d["rectangle"],6 lf.lang.d["right_trapezium"],7 lf.lang.d["iso_trapezium"],8 lf.lang.d["u_trapezium"],9, 10 f.lang.d["triangle"],11 f.lang.d["right_iso_tria"],12 f.lang.d["right_tria"],13 f.lang.d["equi_tria"],14 f.lang.d["acute_iso_tria"],15 f.lang.d["acute_tria"],16 f.lang.d["obtuse_iso_tria"],17 f.lang.d["obtuse_tria"],18 f.lang.d["circle"]] ok = False if self.chosen == self.shape_id or self.chosen == 1 and self.shape_id in [1,6,7,8] or self.chosen == 10 and self.shape_id in [10,11,12,13,14,15,16,17] or self.chosen == 12 and self.shape_id in [11,12] or self.chosen == 15 and self.shape_id in [14,15] or self.chosen == 17 and self.shape_id in [16,17] or self.check_sizes and self.chosen == 2 and self.shape_id in [2,3]: if self.check_sizes: if self.shape_id in [10,11,12,13,14,15,16,17]: #any triangle if self.shape_id in [11, 12] and self.tria_variant == 1: if self.is_near(max(self.dst), self.shape_sizes[0]): ok = True else: if self.is_near(self.dst[0], self.shape_sizes[0]) and self.is_near(self.heights[0], self.shape_sizes[1]) or self.is_near(self.dst[1], self.shape_sizes[0]) and self.is_near(self.heights[1], self.shape_sizes[1]) or self.is_near(self.dst[2], self.shape_sizes[0]) and self.is_near(self.heights[2], self.shape_sizes[1]): ok = True elif self.shape_id in [1,6,7,8]: if self.trapezium_variant == 1: if ((self.is_near(self.dst[0], self.shape_sizes[0]) and self.is_near(self.dst[2],self.shape_sizes[1]) or self.is_near(self.dst[2], self.shape_sizes[0]) and self.is_near(self.dst[0], self.shape_sizes[1])) and self.is_near(self.heights[1],self.shape_sizes[2])): ok = True elif self.trapezium_variant == 0: if ((self.is_near(self.dst[1], self.shape_sizes[0]) and self.is_near(self.dst[3],self.shape_sizes[1]) or self.is_near(self.dst[3], self.shape_sizes[0]) and self.is_near(self.dst[1], self.shape_sizes[1])) and self.is_near(self.heights[0],self.shape_sizes[2])): #if ((self.dst[1] == self.shape_sizes[0] and self.dst[3] == self.shape_sizes[1] or self.dst[3] == self.shape_sizes[0] and self.dst[1] == self.shape_sizes[1]) and self.heights[0] == self.shape_sizes[2]): ok = True elif self.shape_id in [2,3]: if (self.is_near(self.dst[0], self.shape_sizes[0]) and self.is_near(self.heights[1], self.shape_sizes[1])) or (self.is_near(self.dst[1], self.shape_sizes[0]) and self.is_near(self.heights[0], self.shape_sizes[1])): ok = True elif self.shape_id == 4: if (self.is_near(self.dst[0], self.shape_sizes[0]) and self.is_near(self.dst[1], self.shape_sizes[0])): ok = True elif self.shape_id == 5: if (self.is_near(self.dst[0], self.shape_sizes[0]) and self.is_near(self.dst[1], self.shape_sizes[1])) or (self.is_near(self.dst[0], self.shape_sizes[1]) and self.is_near(self.dst[1], self.shape_sizes[0])): ok = True elif self.shape_id == 18: if self.is_near(self.circle_r / float(self.guide_scale), self.shape_sizes[0]): ok = True else: ok = True if ok: self.canvas_block.value = [random.choice(self.lang.d["Great job!"]),"","",""] self.canvas_block.update_me = True self.next_btn.keyable = True self.show_next() def show_next(self): self.next_btn.next_frame() self.next_btn.update_me = True self.mainloop.redraw_needed[1]=True def hide_next(self): self.next_btn.reset() self.next_btn.update_me = True self.mainloop.redraw_needed[1]=True def new_screen(self): self.update_lengths_disp([""]) self.canvas_block.value = "" self.lengths.update_me = True self.canvas_block.update_me = True self.next_btn.keyable = False self.hide_next() self.mainloop.redraw_needed[1]=True self.canvas.fill(self.canvas_block.initcolor) self.draw_guides(self.guide_scale) self.canvas_org = self.canvas.copy() self.copy_to_screen() def reset(self): self.points = [] self.points_count = 0 self.active_color = [255,0,0] self.p_current = [0,0] def fill_poli(self,point_count): self.points.append(self.points[0]) pygame.draw.polygon(self.canvas, self.active_color, self.points, 0) pygame.draw.polygon(self.canvas, self.canvas_block.font_color, self.points, 3) if self.name != "": h_min = min([self.points[i][0] for i in range(point_count)]) h_max = max([self.points[i][0] for i in range(point_count)]) v_max = max([self.points[i][1] for i in range(point_count)]) self.draw_name(self.name, h_min + (h_max - h_min) // 2, v_max) self.reset() self.copy_to_screen() self.backup_canvas() def get_set_r(self): v = sv.Vector2.from_points(self.points[0], self.points[1]) if v[0] != 0 or v[1] != 0: r = math.sqrt(v[0]*v[0] + v[1]*v[1]) else: r = 0 r = int(r) self.circle_r = r return r def fill_circle(self): self.get_set_r() r = self.circle_r pygame.draw.circle(self.canvas, self.active_color, self.points[0], r, 0) pygame.draw.circle(self.canvas, self.canvas_block.font_color, self.points[0], r, 3) pygame.draw.aaline(self.canvas, self.canvas_block.font_color, self.points[0],self.points[1] ,1) self.get_set_r() h_min = self.points[0][0]-self.circle_r h_max = self.points[0][0]+self.circle_r v_max = self.points[0][1]+self.circle_r self.draw_name(self.name, h_min + (h_max - h_min) // 2, v_max) l = ["r = %.2f" % (self.circle_r * 1.0/self.guide_scale),"","","","","",""] self.update_lengths_disp(l) self.reset() self.copy_to_screen() self.backup_canvas() def update_lengths_disp(self, l): self.lengths.font_color = self.canvas_block.font_color self.lengths.value = l self.lengths.update_me = True self.validate_shape() self.mainloop.redraw_needed[0] = True def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: pos = event.pos active = self.board.active_ship column=(pos[0]-self.px_padding) // (self.layout.width) row=pos[1] // (self.layout.height) if event.button == 1 and column >= 0 and 2 <= row < self.data[1]: if self.points_count == 0: self.new_screen() elif event.type == pygame.MOUSEBUTTONUP: pos = event.pos active = self.board.active_ship column=(pos[0]-self.px_padding) // (self.layout.width) row=pos[1] // (self.layout.height) if active != self.canvas_block.unit_id: if active == self.poli_btn.unit_id: self.change_tool(4) elif active == self.tria_btn.unit_id: self.change_tool(3) elif active == self.circle_btn.unit_id: self.change_tool(2) elif active == self.next_btn.unit_id and self.next_btn.keyable == True: self.next_shape() if event.button == 1 and column >= 0 and 2 <= row < self.data[1]: if self.points_count < self.max_points: canvas_pos = self.snap_to_guide([pos[0]-self.px_padding,pos[1]-self.board.scale*2]) if canvas_pos not in self.points: self.points.append(canvas_pos) self.p_current = canvas_pos self.paint_line(0) self.paint_line(2) self.points_count += 1 if self.points_count >= self.max_points: self.check_drawing() elif event.type == pygame.MOUSEMOTION and 0 < self.points_count < self.max_points: active = self.board.active_ship pos = event.pos column=(pos[0]-self.px_padding) // (self.layout.width) row=pos[1] // (self.layout.height) if column >= 0 and 2 <= row < self.data[1]: canvas_pos = self.snap_to_guide([pos[0]-self.px_padding,pos[1]-self.board.scale*2]) self.p_current = canvas_pos[:] if self.prev_snap == None: self.prev_snap = canvas_pos[:] if self.prev_snap != self.p_current: self.prev_snap = canvas_pos[:] self.paint_line(1) def next_shape(self): self.next_btn.keyable = False self.pick_shape() self.mainloop.redraw_needed[0] = True def change_tool(self, tool): self.max_points = tool self.reset() self.new_screen() self.tool_door.set_pos(self.board.active_ship_pos) def paint_line(self,state): if state == 0: self.copy_to_screen() self.backup_canvas() elif state == 1: self.screen_restore() pygame.draw.aaline(self.canvas, self.active_color, self.points[-1], self.p_current, 1) if self.points_count == self.max_points - 1: if self.max_points == 2: v = sv.Vector2.from_points(self.points[0], self.p_current) #print(v) if v[0] != 0 or v[1] != 0: r = math.sqrt(v[0]*v[0] + v[1]*v[1]) else: r = 0 r = int(r) if r > 2: pygame.draw.circle(self.canvas, self.active_color, self.points[0], r, 1) pygame.draw.aaline(self.canvas, self.active_color, self.points[0], self.p_current, 1) else: pygame.draw.aaline(self.canvas, self.active_color, self.points[0], self.p_current, 1) self.copy_to_screen() elif state == 2 and self.points_count > 0: #print('state 2 brush size %d' % self.brush_size) self.screen_restore() #if self.brush_size > 3: self.draw_line(self.p_current,self.points[-2],1,1) if self.points_count == self.max_points - 1: self.draw_line(self.p_current,self.points[0],1,1) pygame.draw.circle(self.canvas, self.active_color, self.points[-2], 1,0) self.copy_to_screen() self.backup_canvas() def draw_line(self,p1,p2,bs1,bs2): #find points for the corners of the polygon using Tales Theorem #and draw the polygon - rotated rectangle or trapezium and 2 circles at the ends of the 'line' v = sv.Vector2.from_points(p1, p2) #print(v) if v[0] != 0 or v[1] != 0: bs1 = bs1//2 bs2 = bs2//2 #vector length v_len = math.sqrt(v[0]*v[0] + v[1]*v[1]) x1 = v[1]*bs1/v_len y1 = v[0]*bs1/v_len if bs1 != bs2: x2 = v[1]*bs2/v_len y2 = v[0]*bs2/v_len else: x2 = x1 y2 = y1 points = [] points.append([int(p1[0]-x1),int(p1[1]+y1)]) points.append([int(p1[0]+x1),int(p1[1]-y1)]) points.append([int(p2[0]+x2),int(p2[1]-y2)]) points.append([int(p2[0]-x2),int(p2[1]+y2)]) pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) pygame.draw.circle(self.canvas, self.active_color, p1, bs1,0) pygame.draw.circle(self.canvas, self.active_color, p2, bs2,0) def draw_name(self, name, x, y): val = name if sys.version_info < (3, 0): try: val = unicode(name, "utf-8") except UnicodeDecodeError: val = name except TypeError: val = name text = self.canvas_block.font2.render("%s" % (val), 1, self.canvas_block.font_color) offset = self.canvas_block.font2.size(val)[0]//2 if x < offset + 5: pos_x = 5 elif x + offset > self.canvas_block.rect.width: pos_x = self.canvas_block.rect.width - offset*2 -5 else: pos_x = x-offset if y > self.canvas_block.rect.height - self.canvas_block.font2.size(val)[1]: y = self.canvas_block.rect.height - self.canvas_block.font2.size(val)[1] - 5 self.canvas.blit(text, (pos_x, y)) def backup_canvas(self): self.canvas_org = self.canvas_block.painting.copy() def copy_to_screen(self): self.canvas_block.painting = self.canvas.copy() self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True def screen_restore(self): self.canvas = self.canvas_org.copy() #self.var_brush = 1 def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def v2_to_int(self,vector): integers = [int(each) for each in vector] return integers def draw_guides(self,size): x = size y = size while x < self.layout.game_w: p1 = [x,0] p2 = [x,self.layout.game_h] pygame.draw.line(self.canvas, self.guides_color, p1, p2,1) x += size while y < self.layout.game_h: p1 = [0,y] p2 = [self.layout.game_w,y] pygame.draw.line(self.canvas, self.guides_color, p1, p2,1) y += size self.copy_to_screen() def snap_to_guide(self,point): x = point[0] y = point[1] dif = [x % self.guide_scale, y % self.guide_scale] if dif[0] < self.guide_scale // 2: x = x - dif[0] else: x = x + self.guide_scale - dif[0] if dif[1] < self.guide_scale // 2: y = y - dif[1] else: y = y + self.guide_scale - dif[1] return [x,y] def check_drawing(self): h = random.randrange(0, 255, 2) self.canvas_block.font_color = ex.hsv_to_rgb(h,self.color_s+100,self.color_v-100) self.active_color = ex.hsv_to_rgb(h,self.color_s,self.color_v) if self.max_points == 4: self.check_quadrilateral(self.points) self.fill_poli(4) elif self.max_points == 3: self.check_triangle(self.points) self.fill_poli(3) elif self.max_points == 2: self.check_circle(self.points) self.fill_circle() def scalar_product(self,v1,v2): return sum([v1[i]*v2[i] for i in range(len(v1))]) def side_len(self,v): x = max(v[0][0],v[1][0])-min(v[0][0],v[1][0]) y = max(v[0][1],v[1][1])-min(v[0][1],v[1][1]) return math.sqrt(x**2 + y**2) / float(self.guide_scale) def vector_len(self,v): return math.sqrt(v[0]**2 + v[1]**2) def is_orthogonal(self,v1,v2): epsilon = 0.00001 return abs(self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2))) < epsilon def angle(self,v1,v2): return self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2)) def is_parallel(self,v1,v2): epsilon = 0.00001 return abs(self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2))) > 1 - epsilon def not_intersecting(self,A,B,C,D): def ccw(A,B,C): return (C[1]-A[1]) * (B[0]-A[0]) > (B[1]-A[1]) * (C[0]-A[0]) return ccw(A,C,D) != ccw(B,C,D) and ccw(A,B,C) != ccw(A,B,D) def crossing(self,A,B,C,D): return self.not_intersecting(A,C,B,D) or self.not_intersecting(B,C,D,A) def collinear(self, p0, p1, p2): x1, y1 = p1[0] - p0[0], p1[1] - p0[1] x2, y2 = p2[0] - p0[0], p2[1] - p0[1] return x1 * y2 - x2 * y1 == 0 #1e-12 def collinear4(self, p): if self.collinear(p[0],p[1],p[2]) or self.collinear(p[1],p[2],p[3]) or self.collinear(p[2],p[3],p[0]) or self.collinear(p[3],p[0],p[1]): return True else: return False def collinear_all(self, p): if self.collinear(p[0],p[1],p[2]) and self.collinear(p[1],p[2],p[3]) and self.collinear(p[2],p[3],p[0]) and self.collinear(p[3],p[0],p[1]): return True else: return False def points_to_vectors(self,points): vectors = [] l = len(points) for i in range(l): p1 = points[i] if i < l-1: p2 = points[i+1] else: p2 = points[0] v = [p2[0] - p1[0], p2[1] - p1[1]] self.vectors.append([p1,p2]) vectors.append(v) return vectors def closest_point_dist(self,p1, p2, p3): vf = sv.Vector2.from_points(p2, p3) dist = vf.get_magnitude() line_v = sv.Vector2.from_points(p1, p2) line_v.normalize() #print(line_v) dp = sv.Vector2.dot_prod(vf, line_v) d = math.sqrt(abs(dist**2 - dp**2)) return d / float(self.guide_scale) def get_lengths(self,points): dst = [] #boki for i in range(self.max_points): dst.append(self.side_len([points[i-1],points[i]])) #przekatne if self.max_points == 4: dst.append(self.side_len([points[0],points[2]])) dst.append(self.side_len([points[1],points[3]])) return dst def get_heights_q(self,points): heights = [] #print(points) heights.append(self.closest_point_dist(points[0], points[1], points[2])) heights.append(self.closest_point_dist(points[1], points[2], points[3])) heights.append(self.closest_point_dist(points[2], points[3], points[0])) heights.append(self.closest_point_dist(points[3], points[0], points[1])) return heights def get_heights_t(self,points): heights = [] #print(points) heights.append(self.closest_point_dist(points[0], points[1], points[2])) heights.append(self.closest_point_dist(points[1], points[2], points[0])) heights.append(self.closest_point_dist(points[2], points[0], points[1])) return heights def check_quadrilateral(self,points): self.vectors = [] v = self.points_to_vectors(points) l = [] self.shape_id = 0 dst = self.get_lengths(points) self.dst = dst heights = self.get_heights_q(points) self.heights = heights #print(dst) #sl = self.side_len([points[0],points[2]]) #print(sl) if self.crossing(points[1],points[3],points[0],points[2]): self.name = "" else: self.name = self.lang.d["quadrilateral"] if (self.is_parallel(v[0],v[2]) and self.not_intersecting(points[1],points[3],points[0],points[2])) or (self.is_parallel(v[1],v[3]) and self.not_intersecting(points[0],points[2],points[1],points[3])): self.name = self.lang.d["trapezium"] self.shape_id = 1 if not self.q_acute(v): self.name = self.lang.d["u_trapezium"] self.shape_id = 8 if self.is_parallel(v[0],v[2]) and self.is_parallel(v[1],v[3]): self.name = self.lang.d["parallelogram"] self.shape_id = 2 if abs(self.side_len(self.vectors[0]) - self.side_len(self.vectors[1])) < 0.01: self.name = self.lang.d["rhombus"] self.shape_id = 3 if self.is_orthogonal(v[0],v[1]): self.name = self.lang.d["square"] self.shape_id = 4 elif self.is_orthogonal(v[0],v[1]): self.name = self.lang.d["rectangle"] self.shape_id = 5 elif self.is_orthogonal(v[0],v[1]) or self.is_orthogonal(v[1],v[2]) or self.is_orthogonal(v[2],v[3]) or self.is_orthogonal(v[3],v[0]): self.name = self.lang.d["right_trapezium"] self.shape_id = 6 elif abs(self.side_len(self.vectors[0]) - self.side_len(self.vectors[2])) < 0.01 or abs(self.side_len(self.vectors[1]) - self.side_len(self.vectors[3])) < 0.01: self.name = self.lang.d["iso_trapezium"] self.shape_id = 7 elif self.collinear4(points) and not self.collinear_all(points): self.name = self.lang.d["triangle_not_really"] elif self.collinear_all(points): self.name = self.lang.d["squished_quadi"] + " :)" #shorten and convert the distances to the guide scale dsts = ["%.2f" % each for each in dst] hs = ["%.2f" % each for each in heights] #print(dsts) #get the lengths ready to display #print(h) if self.shape_id == 0: l = ["a = "+dsts[0],"b = "+dsts[1],"c = "+dsts[2],"d = "+dsts[3],"","p = "+dsts[4],"q = "+dsts[5]] elif self.shape_id in [1,6,7,8]: if self.is_parallel(v[0],v[2]): self.trapezium_variant =0 l = ["a = " + dsts[1],"b = " + dsts[3],"c = " + dsts[0],"d = " + dsts[2],"h = "+str(hs[0]),"p = " + dsts[4],"q = " + dsts[5]] else: self.trapezium_variant =1 l = ["a = " + dsts[0],"b = " + dsts[2],"c = " + dsts[1],"d = " + dsts[3],"h = "+str(hs[1]),"p = " + dsts[4],"q = " + dsts[5]] elif self.shape_id == 2: l = ["a = "+dsts[0],"b = "+dsts[1],"","h1 = "+hs[0],"h2 = "+hs[1],"p = "+dsts[4],"q = "+dsts[5],""] elif self.shape_id == 3: l = ["a = "+dsts[0],"","h = "+min(hs),"","p = "+dsts[4],"q = "+dsts[5],"",""] elif self.shape_id == 4: l = ["a = "+dsts[0],"","p = "+dsts[4],"q = "+dsts[5],"","","",""] elif self.shape_id in [5]: l = ["a = " + dsts[0],"b = " + dsts[1],"","p = " + dsts[4],"q = " + dsts[5],"",""] self.update_lengths_disp(l) def check_triangle(self,points): self.vectors = [] v = self.points_to_vectors(points) l = [] dst = self.get_lengths([points[1],points[2],points[0]]) self.dst = dst #dst = sorted(dst) heights = self.get_heights_t(points) self.heights = heights #shorten and convert the distances to the guide scale dsts = ["%.2f" % each for each in dst] hs = ["%.2f" % each for each in heights] #print(dst) self.name = self.lang.d["triangle"] self.shape_id = 10 if self.collinear(v[0], v[1], v[2]): self.name = self.lang.d["squished_tria"] + " :)" else: self.name = self.lang.d["triangle"] if self.t_right(v): if self.t_iso(): self.name = self.lang.d["right_iso_tria"] self.shape_id = 11 else: self.name = self.lang.d["right_tria"] self.shape_id = 12 elif self.t_acute(v): if self.t_equi(v): self.name = self.lang.d["equi_tria"] self.shape_id = 13 elif self.t_iso(): self.name = self.lang.d["acute_iso_tria"] self.shape_id = 14 else: self.name = self.lang.d["acute_tria"] self.shape_id = 15 else: #if self.t_obtuse(v): if self.t_iso(): self.name = self.lang.d["obtuse_iso_tria"] self.shape_id = 16 else: self.name = self.lang.d["obtuse_tria"] self.shape_id = 17 l = ["a = "+dsts[0],"b = "+dsts[1],"c = "+dsts[2],"","h1 = "+hs[0],"h2 = "+hs[1],"h3 = "+hs[2]] self.update_lengths_disp(l) def t_right(self,v): return self.is_orthogonal(v[0],v[1]) or self.is_orthogonal(v[1],v[2]) or self.is_orthogonal(v[2],v[0]) def t_iso(self): return abs(self.side_len(self.vectors[0]) - self.side_len(self.vectors[1])) < 0.01 or abs(self.side_len(self.vectors[1]) - self.side_len(self.vectors[2])) < 0.01 or abs(self.side_len(self.vectors[2]) - self.side_len(self.vectors[0])) < 0.01 def t_acute(self,v): return self.angle(v[0],v[1]) < 0 and self.angle(v[1],v[2]) < 0 and self.angle(v[2],v[0]) < 0 def q_acute(self,v): return self.angle(v[0],v[1]) < 0 and self.angle(v[1],v[2]) < 0 and self.angle(v[2],v[3]) < 0 and self.angle(v[3],v[0]) < 0 def t_obtuse(self,v): return not self.t_acute*(v) def t_equi(self,v): return self.vector_len(v[0]) == self.vector_len(v[1]) == self.vector_len(v[2]) def check_circle(self,points): self.name = self.lang.d["circle"] self.shape_id = 18 pysiogame-1.30.811/game_boards/game030.py0000644000175000017500000001276012201770066016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import pygame import classes.board import random import colorsys import os.path import pygame.mixer sounds = pygame.mixer sounds.init() sound_12 = '188043__antumdeluge__mouse.ogg' s12 = sounds.Sound(os.path.join('sounds', sound_12)) class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,15,6) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,12,7) def create_game_objects(self, level = 1): #create non-movable objects self.change_count = 0 self.ai_enabled = True self.ai_speed = 3 self.frame_tick = 8 self.frame_flow = 0 self.points = 0 self.hit_ = 0 self.total_ = 0 self.active_mole = None self.grass_bg = [51,128,0] self.score_bg = [219,255,187] #data = [x_count, y_count, games per lvl, time on surface, 1/x minimum to pass] if self.level.lvl == 1: data = [6,3,15,4,12] elif self.level.lvl == 2: data = [6,3,25,3,22] elif self.level.lvl == 3: data = [6,3,30,2,25] elif self.level.lvl == 4: data = [6,3,40,1,33] elif self.level.lvl == 5: data = [6,3,50,0,42] elif self.level.lvl == 6: data = [6,3,50,-1,45] self.data = data self.level.games_per_lvl = data[2] self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.board.add_unit(0,0,2,2,classes.board.Label,"0",self.score_bg,"",3) self.board.add_unit(0,2,2,1,classes.board.Label,str(self.mainloop.score),self.score_bg,"",3) self.hit_miss = self.board.units[0] self.score = self.board.units[1] self.max_escape = self.data[2]-self.data[4]+1 x=2 y=0 for i in range(12):#222x222 self.board.add_unit(x,y,1,1,classes.board.MultiImgSprite,"",self.grass_bg,"mole_sprites.png",0,frame_flow = [0,1,2,3,2,1],frame_count=6,row_data=[4,1]) x = x+1 if x > data[0]-1: x=2 y+=1 def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.show_msg == False: self.hit() def update(self,game): game.fill(self.grass_bg) gd.BoardGame.update(self, game) #rest of painting done by parent def ai_walk(self): if self.frame_flow == 0: self.activate() self.frame_flow = [0,1,2,3,2,1] #self.board.ships[self.active_mole_id].frame_flow if self.frame_tick < 3: self.active_mole.next_frame() self.active_mole.update_me = True elif 4 + self.data[3] < self.frame_tick < 8 + self.data[3]:#4 -> 8 self.active_mole.next_frame() self.active_mole.update_me = True self.frame_tick += 1 if self.frame_tick > 14+self.data[3]: self.frame_tick = 0 self.active_mole.reset() self.activate() self.check_result() def activate(self): self.active_mole_id = random.randrange(0,12) self.active_mole = self.board.ships[self.active_mole_id] self.active_mole.reset() self.frame_tick = 0 y = self.active_mole_id // 4 x = self.active_mole_id - (y*4)+2 self.active_mole_pos = (x,y) self.total_ += 1 if self.total_ == self.data[2]+1: pass#self.check_result() else: self.level.game_step = self.total_ self.hit_miss.value = str(self.hit_) self.mainloop.redraw_needed[1]=True def reset(self): self.active_mole.reset() self.frame_tick = 8+self.data[3] def game_reset(self): self.reset() self.points = 0 self.hit_ = 0 self.total_ = 1 self.score.value = str(self.mainloop.score) self.hit_miss.value = str(self.hit_) def hit(self): if self.active_mole != None and self.frame_tick < 8+self.data[3] and self.board.active_ship_pos == self.active_mole_pos: self.points += self.active_mole.frame_flow[self.active_mole.frame]*10 self.score.value = str(self.mainloop.score+self.points) self.active_mole_pos = (-1,-1) self.hit_ += 1 self.reset() s12.play() self.hit_miss.value = str(self.hit_) self.hit_miss.update_me = True self.score.update_me = True def game_over(self): tts = self.d["work harder"] self.level.game_step = self.total_ # - 2 self.level.game_over(tts) def check_result(self): #print("Game completed") if self.total_ < self.data[2]: if self.total_ - self.hit_ > self.max_escape: self.game_over() elif self.total_ >= self.data[2]+1: tts = "" if self.hit_ < self.data[4]: #self.data[2]//self.data[4]: self.game_over() else: self.mainloop.score += self.points self.level.game_step = self.total_ - 1 self.level.next_board(tts) pysiogame-1.30.811/game_boards/game017.py0000644000175000017500000002613512201770066016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import math import pygame import random import sys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 225) self.letter_color = ex.hsv_to_rgb(h,s,v) font_color = ex.hsv_to_rgb(h,s,75) outline_color = ex.hsv_to_rgb(h,s+50,v-50) frame_color = [255,255,255] card_color = ex.hsv_to_rgb(h+10,s-25,v) if self.lang.lang == 'fr': lc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] uc = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] else: uc = self.lang.alphabet_uc lc = self.lang.alphabet_lc self.abc_len = len(lc) h = int(math.ceil(self.abc_len/3.0)) #data = [17,10] data = [16,h] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=True) if x_count < 16: data[0] = 16 else: data[0] = x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) #self.prev_item = None self.base26 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] self.font_size = 17 #if self.lang.lang in ['en_gb', 'en_us']: self.word_list = self.lang.d['abc_flashcards_word_sequence']# = ['Apple', 'Butterfly', 'Cat', 'Dolphin', 'Elephant', 'Fortepiano', 'Guitar', 'Hedgehog', 'Igloo', 'Jar', 'Koala', 'Lion', 'Monitor', 'Notebook', 'Ocean', 'Parrot', 'Queen', 'Rabbit', 'Street', 'Tomato', 'Umbrella', 'Violin', 'Watermelon', 'Xylophone', 'Yarn', 'Zebra'] frame_flow = self.lang.d['abc_flashcards_frame_sequence']# = [42, 27, 2, 59, 4, 34, 28, 29, 8, 9, 72, 11, 40, 13, 52, 15, 16, 17, 53, 33, 20, 21, 26, 23, 24, 25] """ elif self.lang.lang == 'pl': self.word_list = ['Arbuz', 'Pociąg','Buty', 'Cymbałki','Ćma', 'Dom', 'Ekran', 'Ciężarówka','Fortepian', 'Gitara', 'Hamak','Iglo', 'Jabłko', 'Kwiatki', 'Lew', 'Łódka', 'Mrówka', 'Noc','Koń', 'Okno','Królik', 'Pomidor', 'Ryba', 'Sowa', 'Ślimak','Tygrys','Ulica', 'Winogron','Mysz', 'Zebra', 'Źrebak','Żyrafa'] frame_flow = [26, 63, 60, 23, 44, 7, 40, 50, 34, 28, 56, 8, 42, 36, 11, 1, 0, 54, 45, 22, 17, 33, 5, 14, 61, 65,53, 6, 12, 25, 62,30] elif self.lang.lang == 'ru': self.word_list = ['Арбуз', 'Бабочка', 'Виноград', 'Гитара','Дом','Еж', 'Ёлка', 'Жираф', 'Зебра', 'Иглу', 'Йога', 'Кошка','Лодка', 'Муравей', 'Нить', 'Окно', 'Попугай', 'Рыба', 'Сова', 'Томат','Утка','Фортепиано', 'Хлеб', 'Цветы', 'Чайник', 'Шимпанзе', 'Щука', 'Съёмка', 'Мышь', 'Нить', 'Экран', 'Юбка', 'Яблоко'] frame_flow = [26, 27, 6, 28, 7, 29, 31, 30, 25, 8, 32, 43, 1, 0, 24, 22, 15, 5, 14, 33, 3, 34, 35, 36, 19, 37, 38, 39, 12, 24, 40, 41, 42] elif self.lang.lang == "es": self.word_list = ['Abeto', 'Búho', 'Casa', 'Dormir','Elefante', 'Fortepiano', 'Gato','Hormiga', 'Iglú', 'Jirafa', 'Koala', 'Loro', 'Manzana', 'Narciso','Ñu','Océano','Pescado', 'Queso','Ratón', 'Sol', 'Tomate', 'Uvas', 'Violín','Wagon', 'Xilófono', 'Yoga','Zapatos'] frame_flow = [31, 14, 7, 49,4,34, 2,0, 8, 30, 72,15, 42, 69, 70,52,5, 57,12,18, 33,6, 22, 58,23,32,60] elif self.lang.lang == "pt": self.word_list = ['Abeto', 'Barco', 'Casa', 'Dormir','Elefante', 'Formiga', 'Girafa', 'Hipopótamo','Iglu', 'Janela','Koala', 'Leão', 'Maçã', 'Narciso-amarelo', 'Ouriço', 'Peixe', 'Queijo', 'Rainha', 'Sol', 'Tomate', 'Uvas', 'Violino', 'Windsurf', 'Xilofone', 'Y', 'Zebra'] frame_flow = [31,1,7, 49,4,0,30, 47,8,22, 72,11,42, 69,29,5, 57,16,18,33,6,21, 66,23, 43,25] elif self.lang.lang == "fr": self.word_list = ['Arbre','Bateau', 'Canard','Dormir', 'Éléphant', 'Fleurs', 'Girafe', 'Hibou', 'Iglou', 'Jonquille','Koala','Lion', 'Maison', 'Nuitée','Océan','Pomme', 'Quille', 'Raisin', 'Soleil', 'Tomate', 'Univers', 'Violon', 'Wagon', 'Xylophone', 'Yoga', 'Zèbre'] frame_flow = [31,1,3, 49,4,36,30,14,8, 69,72,11,7, 54,52,42, 64,6,18,33, 55,21, 58,23,32,25] elif self.lang.lang == "it": self.word_list = ['Anguria', 'Barca', 'Casa', 'Dormire', 'Elefante', 'Fiori', 'Giraffa', 'Hockey','Iglù', 'Koala','Leone', 'Mela', 'Narciso','Ombrello', 'Pomodoro', 'Quaderno', 'Riccio','Sole', 'Teiera', 'Uva', 'Violino', 'Xilofono', 'Yoga', 'Zebra'] frame_flow = [26,1,7, 49,4,36,30, 68,8, 72,11,42, 69,20,33, 13,29,18,19,6,21,23,32,25] elif self.lang.lang == "de": self.word_list = ['Apfel', 'Hängematte', 'Blumen', 'C', 'Ducken', 'Eule', 'Fisch', 'Giraffe', 'Haus','Iglu', 'Joghurt', 'Kaninchen', 'Löwe', 'Maus', 'Notizbuch', 'Ozean', 'Königin', 'Papagei', 'Q', 'Regenschirm','Sonne', 'Straße', 'Tomate', 'Umgehen', 'Schlüssel','Violine', 'Wassermelone', 'Xylophon', 'Yoga', 'Zebra'] frame_flow = [42, 56,36, 43,3,14,5,30,7,8, 73,17,11,12,13, 52,16,15, 43,20,18, 53,33,41,10,21,26,23,32,25] elif self.lang.lang == "fi": self.word_list = [ 'Aurinko','Banaani', 'C', 'Delfiini', 'Elefantti', 'Fortepiano', 'Gnuu','Hiiri', 'Ikkuna', 'Jooga', 'Kirahvi','Leipä', 'Muurahainen', 'Näppäin', 'Omena', 'Papukaija', 'Q', 'Riippumatto', 'Seepra', 'Talo', 'Uuni', 'Vene','Xylofoni', 'Yö', 'Z', 'Å', 'Näyttö', 'Pöllö'] frame_flow = [18, 71,43, 59,4,34, 70,12,22,32,30,35,0,10,42,15, 43,56,25,7, 67,1, 23,54, 43,43,40,14] elif self.lang.lang == "gr": self.word_list = ['Άλογο', 'Βάρκα', 'Γάτα', 'Δέντρο', 'Ελέφαντας', 'Ζέβρα', 'Ήλιος', 'Θάμνος', 'Ιπποπόταμος', 'Καμηλοπάρδαλη', 'Λουλούδια', 'Μήλο', 'Ντομάτα', 'Ξυλόφωνο', 'Ομπρέλα', 'Πάπια', 'Ρούχα', 'Σπίτι', 'Τσαγιέρα', 'Ύπνος', 'Φορτηγό', 'Χιμπατζής', 'Ψάρι', 'Ώρα'] frame_flow = [45,1,2,31,4,25,18,46,47,30,36,42,33,23,20,3,48,7,19,49,50,37,5,51] self.font_size = 16 """ if self.lang.lang == "gr": self.font_size = 16 x = 0 x2 = 0 #(data[0] - (33 - data[0]-data[0]))//2 y = 0 for i in range(self.abc_len): self.board.add_unit(x,y,2,1,classes.board.Letter,uc[i]+lc[i],self.letter_color,"",3) self.board.ships[i].readable = False self.board.ships[i].set_outline(outline_color,1) y += 1 if y >= data[1]: if i > 2*data[1]-2: x = 4 y = 0 #data[1]-1 else: x = 2 y = 0 #data[1]-2 x=(data[0]-4+3+3)//2 y=1 #Card self.board.add_unit(x-2,y+1,2,1,classes.board.Label,uc[0],card_color,"",0) self.board.add_unit(x+4,y+1,2,1,classes.board.Label,lc[0],card_color,"",0) self.board.add_unit(x-2,y+2,2,2,classes.board.Label,uc[0],card_color,"",self.font_size) self.board.add_unit(x+4,y+2,2,2,classes.board.Label,lc[0],card_color,"",self.font_size) #frame size 288 x 216 self.board.add_unit(x,y+1,4,3,classes.board.MultiImgSprite,self.word_list[0],card_color,"flashcard_images.jpg",row_data=[10,8]) self.board.add_unit(x-2,y,8,1,classes.board.Letter,self.word_list[0],card_color,"",2) self.board.add_unit(x-2,y+4,8,2,classes.board.Letter,self.word_list[0],card_color,"",self.font_size) self.board.add_door(x-2,y,8,6,classes.board.Door,"",card_color,"") self.board.units[4].door_outline = True self.board.all_sprites_list.move_to_front(self.board.units[4]) self.slide = self.board.ships[self.abc_len] self.slide.build_frame_flow(self.abc_len,frame_flow) self.slide.correction = True self.slide.correction_factor = 2.5 self.slide.perm_outline = True self.slide.set_frame(0) for each in self.board.ships: each.immobilize() each.font_color = font_color for each in self.board.units: each.font_color = font_color self.active_item = self.board.ships[0] self.active_item.color = (255,255,255) self.prev_item = self.active_item def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: self.active_item = self.board.ships[self.board.active_ship] if self.active_item.unit_id < self.abc_len: if self.prev_item != None: self.prev_item.color = self.letter_color self.prev_item.update_me = True self.active_item.color = (255,255,255) self.create_card(self.active_item) self.prev_item = self.active_item self.mainloop.redraw_needed[0] = True def create_card(self, active): val = ex.unival(active.value) if sys.version_info < (3, 0): self.say(val[0].encode("utf-8")) else: self.say(val[0]) self.board.units[0].value = val[0] self.board.units[1].value = val[1] self.board.units[2].value = val[0] self.board.units[3].value = val[1] display_word = True self.board.ships[self.abc_len+2].value = self.word_list[active.unit_id] self.board.ships[self.abc_len].value = self.word_list[active.unit_id] self.board.ships[self.abc_len+1].value = self.word_list[active.unit_id] self.mainloop.redraw_needed[0] = True self.slide.set_frame(active.unit_id) self.board.active_ship = -1 self.slide.update_me = True for i in [0,1,2,3]: self.board.units[i].update_me = True for i in [self.abc_len, self.abc_len+1, self.abc_len+2]: self.board.ships[i].update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game012.py0000644000175000017500000002171412201770066016727 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.ai_enabled = True self.board.draw_grid = False s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 255) color = ex.hsv_to_rgb(h,s,v) white = [255,255,255] if self.level.lvl == 1: data = [7,5,17,-2] elif self.level.lvl == 2: data = [7,5,17,-1] elif self.level.lvl == 3: data = [7,5,14,-2] elif self.level.lvl == 4: data = [7,5,14,-1] elif self.level.lvl == 5: data = [7,5,12,-2] elif self.level.lvl == 6: data = [7,5,12,-1] elif self.level.lvl == 7: data = [7,5,10,-2] elif self.level.lvl == 8: data = [7,5,10,-1] elif self.level.lvl == 9: data = [7,5,8,-2] elif self.level.lvl == 10: data = [7,5,8,-1] self.ai_speed = data[2] #stretch width to fit the screen size max_x_count = self.get_x_count(data[1],even=False) if max_x_count > 7: data[0] = max_x_count self.data = data self.level.game_step = 0 self.level.games_per_lvl = 1 self.moveable = False self.moves = [] self.move_buttons = [] self.possible_move_buttons = [] self.sequence_counter = 0 self.current_step = 0 self.start_sequence = True self.completed_mode = False self.center = [data[0]//2,data[1]//2] self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) #self.board.add_unit(self.center[0],self.center[1],1,1,classes.board.ImgShip,"",white,"owl_150.png") self.board.add_unit(self.center[0],self.center[1],1,1,classes.board.MultiImgSprite,"",white,"owl_5.png",0,frame_flow = [0,1,2,3,4,3,2,1,0],frame_count=9,row_data=[5,1]) self.owl = self.board.ships[0] self.owl.outline = False self.owl.draggable = False self.owl.audible = True self.board.active_ship = 0 self.ship_id = 0 self.images = ["a_yellow_150.png","a_green_150.png","a_blue_150.png","a_red_150.png"] for i in range(4): self.board.add_door(self.center[0],self.center[1],1,1,classes.board.SlidingDoor,"",white,self.images[i],frame_flow=[0,1], frame_count=2,row_data=[2,1]) self.update_arrows() self.board.all_sprites_list.move_to_front(self.board.ships[0]) self.add_next_move() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.ship_id < 0 and event.type == pygame.MOUSEBUTTONDOWN: #make it impossible to deselect the main character self.board.active_ship = 0 self.ship_id = 0 if self.moveable == True: pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) self.direction = [0,0] arrow_clicked = False if column == self.owl_pos[0]-1 and row == self.owl_pos[1]: #print("left") self.direction[0] = -1 arrow_clicked = True elif column == self.owl_pos[0]+1 and row == self.owl_pos[1]: #print("right") self.direction[0] = 1 arrow_clicked = True elif column == self.owl_pos[0] and row == self.owl_pos[1]-1: #print("up") self.direction[1] = -1 arrow_clicked = True elif column == self.owl_pos[0] and row == self.owl_pos[1]+1: #print("down") self.direction[1] = 1 arrow_clicked = True if arrow_clicked: self.check_direction_kdown() if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and self.moveable == False: self.move = False elif event.type == pygame.KEYUP or event.type == pygame.MOUSEBUTTONUP: self.highlight_color(-1) self.mainloop.redraw_needed[0] = True self.move = False def update_arrows(self): directions = [[-1,0],[1,0],[0,-1],[0,1]] self.owl_pos = list(self.board.active_ship_pos) self.possible_moves = [] self.possible_move_buttons = [] for i in range(4): if 0 <= self.owl_pos[0]+directions[i][0] < self.data[0] and 0 <= self.owl_pos[1]+directions[i][1] < self.data[1]: pos = [self.owl_pos[0]+directions[i][0],self.owl_pos[1]+directions[i][1]] self.possible_moves.append(pos) self.possible_move_buttons.append(i) else: pos = self.owl_pos self.board.units[i].set_pos(pos) self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def after_keydown_move(self): self.update_arrows() if self.owl_pos == self.moves[self.current_step]: self.highlight_color(self.move_buttons[self.current_step]) if self.current_step < len(self.moves)-1: self.current_step += 1 self.level.game_step = self.current_step else: self.level.game_step = self.current_step + 1 self.ai_speed = 5 self.completed_mode = True self.ai_enabled = True self.mainloop.redraw_needed[1] = True self.mainloop.redraw_needed[0] = True else: self.game_over() self.move = False def next_level(self): self.current_step = 0 self.board._place_unit(0, self.center) self.update_arrows() def game_over(self): self.level.games_per_lvl = 1 self.level.game_step = 0 self.mainloop.redraw_needed[1] = True self.level.game_over() def highlight_color(self,btn_id): for i in range(4): if i == btn_id: self.board.units[i].set_frame(1) self.board.units[i].update_me = True else: self.board.units[i].set_frame(0) self.board.units[i].update_me = True def add_next_move(self): next, btn = self.pick_index() if len(self.moves) > -1 - self.data[3]: while btn == self.move_buttons[-1] and btn == self.move_buttons[self.data[3]]: next, btn = self.pick_index() self.moves.append(next) #possible_moves = self.possible_moves() self.move_buttons.append(btn) def pick_index(self): index = random.choice(range(len(self.possible_moves))) next = self.possible_moves[index] btn = self.possible_move_buttons[index] return [next, btn] def ai_walk(self): if self.start_sequence: if self.sequence_counter < len(self.moves)*2: if self.sequence_counter % 2 == 0: self.highlight_color(self.move_buttons[self.sequence_counter//2]) else: self.highlight_color(-1) self.sequence_counter += 1 else: self.start_sequence = False self.ai_enabled = False self.sequence_counter = 0 self.moveable = True elif self.completed_mode: if self.owl.frame < self.owl.frame_count - 1: self.owl.next_frame() self.owl.update_me = True else: self.check_result() def check_result(self): if self.current_step == len(self.moves)-1: self.add_next_move() self.next_level() self.level.games_per_lvl = len(self.moves) #gpl #number of games to play in order to level up self.level.game_step = 0 self.owl.set_frame(0) self.owl.update_me = True self.mainloop.redraw_needed[1] = True self.completed_mode = False self.start_sequence = True self.ai_enabled = True self.ai_speed = self.data[2] self.moveable = Falsepysiogame-1.30.811/game_boards/game062.py0000644000175000017500000003060212201770066016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,6,3) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): #create non-movable objects self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = False self.board.draw_grid = False s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color = ((255,255,255)) white = ((255,255,255)) color0 = ex.hsv_to_rgb(h,30,240) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders self.font_color = self.color2 choice = [x for x in range(0,21)] self.color_choice = [self.d["white"],self.d["black"],self.d["grey"],self.d["red"],self.d["orange"],self.d["yellow"],self.d["olive"],self.d["green"],self.d["sea green"],self.d["teal"],self.d["blue"],self.d["navy"],self.d["purple"],self.d["violet"],self.d["magenta"],self.d["indigo"],self.d["pink"],self.d["maroon"],self.d["brown"],self.d["aqua"],self.d["lime"]] #self.color_choice= ["white", "black", "grey", "red", "orange", "yellow", "olive", "green", "sea green","teal", "blue", "navy", "purple", "violet", "magenta", "indigo", "pink" "maroon", "brown", "aqua", "lime" ] self.hue_choice = [[255,255,255],[2,2,2], [140,140,140],[255,0,0],[255,138,0],[255,255,0],[181,219,3],[0,160,0],[41,131,82],[0,130,133],[0,0,255],[0,0,132],[132,0,132],[239,131,239],[255,0,255],[74,0,132],[255,20,138],[132,0,0], [140,69,16], [0,255,255], [0,255,0]] self.hue_choice2 =[[150,150,150],[100,100,100],[100,100,100],[200,0,0],[200,80,0], [200,200,0],[121,159,3],[0,100,0],[31,100,52],[0,90,90], [0,0,200],[0,0,82], [92,0,92], [189,81,189], [200,0,200],[44,0,82], [200,10,88], [100,0,0], [100,39,6], [0,200,200], [0,200,0]] self.font_colorx =[[0,0,0], [225,225,225],[0,0,0], [100,0,0],[100,40,0], [100,100,0],[60,80,3], [0,50,0],[11,50,22], [0,40,40], [0,0,100],[0,0,255],[255,0,255],[95,41,95], [100,0,100],[140,0,255],[100,5,48], [200,50,50], [200,100,26], [0,155,155], [0,155,0]] self.init_font_color = [[255,255,255],[2,2,2], [140,140,140],[255,0,0],[255,138,0],[255,255,0],[181,219,3],[0,160,0],[41,131,82],[0,130,133],[0,0,255],[0,0,132],[132,0,132],[239,131,239],[255,0,255],[74,0,132],[255,20,138],[132,0,0], [140,69,16], [0,255,255], [0,255,0]] font_size = 6 self.disp_counter = 0 self.disp_len = 1 lvl = 0 if self.level.lvl == 1: data = [10,5,3,2,3] elif self.level.lvl == 2: data = [10,6,3,2,4] elif self.level.lvl == 3: data = [10,7,3,2,5] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: x = self.get_x_count(data[1],even=True) else: x = self.get_x_count(data[1],even=False) if x > data[0]: data[0] = x self.data = data self.found = 0 self.clicks = 0 self.squares = self.data[3]*self.data[4] self.square_count = self.squares * 2 #self.data[3]*self.data[4] self.history = [None,None] self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.completed_mode = False #choice = [x for x in range(0,self.square_count//2)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:self.square_count//2] self.chosen = self.chosen * 2 h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]#-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3]*4)//2 #side margin width x = w2 y = h1 small_slots = [] for j in range(h1,data[1]-h2): for i in range(w2,w2+data[3]): small_slots.append([i,j]) random.shuffle(small_slots) wide_slots = [] for j in range(h1,data[1]-h2): for i in range(w2+data[3],data[0]-w2,3): wide_slots.append([i,j]) random.shuffle(wide_slots) switch = self.square_count // 2 for i in range(self.square_count): fc = self.font_color if i < switch: caption = "" position_list = small_slots show_value = False pos = i xw = 1 else: caption = self.color_choice[self.chosen[i-switch]] position_list = wide_slots pos = i-switch xw = 3 if self.level.lvl == 1: fc = self.init_font_color[self.chosen[i-switch]] self.board.add_unit(position_list[pos][0],position_list[pos][1],xw,1,classes.board.Letter,caption,color0,"",font_size) self.board.ships[-1].font_color=fc self.board.ships[i].immobilize() self.board.ships[i].readable = False self.board.ships[i].perm_outline = True self.board.ships[i].uncovered = False self.outline_all(self.color2,1) self.board.add_door(0,data[1]-1,data[0],1,classes.board.Door,"0/0",white,"",font_size=3) self.counter = self.board.units[-1] self.counter.font_color = (80,80,80) lines = [[135, 128],[133, 132],[135, 137],[157, 157],[158, 161],[155, 165],[150, 166],[146, 163],[133, 140],[129, 138],[125, 139], [122, 142],[122, 144],[128, 157],[128, 159],[126, 161],[123, 161],[121, 160],[114, 147],[112, 145],[107, 145],[104, 148], [104, 154],[110, 179],[111, 186],[110, 192],[105, 194],[100, 193],[98, 188],[98, 180],[101, 154],[100, 148],[96, 146], [93, 147],[92, 149],[88, 163],[86, 165],[83, 165],[80, 164],[80, 161],[80, 158],[83, 147],[82, 143],[73, 139], [65, 143],[55, 167],[52, 174],[48, 179],[42, 178],[37, 174],[38, 169],[43, 163],[57, 151],[63, 144],[67, 137], [66, 129],[60, 126],[51, 138],[47, 141],[44, 142],[40, 140],[38, 136],[40, 134],[44, 131],[57, 124],[56, 117], [51, 114],[43, 120],[40, 122],[38, 124],[36, 124],[34, 122],[34, 119],[36, 117],[50, 111],[52, 108],[53, 102], [51, 98],[46, 96],[38, 97],[11, 103],[5, 103],[3, 99],[4, 94],[10, 92],[36, 94],[44, 94],[50, 91], [53, 87],[52, 83],[46, 81],[21, 79],[14, 78],[9, 76],[8, 73],[10, 71],[15, 71],[22, 72],[45, 77], [51, 77],[53, 74],[52, 69],[40, 60],[39, 57],[39, 55],[41, 53],[44, 53],[47, 54],[55, 59],[58, 59], [61, 58],[62, 55],[61, 52],[54, 43],[54, 41],[55, 38],[58, 37],[61, 39],[71, 51],[74, 52],[80, 50], [81, 46],[80, 40],[77, 32],[66, 18],[62, 12],[61, 6],[65, 3],[70, 2],[74, 6],[76, 13],[79, 30], [81, 37],[86, 42],[91, 43],[95, 41],[95, 39],[93, 28],[93, 25],[93, 23],[96, 22],[99, 22],[100, 24], [100, 28],[99, 39],[101, 41],[103, 42],[106, 42],[108, 40],[111, 29],[112, 26],[114, 25],[117, 24],[119, 26], [120, 29],[119, 33],[116, 45],[117, 48],[119, 50],[122, 50],[135, 33],[137, 31],[140, 31],[142, 34],[142, 37], [133, 53],[133, 56],[134, 59],[137, 59],[141, 56],[155, 40],[160, 36],[164, 35],[169, 38],[170, 42],[168, 46], [163, 50],[146, 59],[144, 62],[145, 66],[149, 67],[160, 64],[162, 63],[164, 64],[165, 66],[165, 69],[164, 71], [150, 77],[148, 79],[148, 84],[150, 88],[155, 89],[173, 81],[179, 79],[183, 79],[185, 83],[186, 90],[184, 93], [180, 95],[175, 94],[158, 95],[154, 99],[153, 103],[156, 106],[163, 108],[185, 113],[190, 115],[191, 118],[189, 122], [184, 121],[163, 111],[156, 109],[151, 110],[147, 115],[145, 120],[146, 124],[151, 128],[163, 135],[168, 139],[171, 142], [171, 146],[167, 146],[162, 144],[158, 140],[149, 132],[144, 128],[140, 127]] size = self.board.ships[0].grid_w*self.board.scale margin = size//20 #new point = size * orig_point / 200 self.scaled_lines = [[int((size-2*margin) * each[0] / 200.0)+margin, int((size-2*margin) * each[1] / 200.0)+margin] for each in lines] for i in range(self.squares): color1 = self.hue_choice[self.chosen[i]] #ex.hsv_to_rgb(h,s,v) color2 = self.hue_choice2[self.chosen[i]] #ex.hsv_to_rgb(h,255,255) canvas = pygame.Surface([size, size-1]) canvas.fill(self.board.ships[i].initcolor) self.draw_splash(canvas,size,color1,color2)#data[7](data, canvas, i) self.board.ships[i].painting = canvas.copy() self.board.ships[i].image = canvas.copy() def draw_splash(self,canvas,size,color,outline_color): pygame.draw.polygon(canvas, color, self.scaled_lines,0) pygame.draw.aalines(canvas, outline_color, True, self.scaled_lines) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.history[1]==None and self.ai_enabled == False:# and self.start_sequence==False: if 0 <= self.board.active_ship < self.square_count: active = self.board.ships[self.board.active_ship] if active.uncovered == False: if self.history[0] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[0] = active self.clicks += 1 active.uncovered = True elif self.history[1] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[1] = active self.clicks += 1 if self.chosen[self.history[0].unit_id] != self.chosen[self.history[1].unit_id]: self.ai_enabled = True self.history[0].uncovered = False else: self.history[0].uncovered = True self.history[1].uncovered = True self.history[0].perm_outline_color = self.color2 #[50,255,50] self.history[1].perm_outline_color = self.color2 self.history[0].image.set_alpha(50) self.history[1].image.set_alpha(50) self.history[0].update_me = True self.history[1].update_me = True self.found += 2 if self.found == self.square_count: self.completed_mode = True self.ai_enabled = True self.history = [None, None] active.update_me = True self.counter.value = "%i/%i" % (self.found,self.clicks) self.counter.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def ai_walk(self): if self.disp_counter < self.disp_len: self.disp_counter += 1 else: if self.completed_mode: self.history = [None, None] self.level.next_board() else: self.history[0].perm_outline_width = 1 self.history[0].perm_outline_color = self.color2 self.history[1].perm_outline_width = 1 self.history[1].perm_outline_color = self.color2 self.history[0].update_me = True self.history[1].update_me = True self.history = [None, None] self.ai_enabled = False self.disp_counter = 0 def check_result(self): pass pysiogame-1.30.811/game_boards/game060.py0000644000175000017500000003153512201770066016734 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,3,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): #create non-movable objects self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = False self.board.draw_grid = False s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color = ((255,255,255)) white = ((255,255,255)) if self.mainloop.m.game_variant > 3: h = 116 color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders self.font_color = self.color2 white = ((255,255,255)) self.disp_counter = 0 self.disp_len = 1 lvl = 0 if self.mainloop.m.game_variant in [4,5]: lvl = -2 self.level.lvl_count = 8 elif self.mainloop.m.game_variant in [0,2]: self.level.lvl_count = 7 elif self.mainloop.m.game_variant in [1,3]: self.level.lvl_count = 6 if self.level.lvl > self.level.lvl_count: self.level.lvl = self.level.lvl_count if self.mainloop.m.game_variant < 4 : if self.level.lvl == lvl+1: data = [6,4,3,4,2] elif self.level.lvl == lvl+2: data = [7,4,3,5,2] if self.level.lvl == lvl+3: data = [6,5,3,4,3] elif self.level.lvl == lvl+4: data = [8,5,3,6,3] elif self.level.lvl == lvl+5: data = [7,6,3,5,4] elif self.level.lvl == lvl+6: data = [8,6,3,6,4] elif self.level.lvl == lvl+7: data = [9,6,3,7,4] elif self.level.lvl == lvl+8: data = [8,7,3,6,5] elif self.level.lvl == lvl+9: data = [8,8,3,6,6] elif self.level.lvl == lvl+10: data = [9,8,3,7,6] if self.mainloop.m.game_variant == 3: if self.level.lvl == 4: data = [6,5,3,4,3] elif self.level.lvl == 5: data = [7,5,3,5,3] elif self.level.lvl == 6: data = [7,5,3,5,3] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: x = self.get_x_count(data[1],even=True) else: x = self.get_x_count(data[1],even=False) if x > data[0]: data[0] = x self.data = data self.found = 0 self.clicks = 0 self.square_count = self.data[3]*self.data[4] self.history = [None,None] self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) texts1 = [] texts2 = [] if self.mainloop.m.game_variant == 4: image_src1 = [os.path.join('memory', "m_img%da.png" % (i)) for i in range(1,22)] image_src2 = image_src1 elif self.mainloop.m.game_variant == 5: image_src1 = [os.path.join('memory', "m_img%da.png" % (i)) for i in range(1,22)] image_src2 = [os.path.join('memory', "m_img%db.png" % (i)) for i in range(1,22)] elif self.mainloop.m.game_variant == 0: if self.level.lvl == 1:#addition draw_data = [1,5,1,5,6] elif self.level.lvl == 2: draw_data = [3,9,1,5,6] elif self.level.lvl == 3: draw_data = [5,15,3,9,7] elif self.level.lvl == 4: draw_data = [5,15,5,15,8] elif self.level.lvl == 5: draw_data = [15,55,5,35,9] elif self.level.lvl == 6: draw_data = [35,75,15,25,9] elif self.level.lvl == 7: draw_data = [55,99,55,99,9] while len(texts1) < self.square_count//2: first_num = random.randrange(draw_data[0],draw_data[1]+1) second_num = random.randrange(draw_data[2],draw_data[3]+1) my_sum = str(first_num + second_num) if my_sum not in texts1: texts1.append(str(my_sum)) texts2.append("%d + %d" % (first_num, second_num)) elif self.mainloop.m.game_variant == 1: if self.level.lvl == 1:#subtraction - ch1 draw_data = [3,10,1,0,6] elif self.level.lvl == 2: draw_data = [5,10,3,0,6] elif self.level.lvl == 3: draw_data = [10,15,3,0,7] elif self.level.lvl == 4: draw_data = [15,20,5,0,7] elif self.level.lvl == 5: draw_data = [20,49,9,0,8] elif self.level.lvl == 6: draw_data = [49,99,9,0,9] while len(texts1) < self.square_count//2: first_num = random.randrange(draw_data[0],draw_data[1]+1) second_num = random.randrange(draw_data[2],first_num-1) my_sum = str(first_num - second_num) if my_sum not in texts1: texts1.append(str(my_sum)) texts2.append("%d - %d" % (first_num, second_num)) elif self.mainloop.m.game_variant == 2: if self.level.lvl == 1:#multiplication - ch2 draw_data = [1,3,1,3,6] elif self.level.lvl == 2: draw_data = [1,9,1,2,6] elif self.level.lvl == 3: draw_data = [2,6,2,6,6] elif self.level.lvl == 4: draw_data = [2,7,3,7,6] elif self.level.lvl == 5: draw_data = [2,9,2,9,6] elif self.level.lvl == 6: draw_data = [2,15,2,15,8] elif self.level.lvl == 7: draw_data = [2,20,2,20,8] while len(texts1) < self.square_count//2: first_num = random.randrange(draw_data[0],draw_data[1]+1) second_num = random.randrange(draw_data[2],draw_data[3]+1) my_sum = str(first_num * second_num) if my_sum not in texts1: texts1.append(str(my_sum)) texts2.append("%d %s %d" % (first_num, chr(215), second_num)) elif self.mainloop.m.game_variant == 3: if self.level.lvl == 1:#division - ch3 draw_data = [1,4,1,4,6] elif self.level.lvl == 2: draw_data = [1,9,1,4,6] elif self.level.lvl == 3: draw_data = [1,6,1,6,6] elif self.level.lvl == 4: draw_data = [1,9,1,9,8] elif self.level.lvl == 5: draw_data = [1,15,1,15,9] elif self.level.lvl == 6: draw_data = [2,20,2,20,9] while len(texts1) < self.square_count//2: first = random.randrange(draw_data[0],draw_data[1]+1) second_num = random.randrange(draw_data[2],draw_data[3]+1) first_num = first * second_num my_sum = str(first) #str(first_num * second_num) if my_sum not in texts1: texts1.append(my_sum) texts2.append("%d %s %d" % (first_num, chr(247), second_num)) elif self.mainloop.m.game_variant == 6: pass self.completed_mode = False if self.mainloop.m.game_variant in [4,5]: choice = [x for x in range(0,21)] else: choice = [x for x in range(0,self.square_count//2)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:self.square_count//2] self.chosen = self.chosen * 2 h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]#-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3])//2 #side margin width x = w2 y = h1 slots = [] for j in range(h1,data[1]-h2): for i in range(w2,w2+data[3]): slots.append([i,j]) random.shuffle(slots) switch = self.square_count // 2 for i in range(self.square_count): if self.mainloop.m.game_variant in [4,5]: if i < switch: src = image_src1[self.chosen[i]] else: src = image_src2[self.chosen[i-switch]] self.board.add_unit(slots[i][0],slots[i][1],1,1,classes.board.ImgShip,"",white,src) else: if i < switch: caption = texts1[self.chosen[i]] else: caption = texts2[self.chosen[i-switch]] self.board.add_unit(slots[i][0],slots[i][1],1,1,classes.board.Letter,caption,color0,"",draw_data[4]) self.board.ships[-1].font_color=self.font_color self.board.ships[i].immobilize() self.board.ships[i].readable = False self.board.ships[i].perm_outline = True #self.board.ships[i].font_color = font_color self.board.ships[i].uncovered = False self.outline_all(self.color2,1) self.board.add_door(0,data[1]-1,data[0],1,classes.board.Door,"0/0",white,"",font_size=3) self.counter = self.board.units[-1] self.counter.font_color = (80,80,80) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.history[1]==None and self.ai_enabled == False:# and self.start_sequence==False: if 0 <= self.board.active_ship < self.square_count: active = self.board.ships[self.board.active_ship] if active.uncovered == False: if self.history[0] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[0] = active self.clicks += 1 active.uncovered = True elif self.history[1] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[1] = active self.clicks += 1 if self.chosen[self.history[0].unit_id] != self.chosen[self.history[1].unit_id]: self.ai_enabled = True self.history[0].uncovered = False else: self.history[0].uncovered = True self.history[1].uncovered = True self.history[0].perm_outline_color = self.color2 #[50,255,50] self.history[1].perm_outline_color = self.color2 self.history[0].image.set_alpha(50) self.history[1].image.set_alpha(50) self.history[0].update_me = True self.history[1].update_me = True self.found += 2 if self.found == self.square_count: self.completed_mode = True self.ai_enabled = True self.history = [None, None] active.update_me = True self.counter.value = "%i/%i" % (self.found,self.clicks) self.counter.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def ai_walk(self): if self.disp_counter < self.disp_len: self.disp_counter += 1 else: if self.completed_mode: self.history = [None, None] self.level.next_board() else: self.history[0].perm_outline_width = 1 self.history[0].perm_outline_color = self.color2 self.history[1].perm_outline_width = 1 self.history[1].perm_outline_color = self.color2 self.history[0].update_me = True self.history[1].update_me = True self.history = [None, None] self.ai_enabled = False self.disp_counter = 0 def check_result(self): pass pysiogame-1.30.811/game_boards/game045.py0000644000175000017500000001342212201770066016732 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): self.vis_buttons = [4,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects self.board.draw_grid = False s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 outline_color = ((150,150,150)) white = ((255,255,255)) #setting level variable #data = [x_count, y_count, number_count, top_limit, ordered] if self.level.lvl == 1: data = [13,7,5,3,2] elif self.level.lvl == 2: data = [13,7,8,3,3] elif self.level.lvl == 3: data = [12,7,7,4,2] elif self.level.lvl == 4: data = [12,7,11,4,3] elif self.level.lvl == 5: data = [12,7,15,4,4] elif self.level.lvl == 6: data = [13,7,9,5,2] elif self.level.lvl == 7: data = [13,7,14,5,3] elif self.level.lvl == 8: data = [13,7,19,5,4] elif self.level.lvl == 9: data = [12,7,11,6,2] elif self.level.lvl == 10: data = [12,7,17,6,3] self.chapters = [1,5,10] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: x_count = self.get_x_count(data[1],even=True) else: x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) image_src = [os.path.join('memory', "n_img%da.png" % (i)) for i in range(1,22)] self.choice_list = [x for x in range(1,data[2]+1)] self.shuffled = self.choice_list[:] random.shuffle(self.shuffled) inversions = ex.inversions(self.shuffled) if inversions % 2 != 0: #if number of inversions is odd it is unsolvable #in unsolvable combinations swapping 2 squares will make it solvable temp = self.shuffled[0] self.shuffled[0]=self.shuffled[1] self.shuffled[1]=temp color = ((255,255,255)) h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3])//2 #side margin width self.check = [h1,h2,w2] self.board.add_door(w2,h1,data[3],data[4],classes.board.Door,"",color,"") #create table to store 'binary' solution #find position of first door square x = w2 y = h1 self.mini_grid = [] #add objects to the board line = [] h_start = random.randrange(0, 155, 5) h_step = 100 // (data[2]) for i in range(data[2]): h = (h_start + (self.shuffled[i]-1)*h_step) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = str(self.shuffled[i]) #self.board.add_unit(x,y,1,1,classes.board.Letter,caption,number_color,"",2) self.board.add_unit(x,y,1,1,classes.board.ImgShip,caption,white,image_src[self.shuffled[i]]) self.board.ships[-1].readable = False line.append(i) x += 1 if x >= w2+data[3] or i == data[2]-1: x = w2 y += 1 self.mini_grid.append(line) line=[] instruction = self.d["Re-arrange right"] self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,color0,"",8)#bottom 2 self.board.ships[-1].immobilize() self.outline_all(outline_color,1) #horizontal self.board.add_unit(0,0,data[0],h1,classes.board.Obstacle,"",white,"",7)#top self.board.add_unit(0,h1+data[4],data[0],h2,classes.board.Obstacle,"",white,"",7)#bottom 1 #side obstacles self.board.add_unit(0,h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#left self.board.add_unit(w2+data[3],h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#right self.board.all_sprites_list.move_to_front(self.board.units[0]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: ships = [] current = [x for x in range(self.data[2]+1)]#self.choice_list[:] #collect value and x position on the grid from ships list for i in range(len(self.board.ships)-1): x = self.board.ships[i].grid_x-self.check[2] y = self.board.ships[i].grid_y-self.check[0] w = self.data[3] h = self.data[4] pos = x + (y*w) current[pos]=int(self.board.ships[i].value) del(current[-1]) if self.choice_list == current: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/game_boards/game022.py0000644000175000017500000003140712201770066016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import classes.board import random import pygame import sys from math import sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) self.max_size = 99 self.board.draw_grid = False def create_game_objects(self, level = 1): #create non-movable objects self.active_tool = 0 self.active_letter = "А" self.active_word = "" self.var_brush = 1 s = random.randrange(30, 80) v = random.randrange(200, 255) h = random.randrange(0, 255) letter_color = ex.hsv_to_rgb(h,s,v) self.bg_color = [255,255,255] color = [255,255,255] data = [35,22,0,8] font_size = 13 font_size2 = 14 self.brush_size = data[3] #stretch width to fit the screen size max_x_count = self.get_x_count(data[1],even=None) if max_x_count > 35: data[0] = max_x_count self.data = data #*************temp*************# #self.word_pos_y = self.data[0]*self.layout.scale #*****************************# self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) #canvas self.board.add_unit(12,0,data[0]-18,data[1],classes.board.Letter,"",color,"",font_size) self.canvas_block = self.board.ships[0] self.canvas_block.set_outline([0,54,229],1) #self.canvas_block.font2 = self.board.font_sizes[font_size+4] self.canvas_block.font3 = self.board.font_sizes[font_size2] images = ["paint_pencil.png","paint_brush.png","paint_wide_brush.png","paint_rect.png","paint_circle.png","paint_eraser.png","paint_bucket.png"] x=0 y=0 i_chr = 65 alphabet = self.lang.alphabet_uc[:] alphabet.extend(self.lang.alphabet_lc) for i in range(0,66): caption = alphabet[i] self.board.add_unit(x,y,2,2,classes.board.Letter,caption,letter_color,"",0) y += 2 i_chr += 1 if y > 20: y = 0 x += 2 self.board.add_door(0,0,2,2,classes.board.Door,"",color,"") self.board.add_door(data[0]-1,15,1,1,classes.board.Door,"",color,"") tool_len = len(self.board.ships) tool_max = tool_len - 3 self.word_list = ['Арбуз', 'Банки', 'Вода', 'Горы', 'Дом', 'Еда', 'Ёлка', 'Жук', 'Зебра', 'Игра', 'Йогурт', 'Коза', 'Лист', 'Муха', 'Нить', 'Орех', 'Палец', 'Рука', 'Собака', 'Танец', 'Утка', 'Флаг', 'Хлеб', 'Цветок', 'Чай', 'Шапка', 'Щека', '', '', '', 'Экран', 'Юбка', 'Яблоко','арбуз', 'банки', 'вода', 'горы', 'дом', 'еда', 'ёлка', 'жук', 'зебра', 'игра', 'йогурт', 'коза', 'лист', 'муха', 'нить', 'орех', 'палец', 'рука', 'собака', 'танец', 'утка', 'флаг', 'хлеб', 'цветок', 'чай', 'шапка', 'щека', 'съёмка', 'горы', 'соль', 'экран', 'юбка', 'яблоко'] self.active_word = self.word_list[0] h = 0 s = 250 v = 70 #number of available color spaces minus 2 for black and white number_of_colors = data[1]*6 - 2 number_of_hues = 20#13 number_of_col_per_hue = 6#number_of_colors // number_of_hues #if number_of_col_per_hue > 3: v_num = (255-v)//(number_of_col_per_hue) #greyscale grey_num = 6 #number_of_colors+2 - number_of_hues * number_of_col_per_hue if grey_num > 1: grey_v_num = (255 // (grey_num-1)) else: grey_v_num = 0 grey_count = 0 for j in range(0,data[1]): for i in range(data[0]-6, data[0]): color2 = ex.hsv_to_rgb(h,s,v) self.board.add_unit(i,j,1,1,classes.board.Letter,"",color2,"",2) if h < 249: if i < data[0]-1: v += v_num else: v = 70 s = 250 h += 12 if h > 248: if grey_count == 0: s = 0 v = 0 grey_count += 1 else: v += grey_v_num self.active_color = self.board.ships[161].initcolor self.size_display = self.board.units[0] self.tool_door = self.board.units[-2] self.color_door = self.board.units[-1] self.btn_down = False #points self.p_first = [0,0] self.p_last = [0,0] self.p_prev = [0,0] self.p_current = [0,0] self.outline_all(1,1) doors = [self.tool_door,self.color_door] for each in doors: each.door_outline = True each.perm_outline_color = [255,0,0] self.board.all_sprites_list.move_to_front(each) for each in self.board.ships: each.outline = False each.immobilize() self.canvas = pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.canvas.fill(self.canvas_block.initcolor) self.paint_bg_letter() self.canvas_org = self.canvas.copy() #pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: # Change the x/y screen coordinates to grid coordinates pos = event.pos active = self.board.active_ship if event.button == 1: if active == 0: self.btn_down = True canvas_pos = [pos[0]-self.layout.menu_w-12*self.layout.scale,pos[1]] self.p_first = canvas_pos self.p_prev = canvas_pos self.p_current = canvas_pos #depending on starting position - increase or decrease the line width if canvas_pos[1] > self.word_pos_y: self.brush_size = self.data[3]//2 else: self.brush_size = self.data[3] self.paint_pencil(0) pygame.mouse.set_cursor(*pygame.cursors.broken_x) elif 0 < active < 67: self.active_letter = self.board.ships[self.board.active_ship].value self.active_word = self.word_list[self.board.active_ship-1] self.tool_door.set_pos(self.board.active_ship_pos) self.paint_bg_letter() elif active > 66: self.active_color = self.board.ships[active].initcolor self.color_door.set_pos(self.board.active_ship_pos) elif event.type == pygame.MOUSEMOTION and self.btn_down == True: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: canvas_pos = [pos[0]-self.layout.menu_w-12*self.layout.scale,pos[1]] self.p_prev = self.p_current self.p_current = canvas_pos self.paint_pencil(1) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: active = self.board.active_ship pos = event.pos column=(pos[0]-self.layout.menu_w) // (self.layout.width) row=pos[1] // (self.layout.height) if active == 0 and self.data[0]-6 > column > 9 and row < self.data[1]: #drop the new object onto the painting canvas_pos = [pos[0]-self.layout.menu_w-12*self.layout.scale,pos[1]] self.p_last = canvas_pos self.paint_pencil(2) else: if self.btn_down: self.screen_restore() self.copy_to_screen() self.btn_down = False def paint_bg_letter(self): txt = self.active_letter val = ex.unival(txt) text = self.canvas_block.font.render("%s" % (val), 1, (220, 220, 220, 0)) font_x = ((self.board.scale*self.canvas_block.grid_w-self.canvas_block.font.size(val)[0])//2) font_y = ((self.board.scale*self.canvas_block.grid_h-self.canvas_block.font.size(val)[1])//2) - 3*self.board.scale txt2 = ex.unival(self.active_word) #self.active_word text2 = self.canvas_block.font3.render("%s" % (txt2), 1, (220, 220, 220, 0)) font_x2 = ((self.board.scale*self.canvas_block.grid_w-self.canvas_block.font3.size(txt2)[0])//2) font_y2 = ((self.board.scale*self.canvas_block.grid_h-self.canvas_block.font3.size(txt2)[1])//2) + 7*self.board.scale self.word_pos_y = font_y2 self.canvas.fill([255,255,255]) self.canvas.blit(text, (font_x,font_y)) self.canvas.blit(text2, (font_x2,font_y2)) self.copy_to_screen() #states => mouse states => 0 - mouse_btn_down, 1 - mouse_move, 2 - mouse_btn_up def paint_pencil(self,state): if self.brush_size > 0: if state == 0: self.backup_canvas() pygame.draw.circle(self.canvas, self.active_color, self.p_current, self.brush_size//2,0) self.copy_to_screen() elif state == 1: width = self.brush_size if self.brush_size > 2: if self.brush_size % 2 == 0: r = self.brush_size // 2 width = self.brush_size +3 else: r = self.brush_size // 2# - 1 width = self.brush_size+2 pygame.draw.circle(self.canvas, self.active_color, self.p_current, r,0) if self.brush_size > 3: self.draw_line(self.p_prev,self.p_current,self.brush_size,self.brush_size) else: pygame.draw.line(self.canvas, self.active_color, self.p_prev, self.p_current,width) self.copy_to_screen() def draw_line(self,p1,p2,bs1,bs2): #find points for the corners of the polygon using Tales Theorem #and draw the polygon - rotated rectangle or trapezium and 2 circles at the ends of the 'line' v = sv.Vector2.from_points(p1, p2) if v[0] != 0 or v[1] != 0: bs1 = bs1//2 bs2 = bs2//2 #vector length v_len = sqrt(v[0]*v[0] + v[1]*v[1]) x1 = v[1]*bs1/v_len y1 = v[0]*bs1/v_len if bs1 != bs2: x2 = v[1]*bs2/v_len y2 = v[0]*bs2/v_len else: x2 = x1 y2 = y1 points = [] points.append([int(p1[0]-x1),int(p1[1]+y1)]) points.append([int(p1[0]+x1),int(p1[1]-y1)]) points.append([int(p2[0]+x2),int(p2[1]-y2)]) points.append([int(p2[0]-x2),int(p2[1]+y2)]) pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) pygame.draw.circle(self.canvas, self.active_color, p1, bs1,0) pygame.draw.circle(self.canvas, self.active_color, p2, bs2,0) def backup_canvas(self): self.canvas_org = self.canvas_block.painting.copy() def copy_to_screen(self): self.canvas_block.painting = self.canvas.copy() self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True def screen_restore(self): self.canvas = self.canvas_org.copy() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game049.py0000644000175000017500000002004212201770066016732 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,2,16) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,26,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(190, 225) v = random.randrange(230, 255) h = random.randrange(0, 255) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) red = ex.hsv_to_rgb(255,s,v) font_color = ex.hsv_to_rgb(h,255,140) self.alphabet_lc = self.lang.alphabet_lc self.alphabet_uc = self.lang.alphabet_uc self.alphabet_len = len(self.alphabet_lc) if self.alphabet_len % 2 == 0: self.alphabet_width = self.alphabet_len // 2 last_block = False else: self.alphabet_width = self.alphabet_len // 2 + 1 last_block = True #number of letters to find nlf = [0,0,0,0] al = self.alphabet_len aw = self.alphabet_width nlf[1] = aw if aw % 2 == 0: if (aw//2)%2 == 0: nlf[0] = aw // 2 else: nlf[0] = aw // 2 + 1 else: if (aw//2)%2 == 0: nlf[0] = aw // 2 + 1 else: nlf[0] = aw // 2 #nlf[0] = aw // 2 nlf[2] = nlf[0] + nlf[1] nlf[3] = aw * 2 - 4 if self.level.lvl == 1: data = [self.alphabet_width,6,self.alphabet_lc,0,nlf[0]] elif self.level.lvl == 2: data = [self.alphabet_width,6,self.alphabet_lc,0,nlf[1]] elif self.level.lvl == 3: data = [self.alphabet_width,6,self.alphabet_lc,0,nlf[2]] elif self.level.lvl == 4: data = [self.alphabet_width,6,self.alphabet_lc,0,nlf[3]] elif self.level.lvl == 5: data = [self.alphabet_width,6,self.alphabet_lc,1,nlf[0]] elif self.level.lvl == 6: data = [self.alphabet_width,6,self.alphabet_lc,1,nlf[1]] elif self.level.lvl == 7: data = [self.alphabet_width,6,self.alphabet_lc,1,nlf[2]] elif self.level.lvl == 8: data = [self.alphabet_width,6,self.alphabet_lc,1,nlf[3]] elif self.level.lvl == 9: data = [self.alphabet_width,6,self.alphabet_uc,0,nlf[0]] elif self.level.lvl == 10: data = [self.alphabet_width,6,self.alphabet_uc,0,nlf[1]] elif self.level.lvl == 11: data = [self.alphabet_width,6,self.alphabet_uc,0,nlf[2]] elif self.level.lvl == 12: data = [self.alphabet_width,6,self.alphabet_uc,0,nlf[3]] elif self.level.lvl == 13: data = [self.alphabet_width,6,self.alphabet_uc,1,nlf[0]] elif self.level.lvl == 14: data = [self.alphabet_width,6,self.alphabet_uc,1,nlf[1]] elif self.level.lvl == 15: data = [self.alphabet_width,6,self.alphabet_uc,1,nlf[2]] elif self.level.lvl == 16: data = [self.alphabet_width,6,self.alphabet_uc,1,nlf[3]] self.chapters = [1,5,9,13,16] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.word = self.data[2] #[chr(x) for x in range(data[2],data[3])]#self.words[random.randrange(0,len(self.words))] word_len = self.alphabet_len #26#len(self.word) chosen_indexes = [] shuffled = [] choice_list = self.word[:] index_list_org = [x for x in range(self.alphabet_len)] index_list = [x for x in range(self.alphabet_len)] lowered = [] for i in range(data[4]):#picking letters to lower index = random.randrange(0,len(index_list)) chosen_indexes.append(index_list[index]) lowered.append(index_list[index]) del(index_list[index]) random.shuffle(lowered) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [1 for x in range(data[0])] x = 0 y = 0 if data[4] < data[0]: x2 = (data[0]-len(lowered))//2 x3 = 0 else: x2 = 0 x3 = (data[0]-(len(lowered)-data[0]))//2#(word_len-(data[0]-len(lowered)))//2 y2 = 2 j = 0 h_step = 255 // self.alphabet_len for i in range(self.alphabet_len): picked = False if i in lowered: picked = True if data[3] == 1: h = random.randrange(0, 255, 5) else: if picked: letter = lowered[j] h = round(h_step*lowered[j]) else: letter = self.word[i] h = round(h_step*index_list_org[i]) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 #change y if picked: if j < data[0]: xj = x2 + j else: xj = x3 + j-data[0] y2 = 3 caption = self.word[lowered[j]] self.board.add_unit(xj,y2,1,1,classes.board.Letter,caption,number_color,"",0) self.board.add_door(x,y,1,1,classes.board.Door,"",color,"") self.board.units[j].door_outline = True self.board.ships[i].highlight = False self.board.ships[i].outline_highlight = True j += 1 else: caption = self.word[i] self.board.add_unit(x,y,1,1,classes.board.Letter,caption,number_color,"",0) #self.board.ships[i].draggable = False self.board.ships[i].immobilize() x += 1 if x >= data[0]: x = 0 y = data[1]-2 for each in self.board.units: self.board.all_sprites_list.move_to_front(each) if last_block: #if odd number of letters - add an empty square at the end self.board.add_unit(data[0]-1,data[1]-2,1,1,classes.board.Label,"",red,"",0) instruction = self.d["Complete abc"] self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,color0,"",5) self.board.ships[-1].font_color = font_color self.board.ships[-1].immobilize() self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): result = [" " for i in range(self.alphabet_len)] if self.changed_since_check: if self.board.grid[0] == self.board.grid[self.data[1]-2] == self.solution_grid: for i in range(len(self.board.ships)): if self.board.ships[i].grid_y == 0: result[self.board.ships[i].grid_x] = self.board.ships[i].value elif self.board.ships[i].grid_y == self.data[1]-2: result[self.data[0] + self.board.ships[i].grid_x] = self.board.ships[i].value if self.word == result: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True) pysiogame-1.30.811/game_boards/game075.py0000644000175000017500000004532012201770066016737 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,7) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color font_color = (50,0,150) self.grey = (200,200,200) self.greyoutline = (190,190,190) self.grey2 = (150,150,150) self.font_hl = (100,0,250) self.font_hl2 = (250,0,200) self.hint1_fcol = (100,0,250) self.hint2_fcol = (200,0,0) self.hint3_fcol = (250,0,200) self.task_str_color = ex.hsv_to_rgb(200,200,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) self.white = white self.level.games_per_lvl = 5 if self.level.lvl == 1: rngs = [11,50,11,20] self.level.games_per_lvl = 2 elif self.level.lvl == 2: rngs = [20,50,20,30] self.level.games_per_lvl = 2 elif self.level.lvl == 3: rngs = [50,150,30,75] self.level.games_per_lvl = 2 elif self.level.lvl == 4: rngs = [150,500,50,75] elif self.level.lvl == 5: rngs = [500,1000,75,100] elif self.level.lvl == 6: rngs = [1000,2500,100,299] elif self.level.lvl == 7: rngs = [2500,9999,250,999] data = [39,24] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [0,1,1,1,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.n1 = random.randrange(rngs[0],rngs[1]) self.n2 = random.randrange(rngs[2],rngs[3]) self.sumn1n2 = self.n1*self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 0 self.correct = False self.carryl = [] self.carrylall = [] self.carrysuml = [] self.semiresultl = [] self.semiresultlall = [] self.semiresultlengths = [] self.resultl = [] self.all_count = 0 for i in range(self.n2sl): self.carryl.append([]) self.semiresultl.append([]) if int(self.n2s[self.n2sl-1-i]) == 0: self.semiresultlengths.append(self.n1sl) else: self.semiresultlengths.append(len(str(int(self.n2s[self.n2sl-1-i])*self.n1))) self.semi_count = sum(self.semiresultlengths) self.nums1l = [] self.nums2l = [] self.ship_id = 0 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " × " + self.n2s + " = " + qm #question self.board.add_unit(1,0,data[0]-1-self.sumn1n2sl*3 ,3,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 #carry 1 for i in range(self.n2sl): for j in range(self.n1sl): self.board.add_unit(data[0]-5-j*3,2-i,1,1,classes.board.Letter,"",white,"",0) self.carryl[i].append(self.board.ships[-1]) self.carryl[i][-1].set_outline(self.grey, 1) self.carryl[i][-1].pos_id = j self.carryl[i][-1].posy_id = i self.carrylall.append(self.carryl[i][-1]) #self.carryl[0].set_outline(font_result, 1) #first number for i in range(self.n1sl): self.board.add_unit(data[0]-3-i*3,3,3,3,classes.board.Label,self.n1s[-(i+1)],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i #second number i = 0 for i in range(self.n2sl): self.board.add_unit(data[0]-3-i*3,6,3,3,classes.board.Label,self.n2s[-(i+1)],white,"",21) self.nums2l.append(self.board.units[-1]) self.nums2l[-1].pos_id = i i += 1 self.board.add_unit(data[0]-3-i*3,6,3,3,classes.board.Label,"×",white,"",21) self.plus_label = self.board.units[-1] #line line = "―" * (self.sumn1n2sl*2) self.board.add_unit(data[0]-self.sumn1n2sl*3,9,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) for i in range(self.sumn1n2sl - 2): self.board.add_unit(data[0]-8-i*3,10,1,1,classes.board.Letter,"",white,"",0) self.carrysuml.append(self.board.ships[-1]) self.carrysuml[-1].set_outline(self.grey, 1) self.carrysuml[-1].pos_id = i for j in range(self.n2sl): for i in range(self.semiresultlengths[j]): self.board.add_unit(data[0]-3-i*3-j*3,11+j*3,3,3,classes.board.Letter,"",white,"",21) self.semiresultl[j].append(self.board.ships[-1]) self.semiresultl[j][-1].set_outline(self.grey, 1) self.semiresultl[j][-1].pos_id = i self.semiresultl[j][-1].posy_id = j self.semiresultlall.append(self.semiresultl[j][-1]) self.board.add_unit(data[0]-self.sumn1n2sl*3,10+self.n2sl*3+1,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) self.board.add_unit(data[0]-(self.sumn1n2sl+1)*3,7+self.n2sl*3+1,3,3,classes.board.Label," + ",white,"",21) self.plus2_label = self.board.units[-1] for i in range(self.sumn1n2sl): self.board.add_unit(data[0]-3-i*3,10+self.n2sl*3+2,3,3,classes.board.Letter,"",white,"",21) self.resultl.append(self.board.ships[-1]) self.resultl[-1].set_outline(self.grey, 1) self.resultl[-1].pos_id = i self.resultl[0].set_outline(self.activated_col, 1) self.home_square = self.semiresultl[0][0] self.board.active_ship = self.home_square.unit_id self.current_pos = self.home_square.unit_id self.first_step_taken = False self.all_count = sum(self.semiresultlengths) + self.n1sl + self.n2sl + self.sumn1n2sl * 2 - 2 + (self.sumn1n2sl - 1) * self.n2sl self.all_a_count = len(self.board.ships) #self.all_count - self.n1sl - self.n2sl self.board.add_unit(0,5,data[0]-self.sumn1n2sl*3-3,2,classes.board.Label,"",white,"",22) self.hint1 = self.board.units[-1] self.hint1.align = 1 self.board.add_unit(0,9,data[0]-self.sumn1n2sl*3-3,2,classes.board.Label,"",white,"",22) self.hint2 = self.board.units[-1] self.hint2.align = 1 self.board.add_unit(0,7,data[0]-self.sumn1n2sl*3-6,2,classes.board.Label,"",white,"",22) self.hint3 = self.board.units[-1] self.hint3.align = 1 self.board.add_unit(0,15,data[0]-self.sumn1n2sl*3-6,2,classes.board.Letter,self.lang.d["demo start"] ,white,"",22) self.next_step_btn = self.board.ships[-1] self.next_step_btn.readable = False for each in self.board.ships: each.immobilize() self.deactivate_colors() #self.reactivate_colors() self.board.units[0].font_color = self.task_str_color self.next_step_btn.font_color = (0,200,0) self.next_step_btn.set_outline(self.white, 1) def next_step(self): self.next_step_btn.value = self.lang.d["demo next step"] self.home_sqare_switch(self.current_pos) self.current_pos += 1 if self.current_pos+1 > self.all_a_count: self.next_step_btn.value = self.lang.d["demo next eg"] self.next_step_btn.update_me == True def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and (event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT): #self.home_sqare_switch(self.board.active_ship+1) self.next_step() elif event.type == pygame.MOUSEBUTTONUP: #self.home_sqare_switch(self.board.active_ship) if self.board.active_ship == self.next_step_btn.unit_id: if self.current_pos + 1 > self.all_a_count:#if self.cursor_pos == self.sumn1n2sl+1: self.level.next_board_load() else: self.next_step() def home_sqare_switch(self, activate): if activate < 0 or activate > self.all_a_count: #self.sumn1n2sl * 2 - 1: activate = self.all_a_count if activate >= 0 and activate < self.all_a_count: #self.sumn1n2sl * 2 - 1: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 1) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 2) #if self.home_square in self.resultl: self.reactivate_colors() self.home_square.font_color = self.font_hl #self.home_square = self.ans_h #self.board.active_ship == self.ans_h.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey each.set_outline(self.greyoutline, 1) each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True self.next_step_btn.perm_outline_color = (255,255,255) def reactivate_colors(self): self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square in self.carrylall: #self.home_square.font_color = self.font_hl self.nums1l[self.home_square.pos_id].font_color = self.font_hl self.nums2l[self.home_square.posy_id].font_color = self.font_hl self.semiresultl[self.home_square.posy_id][self.home_square.pos_id].font_color = self.font_hl self.semiresultl[self.home_square.posy_id][self.home_square.pos_id].set_outline(self.font_hl2, 2) if self.home_square.pos_id+1 < self.semiresultlengths[self.home_square.posy_id]: self.semiresultl[self.home_square.posy_id][self.home_square.pos_id+1].font_color = self.grey2 self.semiresultl[self.home_square.posy_id][self.home_square.pos_id+1].set_outline(self.grey2, 2) elif self.home_square in self.semiresultlall: if self.home_square.pos_id < self.n1sl: self.nums1l[self.home_square.pos_id].font_color = self.font_hl self.nums2l[self.home_square.posy_id].font_color = self.font_hl if self.home_square.pos_id > 0:# self.n1sl: self.carryl[self.home_square.posy_id][self.home_square.pos_id-1].font_color = self.font_hl self.carryl[self.home_square.posy_id][self.home_square.pos_id-1].set_outline(self.grey2, 2) if self.home_square.pos_id < self.n1sl: self.semiresultl[self.home_square.posy_id][self.home_square.pos_id].font_color = self.grey2 self.carryl[self.home_square.posy_id][self.home_square.pos_id].set_outline(self.font_hl2, 2) elif self.home_square in self.resultl: for i in range(self.n2sl): if self.semiresultlengths[i] > self.home_square.pos_id - i >= 0: self.semiresultl[i][self.home_square.pos_id-i].font_color = self.font_hl self.semiresultl[i][self.home_square.pos_id-i].set_outline(self.grey2, 2) if self.home_square.pos_id > 1: self.carrysuml[self.home_square.pos_id-2].font_color = self.font_hl self.carrysuml[self.home_square.pos_id-2].set_outline(self.grey2, 2) if self.home_square.pos_id > 0 and self.home_square.pos_id < self.sumn1n2sl-1: self.carrysuml[self.home_square.pos_id-1].font_color = self.grey2 self.carrysuml[self.home_square.pos_id-1].set_outline(self.font_hl2, 2) self.plus_label.font_color = self.grey self.plus2_label.font_color = self.font_hl elif self.home_square in self.carrysuml: for i in range(self.n2sl): if self.semiresultlengths[i] > self.home_square.pos_id - i + 1 >= 0: self.semiresultl[i][self.home_square.pos_id-i+1].font_color = self.font_hl self.semiresultl[i][self.home_square.pos_id-i+1].set_outline(self.grey2, 2) self.resultl[self.home_square.pos_id+1].font_color = self.font_hl self.resultl[self.home_square.pos_id+1].set_outline(self.grey2, 2) self.plus_label.font_color = self.grey self.plus2_label.font_color = self.font_hl self.hint1.font_color = self.hint1_fcol self.hint2.font_color = self.hint2_fcol self.hint3.font_color = self.hint3_fcol self.next_step_btn.font_color = self.font_hl self.next_step_btn.set_outline(self.white, 1) self.auto_fill() def auto_fill(self): self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color s = "0" self.hint1.value = "" self.hint2.value = "" self.hint3.value = "" multiplication_string = "" val = 0 if self.home_square in self.semiresultlall: if self.home_square.pos_id < self.n1sl: self.nums1l[self.home_square.pos_id].font_color = self.font_hl self.nums2l[self.home_square.posy_id].font_color = self.font_hl val = (int(self.nums1l[self.home_square.pos_id].value) * int(self.nums2l[self.home_square.posy_id].value)) self.hint1.value = self.nums2l[self.home_square.posy_id].value + " × " + self.nums1l[self.home_square.pos_id].value if self.home_square.pos_id > 0:# self.n1sl: self.carryl[self.home_square.posy_id][self.home_square.pos_id-1].font_color = self.font_hl self.carryl[self.home_square.posy_id][self.home_square.pos_id-1].set_outline(self.grey2, 2) s = self.carryl[self.home_square.posy_id][self.home_square.pos_id-1].value if s == "": s = "0" else: if self.hint1.value != "": self.hint1.value += " + %s" % s val += int(s) if self.home_square.pos_id < self.n1sl: self.semiresultl[self.home_square.posy_id][self.home_square.pos_id].font_color = self.grey2 self.carryl[self.home_square.posy_id][self.home_square.pos_id].set_outline(self.font_hl2, 2) if val / 10 > 0: self.carryl[self.home_square.posy_id][self.home_square.pos_id].value = str(val / 10) self.hint3.value = "%s %s" % (self.lang.d["carry"], str(val / 10)) if self.hint1.value != "": self.hint1.value += " = %d" % val self.home_square.value = str(val%10) if self.hint1.value == "": self.hint2.value = "%s %s" % (self.lang.d["demo rewrite"], str(val % 10)) else: self.hint2.value = "%s %s" % (self.lang.d["demo write"], str(val % 10)) elif self.home_square in self.resultl: if self.home_square.pos_id > 1: self.carrysuml[self.home_square.pos_id-2].font_color = self.font_hl self.carrysuml[self.home_square.pos_id-2].set_outline(self.grey2, 2) if self.carrysuml[self.home_square.pos_id-2].value != "": if self.hint1.value != "": self.hint1.value += " + " self.hint1.value += self.carrysuml[self.home_square.pos_id-2].value val += int(self.carrysuml[self.home_square.pos_id-2].value) for i in range(self.n2sl): if self.semiresultlengths[i] > self.home_square.pos_id - i >= 0: self.semiresultl[i][self.home_square.pos_id-i].font_color = self.font_hl self.semiresultl[i][self.home_square.pos_id-i].set_outline(self.grey2, 2) if self.semiresultl[i][self.home_square.pos_id-i].value != "": if self.hint1.value != "": self.hint1.value += " + " self.hint1.value += self.semiresultl[i][self.home_square.pos_id-i].value val += int(self.semiresultl[i][self.home_square.pos_id-i].value) if self.hint1.value != "": self.hint1.value += " = %s" % val self.home_square.value = str(val%10) if self.home_square.pos_id > 0 and self.home_square.pos_id < self.sumn1n2sl-1: self.carrysuml[self.home_square.pos_id-1].font_color = self.grey2 self.carrysuml[self.home_square.pos_id-1].set_outline(self.font_hl2, 2) if val / 10 > 0: self.carrysuml[self.home_square.pos_id-1].value = str(val / 10) self.hint3.value = "%s %s" % (self.lang.d["carry"], str(val / 10)) #if hint1 is something like 1 = 1, don't show it if len(self.hint1.value) < 6: self.hint1.value = "" if self.hint1.value == "": self.hint2.value = "%s %s" % (self.lang.d["demo rewrite"], str(val % 10)) else: self.hint2.value = "%s %s" % (self.lang.d["demo write"], str(val % 10)) self.plus_label.font_color = self.grey self.plus2_label.font_color = self.font_hl def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game059.py0000644000175000017500000005122712201770066016744 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import classes.board import random import pygame import math import sys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) self.max_size = 99 def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False self.brush_size = 2 self.max_points = 4 self.prev_snap = None self.color_s = random.randrange(50, 90, 5) self.color_v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 1) self.bg_color = [255,255,255] color = [255,255,255] white = ((255,255,255)) self.guides_color = [200,200,200] data = [15,12] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > data[0]: data[0] = x_count else: y_count = self.get_y_count(data[0],even=None) data[1] = y_count-1 self.data = data self.mainloop.info.hide_buttons(0,0,0,0,1,1,1,0,0) self.vis_buttons = [0,0,0,0,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.reset() self.guide_scale = self.board.scale//2 self.left_padding = 2 self.px_padding = self.left_padding * scale + self.layout.menu_w #canvas self.board.add_unit(self.left_padding,0,data[0]-self.left_padding,data[1],classes.board.Letter,"",color,"",2) self.canvas_block = self.board.ships[-1] self.canvas_block.set_outline([0,54,229],1) """ self.board.add_unit(0,0,data[0]-8,1,classes.board.Label,"Figure to draw:",color,"",2) self.board.units[-1].align = 1 self.board.add_unit(0,1,data[0]-8,1,classes.board.Label,"Trapezoid (a = 5, b = 4, h = 3)",color,"",2) self.board.units[-1].align = 1 self.board.add_unit(data[0]-8,0,5,2,classes.board.Label,"Well done!",color,"",2) self.board.units[-1].align = 1 self.board.add_unit(data[0]-3,0,3,2,classes.board.Label,"Next >>",color,"",2) self.board.units[-1].set_outline(self.active_color,1) """ self.board.add_unit(0,0,2,2,classes.board.ImgShip,"",white,"c_quati.png",0) self.poli_btn = self.board.ships[-1] self.board.add_unit(0,2,2,2,classes.board.ImgShip,"",white,"c_tria.png",0) self.tria_btn = self.board.ships[-1] self.board.add_unit(0,4,2,2,classes.board.ImgShip,"",white,"c_circle.png",0) self.circle_btn = self.board.ships[-1] self.btn_down = False for each in self.board.ships: each.outline = False each.immobilize() each.readable = False self.figures = [0,1,2,3,4,5,6] self.names = [self.lang.d["trapezium"],self.lang.d["square"],self.lang.d["parallelogram"],self.lang.d["rectangle"],self.lang.d["right_trapezium"],self.lang.d["iso_trapezium"],self.lang.d["rhombus"]] self.sides = [[True,True,True],[True,False,False],[True,True,True],[True,True,False],[True,True,True],[True,True,True],[True,False,False]] self.canvas = pygame.Surface([self.canvas_block.grid_w*self.board.scale, self.canvas_block.grid_h*self.board.scale-1]) self.new_screen() #self.vectors = [] self.board.add_door(0,0,2,2,classes.board.Door,"",color,"") self.tool_door = self.board.units[-1] self.tool_door.door_outline = True self.board.all_sprites_list.move_to_front(self.tool_door) #self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,"Play with shapes",color,"",3) #self.board.ships[1].immobilize() #self.outline_all(1,1) def new_screen(self): self.canvas.fill(self.canvas_block.initcolor) self.draw_guides(self.guide_scale) self.canvas_org = self.canvas.copy() self.copy_to_screen() def reset(self): self.points = [] self.points_count = 0 self.active_color = [255,0,0] self.p_current = [0,0] def fill_poli(self,point_count): self.points.append(self.points[0]) pygame.draw.polygon(self.canvas, self.active_color, self.points, 0) pygame.draw.polygon(self.canvas, self.canvas_block.font_color, self.points, 3) if self.name != "": h_min = min([self.points[i][0] for i in range(point_count)]) h_max = max([self.points[i][0] for i in range(point_count)]) v_max = max([self.points[i][1] for i in range(point_count)]) self.draw_name(self.name, h_min + (h_max - h_min) // 2, v_max) self.reset() self.copy_to_screen() self.backup_canvas() def get_set_r(self): v = sv.Vector2.from_points(self.points[0], self.points[1]) if v[0] != 0 or v[1] != 0: r = math.sqrt(v[0]*v[0] + v[1]*v[1]) else: r = 0 r = int(r) self.circle_r = r return r def fill_circle(self): self.get_set_r() r = self.circle_r pygame.draw.circle(self.canvas, self.active_color, self.points[0], r, 0) pygame.draw.circle(self.canvas, self.canvas_block.font_color, self.points[0], r, 3) pygame.draw.aaline(self.canvas, self.canvas_block.font_color, self.points[0],self.points[1] ,1) self.get_set_r() h_min = self.points[0][0]-self.circle_r h_max = self.points[0][0]+self.circle_r v_max = self.points[0][1]+self.circle_r self.draw_name(self.name, h_min + (h_max - h_min) // 2, v_max) self.reset() self.copy_to_screen() self.backup_canvas() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN: pos = event.pos active = self.board.active_ship column=(pos[0]-self.px_padding) // (self.layout.width) row=pos[1] // (self.layout.height) if event.button == 1 and column >= 0 and 0 <= row < self.data[1]: if self.points_count == 0: pass#self.new_screen() elif event.type == pygame.MOUSEBUTTONUP: pos = event.pos active = self.board.active_ship column=(pos[0]-self.px_padding) // (self.layout.width) row=pos[1] // (self.layout.height) if active != self.canvas_block.unit_id: if active == self.poli_btn.unit_id: self.change_tool(4) elif active == self.tria_btn.unit_id: self.change_tool(3) elif active == self.circle_btn.unit_id: self.change_tool(2) if event.button == 1 and column >= 0 and 0 <= row < self.data[1]: if self.points_count < self.max_points: canvas_pos = self.snap_to_guide([pos[0]-self.px_padding,pos[1]]) if canvas_pos not in self.points: self.points.append(canvas_pos) self.p_current = canvas_pos self.paint_line(0) self.paint_line(2) self.points_count += 1 if self.points_count >= self.max_points: self.check_drawing() elif event.type == pygame.MOUSEMOTION and 0 < self.points_count < self.max_points: active = self.board.active_ship pos = event.pos column=(pos[0]-self.px_padding) // (self.layout.width) row=pos[1] // (self.layout.height) if column >= 0 and 0 <= row < self.data[1]: canvas_pos = self.snap_to_guide([pos[0]-self.px_padding,pos[1]]) self.p_current = canvas_pos[:] if self.prev_snap == None: self.prev_snap = canvas_pos[:] if self.prev_snap != self.p_current: self.prev_snap = canvas_pos[:] self.paint_line(1) def change_tool(self, tool): self.max_points = tool self.reset() #self.new_screen() #self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True self.tool_door.set_pos(self.board.active_ship_pos) #self.tool_door.update_me = True def paint_line(self,state): if state == 0: self.copy_to_screen() self.backup_canvas() elif state == 1: self.screen_restore() pygame.draw.aaline(self.canvas, self.active_color, self.points[-1], self.p_current, 1) if self.points_count == self.max_points - 1: if self.max_points == 2: v = sv.Vector2.from_points(self.points[0], self.p_current) #print(v) if v[0] != 0 or v[1] != 0: r = math.sqrt(v[0]*v[0] + v[1]*v[1]) else: r = 0 r = int(r) if r > 2: pygame.draw.circle(self.canvas, self.active_color, self.points[0], r, 1) pygame.draw.aaline(self.canvas, self.active_color, self.points[0], self.p_current, 1) else: pygame.draw.aaline(self.canvas, self.active_color, self.points[0], self.p_current, 1) self.copy_to_screen() elif state == 2 and self.points_count > 0: #print('state 2 brush size %d' % self.brush_size) self.screen_restore() #if self.brush_size > 3: self.draw_line(self.p_current,self.points[-2],1,1) if self.points_count == self.max_points - 1: self.draw_line(self.p_current,self.points[0],1,1) pygame.draw.circle(self.canvas, self.active_color, self.points[-2], 1,0) self.copy_to_screen() self.backup_canvas() def draw_line(self,p1,p2,bs1,bs2): #find points for the corners of the polygon using Tales Theorem #and draw the polygon - rotated rectangle or trapezium and 2 circles at the ends of the 'line' v = sv.Vector2.from_points(p1, p2) #print(v) if v[0] != 0 or v[1] != 0: bs1 = bs1//2 bs2 = bs2//2 #vector length v_len = math.sqrt(v[0]*v[0] + v[1]*v[1]) x1 = v[1]*bs1/v_len y1 = v[0]*bs1/v_len if bs1 != bs2: x2 = v[1]*bs2/v_len y2 = v[0]*bs2/v_len else: x2 = x1 y2 = y1 points = [] points.append([int(p1[0]-x1),int(p1[1]+y1)]) points.append([int(p1[0]+x1),int(p1[1]-y1)]) points.append([int(p2[0]+x2),int(p2[1]-y2)]) points.append([int(p2[0]-x2),int(p2[1]+y2)]) pygame.draw.polygon(self.canvas, self.active_color, points) pygame.draw.aalines(self.canvas, self.active_color, True, points,1) pygame.draw.circle(self.canvas, self.active_color, p1, bs1,0) pygame.draw.circle(self.canvas, self.active_color, p2, bs2,0) def draw_name(self, name, x, y): val = name if sys.version_info < (3, 0): try: val = unicode(name, "utf-8") except UnicodeDecodeError: val = name except TypeError: val = name text = self.canvas_block.font.render("%s" % (val), 1, self.canvas_block.font_color) offset = self.canvas_block.font.size(val)[0]//2 if x < offset + 5: pos_x = 5 elif x + offset > self.canvas_block.rect.width: pos_x = self.canvas_block.rect.width - offset*2 -5 else: pos_x = x-offset if y > self.canvas_block.rect.height - self.canvas_block.font.size(val)[1]: y = self.canvas_block.rect.height - self.canvas_block.font.size(val)[1] - 5 self.canvas.blit(text, (pos_x, y)) def backup_canvas(self): self.canvas_org = self.canvas_block.painting.copy() def copy_to_screen(self): self.canvas_block.painting = self.canvas.copy() self.canvas_block.update_me = True self.mainloop.redraw_needed[0] = True def screen_restore(self): self.canvas = self.canvas_org.copy() #self.var_brush = 1 def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def v2_to_int(self,vector): integers = [int(each) for each in vector] return integers def draw_guides(self,size): x = size y = size while x < self.layout.game_w: p1 = [x,0] p2 = [x,self.layout.game_h] pygame.draw.line(self.canvas, self.guides_color, p1, p2,1) x += size while y < self.layout.game_h: p1 = [0,y] p2 = [self.layout.game_w,y] pygame.draw.line(self.canvas, self.guides_color, p1, p2,1) y += size self.copy_to_screen() def snap_to_guide(self,point): x = point[0] y = point[1] dif = [x % self.guide_scale, y % self.guide_scale] if dif[0] < self.guide_scale // 2: x = x - dif[0] else: x = x + self.guide_scale - dif[0] if dif[1] < self.guide_scale // 2: y = y - dif[1] else: y = y + self.guide_scale - dif[1] return [x,y] def check_drawing(self): h = random.randrange(0, 255, 1) self.canvas_block.font_color = ex.hsv_to_rgb(h,self.color_s+100,self.color_v-100) self.active_color = ex.hsv_to_rgb(h,self.color_s,self.color_v) if self.max_points == 4: self.check_quadrilateral(self.points) self.fill_poli(4) elif self.max_points == 3: self.check_triangle(self.points) self.fill_poli(3) elif self.max_points == 2: self.check_circle(self.points) self.fill_circle() def scalar_product(self,v1,v2): return sum([v1[i]*v2[i] for i in range(len(v1))]) def side_len(self,v): x = max(v[0][0],v[1][0])-min(v[0][0],v[1][0]) y = max(v[0][1],v[1][1])-min(v[0][1],v[1][1]) return math.sqrt(x**2 + y**2) def vector_len(self,v): return math.sqrt(v[0]**2 + v[1]**2) def is_orthogonal(self,v1,v2): epsilon = 0.00001 return abs(self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2))) < epsilon def angle(self,v1,v2): return self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2)) def is_parallel(self,v1,v2): epsilon = 0.00001 return abs(self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2))) > 1 - epsilon def not_intersecting(self,A,B,C,D): def ccw(A,B,C): return (C[1]-A[1]) * (B[0]-A[0]) > (B[1]-A[1]) * (C[0]-A[0]) return ccw(A,C,D) != ccw(B,C,D) and ccw(A,B,C) != ccw(A,B,D) def crossing(self,A,B,C,D): return self.not_intersecting(A,C,B,D) or self.not_intersecting(B,C,D,A) def collinear(self, p0, p1, p2): x1, y1 = p1[0] - p0[0], p1[1] - p0[1] x2, y2 = p2[0] - p0[0], p2[1] - p0[1] return x1 * y2 - x2 * y1 == 0 #1e-12 def collinear4(self, p): if self.collinear(p[0],p[1],p[2]) or self.collinear(p[1],p[2],p[3]) or self.collinear(p[2],p[3],p[0]) or self.collinear(p[3],p[0],p[1]): return True else: return False def collinear_all(self, p): if self.collinear(p[0],p[1],p[2]) and self.collinear(p[1],p[2],p[3]) and self.collinear(p[2],p[3],p[0]) and self.collinear(p[3],p[0],p[1]): return True else: return False def points_to_vectors(self,points): vectors = [] l = len(points) for i in range(l): p1 = points[i] if i < l-1: p2 = points[i+1] else: p2 = points[0] v = [p2[0] - p1[0], p2[1] - p1[1]] self.vectors.append([p1,p2]) vectors.append(v) return vectors def check_quadrilateral(self,points): self.vectors = [] v = self.points_to_vectors(points) if self.crossing(points[1],points[3],points[0],points[2]): self.name = "" else: self.name = self.lang.d["quadrilateral"] if (self.is_parallel(v[0],v[2]) and self.not_intersecting(points[1],points[3],points[0],points[2])) or (self.is_parallel(v[1],v[3]) and self.not_intersecting(points[0],points[2],points[1],points[3])): self.name = self.lang.d["trapezium"] if self.is_parallel(v[0],v[2]) and self.is_parallel(v[1],v[3]): self.name = self.lang.d["parallelogram"] if abs(self.side_len(self.vectors[0]) - self.side_len(self.vectors[1])) < 0.01: self.name = self.lang.d["rhombus"] if self.is_orthogonal(v[0],v[1]): self.name = self.lang.d["square"] elif self.is_orthogonal(v[0],v[1]): self.name = self.lang.d["rectangle"] elif self.is_orthogonal(v[0],v[1]) or self.is_orthogonal(v[1],v[2]) or self.is_orthogonal(v[2],v[3]) or self.is_orthogonal(v[3],v[0]): self.name = self.lang.d["right_trapezium"] elif abs(self.side_len(self.vectors[0]) - self.side_len(self.vectors[2])) < 0.01 or abs(self.side_len(self.vectors[1]) - self.side_len(self.vectors[3])) < 0.01: self.name = self.lang.d["iso_trapezium"] elif self.collinear4(points) and not self.collinear_all(points): self.name = self.lang.d["triangle_not_really"] elif self.collinear_all(points): self.name = self.lang.d["squished_quadi"] + " :)" def check_triangle(self,points): self.vectors = [] v = self.points_to_vectors(points) self.name = self.lang.d["triangle"] if self.collinear(v[0], v[1], v[2]): self.name = self.lang.d["squished_tria"] + " :)" else: self.name = self.lang.d["triangle"] if self.t_right(v): if self.t_iso(): self.name = self.lang.d["right_iso_tria"] else: self.name = self.lang.d["right_tria"] elif self.t_acute(v): if self.t_equi(v): self.name = self.lang.d["equi_tria"] elif self.t_iso(): self.name = self.lang.d["acute_iso_tria"] else: self.name = self.lang.d["acute_tria"] else: #if self.t_obtuse(v): if self.t_iso(): self.name = self.lang.d["obtuse_iso_tria"] else: self.name = self.lang.d["obtuse_tria"] def t_right(self,v): return self.is_orthogonal(v[0],v[1]) or self.is_orthogonal(v[1],v[2]) or self.is_orthogonal(v[2],v[0]) def t_iso(self): return abs(self.side_len(self.vectors[0]) - self.side_len(self.vectors[1])) < 0.01 or abs(self.side_len(self.vectors[1]) - self.side_len(self.vectors[2])) < 0.01 or abs(self.side_len(self.vectors[2]) - self.side_len(self.vectors[0])) < 0.01 def t_acute(self,v): return self.angle(v[0],v[1]) < 0 and self.angle(v[1],v[2]) < 0 and self.angle(v[2],v[0]) < 0 def t_obtuse(self,v): return not self.t_acute*(v) def t_equi(self,v): return self.vector_len(v[0]) == self.vector_len(v[1]) == self.vector_len(v[2]) def check_circle(self,points): self.name = self.lang.d["circle"] pysiogame-1.30.811/game_boards/game078.py0000644000175000017500000010716312201770066016746 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import pygame import os import copy import classes.board import random from math import pi,cos,acos,sin,asin,sqrt class Clock(): def __init__(self, game_board, wrapper, size, time, prefs): self.show_outer_ring = prefs[0] self.show_minutes = prefs[1] self.show_24h = prefs[2] self.show_only_quarters_h = prefs[3] self.show_only_quarters_m = prefs[4] self.show_only_fives_m = prefs[5] self.show_roman = prefs[6] self.show_highlight = prefs[7] self.show_hour_offset = prefs[8] self.roman = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"] color1 = ex.hsv_to_rgb(225,70,230) color3 = ex.hsv_to_rgb(225,255,255) color5 = ex.hsv_to_rgb(225,180,240) color7 = ex.hsv_to_rgb(225,10,255) color2 = ex.hsv_to_rgb(170,70,230) color4 = ex.hsv_to_rgb(170,255,255) color6 = ex.hsv_to_rgb(170,180,240) color8 = ex.hsv_to_rgb(170,10,255) self.colors = [color1,color2] self.colors2 = [color3,color4] self.colors3 = [color5,color6] self.colors4 = [color7,color8] self.hand_coords = [[],[]] self.size = size self.time = time self.center = [self.size//2,self.size//2] self.clock_wrapper = wrapper #self.board.ships[-1] #self.board.active_ship = self.clock_wrapper.unit_id self.clock_wrapper.font = game_board.clock_fonts[0] self.clock_wrapper.font2 = game_board.clock_fonts[1] #self.clock_wrapper.immobilize() self.canvas = pygame.Surface([self.size, self.size-1]) self.canvas.fill((255,255,255)) self.hands_vars() self.draw_hands()#data[7](data, canvas, i) self.clock_wrapper.hidden_value = [2,3]#numbers[i] self.clock_wrapper.font_color = color2 self.clock_wrapper.painting = self.canvas.copy() def hands_vars(self): numbers = [2,2] self.angle_step_12 = 2*pi/12 self.angle_step_60 = 2*pi/60 self.angle_start= -pi/2 angle_arc_start = -pi/2 self.r = self.size//3+self.size//10 #rs = [r*0.6, r*0.85,r*0.5] #self.rs = [self.r*0.4, self.r*0.80,self.r*0.5] self.rs = [int(90*self.size/500.0), int(170*self.size/500.0),int(110*self.size/500.0)] angle = self.angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] #a1 = angle_start + (2*pi/12)*time[0] def draw_hands(self): if self.show_hour_offset: a1 = self.angle_start + (2*pi/12)*self.time[0] + (self.angle_step_12*(2*pi/60)*self.time[1])/(2*pi) else: a1 = self.angle_start + (2*pi/12)*self.time[0] a2 = self.angle_start + (2*pi/60)*self.time[1] self.angles = [a1,a2] rs = self.rs time = self.time if self.show_outer_ring: pygame.draw.circle(self.canvas,self.colors4[1],self.center,int(rs[1]+10),0) pygame.draw.circle(self.canvas,self.colors2[1],self.center,int(rs[1]+10),1) pygame.draw.circle(self.canvas,self.colors4[0],self.center,int(rs[2]+10),0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,int(rs[2]+10),1) if self.show_outer_ring: for i in range(60): val = str(i+1) if self.show_only_quarters_m: if (i+1)%15 != 0: val = "" elif self.show_only_fives_m: if (i+1)%5 != 0: val = "" if i == 59: val = "0" a = self.angle_start + self.angle_step_60*(i+1) if self.show_minutes: font_size = self.clock_wrapper.font2.size(val) #mins_offset = #if self.show_highlight: if not self.show_highlight or (i+1 == time[1] or (time[1] == 0 and i==59)): text = self.clock_wrapper.font2.render("%s" % (val), 1, self.colors2[1]) else: text = self.clock_wrapper.font2.render("%s" % (val), 1, self.colors[1]) offset3 = rs[1]+10 + 15*self.size/500.0+font_size[1]//2 x3=offset3*cos(a)+self.center[0] - int(font_size[0] / 2.0) y3=offset3*sin(a)+self.center[1] - int(font_size[1] / 2.0) #x3=(rs[0]+20 + self.clock_wrapper.font.size(val)[0]//2)*cos(a)+center[0] #y3=(rs[0]+20 + self.clock_wrapper.font.size(val)[1]//2)*sin(a)+center[1] self.canvas.blit(text, (x3,y3)) if self.show_only_quarters_m or self.show_only_fives_m: if (i+1)%15 == 0: marklen = 10 + 15*self.size/500.0 elif (i+1)%5 == 0: marklen = 10 + 10*self.size/500.0 else: marklen = 10 + 5*self.size/500.0 else: marklen = 10 + 10*self.size/500.0 else: if (i+1)%15 == 0: marklen = 10 + 15*self.size/500.0 elif (i+1)%5 == 0: marklen = 10 + 10*self.size/500.0 else: marklen = 10 + 5*self.size/500.0 if self.show_outer_ring: x1=(rs[1]+10)*cos(a)+self.center[0] y1=(rs[1]+10)*sin(a)+self.center[1] x2=(rs[1]+marklen)*cos(a)+self.center[0] y2=(rs[1]+marklen)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[1], [x1,y1],[x2,y2]) for i in range(12): val = str(i+1) if self.show_only_quarters_h: if (i+1)%3 != 0: val = "" #a = angle_start + angle_step_12*(i+1) a = self.angle_start + self.angle_step_12*(i+1) x1=(rs[2]+10)*cos(a)+self.center[0] y1=(rs[2]+10)*sin(a)+self.center[1] x2=(rs[2]+10+10*self.size/500.0)*cos(a)+self.center[0] y2=(rs[2]+10+10*self.size/500.0)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[0], [x1,y1],[x2,y2]) font_size = self.clock_wrapper.font.size(val) if self.show_roman: val = self.hour_to_roman(val) if not self.show_highlight or i+1 == time[0]: text = self.clock_wrapper.font.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_wrapper.font.render("%s" % (val), 1, self.colors[0]) if self.show_roman: text_angle = -(360/12.0) * (i+1) text = pygame.transform.rotate(text, text_angle) rect = text.get_rect() x3=(rs[2]+10 + 7*self.size/500.0+font_size[1]//2)*cos(a)+self.center[0] - rect.width / 2 y3=(rs[2]+10 + 7*self.size/500.0+font_size[1]//2)*sin(a)+self.center[1] - rect.height / 2 else: x3=(rs[2]+10 +7*self.size/500.0+font_size[1]/2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[2]+10 +7*self.size/500.0+font_size[1]/2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) if self.show_24h: if i+13 == 24: val = "0" v = 0 else: val = str(i+13) v = i + 13 font_size = self.clock_wrapper.font2.size(val) if not self.show_highlight or v == time[0]: text = self.clock_wrapper.font2.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_wrapper.font2.render("%s" % (val), 1, self.colors[0]) x3=(rs[0]+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[0]+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) hand_width = [self.r//14,self.r//18] start_offset = [self.size//10,self.size//12] for i in range(2): #angle for line angle = self.angles[i]#angle_start + angle_step*i x0=self.center[0] - start_offset[i]*cos(angle) y0=self.center[1] - start_offset[i]*sin(angle) # Calculate the x,y for the end point x1=rs[i]*cos(angle)+self.center[0] y1=rs[i]*sin(angle)+self.center[1] #x2=h_size[i]*cos(angle-pi/2)+center[0] #y2=h_size[i]*sin(angle-pi/2)+center[1] #x3=h_size[i]*cos(angle+pi/2)+center[0] #y3=h_size[i]*sin(angle+pi/2)+center[1] x2=hand_width[i]*cos(angle-pi/2)+self.center[0] y2=hand_width[i]*sin(angle-pi/2)+self.center[1] x3=hand_width[i]*cos(angle+pi/2)+self.center[0] y3=hand_width[i]*sin(angle+pi/2)+self.center[1] points = [[x0,y0],[x2,y2],[x1,y1],[x3,y3]] shadow = [[x0,y0],[x2,y2],[x1,y1]] self.hand_coords[i] = points #if i < numbers[0]: pygame.draw.polygon(self.canvas, self.colors[i], points, 0) pygame.draw.polygon(self.canvas, self.colors3[i], shadow, 0) # Draw the line from the center to the calculated end point line_through = [[x0,y0],[x1,y1]] pygame.draw.aalines(self.canvas, self.colors2[i], True, points) pygame.draw.aalines(self.canvas, self.colors2[i], True, line_through) pygame.draw.circle(self.canvas,self.colors[0],self.center,self.size//50,0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//50,1) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//70,1) #self.update_text_time() self.clock_wrapper.update_me = True def hour_to_roman(self, val): val = int(val) return self.roman[val - 1] def vector_len(self,v): return sqrt(v[0]**2 + v[1]**2) def scalar_product(self,v1,v2): return sum([v1[i]*v2[i] for i in range(len(v1))]) def angle(self,v1,v2): return self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2)) def is_contained(self, pos, coords_id = 0): v0 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][1]) v1 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][1]) v2 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][3]) v3 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][3]) v4 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][1]) v5 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][3]) a1 = 1 - self.angle(v0,v1) #corner 1 a2 = 1 - self.angle(v2,v3) #corner 2 a3 = 1 - self.angle(v0,v4)#point to arm1 of corner1 a4 = 1 - self.angle(v1,v4)#point to arm2 of corner1 a5 = 1 - self.angle(v2,v5)#point to arm1 of corner2 a6 = 1 - self.angle(v3,v5)#point to arm2 of corner2 if (a3+a4) < a1 and (a5+a6) < a2: return True return False def current_angle(self, pos,r): #print(r), #print(self.rs[0]), cosa = (pos[0] - self.center[0]) / r sina = (pos[1] - self.center[1]) / r if 0 <= cosa <= 1 and -1 <= sina <= 0: angle = pi/2 - acos(cosa) elif 0 <= cosa <= 1 and 0 <= sina <= 1: angle = acos(cosa)+pi/2 #ok elif -1 <= cosa <= 0 and 0 <= sina <= 1: angle = acos(cosa)+ pi/2 #ok elif -1 <= cosa <= 0 and -1 <= sina <= 0: angle = 2*pi+ pi/2 - acos(cosa) return angle class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,3,16) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,4,2) def create_game_objects(self, level = 1): self.vis_buttons = [0,1,1,1,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = False self.hand_id = 0 self.hand_coords = [[],[]] self.board.draw_grid = False color = (255,255,255) white = (255,255,255) gray = (100,100,100) color1 = ex.hsv_to_rgb(225,70,230) color3 = ex.hsv_to_rgb(225,255,255) color5 = ex.hsv_to_rgb(225,180,240) color7 = ex.hsv_to_rgb(225,10,255) color2 = ex.hsv_to_rgb(170,70,230) color4 = ex.hsv_to_rgb(170,255,255) color6 = ex.hsv_to_rgb(170,180,240) color8 = ex.hsv_to_rgb(170,10,255) self.colors = [color1,color2] self.colors2 = [color3,color4] self.colors3 = [color5,color6] self.colors4 = [color7,color8] #h = random.randrange(120, 220, 2) #self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders #self.font_color = self.color2 if self.level.lvl == 1: data = [4,2,True,True,False,False,True,False,False,True,False,15] h_pool = range(1,13) m_pool = [0] elif self.level.lvl == 2: data = [4,2,True,True,False,False,True,False,False,True,False,15] h_pool = range(1,13) m_pool = range(0,60,15) elif self.level.lvl == 3: data = [4,2,True,True,False,False,False,True,False,True,False,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 4: data = [4,2,True,True,False,False,False,True,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 5: data = [4,2,True,True,False,False,False,False,False,True,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 6: data = [4,2,True,True,True,False,True,False,False,True,True,15] h_pool = range(13,24) m_pool = [0] elif self.level.lvl == 7: data = [4,2,True,True,True,False,False,True,False,True,True,15] h_pool = range(13,24) h_pool.append(0) m_pool = range(0,60,5) elif self.level.lvl == 8: data = [4,2,True,True,True,False,False,False,False,True,True,25] h_pool = range(0,24) m_pool = range(0,60) elif self.level.lvl == 9: data = [4,2,True,True,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 10: data = [4,2,True,True,False,False,False,True,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 11: data = [4,2,True,True,False,False,True,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 12: data = [4,2,True,False,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 13: data = [4,2,True,False,False,True,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 14: data = [4,2,True,True,False,False,False,False,True,True,True,15] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 15: data = [4,2,True,True,False,False,True,False,True,True,True,15] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 16: data = [4,2,True,True,False,False,False,False,True,False,True,15] h_pool = range(1,13) m_pool = range(0,60) """ if self.level.lvl == 1: #data = [4,2,True,True,False,False,False,False,False,True,True,15] elif self.level.lvl == 2: #data = [4,2,True,True,False,False,False,False,True,True,True,15] elif self.level.lvl == 3: #data = [4,2,True,True,False,False,True,False,False,True,False,15] h_pool = range(1,13) m_pool = [0] elif self.level.lvl == 4: #data = [4,2,True,True,False,False,True,False,False,True,False,15] h_pool = range(1,13) m_pool = range(0,60,15) elif self.level.lvl == 5: #data = [4,2,True,True,False,False,False,True,False,True,False,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 6: #data = [4,2,True,True,False,False,False,True,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 7: #data = [4,2,True,True,False,False,False,False,False,True,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 8: #data = [4,2,True,True,True,False,True,False,False,True,True,15] h_pool = range(13,24) m_pool = [0] elif self.level.lvl == 9: #data = [4,2,True,True,True,False,False,True,False,True,True,15] h_pool = range(13,24) h_pool.append(0) m_pool = range(0,60,5) elif self.level.lvl == 10: #data = [4,2,True,True,True,False,False,False,False,True,True,25] h_pool = range(0,24) m_pool = range(0,60) elif self.level.lvl == 11: #data = [4,2,True,True,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 12: #data = [4,2,True,True,False,False,False,True,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 13: #data = [4,2,True,True,False,False,True,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 14: #data = [4,2,True,True,False,False,True,False,True,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 15: #data = [4,2,True,False,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 16: #data = [4,2,True,False,False,True,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) """ #visual display properties self.show_outer_ring = data[2] self.show_minutes = data[3] self.show_24h = data[4] self.show_only_quarters_h = data[5] self.show_only_quarters_m = data[6] self.show_only_fives_m = data[7] self.show_roman = data[8] self.show_highlight = data[9] self.show_hour_offset = data[10] self.disp_counter = 0 self.disp_len = 1 self.found = 0 self.clicks = 0 self.square_count = data[0]*data[1] self.history = [None,None] #self.level.games_per_lvl = data[11] self.time = [] for i in range(4): tt = [random.choice(h_pool), random.choice(m_pool)] while tt in self.time: tt = [random.choice(h_pool), random.choice(m_pool)] self.time.append(tt) #self.time = [6,0] self.tm = self.time[0][:] self.digits = ["0","1","2","3","4","5","6","7","8","9"] self.roman = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"] self.disp_counter = 0 self.disp_len = 1 self.completed_mode = False """ x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count """ self.font_size = 0 self.data = data self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],self.layout.scale) choice = [x for x in range(0,self.square_count//2)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:self.square_count//2] self.chosen = self.chosen * 2 self.size = self.board.scale self.clock_fonts = [] self.points = int(round((self.board.scale * 72 /96)*1.2,0)) self.clock_fonts.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(self.points/(self.board.scale/(42*self.size/500.0)))))) self.clock_fonts.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(self.points/(self.board.scale/(21*self.size/500.0)))))) #ans_offset = 10+(data[0]-15)//2 #self.board.add_unit(10,0,data[0]-10,2,classes.board.Label,self.lang.d["Set_clock_instr"],white,"",2) #self.board.units[-1].font_color = gray #self.board.add_unit(10,4,data[0]-10,2,classes.board.Label,self.lang.d["Set_clock_instr"],white,"",2) #self.board.units[-1].font_color = gray #self.board.add_unit(ans_offset,3,2,1,classes.board.Label,"%02d" % self.time[0],white,"",0) #self.ans_h = self.board.units[-1] #self.board.add_unit(ans_offset+2,3,1,1,classes.board.Label,":",white,"",0) #self.board.add_unit(ans_offset+3,3,2,1,classes.board.Label,"%02d" % self.time[1],white,"",0) #self.ans_m = self.board.units[-1] #self.ans_h.align = 2 #self.ans_m.align = 1 #self.ans_h.immobilize() #self.ans_m.immobilize() #self.ans_h.font_color = color3 #self.ans_m.font_color = color4 slots = [] for j in range(0,data[1]): for i in range(0,data[0]): slots.append([i,j]) random.shuffle(slots) self.center = [self.size//2,self.size//2] switch = self.square_count // 2 for i in range(self.square_count): if i < switch: self.board.add_unit(slots[i][0],slots[i][1],1,1,classes.board.Ship,"",white,"",self.font_size) self.clock_wrapper = self.board.ships[-1] self.board.active_ship = self.clock_wrapper.unit_id self.clock = Clock(self, self.clock_wrapper, self.size, self.time[i], self.data[2:11]) else: #ttx = self.time2txt(self.time[i-switch]) #self.board.add_unit(slots[i][0],slots[i][1],1,1,classes.board.Letter,"%s" % ttx,white,"",23) self.board.add_unit(slots[i][0],slots[i][1],1,1,classes.board.Letter,"%02d:%02d" % (self.time[i-switch][0],self.time[i-switch][1]),white,"",8) self.board.ships[-1].font_color = color4 self.immo(self.board.ships[-1]) self.outline_all(color4,1) #self.clock_wrapper.font = self.clock_wrapper.board.font_sizes[2] #self.clock_wrapper.font2 = self.clock_wrapper.board.font_sizes[7] #self.clock_wrapper.immobilize() #self.board.add_unit(10,4,data[0]-10,1,classes.board.Letter,"",white,"",4) #self.text_time = self.board.ships[-1] #self.text_time.immobilize() #self.text_time.font_color = gray #self.update_text_time() #self.canvas = pygame.Surface([self.size, self.size-1]) #self.canvas.fill((255,255,255)) #self.hands_vars() #self.draw_hands()#data[7](data, canvas, i) #self.clock_wrapper.hidden_value = [2,3]#numbers[i] #self.clock_wrapper.font_color = color2 #self.clock_wrapper.painting = self.canvas.copy() self.mainloop.redraw_needed[0] = True def immo(self,ship): ship.immobilize() ship.readable = False ship.perm_outline = True ship.uncovered = False def time2txt(self, tt): #tt = self.time if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": #if (tt[1] < 30 and self.lang.d["time_string_half_to"] != "") or (tt[1] <= 30 and self.lang.d["time_string_half_past"] != "") : h_index = tt[0]-1 #else: if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] if tt[1] < 30: m = tt[1] else: m = 60 - tt[1] if m < 30: minutes = self.lang.d["minute_numbers_1to29"][m-1] else: h_index = tt[0]-1 if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] m = tt[1] minutes = self.lang.n2txt(m) """ if m <= 29: #self.lang.d["minute_numbers_1to29"][m-1] else: tens = self.lang.numbers2090[(m/10)-2] ones = self.lang.d["minute_numbers_1to29"][(m % 10)-1] minutes = tens + " " + ones """ if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": if tt[1] == 0: text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] < 30: if self.lang.d["time_string_past_mh"] != "": text_string = self.lang.d["time_string_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_past_hm"] != "": text_string = self.lang.d["time_string_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: text_string = "" elif tt[1] > 30: if self.lang.d["time_string_to_mh"] != "": text_string = self.lang.d["time_string_to_mh"] % (minutes, self.lang.d["hours_c"][h_indexp1]) elif self.lang.d["time_string_to_hm"] != "": text_string = self.lang.d["time_string_to_hm"] % (self.lang.d["hours_c"][h_indexp1], minutes) else: text_string = "" else: if tt[1] == 0: text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: if self.lang.d["time_string_q_to"] != "": text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif self.lang.d["time_string_3q_past"] != "": text_string = self.lang.d["time_string_3q_past"] % self.lang.d["hours_c"][h_index] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: if self.lang.d["time_string_one_to"] != "": text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] else: if self.lang.d["time_string_1_59_past_mh"] != "": text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: if self.lang.d["time_string_1_59_past_mh"] != "": text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: text_string = "" return text_string """ self.text_time.value = self.text_string self.text_time.update_me = True self.ans_h.value = "%02d" % self.time[0] self.ans_m.value = "%02d" % self.time[1] self.ans_h.update_me = True self.ans_m.update_me = True """ def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.history[1]==None and self.ai_enabled == False:# and self.start_sequence==False: if 0 <= self.board.active_ship < self.square_count: active = self.board.ships[self.board.active_ship] if active.uncovered == False: if self.history[0] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[0] = active self.clicks += 1 active.uncovered = True elif self.history[1] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[1] = active self.clicks += 1 #print "%d, %d" % (self.chosen[self.history[0].unit_id], self.chosen[self.history[1].unit_id]-2) if self.chosen[self.history[0].unit_id] != self.chosen[self.history[1].unit_id]: self.ai_enabled = True self.history[0].uncovered = False else: self.history[0].uncovered = True self.history[1].uncovered = True self.history[0].perm_outline_color = self.colors2[1] #[50,255,50] self.history[1].perm_outline_color = self.colors2[1] self.history[0].image.set_alpha(50) self.history[1].image.set_alpha(50) self.history[0].update_me = True self.history[1].update_me = True self.found += 2 if self.found == self.square_count: self.completed_mode = True self.ai_enabled = True self.history = [None, None] active.update_me = True """ self.tm = self.time[:] if event.type == pygame.MOUSEMOTION and self.hand_id > 0: pos = [event.pos[0]-self.layout.menu_w,event.pos[1]] r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 if self.hand_id == 1: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: self.tm[0] = 12 else: self.tm[0] = int(h) elif self.hand_id == 2: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) if 0 <= self.tm[1] < 5 and 55 <= self.time[1] <= 59: if self.tm[0] == 12: self.tm[0] = 1 else: self.tm[0] += 1 elif 0 <= self.time[1] < 5 and 55 <= self.tm[1] <= 59: if self.tm[0] == 1: self.tm[0] = 12 else: self.tm[0] -= 1 elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: active = self.board.active_ship pos = [event.pos[0]-self.layout.menu_w,event.pos[1]] if active == 0: r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 self.hand_id = 0 if self.is_contained(pos, coords_id = 0): self.hand_id = 1 #print("activated: %d" % self.hand_id) elif self.is_contained(pos, coords_id = 1): self.hand_id = 2 #print("activated: %d" % self.hand_id) elif self.rs[0]*1.1 > r: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: h = 12 self.tm[0] = int(h) else: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: self.hand_id = 0 #self.is_contained(pos, 1) if self.tm != self.time: self.time = self.tm[:] self.draw_hands() self.clock_wrapper.painting = self.canvas.copy() """ def ai_walk(self): if self.disp_counter < self.disp_len: self.disp_counter += 1 else: if self.completed_mode: self.history = [None, None] self.level.next_board() else: self.history[0].perm_outline_width = 1 self.history[0].perm_outline_color = self.colors2[1] self.history[1].perm_outline_width = 1 self.history[1].perm_outline_color = self.colors2[1] self.history[0].update_me = True self.history[1].update_me = True self.history = [None, None] self.ai_enabled = False self.disp_counter = 0 def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): pass pysiogame-1.30.811/game_boards/game063.py0000644000175000017500000004637712201770066016751 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import copy import classes.board import random from math import pi,cos,sin class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,12,13) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,19,10) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = True self.ai_speed = 18 self.correct = False self.board.draw_grid = False #create non-movable objects color = ((255,255,255)) white = ((255,255,255)) gray = (100,100,100) """ s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 color2 = ex.hsv_to_rgb(120,s,v) #highlight 2 """ """ color1 = ex.hsv_to_rgb(0,70,230) color3 = ex.hsv_to_rgb(0,255,255) color5 = ex.hsv_to_rgb(0,180,240) color2 = ex.hsv_to_rgb(160,70,230) color4 = ex.hsv_to_rgb(160,255,255) color6 = ex.hsv_to_rgb(160,180,240) """ color1 = ex.hsv_to_rgb(225,70,230) color3 = ex.hsv_to_rgb(225,255,255) color5 = ex.hsv_to_rgb(225,180,240) color7 = ex.hsv_to_rgb(225,10,255) color2 = ex.hsv_to_rgb(170,70,230) color4 = ex.hsv_to_rgb(170,255,255) color6 = ex.hsv_to_rgb(170,180,240) color8 = ex.hsv_to_rgb(170,10,255) """ color1 = pygame.Color(218,122,122,150) #ex.hsv_to_rgb(0,70,230) color3 = pygame.Color(200,0,0,200) #ex.hsv_to_rgb(0,255,200) color2 = pygame.Color(122,145,218,150)#ex.hsv_to_rgb(160,70,230) color4 = pygame.Color(0,47,200,200)#ex.hsv_to_rgb(160,255,200) """ #self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders #data = [10,10] if self.level.lvl == 1: data = [19,10,True,True,False,False,True,False,False,True,False,15] h_pool = range(1,13) m_pool = [0] elif self.level.lvl == 2: data = [19,10,True,True,False,False,True,False,False,True,False,15] h_pool = range(1,13) m_pool = range(0,60,15) elif self.level.lvl == 3: data = [19,10,True,True,False,False,False,True,False,True,False,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 4: data = [19,10,True,True,False,False,False,True,False,True,True,15] h_pool = range(1,13) m_pool = range(0,60,5) elif self.level.lvl == 5: data = [19,10,True,True,False,False,False,False,False,True,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 6: data = [19,10,True,True,True,False,True,False,False,True,True,15] h_pool = range(13,24) m_pool = [0] elif self.level.lvl == 7: data = [19,10,True,True,True,False,False,True,False,True,True,15] h_pool = range(13,24) h_pool.append(0) m_pool = range(0,60,5) elif self.level.lvl == 8: data = [19,10,True,True,True,False,False,False,False,True,True,25] h_pool = range(0,24) m_pool = range(0,60) elif self.level.lvl == 9: data = [19,10,True,True,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 10: data = [19,10,True,True,False,False,False,True,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 11: data = [19,10,True,True,False,False,True,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 12: data = [19,10,True,False,False,False,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) elif self.level.lvl == 13: data = [19,10,True,False,False,True,False,False,False,False,True,25] h_pool = range(1,13) m_pool = range(0,60) #visual display properties self.show_outer_ring = data[2] self.show_minutes = data[3] self.show_24h = data[4] self.show_only_quarters_h = data[5] self.show_only_quarters_m = data[6] self.show_only_fives_m = data[7] self.show_only_spare_variable = data[8] self.show_highlight = data[9] self.show_hour_offset = data[10] self.level.games_per_lvl = data[11] self.digits = ["0","1","2","3","4","5","6","7","8","9"] x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.font_size = 0 self.data = data self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],self.layout.scale) size = self.board.scale*10 ans_offset = 10+(data[0]-15)//2 self.board.add_unit(10,0,data[0]-10,2,classes.board.Label,self.lang.d["What time"],white,"",2) self.board.units[-1].font_color = gray self.board.add_unit(ans_offset,2,2,2,classes.board.Letter,"00",white,"",0) self.ans_h = self.board.ships[-1] self.board.active_ship = self.ans_h.unit_id self.home_square = self.ans_h self.board.add_unit(ans_offset+2,2,1,2,classes.board.Label,":",white,"",0) self.board.add_unit(ans_offset+3,2,2,2,classes.board.Letter,"00",white,"",0) self.ans_m = self.board.ships[-1] """ self.board.add_unit(0,10,data[0],1,classes.board.Label,"Quarter past twelve",white,"",2) self.time_text = self.board.units[-1] self.time_text.align = 1 self.time_text.font_color = color4 """ self.ans_h.set_outline(color3, 5) self.ans_m.set_outline(color4, 5) self.ans_h.immobilize() self.ans_m.immobilize() self.ans_h.font_color = color3 self.ans_m.font_color = color4 center = [size//2,size//2] self.board.add_unit(0,0,10,10,classes.board.Ship,"",white,"",self.font_size) self.clock_canvas = self.board.ships[-1] self.clock_canvas.font = self.clock_canvas.board.font_sizes[2] self.clock_canvas.font2 = self.clock_canvas.board.font_sizes[7] self.clock_canvas.immobilize() canvas = pygame.Surface([size, size-1]) canvas.fill((255,255,255)) #time = [2,0] #if self.show_24h: self.time = [random.choice(h_pool), random.choice(m_pool)]#[random.randrange(0,23),random.randrange(0,60)] #else: # time = [random.randrange(1,13),random.randrange(0,60)] #print(time) self.draw_hands(self.time,canvas,size,center,[color1,color2],[color3,color4],[color5,color6],[color7,color8])#data[7](data, canvas, i) self.clock_canvas.hidden_value = [2,3]#numbers[i] self.clock_canvas.font_color = color2 self.clock_canvas.painting = canvas.copy() def draw_hands(self,time,canvas,size,center,colors,colors2,colors3,colors4): numbers = [2,2] angle_step_12 = 2*pi/12 angle_step_60 = 2*pi/60 angle_start= -pi/2 angle_arc_start = -pi/2 r = size//3+size//10 if self.show_24h: rs = [r*0.54, r*0.85,r*0.6] else: rs = [r*0.6, r*0.85,r*0.6] angle = angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] #a1 = angle_start + (2*pi/12)*time[0] if self.show_hour_offset: a1 = angle_start + (2*pi/12)*time[0] + (angle_step_12*(2*pi/60)*time[1])/(2*pi) else: a1 = angle_start + (2*pi/12)*time[0] a2 = angle_start + (2*pi/60)*time[1] angles = [a1,a2] if self.show_outer_ring: pygame.draw.circle(canvas,colors4[1],center,int(rs[1]+10),0) pygame.draw.circle(canvas,colors2[1],center,int(rs[1]+10),1) pygame.draw.circle(canvas,colors4[0],center,int(rs[2]+10),0) pygame.draw.circle(canvas,colors2[0],center,int(rs[2]+10),1) if self.show_outer_ring: for i in range(60): val = str(i+1) if self.show_only_quarters_m: if (i+1)%15 != 0: val = "" elif self.show_only_fives_m: if (i+1)%5 != 0: val = "" if i == 59: val = "0" a = angle_start + angle_step_60*(i+1) if self.show_minutes: font_size = self.clock_canvas.font2.size(val) #if self.show_highlight: if not self.show_highlight or (i+1 == time[1] or (time[1] == 0 and i==59)): text = self.clock_canvas.font2.render("%s" % (val), 1, colors2[1]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, colors[1]) x3=(rs[1]+30+font_size[1]//2)*cos(a)+center[0] - font_size[0] / 2 y3=(rs[1]+30+font_size[1]//2)*sin(a)+center[1] - font_size[1] / 2 #x3=(rs[0]+20 + self.clock_canvas.font.size(val)[0]//2)*cos(a)+center[0] #y3=(rs[0]+20 + self.clock_canvas.font.size(val)[1]//2)*sin(a)+center[1] canvas.blit(text, (x3,y3)) if self.show_only_quarters_m or self.show_only_fives_m: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 else: marklen = 25 else: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 if self.show_outer_ring: x1=(rs[1]+10)*cos(a)+center[0] y1=(rs[1]+10)*sin(a)+center[1] x2=(rs[1]+marklen)*cos(a)+center[0] y2=(rs[1]+marklen)*sin(a)+center[1] pygame.draw.aaline(canvas, colors2[1], [x1,y1],[x2,y2]) for i in range(12): val = str(i+1) if self.show_only_quarters_h: if (i+1)%3 != 0: val = "" #a = angle_start + angle_step_12*(i+1) a = angle_start + angle_step_12*(i+1) x1=(rs[2]+10)*cos(a)+center[0] y1=(rs[2]+10)*sin(a)+center[1] x2=(rs[2]+20)*cos(a)+center[0] y2=(rs[2]+20)*sin(a)+center[1] pygame.draw.aaline(canvas, colors2[0], [x1,y1],[x2,y2]) font_size = self.clock_canvas.font.size(val) if not self.show_highlight or i+1 == time[0]: text = self.clock_canvas.font.render("%s" % (val), 1, colors2[0]) else: text = self.clock_canvas.font.render("%s" % (val), 1, colors[0]) x3=(rs[2]+20+font_size[1]//2)*cos(a)+center[0] - font_size[0] / 2 y3=(rs[2]+20+font_size[1]//2)*sin(a)+center[1] - font_size[1] / 2 canvas.blit(text, (x3,y3)) if self.show_24h: if i+13 == 24: val = "0" v = 0 else: val = str(i+13) v = i + 13 font_size = self.clock_canvas.font2.size(val) if not self.show_highlight or v == time[0]: text = self.clock_canvas.font2.render("%s" % (val), 1, colors2[0]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, colors[0]) x3=(rs[0]+font_size[1]//2)*cos(a)+center[0] - font_size[0] / 2 y3=(rs[0]+font_size[1]//2)*sin(a)+center[1] - font_size[1] / 2 canvas.blit(text, (x3,y3)) hand_width = [r//14,r//18] start_offset = [size//10,size//12] for i in range(2): #angle for line angle = angles[i]#angle_start + angle_step*i x0=center[0] - start_offset[i]*cos(angle) y0=center[1] - start_offset[i]*sin(angle) # Calculate the x,y for the end point x1=rs[i]*cos(angle)+center[0] y1=rs[i]*sin(angle)+center[1] #x2=h_size[i]*cos(angle-pi/2)+center[0] #y2=h_size[i]*sin(angle-pi/2)+center[1] #x3=h_size[i]*cos(angle+pi/2)+center[0] #y3=h_size[i]*sin(angle+pi/2)+center[1] x2=hand_width[i]*cos(angle-pi/2)+center[0] y2=hand_width[i]*sin(angle-pi/2)+center[1] x3=hand_width[i]*cos(angle+pi/2)+center[0] y3=hand_width[i]*sin(angle+pi/2)+center[1] points = [[x0,y0],[x2,y2],[x1,y1],[x3,y3]] shadow = [[x0,y0],[x2,y2],[x1,y1]] #if i < numbers[0]: pygame.draw.polygon(canvas, colors[i], points, 0) pygame.draw.polygon(canvas, colors3[i], shadow, 0) # Draw the line from the center to the calculated end point line_through = [[x0,y0],[x1,y1]] pygame.draw.aalines(canvas, colors2[i], True, points) pygame.draw.aalines(canvas, colors2[i], True, line_through) pygame.draw.circle(canvas,colors[0],center,size//50,0) pygame.draw.circle(canvas,colors2[0],center,size//50,1) pygame.draw.circle(canvas,colors2[0],center,size//70,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and not self.correct: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] else: char = event.unicode if (len(char)>0 and lhv < 3 and char in self.digits): if lhv == 0: self.home_square.value += char elif lhv == 1: if self.home_square == self.ans_h: if self.show_24h: n = int(self.home_square.value + char) if n > 23: self.home_square.value = char else: self.home_square.value += char else: n = int(self.home_square.value + char) if n > 12: self.home_square.value = char else: self.home_square.value += char if self.home_square == self.ans_m: n = int(self.home_square.value + char) if n > 59: self.home_square.value = char else: self.home_square.value += char elif lhv == 2: self.home_square.value = char if len(self.ans_h.value.strip()) > 0: if self.home_square == self.ans_h and self.time[0] == int(self.ans_h.value): self.next_field() self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.KEYDOWN and (event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER) and self.board.active_ship == self.ans_h.unit_id: if len(self.ans_h.value.strip()) > 0 and self.time[0] == int(self.ans_h.value): self.next_field() elif event.type == pygame.MOUSEBUTTONUP: self.home_square.update_me = True if self.board.active_ship == self.ans_h.unit_id: self.home_square.perm_outline_width = 5 self.home_square = self.ans_h self.board.active_ship == self.ans_h.unit_id elif self.board.active_ship == self.ans_m.unit_id: self.home_square.perm_outline_width = 5 self.home_square = self.ans_m self.board.active_ship == self.ans_m.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def next_field(self): self.home_square.update_me = True self.home_square.perm_outline_width = 5 self.home_square = self.ans_m self.board.active_ship == self.ans_m.unit_id self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def ai_walk(self): if self.home_square.perm_outline_width == 1: self.home_square.perm_outline_width = 5 else: self.home_square.perm_outline_width = 1 self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check and not self.correct: correct = 0 if len(self.ans_h.value.strip()) > 0 and self.time[0] == int(self.ans_h.value): self.ans_h.set_outline((0,255,0), 5) correct += 1 else: self.ans_h.set_outline((255,0,0), 5) if len(self.ans_m.value.strip()) > 0 and self.time[1] == int(self.ans_m.value): self.ans_m.set_outline((0,255,0), 5) correct += 1 else: self.ans_m.set_outline((255,0,0), 5) self.ans_m.update_me = True self.ans_h.update_me = True self.mainloop.redraw_needed[0] = True if correct == 2: self.correct = True self.ai_enabled = False self.level.next_board() else: self.level.try_again() pysiogame-1.30.811/game_boards/game077.py0000644000175000017500000004376712201770066016756 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame import os, sys #This is pretty messed up - sorry trying to keep multi-language program compatible with both python2 and python3 made me to do some desperately heavy things. #this would be much simpler with python3 only, but not everything in this world is simple... class Key(pygame.sprite.Sprite): def __init__(self, kbrd, data_list, init_color, highlight_color): # data_list = [x, y, w, h, top_left, bottom_left, middle, letter, right_top, right_bottom,color_group] pygame.sprite.Sprite.__init__(self) self.kbrd = kbrd self.id = len(kbrd.keys) kbrd_w = self.kbrd.kbrd_w-10 self.x = (kbrd_w * data_list[0] // 445)+5 self.y = (kbrd_w * data_list[1] // 445)+5 self.w = (kbrd_w * data_list[2] // 445) self.h = (kbrd_w * data_list[3] // 445) self.data_list = data_list self.labels = [data_list[4], data_list[5], data_list[6],data_list[7],data_list[8],data_list[9]] self.color = init_color self.init_color = init_color self.highlight_color = highlight_color hsv = ex.rgb_to_hsv(highlight_color[0],highlight_color[1],highlight_color[2]) self.outline_color = ex.hsv_to_rgb(hsv[0],hsv[1],hsv[2]-50) self.font_1 = self.kbrd.kbrd_font[0] self.font_2 = self.kbrd.kbrd_font[1] self.image = pygame.Surface([self.w, self.h]) self.rect = self.image.get_rect() self.rect.topleft = [self.x,self.y] #self.image.fill(self.color) self.draw_key() def draw_key(self): #if button is part of keyboard: if self.id < 64: self.image.fill(self.color) else: self.image.fill((255,255,255)) rect = [1,1,self.w-2, self.h-2] #rect2 = [0,0,self.w, self.h] pygame.draw.ellipse(self.image, self.color, rect, 0) pygame.draw.ellipse(self.image, self.outline_color, rect, 1) self.image.set_colorkey((255,255,255)) def update(self): #self.image.fill(self.color) self.draw_key() if sys.version_info < (3, 0): val = [] for each in self.labels: try: uni = unicode(each, "utf-8") except UnicodeDecodeError: uni = each except TypeError: uni = each val.append(uni) else: val = self.labels for i in range(6): if len(val[i]) > 0: if self.id < 64: if i == 3: text = self.font_1.render("%s" % (val[i]), 1, ((0,0,0))) font_x = 4 #((self.w - self.font_1.size(val[i])[0])//2) font_y = 0 #((self.h - self.font_1.size(val[i])[1])//2) #self.image.blit(text, (font_x,font_y)) elif i < 3: text = self.font_2.render("%s" % (val[i]), 1, ((0,0,0))) if i == 0: font_x = 4 font_y = 0 elif i == 1: font_x = 4 font_y = self.h - self.font_2.size(val[i])[1]-2 elif i == 2: font_x = ((self.w - self.font_2.size(val[i])[0])//2) font_y = ((self.h - self.font_2.size(val[i])[1])//2) elif i > 3: text = self.font_2.render("%s" % (val[i]), 1, ((0,0,200))) if i == 4: font_x = self.w - self.font_2.size(val[i])[0]-4 font_y = 0 elif i == 5: font_x = self.w - self.font_2.size(val[i])[0]-4 font_y = self.h - self.font_2.size(val[i])[1]-2 else: text = self.font_2.render("%s" % (val[i]), 1, ((0,0,0))) font_x = ((self.w - self.font_2.size(val[i])[0])//2) font_y = ((self.h - self.font_2.size(val[i])[1])//2) self.image.blit(text, (font_x,font_y)) self.draw_outline() def draw_outline(self): "draws an 'outline' around the unit" color = self.outline_color #[20,20,20] width = 1 x = 0 y = 0 w2 = 1 if self.id < 64: if self.id != 28 and self.id != 42: pygame.draw.lines(self.image, color, True, [[x,y],[self.w-w2,y],[self.w-w2,self.h-w2],[x,self.h-w2]],width) else: if self.kbrd.keys[28].h > self.kbrd.keys[42].h: p0x = x p1x = self.w - self.kbrd.keys[28].w else: p0x = self.w - self.kbrd.keys[42].w p1x = x if self.id == 28: pygame.draw.lines(self.image, color, False, [[p0x,self.h-w2],[x,self.h-w2],[x,y],[self.w-w2,y],[self.w-w2,self.h-w2]],width) else: pygame.draw.lines(self.image, color, False, [[p1x,y],[x,y],[x,self.h-w2],[self.w-w2,self.h-w2],[self.w-w2,y]],width) class KeyBoard: def __init__(self,game_board,screen,kbrd_w,kbrd_h): self.game_board = game_board self.kbrd_w = kbrd_w self.kbrd_h = kbrd_h self.points = self.game_board.board.points #self.highlighted = [button,shift,button_on_hand,shift_on_hand,AltGr,AltGr_on_hand] self.a_map = game_board.lang.kbrd.accent_map self.a_map2 = game_board.lang.kbrd.accent_map2 self.highlighted = [-1,-1,-1,-1,-1,-1] self.keys = [] self.keys_list = pygame.sprite.RenderPlain() self.kbrd_font = [] self.kbrd_font.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(float(self.points)/2)))) self.kbrd_font.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(float(self.points)/3)))) self.canvas = pygame.Surface([kbrd_w, kbrd_h]) self.canvas.fill((255,255,255)) self.add_keys() self.draw_hands() def get_btns_to_hl(self,text): 'prepares a list of keys to highlight based on letter/character passed in key ids hardcoded' uc = text if text != " ": hl = [-1,-1,-1,-1,-1,-1] #check if letter is lowercase or what position it is on whether shift is needed #text = text.upper() if sys.version_info < (3, 0): #try: text = text.encode("utf-8") if text in self.a_map: hl[4] = 39 #hl[5] = 71 if text in self.a_map2: hl[1] = 55 hl[3] = 71 #hl[5] = 65 text = unicode(self.a_map[text],"utf-8") text = text[1] uc = text #print(text) else: if text in self.a_map: hl[4] = 39 #hl[5] = 71 if text in self.a_map2: hl[1] = 55 hl[3] = 71 text = self.a_map[text][1] uc = text #if (uc == text and uc not in [",",".","?","!"]): # shift = True #else: # shift = False shift = False for i in range(0,55): if sys.version_info < (3, 0): labels = [] for each in self.keys[i].labels: if len(each)>0: try: uni = unicode(each,"utf-8") except UnicodeDecodeError: uni = each else: uni = "" #labels.append(uni.upper()) labels.append(uni) else: #labels = [each.upper() for each in self.keys[i].labels] labels = [each for each in self.keys[i].labels] #uc = uc.upper() if uc in labels: hl[0] = i if uc == labels[0]: shift = True elif uc == labels[1]: shift = False if uc == labels[4] or uc == labels[5]: alt = True else: alt = False if shift: if self.keys[i].data_list[10]<4: #right_shift hl[1] = 55 hl[3] = 71 elif self.keys[i].data_list[10]>3: #left_shift hl[1] = 43 hl[3] = 64 hl[2] = self.keys[i].data_list[10]+64 if alt: hl[4] = 60 hl[5] = 73 self.highlight(hl,uc.lower()) else: self.highlight(hl,uc) break else: self.highlight([-1,-1,-1,-1,-1,-1],uc) else: self.highlight([59,-1,72,-1,-1,-1],"—") def highlight(self,hl_ids,txt): 'resets the highlight from previous letter and highlights new keys' #reset old highlight for each in self.highlighted: if each > -1: self.keys[each].color = self.keys[each].init_color if self.highlighted[2] > -1: self.keys[self.highlighted[2]].labels[3] = "" if self.highlighted[3] > -1: self.keys[self.highlighted[3]].labels[3] = "" if self.highlighted[5] > -1: self.keys[self.highlighted[5]].labels[3] = "" #apply highlight to new squares for i in range(6): if hl_ids[i] > -1: self.keys[hl_ids[i]].color = self.keys[hl_ids[i]].highlight_color if i == 2: self.keys[hl_ids[i]].labels[3] = txt if i == 3: self.keys[hl_ids[i]].labels[3] = "↑" if i == 5: self.keys[hl_ids[i]].labels[3] = "Alt" self.highlighted = hl_ids[:] def add_key(self,data_list, init_color, highlight_color): new_key = Key(self,data_list, init_color, highlight_color) self.keys.append(new_key) self.keys_list.add(new_key) def add_keys(self): #colors = [[249,91,91],[249,210,91],[169,249,91],[91,249,132],[91,249,249],[91,113,249],[188,91,249],[249,91,147],[249,219,180],[186,186,186]] colors = [[255,150,150],[255,229,150],[202,255,150],[150,255,185],[150,255,255], [150,165,255],[214,150,255],[255,150,187],[249,219,180],[186,186,186]] highlight_colors = [[255,0,0], [255,192,0], [127,255,0], [0,255,67], [0,255,255], [0,37,255], [156,0,255], [255,0,85], [255,157,29],[206,206,206]] keys = self.game_board.lang.kbrd.kbrd_keys #print(len(keys)) for each in keys: #self.add_key(x, y, w, h, top_left, bottom_left, middle, letter, init_color, highlight_color) self.add_key(each, colors[each[10]], highlight_colors[each[10]]) self.kbrd_h = self.keys[61].y + self.keys[61].h def scale_img(self, img, new_w, new_h): 'scales image depending on pygame version either with smoothscale or with scale' if pygame.version.vernum < (1, 8): return pygame.transform.scale(img, (new_w, new_h)) else: return pygame.transform.smoothscale(img, (new_w, new_h)) def draw_hands(self): img_pos = (0,0) #calculate new img_size = self.kbrd_w * 341 // 630 left = (self.kbrd_w - img_size)//2 try: img_org = pygame.image.load(os.path.join('images', 'hands.jpg')).convert() img = img_org.copy() img_rect = img.get_rect() #resize the image scaled_img = self.scale_img(img, img_size, img_size) img_rect = scaled_img.get_rect() pos_x = left pos_y = self.kbrd_h + (self.keys[61].h)//3 # + (self.kbrd_w * 11 // 445) img_pos = (pos_x,pos_y) self.canvas.blit(scaled_img,img_pos) except: pass def update(self): for each_key in self.keys: each_key.update() self.keys_list.draw(self.canvas) class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (255,255,255) font_color1 = (175,255,128) font_color2 = (0,230,0) font_color3 = (200,200,200) data = [15,12] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=False) if x_count < 15: data[0] = 15 elif x_count > 19: data[0] = 19 else: data[0] = x_count self.data = data self.line = 0 self.course = self.lang.kbrd_course self.level.lvl_count = len(self.course) if self.lang.lang in ["en_gb", "en_us"]: self.chapters = [1,3,5,7,10,13,15,18,20,22,24,26,28] elif self.lang.lang == "pl": self.chapters = [1,3,5,7,10,12,14,16,18,20,23,26,29,32] elif self.lang.lang == "ru": self.chapters = [1,3,5,7,10,13,15,18,20,22,24,26,28] self.t_string = self.course[self.level.lvl-1][1] self.t_multi = self.course[self.level.lvl-1][0] if sys.version_info < (3, 0): self.current_line = unicode((self.t_string[0]*self.t_multi[0]).strip(), "utf-8") else: self.current_line = (self.t_string[0]*self.t_multi[0]).strip() self.level.games_per_lvl = len(self.t_string) self.level.game_step = 1 label_w = self.data[0]//2 self.vis_buttons = [0,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.add_unit(0,0,label_w,1,classes.board.Label,"",color,"",0) self.left = self.board.units[-1] self.left.align = 2 self.left.font_color = font_color1 self.board.add_unit(label_w,0,1,1,classes.board.Label,self.current_line[0],color,"",0) self.middle = self.board.units[-1] self.middle.font_color = font_color2 self.middle.set_outline([0,230,0], 1) self.board.add_unit(label_w+1,0,label_w,1,classes.board.Label,self.current_line[1:],color,"",0) self.right = self.board.units[-1] self.right.align = 1 self.right.font_color = font_color3 self.board.add_unit(0,1,data[0],data[1]-1,classes.board.Label,"",color,"",0) self.kbrd = KeyBoard(self,self.board.units[3],self.board.units[3].rect.w,self.board.units[3].rect.h) self.kbrd.get_btns_to_hl(self.current_line[0]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN: char = event.unicode if len(char)>0: if char == self.middle.value: if len(self.right.value) > 0: self.left.value += char next_letter = self.right.value[0] self.middle.value = next_letter self.right.value = self.right.value[1:] self.kbrd.get_btns_to_hl(next_letter) self.board.s1.play() elif len(self.middle.value) > 0: self.left.value += char self.middle.value = "" self.check_result() for each in [self.left, self.middle, self.right]: each.update_me = True else: self.board.s2.play() self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) self.kbrd.update() self.board.units[3].painting = self.kbrd.canvas.copy() self.board.units[3].update_me = True gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.line < len(self.t_string)-1: self.line += 1 if sys.version_info < (3, 0): self.current_line = unicode((self.t_string[self.line]*self.t_multi[self.line]).strip(), "utf-8") else: self.current_line = (self.t_string[self.line]*self.t_multi[self.line]).strip() self.level.game_step = self.line + 1 self.left.value = "" self.middle.value = self.current_line[0] self.right.value = self.current_line[1:] self.kbrd.get_btns_to_hl(self.current_line[0]) self.mainloop.redraw_needed[1] = True else: self.level.next_board() pysiogame-1.30.811/game_boards/game028.py0000644000175000017500000000647312201770066016743 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.board import classes.laby import classes.extras as ex import pygame import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,5,18) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,5,4) def create_game_objects(self, level = 1): #create non-movable objects self.board.check_laby = True s = random.randrange(150, 190, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) white = ((255,255,255)) self.auto_checking = True #all_grid_sizes_at_1024_768 = [[7, 4],[8, 5],[9, 6],[10, 7],[11, 7],[12, 8],[13, 9],[14, 9],[15, 10],[16, 11],[17, 11],[18, 12],[19, 13],[20, 14],[21, 14],[22, 15],[23, 16],[24, 16],[25, 17],[26, 18],[27, 19],[28, 19],[29, 20],,[30,21]] grid_sizes = [[5, 4],[7, 5],[8, 6],[9, 7],[11, 8],[12, 9],[14, 10],[15, 11],[17, 12],[18, 13],[19, 14],[21, 15],[22, 16],[24, 17],[25, 18],[26, 19],[28, 20],[29, 21],[30,22]] data = grid_sizes[self.level.lvl-1] #rescale the number of squares horizontally to better match the screen width x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.data = data self.vis_buttons = [0,1,1,1,1,1,1,0,1] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.mylaby = classes.laby.laby(data[0],data[1],0,0,scale) self.mylaby.generate_laby() self.board.add_unit(0,0,1,1,classes.board.ImgShip,"",((255,255,255)),"sheep.png") self.person = self.board.ships[0] self.person.audible = True self.person.draggable = False self.board.add_door(data[0]-1,data[1]-1,1,1,classes.board.Door,"",((255,255,255)),"sheep_herd.png") self.board.units[0].outline=False self.board.ships[0].outline=False self.board.all_sprites_list.move_to_front(self.person) self.board.active_ship = 0 self.ship_id = 0 def handle(self,event): if event.type == pygame.MOUSEBUTTONDOWN: pass else: gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent if self.show_msg == False: #self.person.poll() self.mylaby.show(game) #self.person.show() def after_keydown_move(self): self.changed_since_check = True self.check_result() def check_result(self): target = pygame.sprite.spritecollide(self.board.units[0], self.board.ship_list, False, collided = None) if len(target)>0: self.level.next_board() pysiogame-1.30.811/game_boards/game020.py0000644000175000017500000002125512201770066016726 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random from math import pi,cos,sin class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,3) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,9,5) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color = ((255,255,255)) white = ((255,255,255)) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders self.font_color = ex.hsv_to_rgb(h,255,100) if self.level.lvl == 1: data = [9,5,3,5,2,5] elif self.level.lvl == 2: data = [9,5,3,7,2,5] elif self.level.lvl == 3: data = [9,5,3,10,2,5] self.data = data self.board.level_start(data[0],data[1],self.layout.scale) self.num_list = [] self.num_list2 = [] decimals = [1,2,2.5,3,4,5,6,7,7.5,8,9] sign = "/" numbers = [] #first number num1 = random.choice(decimals) num2 = 10 numbers.append([num1,num2]) expr = str(round(float(num1) / float(num2),2)) self.num_list.append(expr) self.num_list2.append(expr) #second fraction num1 = random.randrange(1,data[3]-1) num2 = random.randrange(num1+1,data[3]) numbers.append([num1,num2]) expr = str(float(num1)) + sign + str(float(num2)) self.num_list.append(expr) #self.num_list2.append(str(num1) + sign + str(num2)) self.num_list2.append(["",str(num1),str(num2),""]) #create table to store 'binary' solution self.solution_grid = [1,1,1,1,1,1,1,1,1] self.expression = [" " for x in range(data[0])] #find position of first door square xd = (data[0]-data[2])//2 #add objects to the board self.board.add_unit(0,1,3,3,classes.board.Label,"",white,"",data[5]) self.board.add_unit(6,1,3,3,classes.board.Label,"",white,"",data[5]) size = self.board.scale center = [size//2,size//2] for i in range(0,data[4]): x2 = xd+i*2 caption = self.num_list2[i] self.board.add_unit(x2,2,1,1,classes.board.Label,caption,color1,"",data[5]) self.board.units[-1].font_color = self.font_color self.board.units[i+2].set_outline(0,1) if i == 1: self.draw_fractions(self.board.units[i+2].painting,size,center,color1) self.board.units[i+2].image = self.board.units[i+2].painting.copy() self.expression[x2]=str(self.num_list[i]) if i< data[4]-1: self.solution_grid[x2+1]=1 signs = [" < "," = "," > "]*(data[4]-1) if self.level.lvl > 12: signs.append(" < ") #just for the symetry for i in range(len(signs)): if len(signs) < data[0]: if i==0 and len(signs)%2 == 0: x=data[0]//2 y=3 else: x = (data[0]-len(signs))//2 y=0 else: if i < data[0]: x=0 y=0 else: x = ((data[0] - (len(signs) - data[0]))//2)-data[0] y=3 self.board.add_unit(x+i,y,1,1,classes.board.Letter,signs[i],color1,"",data[5]) self.board.ships[-1].font_color = self.font_color self.board.ships[i].readable = False self.board.ships[i].set_outline(0,1) ind = len(self.board.units) for i in range(0,data[4]-1): self.board.add_door(xd+i*2+1,2,1,1,classes.board.Door,"",white,"") self.board.units[ind + i].door_outline = True self.board.all_sprites_list.move_to_front(self.board.units[ind + i]) instruction = self.d["Drag lt"] self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,color0,"",9) self.board.ships[-1].font_color = self.font_color self.board.ships[-1].immobilize() self.board.ships[-1].speaker_val = self.d["Drag lt2"] self.board.ships[-1].set_outline(0,1) self.board.ships[-1].speaker_val_update = False size = self.board.units[0].grid_w*self.board.scale center = [size//2,size//2] for i in range(2): canvas = pygame.Surface([size, size-1]) canvas.fill(self.board.units[i].initcolor) self.draw_circles(numbers[i],canvas,size,center,color1)#data[7](data, canvas, i) self.board.units[i].painting = canvas.copy() def draw_fractions(self,canvas,size,center,color): lh = max(int(size * 0.05),2) pygame.draw.line(canvas,self.font_color,[center[0]-size//7,center[1]-lh//2],[center[0]+size//7,center[1]-lh//2],lh) def draw_circles(self,numbers,canvas,size,center,color): angle_step = 2*pi/numbers[1] angle_start= -pi/2 angle_arc_start = -pi/2 r = size//2 - size//20 angle = angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] points = [] multipoints = [] i = 0 while angle < angle_e: #maximum of 158 lines per pi x=(r-2)*cos(angle)+center[0] y=(r-2)*sin(angle)+center[1] i += 1 angle = angle_start + 0.02*(i) pygame.draw.line(canvas,color,center,[x,y],5) for i in range(numbers[1]): #angle for line angle = angle_start + angle_step*i # Calculate the x,y for the end point x=r*cos(angle)+center[0] y=r*sin(angle)+center[1] multipoints.append([x,y]) #draw clipping polygon points.append(center) if numbers[0] == 2.5: points.extend([[center[0]+r,center[1]],[center[0],center[1]+r],[center[0]-r,center[1]],[center[0],center[1]-r]]) elif numbers[0] == 7.5: points.extend([[center[0]-r,center[1]],[center[0],center[1]-r]]) else: for i in range(numbers[0],numbers[1]): points.append(multipoints[i]) points.append([center[0],center[1]-r]) pygame.draw.polygon(canvas, (255,255,255), points, 0) #draw outline for 0.25 or 0.75 if numbers == [2.5,10]: pygame.draw.line(canvas,self.color2,[center[0],center[1]],[center[0]+r,center[1]],1) elif numbers == [7.5,10]: pygame.draw.line(canvas,self.color2,[center[0],center[1]],[center[0]-r,center[1]],1) elif numbers == [1,2]:#white area to the left... pygame.draw.line(canvas,(255,255,255),[center[0]-3,center[1]-r],[center[0]-3,center[1]+r],6) #Draw the line from the center to the calculated end points for each in multipoints: pygame.draw.aaline(canvas,self.color2,center,each) pygame.draw.circle(canvas,self.color2,center,r,2) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[2] == self.solution_grid: for i in range(len(self.board.ships)-1): if self.board.ships[i].grid_y == 2: #if the sign is on line with expression value = self.board.ships[i].value if value == " = ": value = "==" self.expression[self.board.ships[i].grid_x]=value eval_string = s = ''.join(self.expression) eval_string.strip() if eval(eval_string)==True: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."]) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True) pysiogame-1.30.811/game_boards/game013.py0000644000175000017500000001253512201770066016731 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import sys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,10,8) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,15,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(190, 225) v = random.randrange(230, 255) h = random.randrange(0, 255) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) #data = [x_count, y_count, letter_count, top_limit, ordered] if self.level.lvl == 1: data = [15,9,15,0] elif self.level.lvl == 2: data = [15,9,15,1] elif self.level.lvl == 3: data = [15,9,15,2] elif self.level.lvl == 4: data = [15,9,15,3] elif self.level.lvl == 5: data = [15,9,30,4] elif self.level.lvl == 6: data = [15,9,30,5] elif self.level.lvl == 7: data = [15,9,30,6] elif self.level.lvl == 8: data = [15,9,30,7] letter_table = [] letter_table.extend(self.lang.alphabet_lc) letter_table.extend(self.lang.accents_lc) self.words = self.lang.di[data[3]] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.word = self.words[random.randrange(1,self.words[0])] if sys.version_info < (3, 0): self.wordu = unicode(self.word,"utf-8") word_len = len(self.wordu) self.word_l = [] #dirty way of replacing the word with letters from alphabet for each in self.wordu: for i in range(len(letter_table)): if each == unicode(letter_table[i],"utf-8"): self.word_l.append(letter_table[i]) else: word_len = len(self.word) self.word_l = self.word self.num_list = [] choice_list = self.lang.alphabet_lc #[x for x in range(97,123)] for i in range(data[2]-word_len):#adding noice letters index = random.randrange(0,len(choice_list)) self.num_list.append(choice_list[index]) shuffled = self.num_list[:] for i in range(word_len): shuffled.append(self.word_l[i]) random.shuffle(shuffled) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [1 for x in range(data[0])] x = 0 y = 3 for i in range(len(shuffled)): h = random.randrange(0, 255, 5) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 caption = shuffled[i] self.board.add_unit(x,y,1,1,classes.board.Letter,caption,number_color,"",1) x += 1 if x >= data[0]: x = 0 y += 1 #find position of first door square x = (data[0]-word_len)//2 #add objects to the board for i in range(word_len): self.board.add_door(x+i,0,1,1,classes.board.Door,"",color,"") self.board.units[i].door_outline = True self.board.all_sprites_list.move_to_front(self.board.units[i]) self.board.add_unit(0,0,x,1,classes.board.Obstacle,"",color0) self.board.add_unit(x+word_len,0,data[0]-x-word_len,1,classes.board.Obstacle,"",color0) self.board.add_unit(0,data[1]-2,data[0],1,classes.board.Letter,self.d["Write a word:"],color0,"",1) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,self.word,color0,"",0) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.say(self.word,2) self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): result = [" " for i in range(self.data[0])] if self.changed_since_check: if self.board.grid[0] == self.solution_grid: for i in range(len(self.board.ships)): if self.board.ships[i].grid_y == 0: result[self.board.ships[i].grid_x] = self.board.ships[i].value result_s = ''.join(result).strip() if self.word == result_s: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True) pysiogame-1.30.811/game_boards/game052.py0000644000175000017500000001345612201770066016737 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import math import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color = ex.hsv_to_rgb(225,15,235) color2 = (255,255,255) self.col_c = (0,255,255) self.col_m = (255,0,255) self.col_y = (255,255,0) self.col_k = (0,0,0) self.col_e = (255,255,255) colorkey = (2,2,2) self.col_bg = self.col_e#(255,246,219) data = [32,23] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=True) if x_count > 32: data[0] = x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.initcolor = self.col_bg self.board.board_bg.color = self.col_bg self.board.board_bg.update_me = True self.board.moved = self.moved y = data[1]-3 self.rgb_g = [y,y,y] self.rgbx3 = [self.col_e,self.col_e,self.col_e] self.board.add_unit(1,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"brush_c.png") self.board.add_unit(4,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"brush_m.png") self.board.add_unit(7,y,2,3,classes.board.ImgAlphaShip,"",self.col_bg,"brush_y.png") for each in self.board.ships: each.outline = False each.audible = False #add colour container self.board.add_unit(10,0,data[0]-10,data[1],classes.board.Label,"",self.col_e,"",0) self.canvas = self.board.units[0] self.canvas_center = [(self.canvas.grid_w*self.board.scale)//2,(self.canvas.grid_h*self.board.scale)//2] #adding borders between the colour tubes self.board.add_unit(0,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(3,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(6,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) self.board.add_unit(9,0,1,data[1],classes.board.Label,"",self.col_bg,"",0) #adding colour guides self.board.add_door(1,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_c, 1) self.board.add_door(4,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_m, 1) self.board.add_door(7,0,2,data[1],classes.board.Door,"",color,"",0) self.board.units[-1].set_outline(self.col_y, 1) #adding colour strips self.board.add_door(1,data[1]-1,2,1,classes.board.Door,"",self.col_c,"",0) self.board.add_door(4,data[1]-1,2,1,classes.board.Door,"",self.col_m,"",0) self.board.add_door(7,data[1]-1,2,1,classes.board.Door,"",self.col_y,"",0) #self.color_info = self.board.units[-1] for i in [5,6,7,8,9,10]: if i>7: self.board.units[i].image.set_colorkey(colorkey) self.board.all_sprites_list.move_to_back(self.board.units[i]) else: self.board.all_sprites_list.move_to_front(self.board.units[i]) self.canvas.set_outline([255,229,127],1) self.canv = [] for i in range(4): self.canv.append(pygame.Surface([self.canvas.grid_w*self.board.scale, self.canvas.grid_h*self.board.scale-1])) self.board.all_sprites_list.move_to_back(self.board.board_bg) self.mix() def mix(self): for i in range(3): self.rgb_g[i] = self.board.ships[i].grid_y self.update_sliders() #for i in range(4): self.canv[3].fill(self.col_e) ct = self.canvas_center radius = 9*self.board.scale x = 1*self.board.scale rect = [[ct[0],ct[1]-x],[ct[0]-x,ct[1]+x],[ct[0]+x,ct[1]+x]] for i in range(3): pygame.draw.circle(self.canv[i], self.rgbx3[i], rect[i], radius, 0) self.canv[3].blit(self.canv[i],[0,0],special_flags = pygame.BLEND_SUB) self.canvas.painting = self.canv[3].copy() self.canvas.update_me = True def update_sliders(self): for i in range(3): strip = self.board.units[i+8] strip.grid_y = self.rgb_g[i]+3 strip.grid_h = self.data[1]-strip.grid_y col = [] step = 255 / 20.0 for each in strip.initcolor: if each == 0: if strip.grid_y == 23: col.append(255) elif strip.grid_y == 3: col.append(0) else: col.append(int((strip.grid_y-3) * step)) else: col.append(255) col2 = [255-col[0],255-col[1],255-col[2]] self.rgbx3[i] = col2 strip.color = col strip.pos_update() strip.update_me = True def moved(self): self.mix() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game014.py0000644000175000017500000001566712201770066016743 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,2,16) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,26,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) s = random.randrange(190, 225) v = random.randrange(230, 255) h = random.randrange(0, 255) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) font_color = ex.hsv_to_rgb(h,255,140) #data = [x_count, y_count, letter_count, top_limit, ordered] if self.level.lvl == 1: data = [26,9,97,123,0,5,0] elif self.level.lvl == 2: data = [26,9,97,123,0,10,0] elif self.level.lvl == 3: data = [26,9,97,123,0,15,0] elif self.level.lvl == 4: data = [26,9,97,123,0,20,0] elif self.level.lvl == 5: data = [26,9,97,123,1,5,0] elif self.level.lvl == 6: data = [26,9,97,123,1,10,0] elif self.level.lvl == 7: data = [26,9,97,123,1,15,0] elif self.level.lvl == 8: data = [26,9,97,123,1,20,0] elif self.level.lvl == 9: data = [26,9,65,91,0,5,0] elif self.level.lvl == 10: data = [26,9,65,91,0,10,0] elif self.level.lvl == 11: data = [26,9,65,91,0,15,0] elif self.level.lvl == 12: data = [26,9,65,91,0,20,0] elif self.level.lvl == 13: data = [26,9,65,91,1,5,0] elif self.level.lvl == 14: data = [26,9,65,91,1,10,0] elif self.level.lvl == 15: data = [26,9,65,91,1,15,0] elif self.level.lvl == 16: data = [26,9,65,91,1,20,0] """ if self.level.lvl == 17: data = [26,9,97,123,0,5,11] elif self.level.lvl == 18: data = [26,9,97,123,0,10,11] elif self.level.lvl == 19: data = [26,9,97,123,0,15,11] elif self.level.lvl == 20: data = [26,9,97,123,0,20,11] elif self.level.lvl == 21: data = [26,9,97,123,1,5,11] elif self.level.lvl == 22: data = [26,9,97,123,1,10,11] elif self.level.lvl == 23: data = [26,9,97,123,1,15,11] elif self.level.lvl == 24: data = [26,9,97,123,1,20,11] elif self.level.lvl == 25: data = [26,9,65,91,0,5,11] elif self.level.lvl == 26: data = [26,9,65,91,0,10,11] elif self.level.lvl == 27: data = [26,9,65,91,0,15,11] elif self.level.lvl == 28: data = [26,9,65,91,0,20,11] elif self.level.lvl == 29: data = [26,9,65,91,1,5,11] elif self.level.lvl == 30: data = [26,9,65,91,1,10,11] elif self.level.lvl == 31: data = [26,9,65,91,1,15,11] elif self.level.lvl == 32: data = [26,9,65,91,1,20,11] """ #self.chapters = [1,5,9,13,17,21,25,29,32] self.chapters = [1,5,9,13,16] self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.word = [chr(x) for x in range(data[2],data[3])]#self.words[random.randrange(0,len(self.words))] word_len = 26#len(self.word) shuffled = [] choice_list = self.word[:] index_list = [x for x in range(26)] lowered = [] for i in range(data[5]):#picking letters to lower index = random.randrange(0,len(index_list)) lowered.append(choice_list[index_list[index]]) del(index_list[index]) random.shuffle(lowered) color = ((255,255,255)) #create table to store 'binary' solution self.solution_grid = [1 for x in range(data[0])] x = 0 y = 0 x2 = (data[0]-len(lowered))//2 y2 = 3 j = 0 for i in range(len(self.word)): picked = False if self.word[i] in lowered: picked = True if data[4] == 1: h = random.randrange(0, 255, 5) else: if picked: letter = lowered[j] else: letter = self.word[i] h = round(9.8*(ord(letter)-data[2])) number_color = ex.hsv_to_rgb(h,s,v) #highlight 1 #change y if picked: caption = lowered[j] self.board.add_unit(x2+j,y2,1,1,classes.board.Letter,caption,number_color,"",data[6]) self.board.add_door(x,y,1,1,classes.board.Door,"",color,"") self.board.units[j].door_outline = True self.board.ships[i].highlight = False self.board.ships[i].outline_highlight = True j += 1 else: caption = self.word[i] self.board.add_unit(x,y,1,1,classes.board.Letter,caption,number_color,"",data[6]) self.board.ships[i].draggable = False x += 1 if x >= data[0]: x = 0 y += 1 for each in self.board.units: self.board.all_sprites_list.move_to_front(each) instruction = self.d["Complete abc"] self.board.add_unit(0,data[1]-2,data[0],2,classes.board.Letter,instruction,color0,"",0) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = font_color self.outline_all(0,1) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): result = [" " for i in range(self.data[0])] if self.changed_since_check: if self.board.grid[0] == self.solution_grid: for i in range(len(self.board.ships)-1): if self.board.ships[i].grid_y == 0: result[self.board.ships[i].grid_x] = self.board.ships[i].value if self.word == result: self.level.next_board() else: self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False else: self.level.try_again(True) pysiogame-1.30.811/game_boards/game050.py0000644000175000017500000002341512201770066016731 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex from classes.simple_vector import Vector2 import pygame import classes.board import random class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,2,12) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,15,11) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #data = [x_count, y_count, square_num, canvas_height, non_vertical, color_difference, games_per_level, mess_drawing_function] #setting up game flow / level dificulty if self.level.lvl == 1: data = [15,11,3,6,2,50,2,self.straight_lines] elif self.level.lvl == 2: data = [15,11,5,6,2,35,2,self.straight_lines] elif self.level.lvl == 3: data = [15,11,7,6,2,25,2,self.straight_lines] elif self.level.lvl == 4: data = [15,11,9,6,2,20,2,self.straight_lines] elif self.level.lvl == 5: data = [15,11,3,6,2,50,3,self.bezier_lines] elif self.level.lvl == 6: data = [15,11,5,6,2,35,3,self.bezier_lines] elif self.level.lvl == 7: data = [15,11,7,6,2,25,3,self.bezier_lines] elif self.level.lvl == 8: data = [15,11,9,6,2,20,3,self.bezier_lines] elif self.level.lvl == 9: data = [15,11,3,6,2,50,4,self.bezier2x_lines] elif self.level.lvl == 10: data = [15,11,5,6,2,35,4,self.bezier2x_lines] elif self.level.lvl == 11: data = [15,11,7,6,2,25,4,self.bezier2x_lines] elif self.level.lvl == 12: data = [15,11,9,6,1,20,4,self.bezier2x_lines] self.chapters = [1,5,9,12] #rescale the number of squares horizontally to better match the screen width data[0] = self.get_x_count(data[1],even=False) data[3] = data[0]-4 self.data = data self.colors = [] self.level.games_per_lvl = data[6] self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) s = random.randrange(5, 20) v = random.randrange(240, 250) h = random.randrange(0, 255) color = ex.hsv_to_rgb(h,s,v) self.board.add_unit(1,0,data[0]-4,data[1],classes.board.Obstacle,"",color) self.top_colors = [] h = random.randrange(0, 75, 1) start_from = (data[1]-data[2])//2 end_at = start_from+data[2] j=1 for i in range(start_from, end_at): s = random.randrange(180, 250, 5) v = random.randrange(180, 250, 5) color = ex.hsv_to_rgb(h+(i-start_from)*data[5],s,v) self.colors.append(color) self.board.add_unit(0,i,1,1,classes.board.Label,str(j),color,"",3) self.board.add_unit(data[0]-1,i,1,1,classes.board.Letter,str(j),color,"",3) self.board.ships[-1].highlight = False self.board.ships[-1].outline_highlight = True j += 1 #self.top_colors.append(color) self.colors_completed = self.colors[:] self.outline_all(0,1) self.draw_the_mess(data,start_from,end_at) for i in range(data[1]): if self.solution_positions[i] == 1: self.board.add_door(data[0]-3,i,1,1,classes.board.Door,"",color,"") self.board.units[-1].door_outline = True def draw_the_mess(self,data,start_from,end_at): #set up the beginning and ending positions #starting points: step = self.board.scale self._step = step half_st = round(self.board.scale/2) self.possible_positions = [] self.start_positions = [] self.end_positions = [] self.ready_lines = [] indexes = [] self.solution = [] self.solution_colors = [] self.solution_positions = [] for i in range(data[1]): #next_step = [i*step+half_st,step*data[3]-1] next_step = [step*data[3]-1,i*step+half_st] self.possible_positions.append(next_step) indexes.append(i) self.solution_positions.append(0) for i in range(start_from, end_at): #next_step = [i*step+half_st,0] next_step = [0,i*step+half_st] self.start_positions.append(next_step) #repeat until the difference is larger than 2 steps picked = next_step while (picked[0] < (next_step[0]+(step*data[4]))) and (picked[0] > (next_step[0]-(step*data[4]))): index = random.randrange(0,len(indexes)) picked = self.possible_positions[indexes[index]] self.end_positions.append(picked) self.solution.append(indexes[index]) del(indexes[index]) #print(self.start_positions) #print(self.end_positions) #get a list of positions where the squares should be dragged to for i in range(0,len(self.solution)): self.solution_positions[self.solution[i]]=1 self.canvas = pygame.Surface([self.board.units[0].grid_w*self.board.scale, self.board.units[0].grid_h*self.board.scale-1]) self.canvas.fill(self.board.units[0].initcolor) #create randomized lines for i in range(data[2]): data[7](data, self.canvas, i) #and draw them all at once in a separate loop self.draw_lines() def draw_lines(self): self.canvas.fill(self.board.units[0].initcolor) self.swap_colors() for i in range(self.data[2]): pygame.draw.aalines(self.canvas, self.colors_completed[i], False, self.ready_lines[i]) self.board.units[0].painting = self.canvas.copy() self.board.units[0].update_me = True def swap_colors(self): for each_item in self.board.ships: if each_item.grid_x == self.data[0]-3 and each_item.grid_y == self.solution[each_item.unit_id]: self.colors_completed[each_item.unit_id] = self.colors[each_item.unit_id] else: self.colors_completed[each_item.unit_id] = [0,0,0] def straight_lines(self, data, canvas, i): self.ready_lines.append([self.start_positions[i],self.end_positions[i]]) def bezier_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end_midifier], [end]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] modifiers=[[0,0],[0,0]] modifiers[0]=[random.randrange(self._step*2,self._step*data[3]),random.randrange(0,self.layout.game_h)] modifiers[1]=[random.randrange(0,self._step*(data[3]-2)),random.randrange(0,self.layout.game_h)] points = [Vector2(self.start_positions[i]), Vector2(modifiers[0]), Vector2(self.end_positions[i]), Vector2(modifiers[1])] bezier_points = ex.DrawBezier(points) self.ready_lines.append(bezier_points) def bezier2x_lines(self, data, canvas, i): #points = [[beginning], [beginning_midifier], [end], [end_midifier]] #points = [[200, 400], [300, 250], [450, 500], [500, 475]] canvas_w = self.layout.game_w - 4*self._step canvas_h = self.layout.game_h #self._step*data[3] bezier = [[[0,0] for j in range(4)] for j in range(2)] #line 1 start bezier[0][0] = Vector2(self.start_positions[i]) bezier[0][1] = Vector2(random.randrange(self._step*4,canvas_w-self._step),random.randrange(self._step,canvas_h-self._step))#mod1 #first point modifier #line 1 end bezier[0][2] = Vector2(random.randrange(self._step*2,canvas_w-self._step*2),random.randrange(self._step*2,canvas_h-self._step*2)) #first line end bezier[0][3] = Vector2(ex.rand_safe_curve(bezier[0][2],canvas_w,canvas_h)) #line 2 start bezier[1][0] = bezier[0][2] bezier[1][1] = bezier[0][2] + Vector2(-(Vector2.from_points(bezier[0][2], bezier[0][3]))) #3rd point modifier #line 2 end bezier[1][2] = Vector2(self.end_positions[i]) #last point bezier[1][3] = Vector2(random.randrange(self._step,canvas_w-self._step*4),random.randrange(self._step,canvas_h - self._step)) #4th point modifier bezier_points = [] for j2 in range(2): bezier_points.extend(ex.DrawBezier(bezier[j2])) self.ready_lines.append(bezier_points) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONUP and event.button == 1: self.draw_lines() self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: self.result = [] for i in range(self.data[1]): self.result.append(self.board.grid[i][self.data[0]-3]) correct = True if self.solution_positions == self.result: #self.board.grid[7]: for each_item in self.board.ships: if each_item.grid_y != self.solution[each_item.unit_id]: correct = False break else: correct = False if correct == True: self.level.next_board() else: self.changed_since_check = False self.say(self.d["Please try again."]) self.level.try_again() pysiogame-1.30.811/game_boards/game043.py0000644000175000017500000001255512201770066016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import classes.board import random import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): #create non-movable objects self.board.draw_grid = False s = random.randrange(30, 50) v = random.randrange(230, 255) h = random.randrange(0, 225) letter_color = ex.hsv_to_rgb(h,s,v) white = ((255,255,255)) outline_color = ex.hsv_to_rgb(h,s+50,v-50) frame_color = [255,255,255] card_color = ex.hsv_to_rgb(h+10,s-25,v) font_color = ex.hsv_to_rgb(h,255,140) data = [15,10] #stretch width to fit the screen size data[0] = self.get_x_count(data[1],even=False) if data[0]<15: data[0]=15 self.data = data self.x_offset = (data[0]-9)//2 self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) t_area = "½ah" self.shape_names = self.lang.solid_names #self.shape_names = ["Cube", "Square Prism","Triangular Prism", "Square Pyramid", "Triangular Pyramid", "Sphere", "Cylinder", "Cone", "Torus"] self.shape_areas = ["6a²", "2a² + 4aH", "ah + 3aH", "a² + 2as", "½ah + 3/2 × as", "4πr²", "2πr² + 2πrH", "πr² + πrs", "4π² × R × r"] self.shape_circ = ["a³", "a²H", "½ah × H", "⅓a² × H", "ah/6 × H", "4/3 × πr³", "πr²H", "⅓πr²H", "2π² × R × r²"] x = self.x_offset y = 0 for i in range(9): self.board.add_unit(x,y,1,1,classes.board.Letter,self.shape_names[i],white,"",2) self.board.ships[-1].font_color=(255,255,255,0) x += 1 x=(data[0]-4)//2 y=1 self.shape_count = len(self.board.ships) #Card self.board.add_unit(x-2,y+1,9,2,classes.board.Letter,self.shape_names[0],card_color,"",2) self.board.add_unit(x+2,y+3,5,1,classes.board.Letter,self.d["surface area:"],card_color,"",3) self.board.add_unit(x+2,y+4,5,1,classes.board.Label,"6a"+chr(178),card_color,"",3) self.board.add_unit(x+2,y+5,5,1,classes.board.Letter,self.d["volume:"],card_color,"",3) self.board.add_unit(x+2,y+6,5,1,classes.board.Label,"a"+chr(179),card_color,"",3) #frame size 288 x 216 self.board.add_unit(x-2,y+3,4,4,classes.board.MultiImgSprite,self.shape_names[0],card_color,"flashcard_solids.jpg",row_data=[9,1]) #Frame #self.board.add_unit(0,y,x-2,data[1]-2,classes.board.Obstacle,"",frame_color) #self.board.add_unit(x+7,y,x-2,data[1]-2,classes.board.Obstacle,"",frame_color) #self.board.add_unit(x-2,y,9,1,classes.board.Obstacle,"",frame_color) #self.board.add_unit(x-2,y+7,9,1,classes.board.Obstacle,"",frame_color) self.board.add_door(x-2,y+1,9,6,classes.board.Door,"",card_color,"") self.board.add_door(x-2,0,9,1,classes.board.Door,"",card_color,"flashcard_solids_72.jpg") self.board.units[2].door_outline = True self.board.units[2].perm_outline_color = font_color self.board.all_sprites_list.move_to_front(self.board.units[2]) self.board.all_sprites_list.move_to_front(self.board.units[3]) self.slide = self.board.ships[self.shape_count+3] self.slide.build_frame_flow(self.shape_count+3) self.slide.correction = True self.slide.perm_outline = True self.slide.perm_outline_color = font_color for each in self.board.ships: each.immobilize() each.font_color = font_color for each in self.board.units: each.font_color = font_color def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONUP: self.active_item = self.board.ships[self.board.active_ship] if self.active_item.unit_id < self.shape_count: self.create_card(self.active_item) def create_card(self, active): self.board.ships[self.shape_count].value = self.shape_names[active.unit_id] self.board.units[0].value = self.shape_areas[active.unit_id] self.board.units[1].value = self.shape_circ[active.unit_id] self.slide.value = self.shape_names[active.unit_id] self.mainloop.redraw_needed[0] = True self.slide.set_frame(active.unit_id) self.board.active_ship = -1 self.slide.update_me = True for i in [0,1]: self.board.units[i].update_me = True self.board.ships[self.shape_count].update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game006.py0000644000175000017500000002010412201770066016722 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,17) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): #create non-movable objects self.vis_buttons = [0,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = True self.board.draw_grid = False s = random.randrange(150, 190, 2) v = random.randrange(230, 255, 2) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,30,230) #highlight 1 self.color = color0 self.highlight_color = ex.hsv_to_rgb(h,230,150) font_color = ex.hsv_to_rgb(h,70,230) white = ((255,255,255)) self.level.game_step = 1 self.start_sequence = True self.completed_mode = False self.game_over_mode = False self.disp_counter = 0 self.disp_len = 3 self.found = set() #setting level variable #data = [x_count, y_count, number_count, top_limit, ordered] if self.level.lvl == 1: data = [13,9,5,3,3] elif self.level.lvl == 2: data = [13,9,8,3,4] elif self.level.lvl == 3: data = [12,9,8,4,4] elif self.level.lvl == 4: data = [12,9,7,4,5] elif self.level.lvl == 5: data = [13,9,7,5,5] elif self.level.lvl == 6: data = [13,9,11,5,6] elif self.level.lvl == 7: data = [12,9,11,6,6] elif self.level.lvl == 8: data = [12,9,15,6,7] elif self.level.lvl == 9: data = [13,9,15,7,7] elif self.level.lvl == 10: data = [13,9,9,7,8] elif self.level.lvl == 11: data = [12,9,9,8,8] elif self.level.lvl == 12: data = [12,9,14,8,9] elif self.level.lvl == 13: data = [13,9,14,9,9] elif self.level.lvl == 14: data = [12,9,14,10,9] elif self.level.lvl == 15: data = [13,9,14,11,9] elif self.level.lvl == 16: data = [12,9,14,12,9] elif self.level.lvl == 17: data = [13,9,14,13,9] self.chapters = [1,3,5,7,9,11,13,15,17] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: data[0] = self.get_x_count(data[1],even=True) else: data[0] = self.get_x_count(data[1],even=False) self.data = data self.square_count = self.data[3]*self.data[4] if self.square_count % 2 == 0: a = 0 else: a = 1 self.max_games = self.square_count // 2 + a self.level.games_per_lvl = self.max_games self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.current_count = 1 self.choice_list = [x for x in range(1,data[2]+1)] self.shuffled = self.choice_list[:] random.shuffle(self.shuffled) h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]#-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3])//2 #side margin width self.board.add_door(w2,h1,data[3],data[4],classes.board.Door,"",white,"") x = w2 y = h1 for i in range(self.square_count): caption = str(i+1) self.board.add_unit(x,y,1,1,classes.board.Letter,caption,color0,"",3) self.board.ships[i].highlight = False self.board.ships[i].readable = False self.board.ships[i].font_color = font_color if x >= w2+data[3]-1: x = w2 y += 1 else: x += 1 self.outline_all(0,1) #horizontal if data[4] < 8: self.board.add_unit(0,0,data[0],h1,classes.board.Obstacle,"",white,"",7)#top if data[4] < 9: self.board.add_unit(0,h1+data[4],data[0],h2,classes.board.Obstacle,"",white,"",7)#bottom 1 #side obstacles if data[3]<12: self.board.add_unit(0,h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#left self.board.add_unit(w2+data[3],h1,w2,data[4],classes.board.Obstacle,"",white,"",7)#right self.board.all_sprites_list.move_to_front(self.board.units[0]) self.draw_nums() def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.show_msg == False and self.start_sequence==False: if 0 <= self.board.active_ship < self.square_count: active = self.board.ships[self.board.active_ship] if active.unit_id in self.chosen: active.initcolor = self.highlight_color active.color = active.initcolor self.found.add(active.unit_id) if len(self.found)==self.current_count: self.completed_mode = True self.ai_enabled = True else: active.initcolor = (255,0,0) active.color = active.initcolor self.game_over_mode = True #self.game_over() self.ai_enabled = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def draw_nums(self): choice = [x for x in range(self.square_count)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:self.current_count] def next_level(self): self.current_step = 0 self.current_count += 1 self.found = set() self.level.game_step = self.current_count self.mainloop.redraw_needed[1] = True if self.current_count <= self.max_games: self.draw_nums() self.reset_colors() self.start_sequence = True self.ai_enabled = True else: self.level.levelup() def game_over(self): self.level.game_step = 0 self.current_count = 0 self.next_level() def highlight_colors(self): for each in self.board.ships: if each.unit_id in self.chosen: each.initcolor = self.highlight_color each.color = each.initcolor each.update_me = True self.mainloop.redraw_needed[0] = True self.mainloop.redraw_needed[1] = True def reset_colors(self): for each in self.board.ships: each.initcolor = self.color each.color = each.initcolor each.update_me = True self.mainloop.redraw_needed[0] = True def ai_walk(self): if self.start_sequence: if self.disp_counter < self.disp_len: if self.disp_counter == 0: self.highlight_colors() self.disp_counter += 1 else: self.reset_colors() self.start_sequence = False self.ai_enabled = False self.disp_counter = 0 elif self.completed_mode: self.disp_counter += 1 if self.disp_counter > 1:# self.disp_len: self.completed_mode = False self.disp_counter = 0 self.next_level() elif self.game_over_mode: self.disp_counter += 1 self.highlight_colors() if self.disp_counter > 2:# self.disp_len: self.game_over_mode = False self.disp_counter = 0 self.game_over() def check_result(self): passpysiogame-1.30.811/game_boards/game016.py0000644000175000017500000004165512201770066016741 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame import os, sys #This is pretty messed up - sorry trying to keep multi-language program compatible with both python2 and python3 made me to do some desperately heavy things. #this would be much simpler with python3 only, but not everything in this world is simple... class Key(pygame.sprite.Sprite): def __init__(self, kbrd, data_list, init_color, highlight_color): # data_list = [x, y, w, h, top_left, bottom_left, middle, letter, right_top, right_bottom,color_group] pygame.sprite.Sprite.__init__(self) self.kbrd = kbrd self.id = len(kbrd.keys) kbrd_w = self.kbrd.kbrd_w-10 self.x = (kbrd_w * data_list[0] // 445)+5 self.y = (kbrd_w * data_list[1] // 445)+5 self.w = (kbrd_w * data_list[2] // 445) self.h = (kbrd_w * data_list[3] // 445) self.data_list = data_list self.labels = [data_list[4], data_list[5], data_list[6],data_list[7],data_list[8],data_list[9]] self.color = init_color self.init_color = init_color self.highlight_color = highlight_color hsv = ex.rgb_to_hsv(highlight_color[0],highlight_color[1],highlight_color[2]) self.outline_color = ex.hsv_to_rgb(hsv[0],hsv[1],hsv[2]-50) self.font_1 = self.kbrd.kbrd_font[0] self.font_2 = self.kbrd.kbrd_font[1] self.image = pygame.Surface([self.w, self.h]) self.rect = self.image.get_rect() self.rect.topleft = [self.x,self.y] #self.image.fill(self.color) self.draw_key() def draw_key(self): #if button is part of keyboard: if self.id < 64: self.image.fill(self.color) else: self.image.fill((255,255,255)) rect = [1,1,self.w-2, self.h-2] #rect2 = [0,0,self.w, self.h] pygame.draw.ellipse(self.image, self.color, rect, 0) pygame.draw.ellipse(self.image, self.outline_color, rect, 1) self.image.set_colorkey((255,255,255)) def update(self): #self.image.fill(self.color) self.draw_key() if sys.version_info < (3, 0): val = [] for each in self.labels: try: uni = unicode(each, "utf-8") except UnicodeDecodeError: uni = each except TypeError: uni = each val.append(uni) else: val = self.labels for i in range(6): if len(val[i]) > 0: if self.id < 64: if i == 3: text = self.font_1.render("%s" % (val[i]), 1, ((0,0,0))) font_x = 4 #((self.w - self.font_1.size(val[i])[0])//2) font_y = 0 #((self.h - self.font_1.size(val[i])[1])//2) #self.image.blit(text, (font_x,font_y)) elif i < 3: text = self.font_2.render("%s" % (val[i]), 1, ((0,0,0))) if i == 0: font_x = 4 font_y = 0 elif i == 1: font_x = 4 font_y = self.h - self.font_2.size(val[i])[1]-2 elif i == 2: font_x = ((self.w - self.font_2.size(val[i])[0])//2) font_y = ((self.h - self.font_2.size(val[i])[1])//2) elif i > 3: text = self.font_2.render("%s" % (val[i]), 1, ((0,0,200))) if i == 4: font_x = self.w - self.font_2.size(val[i])[0]-4 font_y = 0 elif i == 5: font_x = self.w - self.font_2.size(val[i])[0]-4 font_y = self.h - self.font_2.size(val[i])[1]-2 else: text = self.font_2.render("%s" % (val[i]), 1, ((0,0,0))) font_x = ((self.w - self.font_2.size(val[i])[0])//2) font_y = ((self.h - self.font_2.size(val[i])[1])//2) self.image.blit(text, (font_x,font_y)) self.draw_outline() def draw_outline(self): "draws an 'outline' around the unit" color = self.outline_color #[20,20,20] width = 1 x = 0 y = 0 w2 = 1 if self.id < 64: if self.id != 28 and self.id != 42: pygame.draw.lines(self.image, color, True, [[x,y],[self.w-w2,y],[self.w-w2,self.h-w2],[x,self.h-w2]],width) else: if self.kbrd.keys[28].h > self.kbrd.keys[42].h: p0x = x p1x = self.w - self.kbrd.keys[28].w else: p0x = self.w - self.kbrd.keys[42].w p1x = x if self.id == 28: pygame.draw.lines(self.image, color, False, [[p0x,self.h-w2],[x,self.h-w2],[x,y],[self.w-w2,y],[self.w-w2,self.h-w2]],width) else: pygame.draw.lines(self.image, color, False, [[p1x,y],[x,y],[x,self.h-w2],[self.w-w2,self.h-w2],[self.w-w2,y]],width) class KeyBoard: def __init__(self,game_board,screen,kbrd_w,kbrd_h): self.game_board = game_board self.kbrd_w = kbrd_w self.kbrd_h = kbrd_h self.points = self.game_board.board.points #self.highlighted = [button,shift,button_on_hand,shift_on_hand,AltGr,AltGr_on_hand] self.highlighted = [-1,-1,-1,-1,-1,-1] self.keys = [] self.keys_list = pygame.sprite.RenderPlain() self.kbrd_font = [] self.kbrd_font.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(float(self.points)/2)))) self.kbrd_font.append(pygame.font.Font(os.path.join('fonts', 'FreeSansBold', 'FreeSansBold.ttf'), (int(float(self.points)/3)))) self.canvas = pygame.Surface([kbrd_w, kbrd_h]) self.canvas.fill((255,255,255)) self.add_keys() self.draw_hands() def get_btns_to_hl(self,text): 'prepares a list of keys to highlight based on letter/character passed in key ids hardcoded' uc = text if text != " ": hl = [-1,-1,-1,-1,-1,-1] #check if letter is lowercase or what position it is on whether shift is needed text = text.upper() if uc == text and uc not in [",",".","?","!"]: shift = True else: shift = False for i in range(0,55): if sys.version_info < (3, 0): labels = [] for each in self.keys[i].labels: if len(each)>0: try: uni = unicode(each,"utf-8") except UnicodeDecodeError: uni = each else: uni = "" labels.append(uni.upper()) else: labels = [each.upper() for each in self.keys[i].labels] uc = uc.upper() if uc in labels: hl[0] = i if uc == labels[0]: shift = True elif uc == labels[1]: shift = False if uc == labels[4] or uc == labels[5]: alt = True else: alt = False if shift: if self.keys[i].data_list[10]<4: #right_shift hl[1] = 55 hl[3] = 71 elif self.keys[i].data_list[10]>3: #left_shift hl[1] = 43 hl[3] = 64 hl[2] = self.keys[i].data_list[10]+64 if alt: hl[4] = 60 hl[5] = 73 self.highlight(hl,uc.lower()) else: self.highlight(hl,uc) break else: self.highlight([-1,-1,-1,-1,-1,-1],uc) else: self.highlight([59,-1,72,-1,-1,-1],"—") def highlight(self,hl_ids,txt): 'resets the highlight from previous letter and highlights new keys' #reset old highlight for each in self.highlighted: if each > -1: self.keys[each].color = self.keys[each].init_color if self.highlighted[2] > -1: self.keys[self.highlighted[2]].labels[3] = "" if self.highlighted[3] > -1: self.keys[self.highlighted[3]].labels[3] = "" if self.highlighted[5] > -1: self.keys[self.highlighted[5]].labels[3] = "" #apply highlight to new squares for i in range(6): if hl_ids[i] > -1: self.keys[hl_ids[i]].color = self.keys[hl_ids[i]].highlight_color if i == 2: self.keys[hl_ids[i]].labels[3] = txt if i == 3: self.keys[hl_ids[i]].labels[3] = "↑" if i == 5: self.keys[hl_ids[i]].labels[3] = "Alt" self.highlighted = hl_ids[:] def add_key(self,data_list, init_color, highlight_color): new_key = Key(self,data_list, init_color, highlight_color) self.keys.append(new_key) self.keys_list.add(new_key) def add_keys(self): #colors = [[249,91,91],[249,210,91],[169,249,91],[91,249,132],[91,249,249],[91,113,249],[188,91,249],[249,91,147],[249,219,180],[186,186,186]] colors = [[255,150,150],[255,229,150],[202,255,150],[150,255,185],[150,255,255], [150,165,255],[214,150,255],[255,150,187],[249,219,180],[186,186,186]] highlight_colors = [[255,0,0], [255,192,0], [127,255,0], [0,255,67], [0,255,255], [0,37,255], [156,0,255], [255,0,85], [255,157,29],[206,206,206]] keys = self.game_board.lang.kbrd.kbrd_keys #print(len(keys)) for each in keys: #self.add_key(x, y, w, h, top_left, bottom_left, middle, letter, init_color, highlight_color) self.add_key(each, colors[each[10]], highlight_colors[each[10]]) self.kbrd_h = self.keys[61].y + self.keys[61].h def scale_img(self, img, new_w, new_h): 'scales image depending on pygame version either with smoothscale or with scale' if pygame.version.vernum < (1, 8): return pygame.transform.scale(img, (new_w, new_h)) else: return pygame.transform.smoothscale(img, (new_w, new_h)) def draw_hands(self): img_pos = (0,0) #calculate new img_size = self.kbrd_w * 341 // 630 left = (self.kbrd_w - img_size)//2 try: img_org = pygame.image.load(os.path.join('images', 'hands.jpg')).convert() img = img_org.copy() img_rect = img.get_rect() #resize the image scaled_img = self.scale_img(img, img_size, img_size) img_rect = scaled_img.get_rect() pos_x = left pos_y = self.kbrd_h + (self.keys[61].h)//3 # + (self.kbrd_w * 11 // 445) img_pos = (pos_x,pos_y) self.canvas.blit(scaled_img,img_pos) except: pass def update(self): for each_key in self.keys: each_key.update() self.keys_list.draw(self.canvas) class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (255,255,255) font_color1 = (175,255,128) font_color2 = (0,230,0) font_color3 = (200,200,200) data = [15,12] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=False) if x_count < 15: data[0] = 15 elif x_count > 19: data[0] = 19 else: data[0] = x_count self.data = data self.line = 0 self.course = self.lang.kbrd_course self.level.lvl_count = len(self.course) if self.lang.lang in ["en_gb", "en_us"]: self.chapters = [1,3,5,7,10,13,15,18,20,22,24,26,28] elif self.lang.lang == "pl": self.chapters = [1,3,5,7,10,12,14,16,18,20,23,26,29,32] elif self.lang.lang == "ru": self.chapters = [1,3,5,7,10,13,15,18,20,22,24,26,28] self.t_string = self.course[self.level.lvl-1][1] self.t_multi = self.course[self.level.lvl-1][0] if sys.version_info < (3, 0): self.current_line = unicode((self.t_string[0]*self.t_multi[0]).strip(), "utf-8") else: self.current_line = (self.t_string[0]*self.t_multi[0]).strip() self.level.games_per_lvl = len(self.t_string) self.level.game_step = 1 label_w = self.data[0]//2 self.vis_buttons = [0,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.add_unit(0,0,label_w,1,classes.board.Label,"",color,"",0) self.left = self.board.units[-1] self.left.align = 2 self.left.font_color = font_color1 self.board.add_unit(label_w,0,1,1,classes.board.Label,self.current_line[0],color,"",0) self.middle = self.board.units[-1] self.middle.font_color = font_color2 self.middle.set_outline([0,230,0], 1) self.board.add_unit(label_w+1,0,label_w,1,classes.board.Label,self.current_line[1:],color,"",0) self.right = self.board.units[-1] self.right.align = 1 self.right.font_color = font_color3 self.board.add_unit(0,1,data[0],data[1]-1,classes.board.Label,"",color,"",0) self.kbrd = KeyBoard(self,self.board.units[3],self.board.units[3].rect.w,self.board.units[3].rect.h) self.kbrd.get_btns_to_hl(self.current_line[0]) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN: char = event.unicode if len(char)>0: if char == self.middle.value: if len(self.right.value) > 0: self.left.value += char next_letter = self.right.value[0] self.middle.value = next_letter self.right.value = self.right.value[1:] self.kbrd.get_btns_to_hl(next_letter) self.board.s1.play() elif len(self.middle.value) > 0: self.left.value += char self.middle.value = "" self.check_result() for each in [self.left, self.middle, self.right]: each.update_me = True else: self.board.s2.play() self.mainloop.redraw_needed[0] = True def update(self,game): game.fill((255,255,255)) self.kbrd.update() self.board.units[3].painting = self.kbrd.canvas.copy() self.board.units[3].update_me = True gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.line < len(self.t_string)-1: self.line += 1 if sys.version_info < (3, 0): self.current_line = unicode((self.t_string[self.line]*self.t_multi[self.line]).strip(), "utf-8") else: self.current_line = (self.t_string[self.line]*self.t_multi[self.line]).strip() self.level.game_step = self.line + 1 self.left.value = "" self.middle.value = self.current_line[0] self.right.value = self.current_line[1:] self.kbrd.get_btns_to_hl(self.current_line[0]) self.mainloop.redraw_needed[1] = True else: self.level.next_board() pysiogame-1.30.811/game_boards/game066.py0000644000175000017500000005600312201770067016740 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.simple_vector as sv import pygame import copy import classes.board import random from math import pi,cos,acos,sin,asin,sqrt class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,2) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,19,10) def create_game_objects(self, level = 1): self.vis_buttons = [0,1,1,1,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.hand_id = 0 self.hand_coords = [[],[]] self.board.draw_grid = False color = (255,255,255) white = (255,255,255) gray = (100,100,100) color1 = ex.hsv_to_rgb(225,70,230) color3 = ex.hsv_to_rgb(225,255,255) color5 = ex.hsv_to_rgb(225,180,240) color7 = ex.hsv_to_rgb(225,10,255) color2 = ex.hsv_to_rgb(170,70,230) color4 = ex.hsv_to_rgb(170,255,255) color6 = ex.hsv_to_rgb(170,180,240) color8 = ex.hsv_to_rgb(170,10,255) self.colors = [color1,color2] self.colors2 = [color3,color4] self.colors3 = [color5,color6] self.colors4 = [color7,color8] if self.level.lvl == 1: data = [19,10,True,True,False,False,False,False,False,True,True,15] elif self.level.lvl == 2: data = [19,10,True,True,False,False,False,False,True,True,True,15] h_pool = range(1,13) m_pool = range(0,60) #visual display properties self.show_outer_ring = data[2] self.show_minutes = data[3] self.show_24h = data[4] self.show_only_quarters_h = data[5] self.show_only_quarters_m = data[6] self.show_only_fives_m = data[7] self.show_roman = data[8] self.show_highlight = data[9] self.show_hour_offset = data[10] #self.level.games_per_lvl = data[11] tt = [random.choice(h_pool), random.choice(m_pool)] self.time = tt #self.time = [6,0] self.tm = self.time[:] self.digits = ["0","1","2","3","4","5","6","7","8","9"] self.roman = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"] x_count = self.get_x_count(data[1],even=False) if x_count > data[0]: data[0] = x_count self.font_size = 0 self.data = data self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],self.layout.scale) self.size = self.board.scale*10 ans_offset = 10+(data[0]-15)//2 self.board.add_unit(10,0,data[0]-10,2,classes.board.Label,self.lang.d["Set_clock_instr"],white,"",2) self.board.units[-1].font_color = gray #self.board.add_unit(10,4,data[0]-10,2,classes.board.Label,self.lang.d["Set_clock_instr"],white,"",2) #self.board.units[-1].font_color = gray self.board.add_unit(ans_offset,3,2,1,classes.board.Label,"%02d" % self.time[0],white,"",0) self.ans_h = self.board.units[-1] self.board.add_unit(ans_offset+2,3,1,1,classes.board.Label,":",white,"",0) self.board.add_unit(ans_offset+3,3,2,1,classes.board.Label,"%02d" % self.time[1],white,"",0) self.ans_m = self.board.units[-1] self.ans_h.align = 2 self.ans_m.align = 1 self.ans_h.immobilize() self.ans_m.immobilize() self.ans_h.font_color = color3 self.ans_m.font_color = color4 self.center = [self.size//2,self.size//2] self.board.add_unit(0,0,10,10,classes.board.Ship,"",white,"",self.font_size) self.clock_canvas = self.board.ships[-1] self.board.active_ship = self.clock_canvas.unit_id self.clock_canvas.font = self.clock_canvas.board.font_sizes[2] self.clock_canvas.font2 = self.clock_canvas.board.font_sizes[7] self.clock_canvas.immobilize() self.board.add_unit(10,4,data[0]-10,1,classes.board.Letter,"",white,"",4) self.text_time = self.board.ships[-1] self.text_time.immobilize() self.text_time.font_color = gray self.update_text_time() self.canvas = pygame.Surface([self.size, self.size-1]) self.canvas.fill((255,255,255)) self.hands_vars() self.draw_hands()#data[7](data, canvas, i) self.clock_canvas.hidden_value = [2,3]#numbers[i] self.clock_canvas.font_color = color2 self.clock_canvas.painting = self.canvas.copy() def update_text_time(self): tt = self.time if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": #if (tt[1] < 30 and self.lang.d["time_string_half_to"] != "") or (tt[1] <= 30 and self.lang.d["time_string_half_past"] != "") : h_index = tt[0]-1 #else: if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] if tt[1] < 30: m = tt[1] else: m = 60 - tt[1] if m < 30: minutes = self.lang.d["minute_numbers_1to29"][m-1] else: h_index = tt[0]-1 if tt[0] == 12: h_indexp1 = 0 else: h_indexp1 = tt[0] m = tt[1] minutes = self.lang.n2txt(m) """ if m <= 29: #self.lang.d["minute_numbers_1to29"][m-1] else: tens = self.lang.numbers2090[(m/10)-2] ones = self.lang.d["minute_numbers_1to29"][(m % 10)-1] minutes = tens + " " + ones """ if self.lang.d["time_string_1_59_past_mh"] == "" and self.lang.d["time_string_1_59_past_hm"] == "": if tt[1] == 0: self.text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: self.text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: self.text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": self.text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: self.text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: self.text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: self.text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] elif tt[1] < 30: if self.lang.d["time_string_past_mh"] != "": self.text_string = self.lang.d["time_string_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_past_hm"] != "": self.text_string = self.lang.d["time_string_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: self.text_string = "" elif tt[1] > 30: if self.lang.d["time_string_to_mh"] != "": self.text_string = self.lang.d["time_string_to_mh"] % (minutes, self.lang.d["hours_c"][h_indexp1]) elif self.lang.d["time_string_to_hm"] != "": self.text_string = self.lang.d["time_string_to_hm"] % (self.lang.d["hours_c"][h_indexp1], minutes) else: self.text_string = "" else: if tt[1] == 0: self.text_string = self.lang.d["time_string_full"] % self.lang.d["hours_a"][h_index] elif tt[1] == 15: self.text_string = self.lang.d["time_string_q_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 45: if self.lang.d["time_string_q_to"] != "": self.text_string = self.lang.d["time_string_q_to"] % self.lang.d["hours_c"][h_indexp1] elif self.lang.d["time_string_3q_past"] != "": self.text_string = self.lang.d["time_string_3q_past"] % self.lang.d["hours_c"][h_index] elif tt[1] == 30: if self.lang.d["time_string_half_past"] != "": self.text_string = self.lang.d["time_string_half_past"] % self.lang.d["hours_c"][h_index] else: self.text_string = self.lang.d["time_string_half_to"] % self.lang.d["hours_b"][h_indexp1] elif tt[1] == 1: self.text_string = self.lang.d["time_string_one_past"] % self.lang.d["hours_b"][h_index] elif tt[1] == 59: if self.lang.d["time_string_one_to"] != "": self.text_string = self.lang.d["time_string_one_to"] % self.lang.d["hours_c"][h_indexp1] else: if self.lang.d["time_string_1_59_past_mh"] != "": self.text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": self.text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: if self.lang.d["time_string_1_59_past_mh"] != "": self.text_string = self.lang.d["time_string_1_59_past_mh"] % (minutes, self.lang.d["hours_b"][h_index]) elif self.lang.d["time_string_1_59_past_hm"] != "": self.text_string = self.lang.d["time_string_1_59_past_hm"] % (self.lang.d["hours_b"][h_index], minutes) else: self.text_string = "" self.text_time.value = self.text_string self.text_time.update_me = True self.ans_h.value = "%02d" % self.time[0] self.ans_m.value = "%02d" % self.time[1] self.ans_h.update_me = True self.ans_m.update_me = True def hands_vars(self): numbers = [2,2] self.angle_step_12 = 2*pi/12 self.angle_step_60 = 2*pi/60 self.angle_start= -pi/2 angle_arc_start = -pi/2 self.r = self.size//3+self.size//10 #rs = [r*0.6, r*0.85,r*0.5] self.rs = [self.r*0.6, self.r*0.85,self.r*0.6] angle = self.angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] #a1 = angle_start + (2*pi/12)*time[0] def draw_hands(self): if self.show_hour_offset: a1 = self.angle_start + (2*pi/12)*self.time[0] + (self.angle_step_12*(2*pi/60)*self.time[1])/(2*pi) else: a1 = self.angle_start + (2*pi/12)*self.time[0] a2 = self.angle_start + (2*pi/60)*self.time[1] self.angles = [a1,a2] rs = self.rs time = self.time if self.show_outer_ring: pygame.draw.circle(self.canvas,self.colors4[1],self.center,int(rs[1]+10),0) pygame.draw.circle(self.canvas,self.colors2[1],self.center,int(rs[1]+10),1) pygame.draw.circle(self.canvas,self.colors4[0],self.center,int(rs[2]+10),0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,int(rs[2]+10),1) if self.show_outer_ring: for i in range(60): val = str(i+1) if self.show_only_quarters_m: if (i+1)%15 != 0: val = "" elif self.show_only_fives_m: if (i+1)%5 != 0: val = "" if i == 59: val = "0" a = self.angle_start + self.angle_step_60*(i+1) if self.show_minutes: font_size = self.clock_canvas.font2.size(val) #if self.show_highlight: if not self.show_highlight or (i+1 == time[1] or (time[1] == 0 and i==59)): text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors2[1]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors[1]) x3=(rs[1]+30+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[1]+30+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 #x3=(rs[0]+20 + self.clock_canvas.font.size(val)[0]//2)*cos(a)+center[0] #y3=(rs[0]+20 + self.clock_canvas.font.size(val)[1]//2)*sin(a)+center[1] self.canvas.blit(text, (x3,y3)) if self.show_only_quarters_m or self.show_only_fives_m: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 else: marklen = 25 else: if (i+1)%15 == 0: marklen = 30 elif (i+1)%5 == 0: marklen = 25 else: marklen = 15 if self.show_outer_ring: x1=(rs[1]+10)*cos(a)+self.center[0] y1=(rs[1]+10)*sin(a)+self.center[1] x2=(rs[1]+marklen)*cos(a)+self.center[0] y2=(rs[1]+marklen)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[1], [x1,y1],[x2,y2]) for i in range(12): val = str(i+1) if self.show_only_quarters_h: if (i+1)%3 != 0: val = "" #a = angle_start + angle_step_12*(i+1) a = self.angle_start + self.angle_step_12*(i+1) x1=(rs[2]+10)*cos(a)+self.center[0] y1=(rs[2]+10)*sin(a)+self.center[1] x2=(rs[2]+20)*cos(a)+self.center[0] y2=(rs[2]+20)*sin(a)+self.center[1] pygame.draw.aaline(self.canvas, self.colors2[0], [x1,y1],[x2,y2]) font_size = self.clock_canvas.font.size(val) if self.show_roman: val = self.hour_to_roman(val) if not self.show_highlight or i+1 == time[0]: text = self.clock_canvas.font.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_canvas.font.render("%s" % (val), 1, self.colors[0]) if self.show_roman: text_angle = -(360/12.0) * (i+1) text = pygame.transform.rotate(text, text_angle) rect = text.get_rect() x3=(rs[2]+20+font_size[1]//2)*cos(a)+self.center[0] - rect.width / 2 y3=(rs[2]+20+font_size[1]//2)*sin(a)+self.center[1] - rect.height / 2 else: x3=(rs[2]+20+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[2]+20+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) if self.show_24h: if i+13 == 24: val = "0" v = 0 else: val = str(i+13) v = i + 13 font_size = self.clock_canvas.font2.size(val) if not self.show_highlight or v == time[0]: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors2[0]) else: text = self.clock_canvas.font2.render("%s" % (val), 1, self.colors[0]) x3=(rs[0]+font_size[1]//2)*cos(a)+self.center[0] - font_size[0] / 2 y3=(rs[0]+font_size[1]//2)*sin(a)+self.center[1] - font_size[1] / 2 self.canvas.blit(text, (x3,y3)) hand_width = [self.r//14,self.r//18] start_offset = [self.size//10,self.size//12] for i in range(2): #angle for line angle = self.angles[i]#angle_start + angle_step*i x0=self.center[0] - start_offset[i]*cos(angle) y0=self.center[1] - start_offset[i]*sin(angle) # Calculate the x,y for the end point x1=rs[i]*cos(angle)+self.center[0] y1=rs[i]*sin(angle)+self.center[1] #x2=h_size[i]*cos(angle-pi/2)+center[0] #y2=h_size[i]*sin(angle-pi/2)+center[1] #x3=h_size[i]*cos(angle+pi/2)+center[0] #y3=h_size[i]*sin(angle+pi/2)+center[1] x2=hand_width[i]*cos(angle-pi/2)+self.center[0] y2=hand_width[i]*sin(angle-pi/2)+self.center[1] x3=hand_width[i]*cos(angle+pi/2)+self.center[0] y3=hand_width[i]*sin(angle+pi/2)+self.center[1] points = [[x0,y0],[x2,y2],[x1,y1],[x3,y3]] shadow = [[x0,y0],[x2,y2],[x1,y1]] self.hand_coords[i] = points #if i < numbers[0]: pygame.draw.polygon(self.canvas, self.colors[i], points, 0) pygame.draw.polygon(self.canvas, self.colors3[i], shadow, 0) # Draw the line from the center to the calculated end point line_through = [[x0,y0],[x1,y1]] pygame.draw.aalines(self.canvas, self.colors2[i], True, points) pygame.draw.aalines(self.canvas, self.colors2[i], True, line_through) pygame.draw.circle(self.canvas,self.colors[0],self.center,self.size//50,0) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//50,1) pygame.draw.circle(self.canvas,self.colors2[0],self.center,self.size//70,1) self.update_text_time() self.clock_canvas.update_me = True self.mainloop.redraw_needed[0] = True def hour_to_roman(self, val): val = int(val) return self.roman[val - 1] def vector_len(self,v): return sqrt(v[0]**2 + v[1]**2) def scalar_product(self,v1,v2): return sum([v1[i]*v2[i] for i in range(len(v1))]) def angle(self,v1,v2): return self.scalar_product(v1,v2)/(self.vector_len(v1)*self.vector_len(v2)) def is_contained(self, pos, coords_id = 0): v0 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][1]) v1 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][1]) v2 = sv.Vector2.from_points(self.hand_coords[coords_id][2], self.hand_coords[coords_id][3]) v3 = sv.Vector2.from_points(self.hand_coords[coords_id][0], self.hand_coords[coords_id][3]) v4 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][1]) v5 = sv.Vector2.from_points(pos, self.hand_coords[coords_id][3]) a1 = 1 - self.angle(v0,v1) #corner 1 a2 = 1 - self.angle(v2,v3) #corner 2 a3 = 1 - self.angle(v0,v4)#point to arm1 of corner1 a4 = 1 - self.angle(v1,v4)#point to arm2 of corner1 a5 = 1 - self.angle(v2,v5)#point to arm1 of corner2 a6 = 1 - self.angle(v3,v5)#point to arm2 of corner2 if (a3+a4) < a1 and (a5+a6) < a2: return True return False def current_angle(self, pos,r): #print(r), #print(self.rs[0]), cosa = (pos[0] - self.center[0]) / r sina = (pos[1] - self.center[1]) / r if 0 <= cosa <= 1 and -1 <= sina <= 0: angle = pi/2 - acos(cosa) elif 0 <= cosa <= 1 and 0 <= sina <= 1: angle = acos(cosa)+pi/2 #ok elif -1 <= cosa <= 0 and 0 <= sina <= 1: angle = acos(cosa)+ pi/2 #ok elif -1 <= cosa <= 0 and -1 <= sina <= 0: angle = 2*pi+ pi/2 - acos(cosa) return angle def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up self.tm = self.time[:] if event.type == pygame.MOUSEMOTION and self.hand_id > 0: pos = [event.pos[0]-self.layout.menu_w,event.pos[1]] r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 if self.hand_id == 1: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: self.tm[0] = 12 else: self.tm[0] = int(h) elif self.hand_id == 2: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) if 0 <= self.tm[1] < 5 and 55 <= self.time[1] <= 59: if self.tm[0] == 12: self.tm[0] = 1 else: self.tm[0] += 1 elif 0 <= self.time[1] < 5 and 55 <= self.tm[1] <= 59: if self.tm[0] == 1: self.tm[0] = 12 else: self.tm[0] -= 1 elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: active = self.board.active_ship pos = [event.pos[0]-self.layout.menu_w,event.pos[1]] if active == 0: r = self.vector_len([pos[0]-self.center[0], pos[1] - self.center[1]]) if r == 0: r = 0.1 self.hand_id = 0 if self.is_contained(pos, coords_id = 0): self.hand_id = 1 #print("activated: %d" % self.hand_id) elif self.is_contained(pos, coords_id = 1): self.hand_id = 2 #print("activated: %d" % self.hand_id) elif self.rs[0]*1.1 > r: h = (self.current_angle(pos, r)) / self.angle_step_12 if int(h) == 0: h = 12 self.tm[0] = int(h) else: m = (self.current_angle(pos, r)) / self.angle_step_60 self.tm[1] = int(m) elif event.type == pygame.MOUSEBUTTONUP and event.button == 1: self.hand_id = 0 #self.is_contained(pos, 1) if self.tm != self.time: self.time = self.tm[:] self.draw_hands() self.clock_canvas.painting = self.canvas.copy() def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): pass pysiogame-1.30.811/game_boards/game073.py0000644000175000017500000002616012201770067016737 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,7) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color #font_color = ex.hsv_to_rgb(227,255,50) #font_color = (85,0,212) font_color = (50,0,150) self.grey = (200,200,200) self.font_hl = (100,0,250) self.hint1_fcol = (100,0,250) self.hint2_fcol = (200,0,0) self.hint3_fcol = (250,0,200) self.task_str_color = ex.hsv_to_rgb(200,200,230) #font_result = ex.hsv_to_rgb(225,70,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) if self.level.lvl == 1: rngs = [150,500,50,100] elif self.level.lvl == 2: rngs = [500,1000,100,500] elif self.level.lvl == 3: rngs = [700,1500,500,999] elif self.level.lvl == 4: rngs = [1500,2500,500,1500] elif self.level.lvl == 5: rngs = [2500,5000,1500,2500] elif self.level.lvl == 6: rngs = [5000,10000,2500,5000] elif self.level.lvl == 7: rngs = [10000,84999,5000,15000] data = [39,18] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [0,1,1,1,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.n1 = random.randrange(rngs[0],rngs[1]) self.n2 = random.randrange(rngs[2],rngs[3]) self.sumn1n2 = self.n1+self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 1 self.correct = False self.carryl = [] self.resultl = [] self.nums1l = [] self.nums2l = [] s = "%0" + str(self.sumn1n2sl) + "d" self.n1sh = s % self.n1 self.n2sh = s % self.n2 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " + " + self.n2s + " = " + qm #question self.board.add_unit(1,0,data[0]-1-self.sumn1n2sl*3 ,3,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 #carry 1 for i in range(self.sumn1n2sl - 1): self.board.add_unit(data[0]-5-i*3,1,1,1,classes.board.Letter,"",white,"",0) self.carryl.append(self.board.ships[-1]) self.carryl[-1].set_outline(self.grey, 2) self.carryl[-1].pos_id = i #self.carryl[0].set_outline(font_result, 2) #first number for i in range(self.n1sl): self.board.add_unit(data[0]-3-i*3,2,3,3,classes.board.Label,self.n1s[-(i+1)],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i #second number i = 0 for i in range(self.n2sl): self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,self.n2s[-(i+1)],white,"",21) self.nums2l.append(self.board.units[-1]) self.nums2l[-1].pos_id = i i += 1 self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,"+",white,"",21) self.plus_label = self.board.units[-1] #line line = "―" * (self.sumn1n2sl*2) self.board.add_unit(data[0]-self.sumn1n2sl*3,8,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) #result for i in range(self.sumn1n2sl): self.board.add_unit(data[0]-3-i*3,9,3,3,classes.board.Letter,"",white,"",21) self.resultl.append(self.board.ships[-1]) self.resultl[-1].set_outline(self.grey, 2) self.resultl[-1].pos_id = i self.resultl[0].set_outline(self.activated_col, 3) self.home_square = self.resultl[0] self.board.active_ship = self.home_square.unit_id self.board.add_unit(0,8,data[0]-self.sumn1n2sl*3,2,classes.board.Label,"",white,"",22) self.hint1 = self.board.units[-1] self.hint1.align = 1 #carry 1 self.board.add_unit(0,12,data[0]-self.sumn1n2sl*3,2,classes.board.Label,"",white,"",22) self.hint2 = self.board.units[-1] self.hint2.align = 1 #enter: result % 10 self.board.add_unit(0,10,data[0]-self.sumn1n2sl*3,2,classes.board.Label,"",white,"",22) self.hint3 = self.board.units[-1] self.hint3.align = 1 self.board.add_unit(0,15,data[0],2,classes.board.Letter,self.lang.d["demo start"],white,"",22) self.next_step_btn = self.board.ships[-1] self.next_step_btn.readable = False for each in self.board.ships: each.immobilize() self.deactivate_colors() self.board.units[0].font_color = self.task_str_color self.next_step_btn.font_color = (0,200,0) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and (event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT): self.next_step() elif event.type == pygame.MOUSEBUTTONUP: if self.board.active_ship == self.next_step_btn.unit_id: if self.cursor_pos == self.sumn1n2sl+1: self.level.next_board_load() else: self.next_step() def home_sqare_switch(self, activate): if activate < 0 or activate > self.sumn1n2sl * 2 - 1: activate = self.sumn1n2sl-1 if activate >= 0 and activate < self.sumn1n2sl * 2 - 1: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 2) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 3) self.reactivate_colors() self.home_square.font_color = self.font_hl self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def demonstration(self): pass def next_step(self): self.ship_id = 0 if self.cursor_pos < self.sumn1n2sl+1: self.home_sqare_switch(self.cursor_pos+self.sumn1n2sl-2) self.hint1.value = "" result = 0 if self.cursor_pos == self.sumn1n2sl: self.next_step_btn.value = self.lang.d["demo next eg"] self.next_step_btn.update_me == True elif self.cursor_pos == 1: self.next_step_btn.value = self.lang.d["demo next step"] self.next_step_btn.update_me == True if self.cursor_pos > 1 and self.cursor_pos <= self.sumn1n2sl: self.carryl[self.cursor_pos-2].set_outline(self.grey, 2) if self.carryl[self.cursor_pos-2].value == "1": self.hint1.value = self.carryl[self.cursor_pos-2].value self.carryl[self.cursor_pos-2].set_outline(self.font_hl, 3) if self.cursor_pos < self.n1sl+1: self.hint1.value += " + " result += 1 result = result + int(self.n1sh[0-self.cursor_pos]) + int(self.n2sh[0-self.cursor_pos]) if self.cursor_pos <= self.n1sl: self.hint1.value += self.n1sh[0-self.cursor_pos] if self.cursor_pos <= self.n2sl: self.hint1.value += " + " + self.n2sh[0-self.cursor_pos] self.hint1.value += " = " + str(result) #if 1 = 1 don't display if len(self.hint1.value) == 5: self.hint1.value = "" if self.hint1.value == "": self.hint2.value = self.lang.d["demo rewrite"] + str(result % 10) else: self.hint2.value = self.lang.d["demo write"] + str(result % 10) if result > 9: self.hint3.value = self.lang.d["carry"] + " 1" self.carryl[self.cursor_pos-1].set_outline(self.hint3_fcol, 3) self.carryl[self.cursor_pos-1].value = "1" self.carryl[self.cursor_pos-1].font_color = self.hint3_fcol self.carryl[self.cursor_pos-1].update_me = True else: self.hint3.value = "" self.resultl[self.cursor_pos-1].value = str(result % 10) self.resultl[self.cursor_pos-1].font_color = self.hint2_fcol self.resultl[self.cursor_pos-1].set_outline(self.hint2_fcol, 3) self.resultl[self.cursor_pos-1].update_me = True self.hint1.update_me = True self.hint2.update_me = True self.hint3.update_me = True self.mainloop.redraw_needed[0] = True self.cursor_pos += 1 def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey if each != self.next_step_btn: each.set_outline(self.grey, 2) each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True def reactivate_colors(self): self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square.pos_id > 0: self.carryl[self.home_square.pos_id-1].font_color = self.font_hl if (self.n1sl > self.home_square.pos_id): self.nums1l[self.home_square.pos_id].font_color = self.font_hl if (self.n2sl > self.home_square.pos_id): self.nums2l[self.home_square.pos_id].font_color = self.font_hl self.resultl[self.home_square.pos_id].font_color = self.font_hl self.hint1.font_color = self.hint1_fcol self.hint2.font_color = self.hint2_fcol self.hint3.font_color = self.hint3_fcol self.next_step_btn.font_color = self.font_hl def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): pass pysiogame-1.30.811/game_boards/game074.py0000644000175000017500000003417212201770067016742 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color font_color = (50,0,150) self.grey = (200,200,200) self.font_hl = (100,0,250) self.hint1_fcol = (100,0,250) self.hint2_fcol = (200,0,0) self.hint3_fcol = (250,0,200) self.task_str_color = ex.hsv_to_rgb(200,200,230) self.activated_col = self.font_hl ver_color = (63,45,247) white = (255,255,255) if self.level.lvl == 1: rngs = [20,50,10,19] elif self.level.lvl == 2: rngs = [50,100,20,49] elif self.level.lvl == 3: rngs = [100,250,50,99] elif self.level.lvl == 4: rngs = [250,500,100,249] elif self.level.lvl == 5: rngs = [500,1000,100,499] elif self.level.lvl == 6: rngs = [700,1500,250,699] elif self.level.lvl == 7: rngs = [1500,2500,500,1499] elif self.level.lvl == 8: rngs = [2500,5000,1500,2499] elif self.level.lvl == 9: rngs = [5000,10000,2500,4999] elif self.level.lvl == 10: rngs = [10000,84999,5000,9999] data = [39,18] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=None) if x_count > 39: data[0] = x_count self.data = data self.vis_buttons = [0,1,1,1,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.n1 = random.randrange(rngs[0],rngs[1]) self.n2 = random.randrange(rngs[2],rngs[3]) self.sumn1n2 = self.n1-self.n2 self.n1s = str(self.n1) self.n2s = str(self.n2) self.sumn1n2s = str(self.sumn1n2) self.n1sl = len(self.n1s) self.n2sl = len(self.n2s) self.sumn1n2sl =len(self.sumn1n2s) self.cursor_pos = 1 self.correct = False self.carry1l = [] self.carry10l = [] self.resultl = [] self.nums1l = [] self.nums2l = [] self.all_nums = [] s = "%0" + str(self.n1sl) + "d" self.n1sh = s % self.n1 self.n2sh = s % self.n2 self.digits = ["0","1","2","3","4","5","6","7","8","9"] if self.lang.lang == 'gr': qm = ";" else: qm = "?" question = self.n1s + " - " + self.n2s + " = " + qm #question self.board.add_unit(1,0,data[0]-3-(max(self.n1sl,self.n2sl))*3 ,3,classes.board.Label,question,white,"",21) self.board.units[-1].align = 1 #borrow 1 for i in range(self.n1sl - 1): self.board.add_unit(data[0]-6-i*3,0,1,1,classes.board.Label,"-",white,"",0) self.board.add_unit(data[0]-5-i*3,0,1,1,classes.board.Letter,"",white,"",1) self.carry1l.append(self.board.ships[-1]) self.carry1l[-1].set_outline(self.grey, 2) self.carry1l[-1].pos_id = i self.board.units[-1].align = 2 #add 10 for i in range(self.n1sl - 1): self.board.add_unit(data[0]-3-i*3,1,1,1,classes.board.Label,"+",white,"",0) self.board.add_unit(data[0]-2-i*3,1,1,1,classes.board.Letter,"",white,"",1) self.carry10l.append(self.board.ships[-1]) self.carry10l[-1].set_outline(self.grey, 2) self.carry10l[-1].pos_id = i self.board.units[-1].align = 2 self.board.add_unit(data[0]-2-self.n1sl*3,0,2,1,classes.board.Label,"-1",white,"",0) self.board.add_unit(data[0]-2-self.n1sl*3,1,2,1,classes.board.Label,"+10",white,"",0) #first number for i in range(self.n1sl): self.board.add_unit(data[0]-3-i*3,2,3,3,classes.board.Label,self.n1s[-(i+1)],white,"",21) self.nums1l.append(self.board.units[-1]) self.nums1l[-1].font_color = self.grey self.nums1l[-1].pos_id = i #second number i = 0 for i in range(self.n2sl): self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,self.n2s[-(i+1)],white,"",21) self.nums2l.append(self.board.units[-1]) self.nums2l[-1].pos_id = i i += 1 self.board.add_unit(data[0]-3-i*3,5,3,3,classes.board.Label,"-",white,"",21) self.plus_label = self.board.units[-1] #line line = "―" * (self.sumn1n2sl*2) self.board.add_unit(data[0]-self.sumn1n2sl*3,8,self.sumn1n2sl*3,1,classes.board.Label,line,white,"",21) #result for i in range(self.sumn1n2sl): self.board.add_unit(data[0]-3-i*3,9,3,3,classes.board.Letter,"",white,"",21) self.resultl.append(self.board.ships[-1]) self.resultl[-1].set_outline(self.grey, 2) self.resultl[-1].pos_id = i self.resultl[0].set_outline(self.activated_col, 3) self.home_square = self.resultl[0] self.board.active_ship = self.home_square.unit_id self.activable_count = len(self.board.ships) self.board.add_unit(0,9,data[0]-self.sumn1n2sl*3-3,2,classes.board.Label,"",white,"",22) self.hint1 = self.board.units[-1] self.hint1.align = 1 self.board.add_unit(0,11,data[0]-self.sumn1n2sl*3-3,2,classes.board.Label,"",white,"",22) self.hint2 = self.board.units[-1] self.hint2.align = 1 self.board.add_unit(0,5,data[0]-self.sumn1n2sl*3-6,3,classes.board.Label,"",white,"",22) self.hint3 = self.board.units[-1] self.hint3.align = 1 self.board.add_unit(0,15,data[0],2,classes.board.Letter,self.lang.d["demo start"] ,white,"",22) self.next_step_btn = self.board.ships[-1] self.next_step_btn.readable = False self.all_nums.extend(self.carry1l) self.all_nums.extend(self.carry10l) self.all_nums.extend(self.nums1l) self.all_nums.extend(self.nums2l) self.all_nums.extend(self.resultl) for each in self.board.ships: each.immobilize() self.deactivate_colors() #self.reactivate_colors() self.board.units[0].font_color = self.task_str_color self.next_step_btn.font_color = (0,200,0) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and (event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT): #self.home_sqare_switch(self.board.active_ship+1) self.next_step() elif event.type == pygame.MOUSEBUTTONUP: #self.home_sqare_switch(self.board.active_ship) if self.board.active_ship == self.next_step_btn.unit_id: if self.cursor_pos == self.sumn1n2sl+1: self.level.next_board_load() else: self.next_step() def home_sqare_switch(self, activate): if activate < 0 or activate > self.activable_count: activate = self.activable_count - self.sumn1n2sl if activate >= 0 and activate < self.activable_count: self.board.active_ship = activate self.home_square.update_me = True if self.board.active_ship >= 0: self.home_square.set_outline(self.grey, 2) self.deactivate_colors() self.home_square = self.board.ships[self.board.active_ship] self.home_square.set_outline(self.activated_col, 3) self.reactivate_colors() self.home_square.font_color = self.font_hl self.home_square.update_me = True self.mainloop.redraw_needed[0] = True def next_step(self): self.ship_id = 0 if 0 <= self.cursor_pos < self.sumn1n2sl+1: self.hint1.value = "" comp = "" result = 0 self.home_sqare_switch(self.cursor_pos+((self.n1sl-1)*2-1)) if self.carry1l[self.cursor_pos-2].value == "1": first_val = int(self.n1sh[0-self.cursor_pos])-1 else: first_val = int(self.n1sh[0-self.cursor_pos]) if first_val < int(self.n2sh[0-self.cursor_pos]): if self.carry1l[self.cursor_pos-2].value == "1": comp = "%s - 1 < %s" % (self.n1sh[0-self.cursor_pos],self.n2sh[0-self.cursor_pos]) else: comp = "%s < %s" % (self.n1sh[0-self.cursor_pos],self.n2sh[0-self.cursor_pos]) self.hint3.value = [comp, self.lang.d["borrow 10"]] self.hint1.value = "10 + " result = 10 self.carry10l[self.cursor_pos-1].value = "10" self.carry10l[self.cursor_pos-1].update_me = True self.carry1l[self.cursor_pos-1].value = "1" self.carry1l[self.cursor_pos-1].update_me = True self.carry10l[self.cursor_pos-1].set_outline(self.hint3_fcol, 3) self.carry10l[self.cursor_pos-1].font_color = self.hint3_fcol else: self.hint3.value = "" if self.cursor_pos == self.sumn1n2sl: self.next_step_btn.value = self.lang.d["demo next eg"] self.next_step_btn.update_me == True elif self.cursor_pos == 1: self.next_step_btn.value = self.lang.d["demo next step"] self.next_step_btn.update_me == True if self.cursor_pos >= 1 and self.cursor_pos <= self.sumn1n2sl: self.carry10l[self.cursor_pos-2].set_outline(self.grey, 2) if self.cursor_pos > 1 and self.cursor_pos <= self.sumn1n2sl: self.carry1l[self.cursor_pos-3].set_outline(self.grey, 2) if first_val >= int(self.n2sh[0-self.cursor_pos]): result = result + int(self.n1sh[0-self.cursor_pos]) - int(self.n2sh[0-self.cursor_pos]) else: result = result + int(self.n1sh[0-self.cursor_pos]) - int(self.n2sh[0-self.cursor_pos]) if self.cursor_pos <= self.sumn1n2sl: self.hint1.value += self.n1sh[0-self.cursor_pos] if self.cursor_pos > 1 and self.cursor_pos <= self.sumn1n2sl: self.carry1l[self.cursor_pos-2].set_outline(self.grey, 2) if self.carry1l[self.cursor_pos-2].value == "1": self.hint1.value += " - 1"#self.carry1l[self.cursor_pos-2].value self.carry1l[self.cursor_pos-2].set_outline(self.font_hl, 3) result -= 1 if self.cursor_pos <= self.n2sl: self.hint1.value += " - " + self.n2sh[0-self.cursor_pos] self.hint1.value += " = " + str(result) #if 1 = 1 don't display if len(self.hint1.value) == 5: self.hint1.value = "" if self.hint1.value == "": self.hint2.value = self.lang.d["demo rewrite"] + str(result % 10) else: self.hint2.value = self.lang.d["demo write"] + str(result % 10) self.resultl[self.cursor_pos-1].value = str(result % 10) self.resultl[self.cursor_pos-1].font_color = self.hint2_fcol self.resultl[self.cursor_pos-1].set_outline(self.hint2_fcol, 3) self.resultl[self.cursor_pos-1].update_me = True self.hint1.update_me = True self.hint2.update_me = True self.hint3.update_me = True self.mainloop.redraw_needed[0] = True self.cursor_pos += 1 def deactivate_colors(self): for each in self.board.ships: each.font_color = self.grey each.update_me = True for each in self.board.units: each.font_color = self.grey each.update_me = True for each in self.all_nums: each.set_outline(self.grey, 2) def reactivate_colors(self): self.plus_label.font_color = self.font_hl self.board.units[0].font_color = self.task_str_color if self.home_square in self.carry1l: self.carry10l[self.home_square.pos_id].font_color = self.font_hl elif self.home_square in self.carry10l: self.carry1l[self.home_square.pos_id].font_color = self.font_hl elif self.home_square in self.resultl: if self.home_square.pos_id > 0: self.carry1l[self.home_square.pos_id-1].font_color = self.font_hl if self.home_square.pos_id >= 0 and self.home_square.pos_id < self.sumn1n2sl-1: self.carry10l[self.home_square.pos_id].font_color = self.font_hl if (self.n1sl > self.home_square.pos_id): self.nums1l[self.home_square.pos_id].font_color = self.font_hl if (self.n2sl > self.home_square.pos_id): self.nums2l[self.home_square.pos_id].font_color = self.font_hl self.resultl[self.home_square.pos_id].font_color = self.font_hl self.resultl[self.home_square.pos_id].font_color = self.font_hl self.hint1.font_color = self.hint1_fcol self.hint2.font_color = self.hint2_fcol self.hint3.font_color = self.hint3_fcol self.next_step_btn.font_color = self.font_hl def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game056.py0000644000175000017500000003546612201770067016751 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import pygame import copy import classes.board import random from math import pi,cos,sin class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,6) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,9,6) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.board.draw_grid = True #create non-movable objects s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color = ((255,255,255)) white = ((255,255,255)) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders if self.level.lvl == 1: data = [9,6,3,5,5,1] elif self.level.lvl == 2: data = [9,6,3,7,5,1] elif self.level.lvl == 3: data = [9,6,3,11,5,1] elif self.level.lvl == 4: data = [9,6,3,11,5,3] elif self.level.lvl == 5: data = [9,6,3,11,5,6] elif self.level.lvl == 6: data = [9,6,3,11,5,10] self.font_size = 7 extra_w = 0 #obj_classes = [classes.board.Label,classes.board.Ship,classes.board.Ship,classes.board.Ship,classes.board.Letter] if self.mainloop.m.game_variant == 0: drawing_f = [self.draw_circles,self.draw_rectangles,self.draw_minicircles,self.draw_polygons,self.draw_petals] obj_classes = [classes.board.Label,classes.board.Ship,classes.board.Ship,classes.board.Ship,classes.board.Ship] instruction = self.d["Fract instr0"] elif self.mainloop.m.game_variant == 1: drawing_f = [self.draw_circles,self.draw_rectangles,self.draw_minicircles,self.draw_polygons,self.draw_fractions] obj_classes = [classes.board.Label,classes.board.Ship,classes.board.Ship,classes.board.Ship,classes.board.Letter] instruction = self.d["Fract instr1"] elif self.mainloop.m.game_variant == 2: drawing_f = [self.draw_fractions,self.draw_circles,self.draw_rectangles,self.draw_minicircles,self.draw_polygons] obj_classes = [classes.board.Label,classes.board.Ship,classes.board.Ship,classes.board.Ship,classes.board.Ship] instruction = self.d["Fract instr2"] elif self.mainloop.m.game_variant == 3: drawing_f = [self.draw_percents,self.draw_circles,self.draw_rectangles,self.draw_decimals,self.draw_fractions] obj_classes = [classes.board.Label,classes.board.Ship,classes.board.Ship,classes.board.Letter,classes.board.Letter] instruction = self.d["Fract instr3"] extra_w = 1 elif self.mainloop.m.game_variant == 4: drawing_f = [self.draw_ratios,self.draw_circles,self.draw_rectangles,self.draw_minicircles,self.draw_polygons] obj_classes = [classes.board.Label,classes.board.Ship,classes.board.Ship,classes.board.Ship,classes.board.Ship] instruction = self.d["Fract instr4"] extra_w = 1 data[0] = data[0] + extra_w self.data = data self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) self.num_list = [] self.num_list2 = [] sign = "/" numbers = [] #create list of available slots for mixed objects slots = [] for j in range(0,5): for i in range(5,9): slots.append([i,j]) random.shuffle(slots) num2 = 0 while len(numbers) < data[4]: num1 = random.randrange(1,data[3]-1) if self.mainloop.m.game_variant == 3: choice_lst = [] for i in [2,4,5,8,10]: if i > num1: choice_lst.append(i) num2 = random.choice(choice_lst) else: num2 = random.randrange(num1+1,data[3]) lst = [num1,num2] if lst not in numbers: unique = True if len(numbers) > 1:# and i < 50: for each in numbers: if float(num1)/float(num2) == float(each[0]) / float(each[1]): unique = False if unique: numbers.append(lst) expr = str(float(num1)) + sign + str(float(num2)) disp = str(num1) + sign + str(num2) self.num_list.append(expr) self.num_list2.append(disp) #create table to store the solution xd = (data[0]-data[2])//2 #add objects to the board size = self.board.scale center = [size//2,size//2] capt = copy.deepcopy(numbers) for i in range(0,25): ew = 0 xo = 0 if i < 5: xy = [0,i] if self.mainloop.m.game_variant >= 3: ew = 1 else: xy = slots[i-5][0],slots[i-5][1] if self.mainloop.m.game_variant >= 3: xo = 1 f_index = i // 5 disp = "" if drawing_f[f_index] == self.draw_fractions: if self.level.lvl > 3: multi = random.randrange(1, data[5]) capt[i-f_index*5][0] *= multi capt[i-f_index*5][1] *= multi disp = ["",str(capt[i-f_index*5][0]),str(capt[i-f_index*5][1]),""] elif drawing_f[f_index] == self.draw_ratios: disp = [self.d["Ratio"],str(capt[i-f_index*5][0]) + " : "+ str(capt[i-f_index*5][1]-capt[i-f_index*5][0])] elif drawing_f[f_index] == self.draw_percents: percent = (float(capt[i-f_index*5][0]) / float(capt[i-f_index*5][1]))*100 intperc = int(percent) if intperc == percent: disp = str(intperc) + "%" else: disp = str(percent) + "%" elif drawing_f[f_index] == self.draw_decimals: decimal = float(capt[i-f_index*5][0]) / float(capt[i-f_index*5][1]) disp = str(decimal) self.board.add_unit(xy[0]+xo,xy[1],1+ew,1,obj_classes[f_index],disp,white,"",self.font_size) if ew == 1: canvas = pygame.Surface([size*2, size-1]) else: canvas = pygame.Surface([size, size-1]) canvas.fill((255,255,255)) drawing_f[f_index](numbers[i-f_index*5],canvas,size,center,color1)#data[7](data, canvas, i) if i < 5: self.board.units[-1].hidden_value = numbers[i] self.board.units[-1].font_color = self.color2 self.board.units[-1].painting = canvas.copy() else: self.board.ships[-1].hidden_value = numbers[i-f_index*5] self.board.ships[-1].font_color = self.color2 self.board.ships[-1].painting = canvas.copy() self.board.ships[-1].readable = False ind = len(self.board.units) for i in range(0,5): self.board.add_door(0,i,5+xo,1,classes.board.Door,"",white,"") self.board.units[ind + i].door_outline = True self.board.units[ind + i].perm_outline_color = self.color2 self.board.all_sprites_list.move_to_front(self.board.units[ind + i]) self.board.add_unit(0,data[1]-1,data[0],1,classes.board.Letter,instruction,white,"",9) self.board.ships[-1].immobilize() self.board.ships[-1].font_color = self.color2 def draw_circles(self,numbers,canvas,size,center,color): angle_step = 2*pi/numbers[1] angle_start= -pi/2 angle_arc_start = -pi/2 r = size//2 - 10 angle = angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] i = 0 while angle < angle_e: #maximum of 158 lines per pi x=(r-2)*cos(angle)+center[0] y=(r-2)*sin(angle)+center[1] pygame.draw.line(canvas,color,[center[0],center[1]],[x,y],2) i += 1 angle = angle_start + 0.02*(i) pygame.draw.ellipse(canvas, self.color2, (11,11,size-22,size-22),1) r = r-1 for i in range(numbers[1]): #angle for line angle = angle_start + angle_step*i # Calculate the x,y for the end point x=r*cos(angle)+center[0] y=r*sin(angle)+center[1] # Draw the line from the center to the calculated end point pygame.draw.aaline(canvas,self.color2,[center[0],center[1]],[x,y]) def draw_polygons(self,numbers,canvas,size,center,color): half = False numbers = numbers[:] if numbers[1] == 2: numbers[1] = 4 half = True angle_step = 2*pi/numbers[1] angle_start= -pi/2 angle_arc_start = -pi/2 r = size//2 - 10 angle = angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] r = r-1 x=r*cos(angle)+center[0] y=r*sin(angle)+center[1] prev = [center[0],center[1]] lines = [] multilines = [] points = [] points.append(prev) for i in range(numbers[1]+1): #angle for line angle = angle_start + angle_step*i # Calculate the x,y for the end point x=r*cos(angle)+center[0] y=r*sin(angle)+center[1] # Draw the line from the center to the calculated end point if half == False or (half == True and i%2 == 0): multilines.append([[center[0],center[1]],[x,y]]) lines.append(prev) prev = [x,y] if (half == False and i < numbers[0]+1) or (half == True and i < 3): points.append(prev) points.append(center) pygame.draw.polygon(canvas, color, points, 0) lines.append([x,y]) pygame.draw.aalines(canvas, self.color2, True, lines) for each in multilines: pygame.draw.aaline(canvas,self.color2,each[0],each[1]) def draw_rectangles(self,numbers,canvas,size,center,color): lines = [] multilines = [] points = [] step = (size - 10)//numbers[1] width = step * numbers[1] left = (size - width)//2 rectangle = [[left,15],[size-left*2,size-30]] if numbers[1] > 2: for i in range(numbers[1]): points.extend([[left+step*i,15],[left+step*i,size-15],[left+step*(i+1),size-15],[left+step*(i+1),15]]) elif numbers[1] == 2: points.extend([[left+step,15],[left+step,size-15]]) #draw fraction fraction_rect = [[left,15],[step*numbers[0],size-30]] pygame.draw.rect(canvas, color, fraction_rect, 0) #draw square with grid pygame.draw.lines(canvas, self.color2, True, points) if numbers[1] == 2: pygame.draw.rect(canvas, self.color2, rectangle, 1) def draw_minicircles(self,numbers,canvas,size,center,color): angle_step = 2*pi/numbers[1] angle_start= -pi/2 angle_arc_start = -pi/2 r = size//3 angle = angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] #manually draw the arc - the 100% width of the arc does not impress for i in range(numbers[1]): #angle for line angle = angle_start + angle_step*i # Calculate the x,y for the end point x=r*cos(angle)+center[0] y=r*sin(angle)+center[1] if i < numbers[0]: pygame.draw.circle(canvas,color,[int(x),int(y)],size//10,0) pygame.draw.circle(canvas,self.color2,[int(x),int(y)],size//10,1) # Draw the line from the center to the calculated end point def draw_petals(self,numbers,canvas,size,center,color): angle_step = 2*pi/numbers[1] angle_start= -pi/2 angle_arc_start = -pi/2 r = size//3+size//10 angle = angle_start angle_s = angle_arc_start angle_e = angle_arc_start + numbers[0]*2*pi/numbers[1] multilines = [] for i in range(numbers[1]): #angle for line angle = angle_start + angle_step*i # Calculate the x,y for the end point x=r*cos(angle)+center[0] y=r*sin(angle)+center[1] x2=(r-size//10)*cos(angle-0.3)+center[0] y2=(r-size//10)*sin(angle-0.3)+center[1] x3=(r-size//10)*cos(angle+0.3)+center[0] y3=(r-size//10)*sin(angle+0.3)+center[1] points = [center,[x2,y2],[x,y],[x3,y3]] if i < numbers[0]: pygame.draw.polygon(canvas, color, points, 0) # Draw the line from the center to the calculated end point multilines.extend(points) pygame.draw.aalines(canvas, self.color2, True, multilines) def draw_fractions(self,numbers,canvas,size,center,color): lh = max(int(size * 0.04),2) pygame.draw.line(canvas,self.color2,[center[0]-size//7,center[1]-lh//2],[center[0]+size//7,center[1]-lh//2],lh) def draw_ratios(self,numbers,canvas,size,center,color): pygame.draw.line(canvas,self.color2,[center[0],center[1]],[center[0]*3,center[1]],1) def draw_decimals(self,numbers,canvas,size,center,color): pass def draw_percents(self,numbers,canvas,size,center,color): pass def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: correct = True for i in range(len(self.board.ships)-1): ship = self.board.ships[i] if ship.hidden_value != self.board.units[ship.grid_y].hidden_value: correct = False self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False break; if correct: self.level.next_board() pysiogame-1.30.811/game_boards/game018.py0000644000175000017500000001710512201770067016735 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,3,10) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): #create non-movable objects self.vis_buttons = [0,1,1,1,1,1,1,1,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = False self.board.draw_grid = False s = random.randrange(150, 190, 2) v = random.randrange(230, 255, 2) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,30,230) #highlight 1 self.color = color0 self.highlight_color = ex.hsv_to_rgb(h,230,150) font_color = ex.hsv_to_rgb(h,70,230) white = ((255,255,255)) self.disp_counter = 0 self.disp_len = 1 #data = [x_count, y_count, number_count, top_limit, ordered] if self.level.lvl == 1: data = [6,4,3,4,2] elif self.level.lvl == 2: data = [7,4,3,5,2] elif self.level.lvl == 3: data = [6,5,3,4,3] elif self.level.lvl == 4: data = [8,5,3,6,3] elif self.level.lvl == 5: data = [7,6,3,5,4] elif self.level.lvl == 6: data = [8,6,3,6,4] elif self.level.lvl == 7: data = [9,6,3,7,4] elif self.level.lvl == 8: data = [8,7,3,6,5] elif self.level.lvl == 9: data = [8,8,3,6,6] elif self.level.lvl == 10: data = [9,8,3,7,6] self.chapters = [1,5,10] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: x = self.get_x_count(data[1],even=True) else: x = self.get_x_count(data[1],even=False) if x > data[0]: data[0] = x self.data = data self.found = 0 self.clicks = 0 self.square_count = self.data[3]*self.data[4] self.history = [None,None] self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) if self.mainloop.m.game_variant == 0: image_src = [os.path.join('memory', "m_img%da.png" % (i)) for i in range(1,22)] self.back_img_src = os.path.join('memory', "m_img22a.png") elif self.mainloop.m.game_variant == 1: image_src = [os.path.join('memory', "f_img%da.png" % (i)) for i in range(1,22)] self.back_img_src = os.path.join('memory', "f_img22a.png") elif self.mainloop.m.game_variant == 2: image_src = [os.path.join('memory', "v_img%da.png" % (i)) for i in range(1,22)] self.back_img_src = os.path.join('memory', "v_img22a.png") elif self.mainloop.m.game_variant == 3: image_src = [os.path.join('memory', "n_img%da.png" % (i)) for i in range(1,22)] self.back_img_src = os.path.join('memory', "n_img22a.png") self.card_fronts = [] self.completed_mode = False #pick images - half the square_count if self.mainloop.m.game_variant == 3: if self.level.lvl < 6: choice = [x for x in range(0,10)] else: choice = [x for x in range(0,self.square_count//2)] else: choice = [x for x in range(0,21)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:self.square_count//2] self.chosen = self.chosen * 2 random.shuffle(self.chosen) h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]#-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3])//2 #side margin width x = w2 y = h1 self.card_back = classes.board.ImgSurf(self.board,1,1,white,self.back_img_src) for i in range(self.square_count): self.board.add_unit(x,y,1,1,classes.board.ImgShip,"",white,self.back_img_src) self.card_fronts.append(classes.board.ImgSurf(self.board,1,1,white,image_src[self.chosen[i]])) self.board.ships[i].immobilize() self.board.ships[i].readable = False self.board.ships[i].uncovered = False if x >= w2+data[3]-1: x = w2 y += 1 else: x += 1 self.outline_all([200,200,200],1) self.board.add_door(0,data[1]-1,data[0],1,classes.board.Door,"0/0",white,"",font_size=3) self.counter = self.board.units[-1] self.counter.font_color = (80,80,80) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.history[1]==None and self.ai_enabled == False:# and self.start_sequence==False: if 0 <= self.board.active_ship < self.square_count: active = self.board.ships[self.board.active_ship] if active.uncovered == False: if self.history[0] == None: active.img = self.card_fronts[active.unit_id].img.copy() self.history[0] = active self.clicks += 1 active.uncovered = True elif self.history[1] == None: active.img = self.card_fronts[active.unit_id].img.copy() self.history[1] = active self.clicks += 1 #print([self.chosen[self.history[0].unit_id], self.chosen[self.history[1].unit_id]]) if self.chosen[self.history[0].unit_id] != self.chosen[self.history[1].unit_id]: self.ai_enabled = True self.history[0].uncovered = False else: self.history[0].uncovered = True self.history[1].uncovered = True #print([self.chosen[self.history[0].unit_id], self.chosen[self.history[1].unit_id]]) self.found += 2 if self.found == self.square_count: self.completed_mode = True self.ai_enabled = True self.history = [None, None] active.update_me = True self.counter.value = "%i/%i" % (self.found,self.clicks) self.counter.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def ai_walk(self): if self.disp_counter < self.disp_len: self.disp_counter += 1 else: if self.completed_mode: self.history = [None, None] self.level.next_board() else: self.history[0].img = self.card_back.img.copy() self.history[1].img = self.card_back.img.copy() self.history[0].update_me = True self.history[1].update_me = True self.history = [None, None] self.ai_enabled = False self.disp_counter = 0 def check_result(self): pass pysiogame-1.30.811/game_boards/game061.py0000644000175000017500000002551412201770067016736 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame import os class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,3,6) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,9) def create_game_objects(self, level = 1): #create non-movable objects self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.ai_enabled = False self.board.draw_grid = False s = random.randrange(100, 150, 5) v = random.randrange(230, 255, 5) h = random.randrange(0, 255, 5) color = ((255,255,255)) white = ((255,255,255)) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,s,v) #highlight 2 self.color2 = ex.hsv_to_rgb(h,255,170) #contours & borders self.font_color = self.color2 white = ((255,255,255)) self.disp_counter = 0 self.disp_len = 1 lvl = 0 if self.mainloop.m.game_variant == 0: self.level.lvl_count = 6 if self.level.lvl > self.level.lvl_count: self.level.lvl = self.level.lvl_count if self.level.lvl == 1: data = [10,5,3,2,3] elif self.level.lvl == 2: data = [10,6,3,2,4] elif self.level.lvl == 3: data = [10,7,3,2,5] elif self.level.lvl == 4: data = [10,7,3,2,5] elif self.level.lvl == 5: data = [10,7,3,2,5] elif self.level.lvl == 6: data = [10,7,3,2,5] #rescale the number of squares horizontally to better match the screen width m = data[0] % 2 if m == 0: x = self.get_x_count(data[1],even=True) else: x = self.get_x_count(data[1],even=False) if x > data[0]: data[0] = x self.data = data self.found = 0 self.clicks = 0 self.squares = self.data[3]*self.data[4] self.square_count = self.squares * 2 #self.data[3]*self.data[4] self.history = [None,None] self.layout.update_layout(data[0],data[1]) self.board.level_start(data[0],data[1],self.layout.scale) texts1 = [] texts2 = [] if self.mainloop.m.game_variant == 0: if self.level.lvl == 1:#addition draw_data = [1,10,1,5,8] elif self.level.lvl == 2: draw_data = [1,15,1,5,8] elif self.level.lvl == 3: draw_data = [1,20,3,9,8] elif self.level.lvl == 4: draw_data = [20,50,3,9,8] elif self.level.lvl == 5: draw_data = [20,75,3,9,8] elif self.level.lvl == 6: draw_data = [1,99,3,9,8] while len(texts1) < self.square_count//2: num = random.randrange(draw_data[0],draw_data[1]+1) if str(num) not in texts1: ns = self.lang.n2txt(num) texts1.append(str(num)) if len(ns) < 20: texts2.append(ns) else: texts2.append(self.lang.n2txt(num, twoliner = True)) """ if num < 20: texts2.append(self.lang.numbers[num-1]) else: s1 = self.lang.numbers2090[num//10-2] if num%10 == 0: texts2.append(s1) else: s2 = self.lang.numbers[num%10-1] if self.lang.lang in ['en_gb','en_us']: texts2.append(s1 + ' ' +s2) elif self.lang.lang == 'de': texts2.append(s2 + 'und' +s1) else: texts2.append([s1,s2]) """ if self.mainloop.m.game_variant == 1: if self.level.lvl == 1:#addition draw_data = [1,5,1,5,6] elif self.level.lvl == 2: draw_data = [3,9,1,5,6] elif self.level.lvl == 3: draw_data = [5,15,3,9,7] elif self.level.lvl == 4: draw_data = [5,15,5,15,8] elif self.level.lvl == 5: draw_data = [15,55,5,35,9] elif self.level.lvl == 6: draw_data = [35,75,15,25,9] elif self.level.lvl == 7: draw_data = [55,99,55,99,9] while len(texts1) < self.square_count//2: first_num = random.randrange(draw_data[0],draw_data[1]+1) second_num = random.randrange(draw_data[2],draw_data[3]+1) my_sum = str(first_num + second_num) if my_sum not in texts1: texts1.append(str(my_sum)) texts2.append("%d + %d" % (first_num, second_num)) self.completed_mode = False if self.mainloop.m.game_variant in [4,5]: choice = [x for x in range(0,21)] else: choice = [x for x in range(0,self.square_count//2)] shuffled = choice[:] random.shuffle(shuffled) self.chosen = shuffled[0:self.square_count//2] self.chosen = self.chosen * 2 h1=(data[1]-data[4])//2 #height of the top margin h2=data[1]-h1-data[4]#-1 #height of the bottom margin minus 1 (game label) w2=(data[0]-data[3]*4)//2 #side margin width x = w2 y = h1 small_slots = [] for j in range(h1,data[1]-h2): for i in range(w2,w2+data[3]): small_slots.append([i,j]) random.shuffle(small_slots) wide_slots = [] for j in range(h1,data[1]-h2): for i in range(w2+data[3],data[0]-w2,3): wide_slots.append([i,j]) random.shuffle(wide_slots) #slots = [] #slots.extend(small_slots) #slots.extend(wide_slots) switch = self.square_count // 2 for i in range(self.square_count): if self.mainloop.m.game_variant in [4,5]: if i < switch: src = image_src1[self.chosen[i]] else: src = image_src2[self.chosen[i-switch]] self.board.add_unit(slots[i][0],slots[i][1],1,1,classes.board.ImgShip,"",white,src) else: if i < switch: caption = texts1[self.chosen[i]] position_list = small_slots pos = i xw = 1 else: caption = texts2[self.chosen[i-switch]] position_list = wide_slots pos = i-switch xw = 3 self.board.add_unit(position_list[pos][0],position_list[pos][1],xw,1,classes.board.Letter,caption,color0,"",draw_data[4]) self.board.ships[-1].font_color=self.font_color self.board.ships[i].immobilize() self.board.ships[i].readable = False self.board.ships[i].perm_outline = True #self.board.ships[i].font_color = font_color self.board.ships[i].uncovered = False self.outline_all(self.color2,1) self.board.add_door(0,data[1]-1,data[0],1,classes.board.Door,"0/0",white,"",font_size=3) self.counter = self.board.units[-1] self.counter.font_color = (80,80,80) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.history[1]==None and self.ai_enabled == False:# and self.start_sequence==False: if 0 <= self.board.active_ship < self.square_count: active = self.board.ships[self.board.active_ship] if active.uncovered == False: if self.history[0] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[0] = active self.clicks += 1 active.uncovered = True elif self.history[1] == None: active.perm_outline_width = 6 active.perm_outline_color = [150,150,255] self.history[1] = active self.clicks += 1 if self.chosen[self.history[0].unit_id] != self.chosen[self.history[1].unit_id]: self.ai_enabled = True self.history[0].uncovered = False else: self.history[0].uncovered = True self.history[1].uncovered = True self.history[0].perm_outline_color = self.color2 #[50,255,50] self.history[1].perm_outline_color = self.color2 self.history[0].image.set_alpha(50) self.history[1].image.set_alpha(50) self.history[0].update_me = True self.history[1].update_me = True self.found += 2 if self.found == self.square_count: self.completed_mode = True self.ai_enabled = True self.history = [None, None] active.update_me = True self.counter.value = "%i/%i" % (self.found,self.clicks) self.counter.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def ai_walk(self): if self.disp_counter < self.disp_len: self.disp_counter += 1 else: if self.completed_mode: self.history = [None, None] self.level.next_board() else: self.history[0].perm_outline_width = 1 self.history[0].perm_outline_color = self.color2 self.history[1].perm_outline_width = 1 self.history[1].perm_outline_color = self.color2 self.history[0].update_me = True self.history[1].update_me = True self.history = [None, None] self.ai_enabled = False self.disp_counter = 0 def check_result(self): pass pysiogame-1.30.811/game_boards/game057.py0000644000175000017500000002221012201770067016731 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,5) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,11,9) def create_game_objects(self, level = 1): self.board.draw_grid = True color = ex.hsv_to_rgb(225,15,235) self.col_bg = (180,180,180) self.white_color = (255,255,255) self.red_color = (255,220,220) self.green_color = (220,255,220) self.red_color2 = (255,0,0) self.green_color2 = (0,255,0) self.turn=1 font_color = ex.hsv_to_rgb(227,255,50) if self.level.lvl == 1: data = [10,8,4] elif self.level.lvl == 2: data = [10,10,3] elif self.level.lvl == 3: data = [10,12,2] elif self.level.lvl == 4: data = [10,14,1] elif self.level.lvl == 5: data = [10,16,1] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=True) if x_count > 10: data[0] = x_count self.data = data self.scores = [0,0] self.score_board = [] self.imgs=[] self.moves_taken = 0 self.max_moves = self.data[0]*(self.data[1]-2) self.game_state = [[0 for x in range(0,data[1])] for y in range(0,data[0])] self.lookaround = [[-1,-1],[0,-1],[1,-1],[1,0],[1,1],[0,1],[-1,1],[-1,0]] self.vis_buttons = [0,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.line_color = self.col_bg self.board.board_bg.update_me = True #player label self.board.add_unit(1,0,data[0]-6,1,classes.board.Letter,self.d["Player"] +" 1",self.red_color2,"",self.data[2]) self.board.add_unit(1,1,data[0]-6,1,classes.board.Letter,self.d["Player"] +" 2",self.green_color,"",self.data[2]) #player colour label self.board.add_unit(data[0]-5,0,1,1,classes.board.ImgShip,"x",self.red_color,"tictactoe_x.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-5,1,1,1,classes.board.ImgShip,"o",self.green_color,"tictactoe_o.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-4,0,1,1,classes.board.ImgShip,"x",self.red_color,"tictactoe_x2.png",0) self.imgs.append(self.board.ships[-1].img.copy()) self.board.add_unit(data[0]-4,1,1,1,classes.board.ImgShip,"o",self.green_color,"tictactoe_o2.png",0) self.imgs.append(self.board.ships[-1].img.copy()) #score counters self.board.add_unit(data[0]-3,0,3,1,classes.board.Letter,str(self.scores[0]),self.red_color,"",0) self.score_board.append(self.board.ships[-1]) self.board.add_unit(data[0]-3,1,3,1,classes.board.Letter,str(self.scores[1]),self.green_color,"",0) self.score_board.append(self.board.ships[-1]) #indicator self.board.add_unit(0,0,1,1,classes.board.ImgShip,"",self.red_color,"tictactoe_v.png",0) self.ind = self.board.ships[-1] self.legend_count = len(self.board.ships) for k in range(self.legend_count): self.board.ships[k].immobilize() self.board.ships[k].readable=False self.board.ships[k].outline=False k=self.legend_count for j in range(2,data[1]): for i in range(data[0]): self.board.add_unit(i,j,1,1,classes.board.ImgShip,"",color,"tictactoe_y.png",0) self.board.ships[k].immobilize() self.board.ships[k].readable=False self.board.ships[k].outline=False k+=1 for each in self.board.units: each.font_color = font_color def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if event.type == pygame.MOUSEBUTTONDOWN and self.show_msg == False: if self.board.active_ship >= self.legend_count: active = self.board.ships[self.board.active_ship] if len(active.value)==0: if self.turn==1: active.initcolor = self.red_color active.value = "x" active.img = self.imgs[0].copy() self.game_state[active.grid_x][active.grid_y]=1 self.board._place_unit(self.ind.unit_id, (0,1)) self.look_around(active) self.move_taken(active) self.turn=2 self.board.ships[1].color=self.green_color2 self.board.ships[0].color=self.red_color else: active.initcolor = self.green_color active.value = "o" active.img = self.imgs[1].copy() self.game_state[active.grid_x][active.grid_y]=2 self.board._place_unit(self.ind.unit_id, (0,0)) self.look_around(active) self.move_taken(active) self.turn=1 self.board.ships[0].color=self.red_color2 self.board.ships[1].color=self.green_color self.board.ships[0].update_me = True self.board.ships[1].update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def move_taken(self,active): self.moves_taken += 1 if self.moves_taken == self.max_moves: if self.scores[0] > self.scores[1]: #Player1 - Winner self.board.ships[0].value+=" "+self.d["Won"] self.board.ships[0].update_me = True elif self.scores[0] < self.scores[1]: #Player2 - Winner self.board.ships[1].value+=" "+self.d["Won"] self.board.ships[1].update_me = True else: #draw self.board.ships[0].value=self.d["Game Draw"] self.board.ships[1].value=self.d["Game Draw"] self.board.ships[0].update_me = True self.board.ships[1].update_me = True def look_around(self,active): matched = [] for i in range(8): first_pos = [active.grid_x + self.lookaround[i][0],active.grid_y + self.lookaround[i][1]] if 0<=first_pos[0]0: matched.append([active.grid_x,active.grid_y]) matched_set = set() for each in matched: matched_set.add(tuple(each)) self.game_state[each[0]][each[1]] = 0 ship_id = (each[0] + (each[1]-2)*self.data[0])+self.legend_count self.board.ships[ship_id].value = " " self.board.ships[ship_id].img = self.imgs[self.turn+1].copy() self.board.ships[ship_id].update_me = True self.scores[self.turn-1]+=len(matched_set) self.score_board[0].value=str(self.scores[0]) self.score_board[0].update_me=True self.score_board[1].value=str(self.scores[1]) self.score_board[1].update_me=True def check_result(self): passpysiogame-1.30.811/game_boards/game000.py0000644000175000017500000000542712201770067016730 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random #import colorsys class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,1,1) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,13,11) def create_game_objects(self, level = 1): self.board.draw_grid = False color = (234,218,225) #ex.hsv_to_rgb(225,15,235) self.color = color #font_color = ex.hsv_to_rgb(227,255,50) #font_color = (85,0,212) font_color = (50,0,150) ver_color = (63,45,247) data = [17,11] #stretch width to fit the screen size x_count = self.get_x_count(data[1],even=False) if x_count > 17: data[0] = x_count self.data = data self.vis_buttons = [0,0,0,0,1,0,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) self.layout.update_layout(data[0],data[1]) scale = self.layout.scale self.board.level_start(data[0],data[1],scale) self.board.board_bg.initcolor = color self.board.board_bg.color = color self.board.board_bg.update_me = True self.board.add_unit(0,3,data[0],3,classes.board.ImgCenteredShip,"",color,'home_logo.png') self.canvas = self.board.ships[-1] self.canvas.immobilize() self.canvas.outline = False self.canvas.font = self.canvas.board.font_sizes[4] val = "v.%s" % (self.mainloop.config.version) text = self.canvas.font.render(val, 1, ver_color) #x = int(scale*9.5) y = 0 x = self.canvas.img_rect.width - self.canvas.font.size(val)[0]-5 self.canvas.img.blit(text, (x,y)) self.board.add_unit(0,8,data[0],1,classes.board.Label,self.lang.d["Check for newer version..."],color,"",5) self.board.add_unit(0,9,data[0],1,classes.board.Label,"http://sourceforge.net/projects/pysiogame/",color,"",2) x = (data[0] - 7)//2 self.board.add_unit(x,10,1,1,classes.board.ImgShip,"",color,"facebook_icon.png") self.board.add_unit(x+1,10,6,1,classes.board.Label,"www.facebook.com/pysiogame",color,"",5) self.board.units[0].font_color = font_color self.board.units[1].font_color = (0,0,255) self.board.units[2].font_color = (63,99,182) self.board.units[2].align = 1 def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up def update(self,game): game.fill(self.color) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): passpysiogame-1.30.811/game_boards/game034.py0000644000175000017500000001343212201770067016732 0ustar tigertiger# -*- coding: utf-8 -*- import classes.level_controller as lc import classes.game_driver as gd import classes.extras as ex import classes.board import random import pygame class Board(gd.BoardGame): def __init__(self, mainloop, speaker, config, screen_w, screen_h): self.level = lc.Level(self,mainloop,99,5) gd.BoardGame.__init__(self,mainloop,speaker,config,screen_w,screen_h,23,9) def create_game_objects(self, level = 1): self.vis_buttons = [1,1,1,1,1,1,1,0,0] self.mainloop.info.hide_buttonsa(self.vis_buttons) #create non-movable objects s = random.randrange(150, 225, 5) v = random.randrange(190, 225, 5) h = random.randrange(0, 255, 5) color0 = ex.hsv_to_rgb(h,40,230) #highlight 1 color1 = ex.hsv_to_rgb(h,70,v) #highlight 2 color2 = ex.hsv_to_rgb(h,s,v) #normal color color3 = ex.hsv_to_rgb(h,230,100) white = (255,255,255) #data = [x_count, y_count, range_from, range_to, max_sum_range, image] if self.level.lvl == 1: data = [23,9] elif self.level.lvl == 2: data = [23,9] color1 = color0 elif self.level.lvl == 3: data = [23,9] color1 = color2 = color0 elif self.level.lvl == 4: data = [23,9] color1 = color2 = color0 #elif self.level.lvl == 5: # data = [23,9] # color0 = (0,0,0) elif self.level.lvl == 5: data = [23,9] color2 = color1 = color0 = (0,0,0) color3 = (40,40,40) self.data = data self.board.level_start(data[0],data[1],self.layout.scale) num1 = random.randrange(1,10) num2 = random.randrange(1,10) self.solution = [num1,num2,num1 * num2] self.digits = ["0","1","2","3","4","5","6","7","8","9"] unique = set() for i in range(1,10): for j in range(1,10): if i == num1 and j == num2: color=color0 elif i == num1 or j == num2: color=color1 elif self.level.lvl == 2 and (i == num2 or j == num1):color=color1 else: color = color2 mul = i*j unique.add(mul) caption = str(mul) self.board.add_unit(i-1,j-1,1,1,classes.board.Label,caption,color,"",2) self.board.add_unit(9,0,1,9,classes.board.Obstacle,"",color3) unique = sorted(unique) #draw outline with selectable numbers self.multi = dict() s = 180 v = 240 h = 7 color = ex.hsv_to_rgb(h,s,v) x = 11 y = 0 for i in range(9): x += 1 color = ex.hsv_to_rgb(h*i,s,v) self.multi[str(unique[i])]=i caption = str(unique[i]) self.board.add_unit(x,y,1,1,classes.board.Letter,caption,color,"",2) self.board.ships[-1].audible = False x=14 y=4 #? x 5 = 25 captions = [str(num1),chr(215),"=",str(num1*num2)] if self.level.lvl < 4: color = self.board.ships[self.solution[1]-1].initcolor else: color = (255,255,255)#color4 for i in range(4): if i == 2: x += 1 self.board.add_unit(x+i,y,1,1,classes.board.Label,captions[i],color,"",2) self.outline_all(0,1) self.board.add_door(16,y,1,1,classes.board.Door,"",white,"",font_size = 2) self.home_square = self.board.units[86] self.home_square.door_outline = True self.board.all_sprites_list.move_to_front(self.home_square) def handle(self,event): gd.BoardGame.handle(self, event) #send event handling up if self.show_msg == False: if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN: lhv = len(self.home_square.value) self.changed_since_check = True if event.key == pygame.K_BACKSPACE: if lhv > 0: self.home_square.value = self.home_square.value[0:lhv-1] elif not self.board.grid[4][16]: char = event.unicode if len(char)>0 and char in self.digits: self.home_square.value = char self.home_square.update_me = True self.mainloop.redraw_needed[0] = True elif event.type == pygame.MOUSEMOTION and self.drag: if self.board.grid[4][16]: self.home_square.value = "" self.home_square.update_me = True def update(self,game): game.fill((255,255,255)) gd.BoardGame.update(self, game) #rest of painting done by parent def check_result(self): if self.changed_since_check: if self.board.grid[4][16]: sol = self.board.ships[self.solution[1]-1] if sol.grid_x == 16 and sol.grid_y == 4: self.passed() else: self.failed() else: if self.home_square.value != "" and (int(self.home_square.value) == self.solution[1]): self.quick_passed() else: self.failed() def passed(self): tts = self.d["Perfect!"]+" "+str(self.solution[0])+" "+self.d["multiplied by"] + " "+str(self.solution[1])+" "+self.d["equals"]+" "+str(self.solution[2]) self.level.next_board(tts) def quick_passed(self): tts = self.d["Perfect!"] self.level.next_board(tts) def failed(self): self.say(self.d["Sorry! It is wrong."],6) self.level.try_again() self.changed_since_check = False pysiogame-1.30.811/images/flag_gr.png0000644000175000017500000000755212201770067016337 0ustar tigertigerPNG  IHDRxxPLTEabe bfgjklfmg notup+lqyr z"t$u'v)w,x/z1{!3|$6~7)8+:.<>2??4@BD7EGFGIJLMOXYOP\RST]^V_ab`cbdkcfmdegofhiojqrst{u|v}vx~wx~z틳훽qbKGDH pHYs B(xtIME 54͠ 2IDAThOSO bnC 65/d-4m2/vC6hH嚂2F.\fQ '9Ȧ!ȍH,UZy9=OB1<%:tM%^<މ߁<py4F|J'\6!x{(g Z_]^NB|q ޺Op*P>Qo#c1g^ࡁ@`r?`R4XT{|مյՕ cY ۃQYUK"{e2ڪK̳]_}Rc2D!C>,xj{; p@ h PbLznEey ހʗi1Tdmp!M pG=Wߠ/,B,Dpc(<$,wp"meZ%Ș2k!dqDN@b`)7Hx$#ÇZPi dj{`7X[ԅ|IƱ1D x Pe*9,T$$PZ0O>/0ls6s|I3`=SPv* e=FIoyfvvfOsi0<\mV3yeںq L<%ߺ}gΓyl6`{'~tv>%{PQ}{!&/^<{ӧO<?RͨF|d"ߖS`BbI,|7ީy"z:VSKSChan՘JG9 zt3>36K`5 pӂI<@ܩq1j1NJ`rJfR{jZ2y/}[vچuƪ#eð&yJPxIʒF"zܒ(Ŗ65eǰ0$`-wRĥ%8MRkh)%EK֔N] F I:Zb(\ #IB`({ Ɍi)^9 (&Ub8 e)0KZ VzJ@E\HM#I:ׇ8^#ݮ^Sn`"X[h}b/,8}/6xo1ՀktlL^qy|P;i<(,ӵz[@JVT򺧯D= '&*.ݚW'8k|t/i>ZYNy s@A a%.%8%ܰ8yCaNWD̮j Kɣc8TnZ, J`-@;dl6&b*J0dS 2X`d;5:dd6"3G )3G8/#$C|ND489|jD٨9$paxNM4ZcTma+O$#1q)J`^^1Q!$k+H1y)]K V8-HOq)|m1YBM%Se<\L(V+0` jnC+Ƌh4إG)&55Z̐Nppmf,J%vJzFƙ YcjrO/fblgǙvmcp|!M]2CO`0Ȑ箮n`B\ '\*7U(w]FfL8 q[qeTTMc/E.$!O@ ;Nwc L`4.gbDhp($2Flgڱ\Pe*Ť JaBzVBV[_sĠ/`2zuO5ϿWvKץߒt_ߟ)oV?8U瞛PEXDsZvcXD[Qُb' .s0\w4/aQּhb9w׾0_cNվ0 34[–@Bϥ|_%l&-Clw5w[h(W[~(_#FycnPl^N3@7C,Vs +z]cz?W(! /XeAjvŇogy&zD^nu6=޸7X`;{U>P5dVL(4+ {jos i#HyF@[!J |; ?Pao{ȈznKQlsƺya; \'u^\A?А(OR9'AV$IENDB`pysiogame-1.30.811/images/bug2a_32.png0000644000175000017500000000110512201770067016226 0ustar tigertigerPNG  IHDR D`PLTE((%3.74752FFDD@RT/RTO]_\il.npm~.lěX,bbKGDH pHYs B(xtIME /3kIDAT8˕ٖ  QKQo@793Å;Yw`7l8\֯:Ķ+>f0 Z .d3\W6SRr f:KF^xJA;A'P3gJ viU )^Q AY̸p30B])$h($P l`Uy0QJq\D*ri ˺i:f)&.7$ב(ۭk>K%A@Q>51 Pe@@Hӂ:2ibaǩ]kya/?uri38{܏z]`HIENDB`pysiogame-1.30.811/images/logox.png0000644000175000017500000000776312201770067016072 0ustar tigertigerPNG  IHDR{{cM}PLTE $0 ;  V(.'% !48=r=KJAF"# 6#L'(&M! V"G&]$d"O(Z&a&01.U* D/ ;1'`*h(^, \.n,p,y-r-n0h2 <=:O9,Z8"0J<3p8L@0AB@r9 4x8f?n?#8WH?MMJF!}I"zM/uP$WVRE(I'iZH^]Yi_q?~DxBބI}EUHKNMTQ˵dsT'bKGDH pHYs B(xtIME  9!ct IDATh_XJ\*"jx`/mmhٸ6DCogI A_:~NssfhZkd kMŮԠQ)+3yIfU$TB-99O\ɂrdrxzt8ʇOrQSw.wEq3^>z .2Xs|_*K*v= _a 4߬ =R6;fyn>/r;NvA, L>">$$\dz{{o8,*pw6xMQ*r\2'hڂ]D4ZtvT5EQ1 E_['QjLau1;[lu#&(R:`)lT}'½01)GMltzШ0gnQ;|׫-Ƀo1{Fo2Xj% !#[orOaÍh4PnMM{W C8>lFt`38mRA@`;#Qr{aBp\"b,#q=9 Ԉְq~FHuFMz'&j8).Jvp,[4l=s1hdNe 999]/h;866>>>677?_aGFl{~~.>>400G@ɓ'qw'OޠG.t͙;*4dM>C!`S0)0?1L:F>#]͛؅|>?7FD=n<EhĤqx|ҀסG{b?vLFexz!I CR2ZAvrzu5:_t'kal! 'XX_˧xpcc;_;Ctr|N" 6/(\>ZMllk;W^]M陵Ŗq"ȱ#GXe{ ݾt τ=6wx5)[Zl?%,Գ~\X[>g=%l=-ZSRzq\XT?`^46 kD̉mƯ~2f^xMn([ .w:9]BE|T#"_黰yW,O\)+Pٻa :A} / -H;-t v76|wwlvs|mU]8rn˻|0O^iZ O–o!.fL$rp||S6۵~XJO/o ?:ӍRH~zRdx`43QVlX"GQ ĺ\l7r^WJ-Mg"M`܀W'baCbS)ڛz_.ʥv}~l{ITUũ%q{[[޾8=^Gdߚ3ގt֞dei5Jw.޻iH{ŖDNcޫG߿G=]탷޴%dcO="/d# 'R0v~u*U hVa`>lFom>d>ֆW7Kwg ͒ۋz|EGhGlR6k5HڵY:.ac彃 ZDȸiLTo^{^CS*hm"MQmbidlx||e_|ErH~JaH @- M?J|eB ^a&l+K.0M8OH[:V>en@UȄۚZcWR)^x"YbM1>r3'1]Dit>+O;-'wp'6H7X-Awcr_U*3٦[1h? "PQlCofsg$$N7B++lQ9(6W4qQ]G9 YYBW`wdsVLb-#MJ99f仰(\0XJD "DbJ$U,[^šh2lJʱ)E(;Uc+ W(¦bnJe[H1Rë=<'-3Eg*h%=!66|JV&+tn,n"]m Px*lҙ&'NHڜ͉R$5eK)7Xt 5IENDB`pysiogame-1.30.811/images/a_red_150.png0000644000175000017500000003764112201770067016377 0ustar tigertigerPNG  IHDR,d[sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx}gŕ[}iF(G$P@AA q` Ƅx xglIl@$0  5sCw}?:UUWuxSӹo:U0RH@RH")RJ"E %)R RJ"E %)R RJ"E %)R RJ"E %)R ̾>Xtt^쭷IV3q$aۉ3Hm aeU6T+g6;kq ΠoAj=5~iثV%!8j3ՙ:d] s3 CkmݳOBRlwzu:y2 j_߽oM!ADTC X㱭[={z / jH"Sm8ixdz|3o/QMB`!qwyO ]h#Q_uP}@G T8v2ЁےP7ϗ3ͺ#vV#i[Qζs']vUwE6,rP'"+o?r5>?Sȅ °~E7߉%1{(ه,V' (9[gyh]/"_'} 4SWU .E dW<*Yh"GYY}Vٮj>#I @tPUVm#p~f5߮4v?\֍$6vCwt-~=϶mlDɔ uۄ+SbD9 iLSt#ij+B~\ b::Bly:~rIF5ꅤxaI׮::73&YX8#㍐ߏy;f 4!:n9=tN܍{PYuxv!-D.퀄rńmXX؅0 ඹueb;YQEQDo*urJO.I;^"%YJHx7^zꂰ*ԒۗT@_ә۝?!GCc:R,QI#ޒ]^`x}H,Z.jI<WuǒA8Ea8&\68쪞t'ٶ6@iP\(X>faK/e:BQ v SV?@n!;t(l$x LB2 #RLdƀYPNB9ʃg_J?%,-ꃰ(ǴHe)댾 s3GX_VQ 1V_3ݟeOؕ. >aMXQ鼬jQwn],OuPGX (Hg^wieTavO+iOORq珽c~ Ua4OVQ$(>a5 G<,ʑ|0&6E1EAu'z 8K>n}FO 7 厜^Bf!c:shW< 7T޶STrezbNwB YJU#.#Lґ*ʮqFaI9 { =äBq'a3'R9x1,P$Cr*tjv*fn]<:#tf`([wRa81,R79!ryg&)II'n~VTP+)*~j {^PBޓ'Q_]ɱM@,tN Y #*pw5AXIcX] EޚdDS!>a1_MGޮBٕk'$a7 3V>9o,T΋"u<3 %#(m/ήjNL3݅j\'AJ\ϮbYSL7ەl7v%ڮtVg_⤵OX $ړwٽS5tj13hSm`U!!p~e9G5uX3aoB!P㱈rVTaimzisX ţ+9)  ؔUoEٕeZ}Šr%t%ҩF }@#iKR>*TTQT/ʫНd .֠ nrfO{̪D{W*HJ`Ȋ+]끟_x(C9I^xP( l>~Iuw0{*` ǣ3vv 1u*H[[>eY'Y @-lDII,*XȤj(bJJIxIMtXD^F)_С{ǣt-(^qp̜|ܔ qfV-yZG.՞]"C%NsUHib0:Q6mR[_UUGOz̍_yQe] ^͚5۳E'-*J(B.P?O<> ~"9[J7afv-K7༭(/ᦠ{#]4AY) tt ɘPt'\֠߭W+dĈxd.TB/6PYG%"\q ҆r4fȊ9&D$5Zy*n_ ̶aa6g4DO;ӄk8߾fiRmT%jȓj, &v(y/IIٓ.4Bu]-t\]ew$O~&i ]1X? c۝|  I宑xcB΢}s3n ''.X2xpNDJnζqPkWt1Nd3'+sLo 9ɞW UUCn:9J/Xy9`LI XVs'*w {wPIS ΍7@uCTNg` f_28MQ$NIeB uhaHp^;9>YГ`֡}? ⤣F!= (WrZzspϜ1g\b!rY(6X&10zbmR@]T+m2x8I!/Sȣʽz2N6yf͕=JW*xn/N',QKثhP'$ko[6rrDøuDB:=,Tw,g%E f!DDb#a8ƍ< xf?g~@{;/~d--s^0ixIFdYvʵY:00OG 0쵿:BٓI(LdӉNmc@o)t|Fw/ Z$or Ç8dA6mjX(/ OI=i84[:=)̡\B ).81Y.\&=Rh1|6!< ?j*~CA"pk/ GXx h%(Ɉ,d̫\x8w둧zC2Ͱ^D檫9lrJ7 LX]d7tv%x46]DO9x\'#5 Q8Z`_':M˖  ?aq 5T/cA46&XCbJnB/bGV:t&Э)9$708>cV<i{04YKFgG%\J嗃"vG^I/[ kmP1&ˁr )!s^tL|9r ^YDʜCT}OBfEP~Ϩ]X}N,DX°m`-_.nr !j*e|!ŗƥkS-8RKXtClSP>[U}Hc𚰷lU-o2do|hi9D1-BD呑_D[mh60b'#+dR6 y)tħ3;V[/ҿ$_^yգ ;۰6fĴfV d#e# lL|1&!+ dFu959c&۽ ֟:r$2' v VƀQ@I Ñ  o +D! oQD(̴.9 9:p4G~ ?6G/~pD5@ sX6Yl|-b wxo  $$)޽ 2fw+Y%)H-,qG:=}`q#G0)Aj/LwFUI+A>xpɇi? BJ2OW*盁P4 9=fލ&&L 8GAF#uB3LvD{'L@v{MzX~fqVH 0r$]O PxSTr՛'8U2>؎.bȊJL֏%+Jaze g)U]{<7]n[R&?"yKAр xD;H$,$ xO*"o :mF!T_l,4;*ЦͮTP2p3|!բG r m/q@C (oʹxH0BJV:YA_>i[2#f6 3KhJh)Po OJo# ijAr/yZ*`DOKh:$"סi2sڛIBVrJ\Qr Hܡ:Mki{`LZM!,d`,Z\svpMjL2G$<Ʌް`@]D,zCvlJ~!\!A7ބ<.46"d Qe|`x, A$Dhg5:`;b5Jל#Ryd:R@fY0/<]Q7WdNBý t c@bx* ?G`OTA(tpH+DT$YɄ#D7BFs"wokS(/\r\܅V$G  z1-~jih;Y"DbrejJR18ڱWZ}%j4 clƱ[a="%4Ocw@:;Կ oZ|-`s`IDATF6+#R<2q尞\$ KʼnT^ıG4 UzBLB075-{[(^$4{̩vq&F@ dm۝{0l\ss8SƆHIӼSxtr`w@$iY)w]IG;ĄfG =~@c#2 9#o  Plx$ $]UJӒIud*S#MCP8z\-(~j`.d̘L4qW r3f6^| w6h$  | Ouo^UQUCV(n;R0/ l+lh@3k~B0. ƹ ־`z]|(Ȕgkډ ,Cc7y)GT ;J@ AwtdşJэ[Lc܄f؁hkp_ Ce 8L5rqX1 Vl~d8 ʦLp"%E4{ dG=3CRN]QAkW<5Md-5m2 x%Ѯ=Je6{l Rw?p10Q;Ħ"ydSPJw P_\ 8w P@Ӓ%o'ѫJA,)o{ 󍅂L b0d0! P~\T y'Ӎ æ6__CA9do>)S[TKah$!HnAyήxr۽MTRD*" =|9} /ٵm4W0戉=%,AB%؏>|׻fd$-~Ck]OxLw|Yn +u< qp׈ GN~Ve~\.ؙ߻SyJ?X.b30Q@<\P6X+*Ɣ`d $7ʃBo+gЪGq3;){}''Oq</ rQ$( Y]$+H&// 2cTd}a lp;׾+Ig?Vy GRޯC`=U UƑnf%1IC2FDnY/7dE䯹SIN8Am!L <=Y'4P ތr+K]G['f]'cwG)߽䨣@3AV}|Ř N<i(4Ӱ]e{뽪8L6I*ƋRy`thI 7$'4y$~S~3PdTPa"wU ^B3Pt `p7--!bjo pɀ܋ vbPXU11fJT~,Y0Fj7psS駃 ~;p!1_[tL0 NY`V)y'j +y;bmӂe@?;4x0ӾAX p! `I H#9z %썁T[nm߄m?W< %Kƌ0iROlO ^~I`vgi\\JG>*y(i V^X >w:jDN޵xp`Qҥ!8FcCHEIVP'"`=%%4Ϟ 0ÝMMl&K(0N4X{S JԁKV0.' bJHV#OUVDۿn__G CXri7 ӎ;f ^V+cV`* uOYM ۶z2><ꨈwpw ?a}Faa}֛򟳲\AdU=,e3DU+Wh"ti6,@P[}־D`3ɈZbr+ʪ dOc'OnfֆD) rM]-}/p4G7Hޖ#ņgiE6]TCViG_ܗ?ނ◿K}3gᮻG9 y.6eڋj"2zE*pq&ъńf|oFЂ^z)<_ӏ~ȃ-t CYjJBJy{d=@kׁm/ ƥKAft& ȱ:\ |Y5hn,?\rv,>qm"ίS rBρm /4ӄO +n{E8j!0lT|kԏ' ;QRb# Nlf(}_~ǿnR(q1cw'j@)Ȃbne=${Gds*ƒtZJ%7^_n U%4 ;bB{ {@9Ke~`i~‹. 3HXie@`t=A$=_g!(~; ~(Hv r9P.EGA{ft~\PȻuҫR=q|uB;^ 3nhʺs~ @. 7 %m9cf܇I8T_mU_h.aq#ҲW'4 '=/ck^F*|j Vzwōv#Ê $-fмsf>y>Oha |x[Cn}@[T- 'ȡ q$/`6ǞQ'4${#ŋA>ya}-]c#A>NKdMyW6s ͕ x>[W@Fph= lG!5D{WG (M6ZaY&LV0- VۨHh槕N򗠇l?wlFҦB9(W)<曀 /*jPf^s1D~:eJϞB 90 +`/s t4@5'oaE5:<tX\ހ:4K{?>]{`}`۶J $9`wXT{A*3r]**U';ȌkW+pn9~ʞD 0OV{`=Ib"3b@w*@|yA{XO&\1{6 7ƒAڐy`_}%Wϼy2|FǮqW.YF\U^Bn;ɽ_eJùrȞw^F}  !}1@ k:bnsZ ֗C 0φxJh81MhS^!QϾ7 _&CÜ{)M'-yN Ur2 Cńf7f2gGݽG2nֲ7߇+p2pYb[T q2~H|Hazsn2t g64[q*C4i‘׀nǛQ:zXʘ5 wމZKh{.̙$3|슶J2<’H('o+*PEBsEԔ&4 /y饂ޯ`?0̙'ߤ\! !g0j\UAͣ0B3X{;J^{V@Gt)uOX@>d}f#ŞCZdK1b6H.HhfzY-A*҄B榛`vC~>p's@\4JUh^290xa]ICN%3ۦ6 HeN9dذ܁=@殻@8 Ջ%Tνl&2G~h(h/EE@2e/lZ|9 wqz a| c~{͋`|a!]X8U\aB/۹LFF&Mhy9sFۜ7r: a¸ qMG2p4s4b[9>?gdj@vRmq? I@狼RKTJod~#bV{)@Z[;무GN@Md`=|~5`\ ~S'xLA`kIJ;)@h8 oG|ÓN)~ay** -_,q j=* 9Fa, c{ܣ$GvѢ4ΐ*_(]ǰr- '3@@ff~HTbI`iBs]# c޼@`Y(w@fι DiM?0W?bCd@۷ZZ`W ~;x6~MX0 Ab֟VԄ1b(M[F+z دү3_Hl?t }_l{0d ͽ:DErM7)Ff|JT`W ? cKko|ƙgpM/}ǟ` f`3(4 z5̃1}z\j<dv#J;P:_ې5R\໊̑G ? ǮIs`W/G_ً‚Ӯ7,C6lb]mmh0f@0{nE5y oJk)SP>Z27+/23Qo7Z'!?]Yon6h 7W[+ ر0;NW߃sh(å={`=ѡCӄ~c|oM[y;C(m9'Fmӏ!!z Ldoބ/_h6:w܁zNh{U3f| W  :`d4Q5aT~]%4fw_R@s2AV^KX+p> Nf3a=-Q1(y^y[7j.ih˫)U)0[z9mzF j6OhRBs&̢ErLL}…\b W9-`MUB?2'"Vq{~hlDӒ%#GE :!0O=d@VzpXn[90㤌!Aa%4)J?A) wz/.kW 0(~ HA=N*7+0sߝd@zyaXLo SVioGXOh#vhZX/}E K ^8o1؞^a s q֐w +Gn[&_Fg^Dyl6+(Ms0SsB6 }1}:L)^KakB _6Z'0ڄFL@ s_*_ޓP藹IAA曾} n6Aޱ,ƌAvGp/1ԩ({?~}=`a9б BAF,Xh8 Bg+盢>𓟈,T~w`ox}rŀӯlͿ}y"%,"`+PS`"xò^y3/&Odt}S vˋvlz voOa}ts #%,&ۺW<]ׅ9s`L)T<ؗ_K*N|(p_[B_SyAwQ\iA'Ce q*I98uq @I|DԕB`SB}=RzUzHHbÆ!Ϧ9)_c5r@1=5>O+YѣѴdIJV#f2.ZTN7(\=gF4/] :bb@JXȜ|2(M̩_NoR4y'Yi + Qy[<qV۲7嗑rd?OV)i0EuRHQ7H +EuRHQ7H +EuRHQ7H +EuRHQ7H +EuJJN^IENDB`pysiogame-1.30.811/images/t2.png0000644000175000017500000000221512201770067015252 0ustar tigertigerPNG  IHDRPPPLTE`ejk |pttzv |~< Aǘ-ۘUPΧK "m iش_#~ڼw#'+/ВПѸӛܵpېbKGDH pHYs B(xtIME *X$jSIDATXaw8`6L 1Jı,vJW+uW{XK^O0|=sy I^P_<\{d!5x1˃a >w ^;^7h~Ӽ A:>*m!̐>G8p- \cUm`^zp!Z0G3[aOgxGHaMi1M2_<8` ImSzYrJ+.i]Os ߃iE),5-t=tn/dIENDB`pysiogame-1.30.811/images/info_k_up2.png0000644000175000017500000000337612201770067016771 0ustar tigertigerPNG  IHDR##ٳYsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YIDATXMoDM~$A4HTB@ **Oسgņ-؀TD "~@K{~sǾ7Uas6Gf:ug`"K{'0aIXT,UP Uj R{U׮Z^DQ{~ዷߢIɞUdp6p h2c<LQ_!_%(Et0MF oFm $1(HPLVAE*֕1ag ŁHvN&lP o&P9aΨ2xuD"HR@9+D HT+`PyZ?UEJPzzsQ!0 :H8e  Qb|]r"X|[ Th%pZ#Ck+T\0$ДaU i/5ݪRGơ Xx fآ ܾ6[,,M)Drk%L)im2l 7lo‘gz-x~".U`Eb F!fyGivzѤQ?޻9W"Iֺs-z2_eˌ:g?`sM>LkZRTG@b ^pn\3`mL4둝?s/syц+ETl1&aia*-AMU揞#rkeL}KOĕWJ8D6V,I@"DŶ,.no3scL=F;c.Ҝr,;ټ%=g`Q)` n +e~I]dvAү>(?Ƃ>WI5Z,m]Мv*5$2pC.]¼!v&{W3ZvVBlS";JT9]t&2Y haE]>{f!cG*'ckjQ`!T` REz[.|ff'Ps+\3nNL 6NWG_5ڻ* 0E+ڰQ)LçH{}6Jz*:vPxiGE[k=dPC**#^(bbܼ߱pqԕiߤ1h>H[}L<x/mMS-L;2TƕɁvΨ}6 o# I6R%6j2U&y3֏/ŸgsB sa !{ Ln߱_~ & 4` dN %Nj& M[MD};)r)`$u~0>L;LV7e&ѸA,a:ѕðknM8Igcޓ:o_,pfdQT7AIENDB`pysiogame-1.30.811/images/tictactoe_o.png0000644000175000017500000000223012201770067017217 0ustar tigertigerPNG  IHDRUU+XhPLTE-&3)SLA4.%DB6+,)CS? 1+. '<88~'$kj[XK7)XbeWSto2!4/5~P!USc$bUdXhUY}7Ȍ J6_A,*zh.,YЦ*0Śl*(U:KZt3qP 4,V'fڲڜ嬛:˚#ҍ>b2QMo3vhd}= ϯj#&P'2szA*#sd3 a[.6ƲjEwCU{lHn=XzLeݰ[؎ҀcaxѢVg/zZ=0{_[m'g{;ax}Wʭ>mIENDB`pysiogame-1.30.811/images/t4.png0000644000175000017500000000214312201770067015254 0ustar tigertigerPNG  IHDRPPPLTE[ y`n#]nXϪPp!~'|aTJnvS u<_(AھynDV}#s$dS\sev )!О$w*ܶ/Ϲ!WХbKGDH pHYs B(xtIME )6˴)IDATXs0p&ҡ& 2)Ǫ"(V*}jOHUDlW?E"  *+\rgWw-O7-m/mepj{h;n ]; $us r$k4q\K`mpPZ=bj檵'b :(O=7ս e"kgͲ$K,R8yGjW3K=/H[s77ܓ~lA@@ <$᠄ zzMm-0&4_y;ЏJ0Hl%Bt(. E7]_}9w .l&mۗ=E p\Zv׶dKp.r h-S]{ PK RWsk>s?k`*K5-MT:XM\;ńgnNLsX>xpN:G *AMS}t0lӫih8eذRdBxbEKBj~l`w""4H7! 8rAAX'H@:CE+O4WPcpCXLʌd0?T\ha*d5rZڨb tٵ<1v qe W?Im@ .qKAe4; =I p,dpB1J&ۭl:u{S=t f(G`@lyQ"C_R؜3x<e8ouDfIENDB`pysiogame-1.30.811/images/t7.png0000644000175000017500000000212712201770067015261 0ustar tigertigerPNG  IHDRPPPLTE+%*4(6(3B-%415'?!CGL[<IP"I,FRKM,H SeGXGqLq]N{Sb[O_[c_Seegojwhaf=vlin&toyq躁 Ȝ4ѭV۾{Ϳџ۵,bKGDH pHYs B(xtIME )40IDATXw0Td!uݣ{ts(ZBiw --`yK΀`cp9x1w ._;xu nq`t1xv0w ^n8ͼ?:-lIOuLr 8OUL@0mNj0E 6&&\!60kOm%@N߫fIteC#%R9fhnovwJ}~섅֌XWk眝{֯鼺ȡӸղ bbKGDH pHYs B(xtIME $2sIDAThv@pҴ&jL#5mҺI]4k,oD ?ZsfAsB)i`bH$0z^Y3zY5A!HvI΃FF'F "Kv$DxK0M US@hLJ3m4& JI@+[r( 0 ]fpOI<"EC-&4hdhhL}c dr{{'R^ƕDq{72aUW`,$0ޤ {صʗ dkLKg6@vUuP3(q:1^LP 8C![0NEƯW!a HJDBn+q%XȽ 4~J@nF~W$r4ϡ 2PA"P1|E"/\C)ya\DތXm|E(qDӆBF|2f#C9ōq]J9+޸"5uMFr\DY OY801Po%}%V3l>Dיt IgA|XQIIENDB`pysiogame-1.30.811/images/bug.png0000644000175000017500000000261512201770067015506 0ustar tigertigerPNG  IHDR))PLTE &$&& ,).*,,1-2.425584 54#64(/:7849:9;9=:?A'@A?HB,>H:IGC2BE7DG$HI FHE?OFL3NO$DTQOBNOMMQ=AXSV2SX+SW9WW.XUHI^I^$TVST_-Y`(Je#]\U`]QQg.]_\cc9_cEbc?Tj/Ro,jeSfgdYu1jp;ol_lmjlqN`z0px9uvbtuqx{Cy9z{glEp:w<~Or~}x:[?}D_]HtRigZ\htwĀł¿̏Ҝ WbKGDH pHYs B(xtIME /;_GIDAT8}_FpA^";;#`ܪk*e(ݤ6ڰh1]w//<]u w3s9Rd楑U 4F49/]5%6tM7tUV u&eGwz/519y"Ds;DT J>#HyYQe#yҁj)6sl)AӧW{o>4!%c?pY;}^-DjYPz9oΪۑG-KԻ^izVKGWi K= zVh{=#?.Ao+nx&tGWWˋ$;^NDyڑCLOs80v]}r5*2d״ v_s {q-LFF8c( F^x$Rg*`8 ?3XbhFtS~># w% 'KY7ҡzj5""0HdJeڹB7~j^%Á/6)4+be ís2x@G.nVپY'$R@cڡ*t:A4 OEl6cD"JfB(/+pܑqs$׉>є&fTz2z2.[jg$2,32Z bJDjtFj c(6R0RȆ$N'VpaؖC!H,1Ĥd*$ŐiYpy3[Uuݯ2+9IPܳj~],ê!uQE XJbJ2L43y׃qRc,2,%*ńБT$"0$3yT:~%W/#A%@huXigur)9ĸF? ) 5b'Q|*E%STi :+p6$S+HiY^ddn}<5{(ͨp.azU}TM;YeKGέcPb4 ^:C/z0> x_wѮr W2ǫ+J:ԖP^+mًnTube'ˌ]Ŭ |[zny 3csLObHxw >Y1v8}nWzYmQ=%96?ooy I?fpwmdVă~͘k_ E3)8]~c=46͞C{Ѕ> ޶\`gzoM熎Pk$fHmn9#n;z;^}ZűژFnk&5Y΂XąܚG^9G)O |s_'<6u0exQ( n;ý9GvnHeWh6Xp2RzuP < Dqa4 6[Cj"8fAنDϠ EOc/\0nW 2xܠ؉3˧qKT!4;ihU~ /!?m 2lb9A5MTYI\y\#29 n-@e ;:b` ^`~.#H n? Z,GOAP9?Jw  4Us*Y]`ڤz£Zed84 ?t'7"Z TfcD"i\y+#IHmhL΍`_CfJi0g8c0M8WHc{a ^6򬿉i^i9acu"[ S=@7Incsqh[eJL5wY!:[`mfh|-x ,;M\G/*=LpU$vp'5lqAH?H~1A^t*5 aˣq9,gI߶=~ :6kUSʗoF~!{=F1}-Dg1Vbo}z[_tj/ a^ +13}( GHl$Ittn2n4z&ncx;*9_>Cxeȩ=--"q?ni7ữ 5H]w=.`'Gpi%u2ǵ P-g u-|7R{R~5EX<]H_9š..Yg˛\Q;D4q䞏xod/v 2sBn#f+R'IRi£/dc{?96"-"B&^M)vY pe&lqAx0_4^Ћ|q+;n /,xHi;1܆A&1&x^`eZ"ST{ޖGqqWJFrfo➏F,r/x"B:q< iH'w 6p}pG 3|?ru:yB9;>N: SoWD8Rnׯo D!na )O&k[  yAX_ؿxb~k2Ob6>ZLGǽC% 9~k ~Qޘgoi07*ǎވ\l6X X$GV(Ҙ- ݵeRg8W=7&dSG9TL6O&W -V 1Ţ(Z z^^zQ~{g i,[r]q8l|t6G:#͑8qs͵iju3/IAH>[$~l > skMٓ~S#AgsyrB2tR)9[.)$\BwA2=wM>ΰs?=y{[mRLH{eoL|x<Oa;, ̧FeV%V@iQmx}l_yGeg~07Uw0׳Lw98F&[h6q@({Yr ~Pb5jՑp, ;h0<$6 >JAf3nLvسl4?89 wrhN,fM8,rN )Tr ӵ,IrNx^B:a&8t`+PM.0$8l ۿ#̝CaG5*uZEH^3̼3q)iV3)Tpu\m AN1+;AT94t .ׅJQ6&D/ag),͢tDm3R-o4\_婛L"8iIqFb+`^y{QJcg@yCu߃)E5掃h)>å{ЃH[GR9pN5@+DVyEZl"-Sq1zY[fyE/+@YèfPs ip6էqv8C:29\般C"1`!6E-1@;K6縤9@okkWd0>g g1wIbBZNW`t]fX[8#㔇 2ƀ`y7~5h͋ 6t[xn3((S\TNLS܉Iq,96YoŎ,g|,(g;ŋ-%)V* gPaZ[)l$*)Ϳ(7\?ʡ,-y)OR螇Pkn7id;MnږVwdh.͏^cm魀u%|'𓓎c>kBӻ@% Rإ5; JTFֵWϹexDg:qI(YB%|Q{2_B,z]Ex]}](: z 4 {M +[{m hs$EJ?,~=rxZP^uo}+oS3~ԝcgqa }wMHjRJ k1;n%M(ݼۏQHAـyW~C^yIN|.xN748ƽ] 1XMIt_@<@%8(s9 1D","+T@͋l S}XN]Xo]xO_I'09xⶖqш3pś8UXQ#0lj7\r7*?*zN<% JlL-1,35URX 8s8Q,DIf$6ŬMq:s4"~9EIENDB`pysiogame-1.30.811/images/fr_cherry.png0000644000175000017500000000363712201770067016721 0ustar tigertigerPNG  IHDRLLIPLTE> G C SM G ]W fJ` X Jxzr {s s Pk| g ^t N  T  cP$  T! m!U!'  ] &h%d $c (~  x""\&(" e)c&+v"'!W2\,0t*x%/n),b,2h+/Z4#(u)/v,(^7a14$* *a:c;h:c<#-h7:m6;l=)1'/o@(48o=@lChB&-4eE&uD,8q?BhG)>1LqO0;@9C;D=B>GI0@I@EwRUBK~RXxWBTVyZJFOHM[GPLQMVa |bP^aOSOY^cQZS\h[V\U^X^j"k[`iln*m+o2omno&^c_ip/q:s!bds/s#tt6t,vtuv&fmwEw@vghoy!yLzI{$~U}K%(quaW~x{dl{b~؂n{vۋ疙ï®Ʋ̸̺ȻϽɼɾbKGDH pHYs B(xtIME  3(IDATXcGE0j!P9v(&= MJK%Z #Q˰T2,9Ja$k _pJ- }A1%<=' |j9oT˛^F* ۴; {ʳ PͰǫR83 {$SͰ.Pvdwvd-՛OWnZ%sWT3خ#Tkܝ {=c'j5\>YZKV;n2դl {`6~)ұPUf֎_Hm9>wWP݌+AΦ`Db3G5جIӧO\/hIl~uPהҀhi'I?vkMŔd7yz5OIlmS24,AQ=mzIm7X,A]@S7qz;ηvXnnЛkw ydwi YAyuV%vHkvM^PHVN^ձOVQS~)jSřUmowU4mbu!FJ [`)%( &u2Zwpo*Ymӊu3"YkiuYIL|bSs"Gq%ְz|Xͪ>-N]sPT@7)8=Xzتs\&ְւ2˩:}j;TGaoSOliO~ugB^L褡d,iXMOlh6ߚtVd(/iX]S7No4X!xîasço6=c?}S [mU9_ EPFluZ4kRe[#yLlBW~;EiYy *fsD x vcX3{YtjfS"D ہEOq)r+ L}T2f|gNLaQ5o Nf1z-$ lxKk o17n!;h UH htF%1gG Ig`+qou2Ihu$4 *׹M{g 6$_a`SZ[h1c mкvh :(qV8$29RĖ svWksW3SI~'g2mx nKwG]] ^N,\&m9pR?>Km3K⭞LЙ<-.Kޗ!MxC[%M'z.6'::)F B"`l_Ԟ_OD-0 MBCCf|0mV,~y{d%>ag]"x23no~!&>Ma nx mT&vn-R(R)r*V]ީ9 7'~LO&q0$#p;Ͳ;|صb!Xzs}&vfͮ˒^muvdѰz++lWѵS;cy4Q?WŮ/+fٱ'4" {Mo~<~+׳5۹<)(sPASCF>l~SFf}$-ȏ^&vm'-8OvFb^5Uԙc]J݁!|8/r+*y+5Ws;Lvg&IσΙ_Xe;JAQ]֭Z0mLh Dǥɯ?+Bl*3c7ԡ-]:UV,{Ϧ2݁W=be}/\^?sT]OwB.&!Ul<.t** R`\mY_e9 7dž߸ZݒY4~\*oFM !6bs6"NGSC#YN2;= p6"F>qށ";Y|o&Nʏ޽{=#FRllEU^>7ӟ>Џ;%]‘S()y'+gPZZ0{# mk`"nUW0ı//I. u H8ï= ?#%=9!LgӀvjyRRQqI9{_ݩ~*ݬٰ|&ڭ:0-KO$MA||Y-bͶCܾccAE,ʏ#4Ƙ\;i n7x*3δoۺNvl\!%XOGߜ!羴CĮOq?4aփ$y1|)RwmÔ#!u0# J6$;g{ քʴUu}aw{d\3vȦKo@ĥklDBWxĥ%7)V}jRb#r#*qvm Lݩzʔ=ݖ̘/r1;̏^ |N?c?vKSSwx-WSdF]F&1Jqa GΦзƁ~;]fMES8}#~dþXI* ĮU^a<7n8n?ZY2 )_/w5u,Ư5%:wh'~l0)+:/\֏Ƣ>KJ,R؝HXt2#Md&8uaՀų3o7;k'{^]xJ*TOb*EѼReަRB/.p6=̌;'xڝH1p(8Mb5.̤QSbB:fѲU6$2\Eg7/~ \bK4>="ڱ>R8 LN͒I+\-U[)}MXt<왳2 j.8,W?v[s4zf,yo)\#3nB}XkxRo=dApTӭ֛ ̡RD2KNb׷#&UZ}L{, kU*hh~hVhVhVhVhVhVP) VLkC]M1[IENDB`pysiogame-1.30.811/images/c_circle.png0000664000175000017500000000561012201770067016474 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ Ashton IDATx{XTe_ 3D )i>ۖ[[ֺem=֓ۮX޳tQ40\P` 3̀00ѳ= s =r}ߜAGD3fx1`A`D3N3 Lɀ@3h&NN:TT7QYNKe[5ZD|D.zIh[tNj9YoO1bw1*&M3j- 4ͭ$нrmE/\aG9SNDr&gQ+8wy\+&qb0~7 ~ɯ ,nb e@$b=[nρIM0{~*GDxŖW9-{cquǮMǡc8r0Ŵ>%N˜%G$}Fsw1o$ޟv/spc*1]'걍M*խ|[ɔH[5I1˯FnM,e`\;2Y8992~pev{ަ+!z}j0aJ=g3m:=DzoGfB rt.l&ҵZdxXDe \baMs6XUۼ=񒊨v9n3z-˾T"Ύ뚑xmH%v~+=b*.m&GA gqѡrf}Q~ Ja~]pLH5:eSRHBRJEDʃpt_rTj !.-*Vo˷ T+\bޓ֫SX2n" r"; }y$d\Ti9x4maLO5ݮ&_Z?B$E!p7J6}vPO.Jmy[7gVͣYrEXb yy2"7^~s jM9X܂2btfljֱtm+CB qO|1>•辛1Yw3aa&'SϾ&r ,r?Ka0p & T 'bSJ8::ܲ9A/ $P#uzqKR,ìi1lz-0 |)^N~SQa]D1\λA*3y{rBE`/fw/ řa2.Y-1u&xv)lj^FĵJ_g0!;܉Ujj岔TƸY9WWKzm+H`gP3.-W}dlYy YombF :g1:ۨk21J+Z$>zS̚ju2 7 zT){wYlsLta!O!\~R\*bVޡgS;O &L.\n)[uC*z=`^zSt b Ft/ꁏv&G^lRОг杭r2_1/?YϢDEHܫ|I$|R" ̺I6"SÊRe? ˯2h;^kNӠj%vq?a;/Ʌb)qg'#-gX#ꓸX`QZ`{߷ _gJ*9p=502$DT"K*KCDҢTiP5ZnT3j7gI&'<ز_~f9 Tj-#OTjjUi>?E3{|Y<괔Wk~5+b _2_qQxZoCI;; lqu<$^TTQR@|疦K`&?ċKbMC`NVQGgxߝ3ofCa00A=Ԉ# `۟3JD0? h[(QR/ʲ8^~bb! -c]RVr4n.4qwL(?'I.7} AOkLm唸HuL/cIIeD(~/ OW) ,@PqeM~ikIQԩhPfʍ$0.ʟ AnT(#= A&Zیs&%$pJt^۶ؼ#-o̴껫YGmX0 w^Q[8bEL zc&_3^N0=Ŕߪf5%,401so9[P˭-cC˜{»-I{c;F 4f2 Lɀ@3h&;jѦ+>IENDB`pysiogame-1.30.811/images/t5.png0000644000175000017500000000217512201770067015262 0ustar tigertigerPNG  IHDRPPPLTE"! l%H `n Q7/DO8 ǘ-\OqPϧKЯYplj҂ڼwnגӌݠ狢П۵辮_ebKGDH pHYs B(xtIME ) MCIDATXmW0pJ.khX,hUfu[죨w{?9;)7wC{&R۶Ӗ^C] V!qC|n^  Y "8 ]0A#xqEL $p WtX9 vd} 3Mf,ә dI=J@mx4̰TDkeas77 L1m0QM%$Jĺg>,l# F3>KTȖ6؀1]0348eXhi- >ٲ ~(xFIWI: `%(:c07o|b^C9ƾܗW`b2xRiLFg*xp.g߃~ 6QK'% X`]\g^X #q pnA &Ay+.!5 Vנ5G ;ůnkæ壨 \[lN[ D9p9% ǂnN9TU$pgґ~ޡ.Aw~J@GXI w<[`G]3 vA \mOJPAy"Z}2X>U$PD4[Ha,PS _( P!+A5M6W6,6IZTR-kt(F[P;iݚ^},4]9 /kUx,(w~~y"IR~>~a7J V-̍[?g`$鱎XR]gQ]{QHUj,ڎK-jޠT{٤(8T%:+` U=+0 pPUˇ=Բf_WzU2*ZbUѴPcp+&:Er| 443K4BQ4XC %BQ<䘯 pՂDyv@tx Up )w6C`un f1#vT 88=BblG"`OL5zBBU^d%*HA@ ׳rjgqf(F9ԧl}kUZZW2heIENDB`pysiogame-1.30.811/images/c_quati.png0000664000175000017500000000503212201770067016354 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ Ashton ^IDATxyXUevQd58J "ˠ(̔Yin0:jӤ$K.M6hBD.)9,K*"{pp9}}ιsdIIeO>iT%'j'Gƨ'GG(I@$ D(I@Lt5^zm:Wgkzv@iy5"JޮQ|PX\/׫ps%wSt |Yv%^! |ǻf)'nR^8o RbQd <)P4 ?Z]swsesA&ed)ъe)dOEBG }7s 411",*Q@[+p596hV8W":A A~->?rU ^O(2V<'@GQ;N=V;OWK*' '.>4I<΋SjH 2}VAdI] Oʘ_kQI]dL(Vl:ƍfKA/3-?'K _v&|υ+e:ICȮu>@H" $P @<b60DmCWKQ4G )G8ںvdZI]J+Hm^RI՟E!JVKĂTXX!J '; l$79^OgQߡެf,`~TWL[0 TpuDLMlN@bNq1*noW5uDlóǴ+ղ9 VYG.1ydLMXêY>KP5v=Q[a5[mن eR`y2YSNvR>jmΜQp;%17[6, jyIǼD9+.Nvl,K`m{256Rٲ#ϱdm19yC$z~5ظ=qsuҦjCȍ9cF{i}]bgc&]lz/+;_O\1rTqܪ ~c0f׶ӅC,yy2]s \/ļveP_>zVp6wy|u |w)X0; *ʢAc`qTV6ߓsej<߿=c5Eti䐔~`YVZ2{]V'&&L5Z'V,*oQ~%4;5oB,#}= f3ԣ)\1e:h]cGl2IWMVM=c^ǣMbkbQn4^|ɋ*;vQ5H$qd{;h-{{GM z)GNjb6?ӓ֝,0j)'6rC]4qJ͌eW܌'iAl,kUؒg>p/ ,* r>ȡK/L~q-s D񣃱b6fhbVf,~({ꝯ**xw~L}W](ϖxN0&",M!>GօƷN ܼ"rJjVmCxz|Norzm܌,X͌y{7ʥ:ټC0oV[L|ѻX>?nWFxS\^˚3P]]͹ y-ΣDncWgk"!=%3XTlώd2&FdYC-Рdx۳6_-L!ϽyBpvww7lݸf8)7֝E9Z$PRzkI(%$<'ң0dR~ר0_&dfYӳ6W;5Y-`=k5I7g;tc{51]Æ#YRu/MĸO?W1ŽL䏧{/|\иȇXudp-S07v-Q˨9{(!sӲWdX.ps#19]\v]i?XȐ]2+ D(I@$ D(I@˛&q/Gh5<IENDB`pysiogame-1.30.811/images/logo.png0000644000175000017500000003153612201770067015675 0ustar tigertigerPNG  IHDR{{TsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxw|\ՙ)̨WX$˖niL `zd7dټ6}. %NK'6XWlK.%ٖdr?bK$3{}9yN3<# IP*ua ן,?i pf;#5hQAuNO7O?&$?N>!cOA>ӎ'8wf #|B4~{K0 ۇ4dnfϞʕ+w޽{O;vz_vg{N#5ƚxRGF.39UA4dO Mֽ#9B%˸/ رe#;maBh4R3HMM .dܹU%'رcy{5CׇME9_PȚWVA@`\Q ^+TȀ$A$Re@TSHlwZw|l}o-[7u.7Lcrt ;'(!ɮ?i*Й0IU#:䙧D2tl2!g%,%\ cJ(?>D[=Ytwuzdd镟˯>8h8r?؄$I(v;L5goG 0u5q6!ĐMnۙ].Z$H7ҳ@v,.32~|[ULr{XrU=F'1劜nc ͎3djmda-ٛ7~.|uww܃ _ lm UU2ӔְȜ/ I4; j%P,[)`HPMd íh}H+_/vn>s˭ Zl]^c8'Ց}'np J!0?kV~4J߈#ܓo縥%|vw?Ri$,%@%d,_YBj:a/2";ӅH]A$0$ %YZ'Խ<~*s/ZIUhƔjECY]2f_<ޔȎw37$P,#ʑG+fl|56rW_ii>;Hסkd`9[R$le"XKT@ V{vLl] GHm IvvF7 4C:. C CXi j፼6j &3y. M 7z{7nx k W$!FCЭBU7ϑNRCL;fGH8#޷gyݳm߰TL S%b"cWl]M %J:aJ$!@PhˆfJF¦8l v5,.ta nn-x0P*!e7׿Iɴ1g=]@v`܇8SSG{LO n.Azm仠.[.q#nfFn^R0i76Ek>+lV6@,n=P!damhZ+oS$d`Sv]Fv@ut!NE'5u¡~DnU3@EI`el:a'& gBcE[,9K6,6FALSmV R) IH COddk)@BR03%$@6 $0:^'7[&{7vpQa"C j5NY&va6j%2~tV_BLUI.X澾$0+H BdC&[4zlQۯ;H'*#xaX'd)}C4 ;MU; !@1d'AnRON,A_55`Ni ਲ਼ٍk $dGM7L$ l.$mfS+Z d BÐVUI$2!DHM*(HdE p7GBRFtX2l{e4A M=3)fTjt"(vCud:MTsQ\9!.AOX`(veЅnHh4 RʆÈ.ĺ(!qh05ouV0d@ny4S$!!.L5T`HOܤX*گ&lK0/vvhPnu"mN(O9 fNـq.ZCyuܭJ8Ei"3UVN1H!oІf+v1ɠVF$[#aMǡXOF*$) "Q1;^HwU%!eIw#{nutJdS#>^G ސGMSO"*rc,k" !q8deYJ_$b#Bđ΀w ճΒkc$7oU212gFS1NatX1֣!Q_c!&ݤHl[ː $CŸbZ<v78)bY lU+4w`gQb%CaWCXY g$ ϶L!2Ywʐa]XJX76 5U3E ($'+f¥HYE F5&'s'seV.FDRw~Z qh•xyy9E(yجXS6ĭe$[U3fZO*kM30bd;ғU`0ky:njDdSlMd I6@W9`6)QiB9 {|.6 eq}XAI%S ?‰S6H \YnMbV afV5šnj6&>!aXqNZaԷ5NntlȱD5֭"ͣ<@ޗtwh&MpN,%0l}g%CŔ $%$l$./FU)2YaeY6mukpfPt @c5E*E uAH51& A-Gچ%ˁ& -cxd7'@\X1ͯb@O SpaHQj5 @8X yȝPWA1*s\qf͉2 .e=:FkvCEtd=hfH7"/Tu w' Cd%;3"$;,ӱٲ>`H㦫+ ٲR6[r` %{ؠC $4$`v@E ɨ an=tQ. 4k:騚NX3hZtv zD}MS<ػk`mQVZǵwD/ݡyi/a[7o;WV/<\68?PT|Ak^U32QuÈ:},. 8aq7lWqt1%k5͂ %% {W76^zÆM@o?>}3_묟}i_B:k֡=pJ/*@y;2S"HEgDm@#iT8-*&UsTwe6Gj@G H4O?Y}v/{L؂㍵9N :}0mmm|>|>sPئ;J)ML*x#>hML0\zu9! ЫKIi}EKO3ltrmNÑٿ\ew؝ۄ8LƛH$ lF$jwO]OGV'yNJsœiy=N ]LojժuӫrӬ~wEc!b$[~x_ۥ>ٳ[>%-@8؋bs$1 e$%% ]gFvv򊉔~G9z,Ft#NˉXI$; KH60x鎘VZY*?x&nbs7,'`@YqT^'BC݁VZjvRl3f1#Nbij-%rF8G ?'cz7^9[>5'Mz̑sX42Rܸv=ɄT__ D/@O['vY5b"& _<·Q{ E9u\yB:tY3S9q8vkwDlMHawpüI>,qP7u=!v4I/)󤦘Onn[#N]%06= ݆p9e{L(TyM4|E$:̮,ŸJJ#6sђp{/mg6^Tu>9}|g3ψ|OȚ5kxǹ{m2 ^a=]I䶅SiVqlEd$?D#~#f_3?8"_Zo=UjE!#YUe2)~mPdU_d_|Œې%l߀fZiWM=o=%}_6b|D Y<s ڲa^3$[d .5.n6~GH`W9Zێ?dFq/LNJ&k-{BujsI JKdHԭExvG=IkǦC|&8 Q6y?;@CᑟAĝ.(7xwOFb,[oaͫNvgal ׼[]|I\1c8p${^z9AïeU2;6ffFnLvaYqa8~F9b 󑙙 +\^/Y}89-š$|0?^R>}.;9Va*@x#/᪫.F] \}u&6zT%Hl-=GcX߀r`Wd;!455Q[[Çijj{r!^/.yv~bqH戜A s9M9D{Yci7>N #Q!;r룿AjVk6%q d|qzy'_pS\1 _!pVoλ˺uXn7o@ $0sI|XXT/l0_^q %+PZf&Qs US?O ǗDu`64v[rnYk$6m܋t&q7Q ْ$qW&g֨5N(Ǽq~˳$XY{,*$\J\̓ll NGaAiw-`êfƈja<3s=|~/vĢ} ?S`08(#IDATR`d3fe'ycTNOO,4!{wn-Jl9!@0 VچElmcr>=8*s=<} vxqG3!͜ػy38-'It3 H)hEQo93&۪ǻztGPY$I\xɲ!`Lޔ^Iք=$kZMhR91݉rS<?__gl-[?5'fWfq/PKrIp+[Ғ2@dO.LR'G#~jML:4yNEKh7ӝWD8)3qff{LvZC15PIKKKy0acHD _Z (v%6aW 9N&\2Wut"cMG{w1![X2rҷ₫nž_uY3"Kyl~|!x~;MGUꂁ6h`Oo<K)V[Mf B@Ѧ% &WN)f\MJĻ<◊X|xx8Y->qd d{$-na=X>-jߥg-oq3.4"Ѵ3/!B5ZtR5=;oyaoDIB!An4Ys R:B :yt,C@Ef Zt.]qB@jz!@\_AR Y 9hd MU$J2emMecnʸR2`n0f lpwsQ6 gV;MG{.߮yÍ>.L|]\(ᠧg.){M͚pZ{$q%|/pzjvpì"ҒB6z)C4@I$FrӃ0f,0~%%f_xk$K&p㳏nvNfp3peV&70$dBag/6?ͭ8664 zUC\2;SrA Ԫlt֯_OQQrFFސ7( VPh!O;_Td#^3@g^*ip[&d.]Pr[nDGijh!555,[ 4_i-:cIw!~y| Ɖ.27ѼwdO:xjiOk?Q g{TLreL)@"finjMwaQ6)]6ir>0axvFF: .a0VGM=$d؈ SKNsX2>Lbs1 w`|| ToHg 'ٍOr.Mr?P:v0 ?r-5y!%%FV\M7t>*ȲLYd4OA~{]I^.M}I̳^|E@.墦ɓ';-?Jl6r )<]MI[7Rd%@>v - .To0qeyꩧx=(ي( ׯgɒ%gXD7]ݸ$1grTdS$Z<eYxc哸*R Ea„ TTTDiTFMMMdeeE+yYYeeec:eL.(X;Ν;ٽ{7رcdffFhP_8Z%`0Hvv6>ϧ#5sNoΝ;z ĖX;;8+x7o ,`Ҥ!իYnYYY̟?y%ly6!;p׋륤O̘1{tXv-V"s0|έaO8GɎ륽Ǐ8鵵<(Š+={o:qΓ磭Jկ2EWWinnod֬Y !I_NkZ~򓟰bŊQĀ2\.akC_{w s sd9rzjl6ې<;vsRZZ:B~ t> 8JJJx穫;{'&c$ol0g# mMx|Nͨ=M f:oK/ҥKϚy1i&[[[k$[|,Ȗ$\x㍄ߟx n֏+Fg\.uuuhB!Z[[f=hv^^*| ?p!ٶmۘ/Q[d#=㣉ci?[$k|zN¼'2sN[?TEQhkk5kp5׌MLnP5MNR y m2B]2fdO?x]q!9i9dBa1KmQfg;F*IwW $>"KNK&*jIENDB`pysiogame-1.30.811/images/flag_ru.png0000644000175000017500000000746012201770067016353 0ustar tigertigerPNG  IHDRxxPLTE}~}   OX !"$#$%&!&.''+1)(,*-+..//011224555667788:9;:<;5>>>??A@BACBDCEDFD$GE@HBIHHIIJJKKLLMLNM(#PN(*QOJR*++,RS,2STTUUUVVWWXX52YYZZ7:a[[^\^]_^`?:`aab@AbccdBBBHdeefkglhIHmiJIhknjilKJjmLPknloQPqpRQrqtrTRTXusvtwuxvZYyw[Zzx\`t{u|{|aa|}bb}~~ddhchiijjkklolrtvuwvčő”ŗƘǙɛˡǜ󐎠̡Ϩ󘙼󟝱򦧳Ӷ𲮾\bKGDH pHYs B(xtIME 5Dj IDAThkP5#{SoxY-!- AX PAb)2UHdY"Je.4.YS1hu7$Yͺ~뙲s{zgrDg{3gT/_Too?,aY-fj;0c1h/LFQ0c5Ҳ2Ze.F h4[]۹Zf2aޔP=Ah)ɵAomN>l2z`2Ylv4v0c w9,F?f;;f`3^ (c(j6Fy`j6zd2fXыt#f wĂ^g?e3U -~8.4>P@U[d6f $zȋndV3U(Vx p%  w#b*y!J6{, : º! ]Yi/0LM0gWi {[fp`OfN]f>w~$K_T±4:eFg[Yjm{3s+97u _>r[u7FF]jom<[-yivlZfҘs"'h#J%t:ias,Zb;edj[ۻzn˃} Uڲ}I֮Z7kf)5OJoC:/Zb[v;\TZmhn52rᡁTo]V{PNFW.R/ LMk7H &3g͋T/gqɝ@ Fr \^ZyK D`"<7Rleƭ{3r OThkڻzрFˈ@ >Nط3i[D-?;"E܋v ҅ #jvuv[ h­O@r3҉+[B.p/UE!fMZr͆;RrM]Cs[{GWw/z1wX[< ֺ}*MF#y )jE@\lty)*8N`DNϘB80Lŧ # (k/Tr9OtW7VWg;ϭH!Z^NShBM"B#5.dj3[fB!Yl;L/V/K厵_O&^oO˖\ fWXm-M :Vg?N?|0@Pɇak[ZZZܢ|T04A?"ce0xAɇ, ajp rQ;qX-D`wdɼkْ q5gMT_wpKQr2p(ZK9r\.Wח<8(d d4٥\U]S{lmM5Y[Q0iW-&NTPk/(.En#tu R5z `t.R24OOP%Bq#E-xm،KUUU\y9,4.8FDUd \|Gxa,́6( UQv۵csC))}&'ϛ0.~ty++KOs2(qꈩ*JN$@D fg+O#rf3cS L? 1O|mRZv>(//7'';+3}[|ӂ1hʄlJq/:Iiqy",JoXAK+=3Ginȷ[XПPUjAa* cS;6hr8鏩0G_?QRe.EǕRO$_rz4E96wEԷ&G"*Q_(1P~Zn Gʌ{o !w3JFnx<^=XnʳDf? ̩y4۸xz 7o\͟.ڿz9@qϽD(ZhbYibeXU֖-[oB~(ݻwN)x5_&# :(xUd%":o#uypԣ~u8~T"gxα9OКSN#UVVi3&Yx]yƭ_zջDd=`# pȢSΜ;w=X. /⇋gm8U?S g:[`Mw*|rX#)lo~Mm/*=%$<.34g<6gnA!рoN?t`jN9uCZޛ>>}>J+y5~]u~A~%׎ހ@&YIENDB`pysiogame-1.30.811/images/home_logo.png0000664000175000017500000004166512201770067016713 0ustar tigertigerPNG  IHDR2PLTE. !'.L  5 '<@BWGD$%#8!2#M\D#V# N)T( a&/"^(& =/'a322)m)f*<_.u+>h0 4)z/Y6!M93cl 23ain*1B>@=OKJz1]IAB"t@%xJHCx9\S6cG*_; {JJlHhM%aP1wL~G!`XXvN3sWJQ"WPFo[Xq[TU0PV/]'WbA`^WleeQD%w= ǵMl%h!29UnPsh˖͟1IDek7>C9UXcӲ-{eǩ˲5~K3B<CƥE7pG3~-[-/Iٿ{òq~2Ҍ!JNN]FqT{֡+Wn_1Ou!dSo^6·2xѭZq;wg1W_0N ފa%ZGp񸡐w, 6fFk !E[.8_dmx冕wj5KS$_|PM8KuARv{QGshkWP؛25JmUPikAlkê~%egzڔ+jcmبݞ+"+I{#4Pa{щ q9܎kf՞o$uwj:蛋jzGzS;BqMf0@GRnX>q#}WFhwe7$W謏h1 WFuܨx}np|xG>JӽwD^M~W]{ҖנIUlM:wti|5RO鵊VTcQsӻ kbԈ5_;/WYG"Qλw+F 5![Oa+q{5"FƂhXu3nŝv`E#`Hǻw&/rwIF]ƝSgzIw;L~<BcnD\V_LY͠q1jD %K[(7y%~;݃4?=N|Sh} aڵ5 0EPJw¶)nUGmM P.^/j0LKvTB?v |Nx2yp)]~;}}9iv=EZ+кQώ5mp֭uOA>˿q)B~fhO Ӓ*X {.ȶZ8f[]滦Bj?AKM&s`9,gGz5xs ^ƬT_qwޕ3'b#v3{5(P>@|p#\kdƒA~;i ֬~W@azZGMfK'Y+ ~//x|Xt̚5k!{3V"vbLG l.u> >D HԩS2_ Wk:Zdiਰc'MIZHZF5&6Mr0v* 00(6m1@F ~mҘPFƄG >x#FRe^`sh!(zۆ32W]zv>- 6? Z4@pqF4}T{nO:!on̓Z_a/łHlL#޺Ebi89 h1g΄OpOve?NPݐogECޖOQ&|Pz8->:h .- ?5[ZY1p լU;uU+Y6T,gy{whGkD&Λ]&O7x~EoBrnlVC=xTsJw:p^ekD GLzL ">iws}~ "ރFn#u`8lPn"?D㫐qZXOvYB} JZp\wC3E֭e>:8(0;۪V΋{'+Oz|; N,˸ͤz-5k*-iyapl}&Q%#wVD^);*!JAe =<7ޯ,y\YSL5()[Ͽqy֭-Ϟ6ox3ϕ<5qJ "kUߏT8UwJ\=y2T0eXܿ,=w OCcwXu7+*VM T[u=g҂ [r|lE?_ꃜvqٳ ?O}ti;ڟxz{ؠܡ+䧙Fݣ9T#J UZVbH, o]%,P:?3[f\?yqA'O|`B'훪!>1]w`&7ߖ`:Q>Oת\4HO;Aa]tɘШ߭s ̬x?y*Ͻ e6UW{{'. "%inn71-]u? IrQ-%zmS^a[o`,dXhg3}ּEkrC wD?Ś{իK\bu~ɒ` }1vS_Fb_L#`ʬypY…)t^% E|nvN5Ӱaת](Sd.PTŅFUR=')7[ sPz4Nϭ}?jNۗ!Փ薻wλg܉2h0"Zj,ٺarXIɮm]>=6_3Q"̘ plӦwnڴi\K <_{/۽z t׶cyވz,u{ x. #3QY&,0TGӊo?ꦰ1 퍟:tqh쬮^w]xT ZJ܁ +?OtiEC&L^REw-WV3A'lG׭f8`{"\w޳N|rBW ᖺmޏ~?~IvN'0+|fhplJtl" ◔ԅ'9RCޗCUd"=^,]rOzn׮ИwgxKN]ǬX -kqǶ-tw +õոRU 1?18+p5aINS\8(U6FJ XPײk=Wgh߹8{uu]Cw/NއKgN(+i5ID2 &Bd7~_2)9\:_R0o-NX=0X&D/̪N0WY^.z݌;}EalZ+Ivզ$ڠv%,s`Mz?1N CaL[1aHF],Tǝ"]I8 ؓ <eTPȳ>g֭۫CRz#'_rÿxWnVzV Gq2hX4In򢠌2{)lxߧ|!0&RB[˗pg?~^-Cy[bqI??蝷ղU.) j=&+jx6{s~7 Əeım+,ddhW@#Kn+՗~_;S*Nv$$iUHOa?YҌ 6ǛOd՞g@O̴>h2MC0chzg/ȯOkpnKtmJJqG:]?֊q0_e3+y"KidSݚaNLL,p_1;SLa=3")VWdWVouε 8$?1V/n]b>}zΡݡ0FDY7'LSjjEw4,)o=v9 !<ƴڢfHKQ>vcJʽS;y\>jɫbyE֏i7=otittDjPcwZ0OUĢ[y'N cr>w\҇C= l9gem鑌zDUK ZPM并imZ\u{op;!_Ć"Ne"ZSmpk7h> V$Ѱy&SsK'~E К̥R;jUn/6)6wez4=w 9RXwLBb;g(B0݄D d3fg5Iu:f%Ai߮Yc3a9ù[OsOڪpޱAa,-z׻QVM>Cfpw&-% YDwڴMD13T38܏LJbN@Iq AE Y$(&vc3٧ipM({(M`_5suso,?VǦ͜ı_]uLM^WCtpU1&K^  P8*x;LiAnFlIO<~O[EP˰i_T ERsFbk 6M|v5};714eشC~`پP4dgyVciAͭQqm()6?XJaC77HEjOsūiѳEn{0&{ ǝz#Ⱦw28]]t#.<c`6=D{G?{eIF^ǖsG41kv;I$W -?Ui7?{DgIV2ܩwI} ݻGzwc_#ԯ̋1 !{`Wd;9CAGB5Vl+Lb,Y`TXsL!wW hq3rڝ<*+ (ACltcv3'\]*Q)Oڣ'/Ȋ`_21[|G}z!~T$CVW^Ɋ;eۊnsIvV-) xٰp嗙gB',vxۂy{E=m\n8%JbMޞvg2hw)WKm5!r&4gI8O,`=]>&mP'֪/ ^?] ޕ;f瓍.: 2/ τ>b]BA Q-[ 2F֫;ʉR56w06ȟ=FVR~!8@נk1htaqW$3-=Kz|ep_.Qq%݄6d?b]$eΘ { 0?~uGH{UH~k!UGIA]twzh+1Z=[6G:Msw*'ɵ`ED=Is@V"wJW   ~,/K0КY<j! |":qki>NxAeBڐ-xqؾ(ʡ5}1h|Ԇ}r{B]s^vltP^׍KFH]7~UmNQAHvm|D=Hh^aL|!_arٳ~gv*ӴzF }4&M[XU}݄w Cc6j1_Y.Uv#]uR0-޲9bGI_f{3%ž>~o;b_Ez?URuu+Xp eMcEZ[* ̈́K s ^xQܓT[#2OOx{cݠ)k?^'S`V)*3u׷g~_#LWQ+ 0G0Zn9rF*cԂo֭ bt3I?FiL̮(ƺM⤴$\fS]S;NBew_-YGoGh3z$O2ѝC|3cʝW`|0`h8I"b n2KRiş=^ ʔ{JB+ R$31\ILIi\aJ6oߍ8ɢFQ.7:pOX= pt1?%}nMb?%nW1 ~Z US7Ô؏:0t4y#j#:r#M"&9d_ؽXZ'Gbrd\fW:I0b82^oyv}W;˥]3! FlGZ1o_"Zɔ_^ J`r;1r<u]wwm62Ro \Zn섋QEHtP]'$]UM? N+xKp`ݖ͠XqfQ+h7$vIvթQ_Q)%Iݵ6tZf:śFFD72]{]{2J1SrK@`ןqKh_?~p/iR^U bv:ޭ6_۰+S +J$yA;̔$K&֊Fnmҋw׸/Y]l,s$_Ҟ!? [8cf~뾐nQG~ɥ'^]-4dshr_phW\j#CҎۼ½{EςWys5@i`"kۥclY~f BB oВaJclo=n3S~p@P#+`Jp1fH46s 8Ѡ)Iw~gS*k[͖~RHD5$_R^Dv8NlݨFc1wIq|=susI BoiI[??ymWKxTvFVVD|nsרmlP=<`*Q_ i7QD8%m;xݬ)8wc)״`"%Ի'4v/$r?pӭ~G?z`ooO>?`/̬S}5kwbh'׷^Txp.ezZiZ IDAT?BP1U"RKܱӕX۳"C^TWHy5:@xЮbqI gVGO; ،Hk"'[Uyޮ4uW+2ʨ Ek#4>nnOգ {% $A[7>*/&ߠ4o!Cn{~c`{*n\Dk -B!c"godbd~Gev Ϲ8ߝڸ.~eJq2XH}ԙݞ^l*Z$<+?.0Q[.Мn}z`߿çx3$䞷D߄x&r`XNd/pb:Y,QlQT櫸Q?Kf<@5K)xq;W;$[6{ҹ+b~jBzI^,׮\N-|'پ7?Rcr9IF{vׄ+b7HiD/Y3>E%zKޠ)Zcp OFw`j'qf0E [GtFJ5-[{Ҵiٟ[{?ChwsA.9/V&{ءILݮY>33"Oa_ [c@חv;]iSsC-ݿp4/<&8%^՞M9r׊AB1e `(B|(F{5:̭d7UM%~A[U<Jn?' %1*M{26ttzK޿A]iO rT9|E&Qf8,*ՒO31H)qMQ7t~/xr|ґ;KqoUY~!wL^e#V\/]z'|]95Re)F`|9k;<]☑Ã;$̜s쭒ec#S،/\Psh p=axN<Ȍ&oqb *0j 9GZ˙:ůV>XSzYF%lqlѨkO;}Jdy_fGXL.1/[,lMNgybxƠvT4vi3R24ӠH;?ReWj]+*nIsmjX^h͙K=dRDH׊T4>nψ73\J{|s6A4ĝR:Oc:»N ęZ-(Mws5ow,>5&{JM*)e`eѥ!mhzClF/7Σ*,!yDtw(@57Ybp!π{{;ͽ*~$"6(҂ k-< j uZ-3fXlwkǞ5F3DƘ#T1b+IY Y?}5!/3bPq\>a@șrtm17_RQ#x)ƻr,5wo2 u4 MYN}6M5c+:4:"yrڣ=]i]qo.LPMk]-j}GR̻st]t*cPߛfGceYaNzjJ\ٜC]]rd>Y+]iEtVhR(p,M%j$9غ2tȒX$AҷSQwvNaFbowbEop2LgO]<:HYu~c垟&|-ձss9W*hX<_hvߣoe'ݗ{8\׎FwphQ]RALTY򚦓tC@pN$r=|иksO?>MU#w рw-{4i7xUc)wIΦ&ACu'[,iGmgqFrl-PMM@MM]ܩ2c-&zrJWc3q4@`iڮ > =%f(*4b$5)'N 31(촃;dI&pw̐*: U Ǟ%oj/p!Oks5܉lp,ђ\5^V~:B07YB;o`6uŊ#!TyULhh-c qxfG"/g<3BgV*8Q!FS===SE=R{PAӣip/,'1VDJ#M'{./!DUsp<fP[>DلQђ3[ Vd\jq!<&^ QgY)OeAS+҂$>Cn`B%Q_w9<*x CfeL~W=M9Sý^[+&mT=^aܝB\ } YX;ϴ qg?\!dx{U0IwtvT ,SΑ%M,;OCG6FOjwthw+q/_1>C5ųʞ ; (*cgBpetVÝf $܋Vh"ܱӉpb,pέ*TqGn{ȥH6bJȸIPuF;wYGwXKCzFv{ С 2M;E-(CVѓ [E Y,v2!ud[Մ; =2ܳ.*ڋ&-!+ v,6Iw3ljeU /Ո܍[.`2],^%}[{>f} I|!,䣪0mhW=Vjr m#㙩>dc{ .i09Wc -J|WvdU6^9`q<'ܥHN!g8D=M2qmZqGb]WLnwGIlݖ!̄gSU.uYL)HON]M,bS=YУؼ,",p vѤɩzt2"cu<jЈ;8* N+UuHLKO$!ˉ%Y8= (6#q/&KMqx/0!Ӡo&pn$a$O*LEP?ފu#8>OpG93Esq?9Tv8Yd=*ψߑfP;r1)VCi5[;JYe8D3Cjq}e`7mF[yE Od9d596|ptE}A$ Gg}=ly bܙ,Up;xFڜ+*d4[U0wEЂ)ǽRDSyܛPI8i}VtqG@qP.bg5fܙ&14VnO}f0 h3p}Tt5 i+ũ\ίʕۛ+@ȡfo ~wciD%r@J[ϯL{$"|5x \)t)S *wJ{NCb^fOW9n">wKl}{plGw-'R#we(9Fl՞;}%fVndPiU>1CB 1}OHљCV/ToDqʍ|nmCb tBĝ}7)fCj];!#Kfڔ_/JFS(}@M:]1›)S4J~S[c EcajTBzـqf2iہlIᚖ}qnSb j)FxT&94rrRqZ@6iLu@73P}ʭ4ΜҜ߶Sqy;-y bw:ZqnvKu4p觯CC hc}vq7OG#44D5 pcs2فÃ_g>ļ{7'slN Ts3?>wt7w_c-:~ }mnk}%`0N1*a@{T@ɜawS:Yso9B;U}0.{JT愨~Žq wv; e Z<{jG }y&s(p՚2;L2; _)+vNdB1WuލWwP;6Cl͙H{(dZ;ߣ.AӣAcC!֩>,Yu ԣf A̵*fc+NALwZ\QЦ5 "~%Ro t-1I;tfS )2SwMx+'?>S|),½єZ;kFZ;5!~iDǥÕ[.%$ɜttf̄ n4fx`4enqtۋf9& s2;/y5sGY{?"tfTH_$uwt ))bLN8ܛٗL}"۽,dNGlAxQffW T3OO/  qa U(1|\FZ^7BJ<)fsB Jn!N&|%̃H=nAe}-<2%w8h&7C /(dw`y/ 2Up/d`HJ)KA\D2ޏ^GƝ q\iDK>~vv!X;gΗ}rށVcC{f_]QJe4!/"܁Qu]n>Qq !:tVH~o~. %-<+} *:}- #|p;n6gvMfdlVy$qowa::h*=..߈-ΜeʤEL0%`Z`Joc胪՚QL%{w1**%&Y ~1a(`DZ~t詹_`װQ9p/3ťSR9ܙC 97g,m}e9e}Px:j^,FU[^cr4v c_a|i6Rt 1m`?0 6 Ǿhe@:zwYNa:Er o)m Ŕ 7j}<$3ƼZ;?B_ n5F8Q3,CI) h8SdRS$W_.'55d6v|DB&IDAT6:%};nP Cr89wә'2 IENDB`pysiogame-1.30.811/images/mole_sprites.png0000644000175000017500000006336612201770067017450 0ustar tigertigerPNG  IHDRxXRPLTE #0 ;)31G/020Y=GImIOU?@b]T]f[\e tYF;u]8Po0WsMu(Lz Ly!CGYPJ Z'NuERrPb!vZ q`x#m#gh|Bps(Yq]ozCƖPtðӎiw]bKGDH pHYs B(xtIME 44 IDATx [8OI=N|mzaPWe@S 8r}t=ޫ]i&/mGѽm_oփutG:oMGWxW/y,GutI%ejutk^mB%xcttݫ}_7,u:_Fۼ}KD|-oXut%U߹%~Q:_Fnf/[@BͪW+sfxGJw[^ |DW{|4B:W}g=l6ExmѽWy5{ޣO~Llvtݯ[ otSo6\mY2GZutݯĻ,*'#<-m)?Q#W?tO|3{)qYX趏jCyGJ޳a«~)0.k3Nx;޳a|-^vTxf]n{x~>utGBw0x˟«zk{eVOɕg|㎮;aczѠ[-[/tX·߈ >VBzs;޳1§)(my;oD.| 1:#۟xC<#D>]~ 4N/w>zFbg%$>SrrnW׫vYmj2oߍ7Y0%}:cۛx~$Gf3Yqc H$ϑ =[ܔv &[xbEךP1'" k3x]GwLtM<2luGdV.lmE qV.rj-Xd3#an`W舥 Q_4ǀmYz)l]_^Gb7;Tzvˆ )%pb_K wy/^]>|@hLfuxeY3i37Gt1KӴ$RT$/J% Arf"z|5H3Sr7 ^G{Xj}ܡV&S}NתMKlef/p oNS›U 95O]Bߡ/z1i՘櫵_ujyk*c۹|r:xz{qPV yrZ!W=Bjo`7' YR?wj]W2MW%1 _@nxIHM*G!nLD>r\`,;*GL8.%,_xbFUB)խ-Jg+H]̒Fc}?]SmRd);=H)E}!P!)M>i|?Jf`2'  ^G ă8QapWO[k5ݵ"u5,Wt@zSrC9jdܬr,06q)Vd4#KRϪ6\ k{n"[/oR>wGw:'A0 _=x4j4zYB"$˙5L}W`TIE$8jGf)dBڄm2Md+K Q!'YQ'm%qXHxgn_o8zȭBmzej;`l \C0FPާx &G)]/45jȅt"}]BO9ˌtyss ,RUߒ6Ee]G p'Y7%6 Ix3Q+gV D` 'Dj$ JSo >[5s/]K6yYXMjm9fMPBę8Æ&B%0zu]tB_6YK螦K~}p?#uJgp}hHrDmַ$,\jcr!?]xi+D"| |$,TJK/Xm8P]ICu rW@x!p{.ԃ^͛P;mΔ[ip ϕ6iY]lt,`.->(Fd6:uXZ^Gѵtr8lMf% ߆Ǜ>3SVoFޤsXo./QmdJPh*gn ϢH|QU>9H-l +:kS[+ nF͔~MZ+1wt]HH =ř0 &ފ$U,H@] s\ D Jaz'?Io0DR˛nVw4xq/%9J##]XUQ:R$j pӤk$1"W hfFe]GбS7]u<9Rh2)m,'7V:59>Fg}r*w4Qk~M &MQAAXԜ̮'BvsE%dk,bga$?cI36˓;DV;;l[ja村ygoAk˻UڊzuDwtvWK VÀ%R<*fS.VȕЃd"Li 78f;rM6o'-<2,w$ ֚P`4ɪJL-oVNlG~+,&`: {3LALd񤗼x%xvsSȶ5SI҄Winh|U&7tj^ɒ,ˠn>Q*DȼġO=sI_gI5u'dHȽAƋ#J'{I>,73isrƩs:Nn nz3l'n#,ɿ xqV>l *ZD5;O,rm}(.=e_Osr}?͘& '1Η$)inqBd7bBƅB'?ïqD CQ(CJͭ=\Wtjfnj;wJ$ɇvz?iڪ? zx5b.95YS:d g &1\ԐtAwUIf(bkE?)HO8/43nFrzf lUcq0\]1K*Bjw˘;ڎỤ#fW<>_? ;xO/\56,!5V|z,ofJYlE$\IB^V>uJQSFzdF=$r]~ͨ@ōQSXEbٚ8]$7ꞌmAfZ?xNݳ;U$yE>&nO>_pA'IJuKސM6?=cnC4d"ɵn,l8!S&^NQ+9pk^# ~' 5Kt΋@wgY;bLg'2wFW ]ڎ {w3ۛwχG63𱗽]o{B1(\x6WXR56xY6Ě\'FFuΦiL55Qbԍ+9桠-eL5QB WDL4&Y&/fC}9En:t]D!+cIvd>c#ϻ-zߟƉ .gfBOHf@mYF-J 0TYÄ422Or*z&sӧ3^߅ E J!O}苂blMƐҘLДP7 m3bGut?Nqt#cǏRx? WހS2[SKrUH۰*(ߕա0i6A'DkfVFJ"')fRxCg }'jz9+/H(rdyiF+tAµRH@ho7MAjGtv4ڎ, z㝌|E41/?w&u6c֊jIZ74:tqv` nDI!xk5cwQC&nζiJQ#`Y yhJc.Je)NH$Yh7kl1]rvxmp[ۡdo!Ʈ緄 EHW8^{q;j $rh\$R] 0%bcrBZC!ڍcV6&UO#!4ųTdG: >'ArVKaɐY0F Kg u^Gtß@.uc7l&n>ӜH?Q9y OݏKb>__=EzIB^gnGB^RL;6 e~T9B>MI:$ۘ9 qd%dIK 8"K!s'9l4A RZ6put?Jwӵ2v&{Nqfs7Ʈ}X'CUQI (dWm$r4)3Ӽ$+r $AI7kȞh"֐IVf?SNTy<$4؆ti㟏 4j{ -!<ITL'<+D Aljcú !yrwWNO0Y]6xQ+N&!r_J|#!i 0բa- U@WԖ>!%HzX%߸&M%b.6mCGct?_~ƮxzofcX!5K%L=iYLOmˍ7!C#Ee5V2u]e|TOs)htq>fs&dIZc3Q~>eA!d,/&imJmQOv;kBb???lz[SZ9 U~?' ҕ]LS!>BSzjd1d8tm 5 ?Mjtdp1@ FAtc-"ԎddL"&W&Xq]9ӻ{t?U'tv}%Zl욉w K֑@ܰ$!b+)X! $d9e3|_ ~Vg CdN25i:ο}DxCD(OTG XdGDMƷWDH ᨏaMg_.ڎwCGc7h&ޞN3ϏOOWm}XT$$xyz4#_+چLZG,]X`eDMOj,Jńm1^t2j4E? MU6 <N 6!]$G.qI8re|ra50^Jڎs3ͶuD :Ʈx3d+nHQɆ4 Y{B2\M>'ძ70/V\tXk !N5"O   ""xC$$&oR hD gt*I0wO㝍p?|i;>}?/~:}3fUKR++uIb7cΞ )9 %+LaS:'Mj]r%";~Os|K#M4J' >Oc璮Lk(8kU(H5ivt$qv+O}r{k&a ̝ J~xݭ\Z`V”kk 4A+`&1}(|/|DߠBU+ $3L1 ߷y ;j,c6+(2;h[OtӻN㝍]rׯ'ɇLWo- Xa}}VG>)X>%s I"Vs-4nI+A(x>ExzObEJ|NQ !Tl$aNy;gw%9+}YmG]?Z'h}Z맽xHD 1Cn'|IR؅1ݩ Dϡ ;<[lb|]4 ir66f}qBQ'*X@aJ< ^UXhoEޮ$ewFgjiǓm;ɇ^ל\_&T,ϡ4,VPI"XN X}\-D@E)Cq"5@ƘxQx28j-Dwvu{™JKH^މHŮ$g-J^0v/轣.r4y>}w'+37qQ/,}Ƴiiy69b9O&43 vx^j|,{9TmL IDATsmP=e[}S+e04ֹùJӀVHzDW#w%ibbcڎw4vsNxK'^4:`FԴʨ,VUe֨-H UIܥqS4?&^A.d'%= tۉt~PX_J%rzpUfqA2 ߲F LfG * HLآu!Djkމ}vw0kmw%9{$w@j; >񾜴96{}:P ɤ!=IXGgrdH#.5J`>aQ$ߞA"'1ktA8hXE?؊<.#QB9?n(wqfQ"\M7]IoKؽ2vHgwϛzMWw|:y{9DŽ7 IcGn ёT&(Xe5Tl/<6$"3DR<8}9@kP^*.q5ڍ۞t?+I^T~Ʈl'~q+rNyG x- 1>=x3?|[ī$ 4shR x;rᘢ߆E%5w_>/w~>8. x#+]+mɏkCTm_w%ytpyIm;vY3%'D1O<)y}.(ɱuE/[!PZP+ pIyO8a񰓓$2ΨRn tܕ.ėv۟xmo⵳3O7'"<,Oe7-!ю7s06=E&QeUz(U{dH9[ZF·V4Yץܮ$i M?>'oKt Y8GI:+dYWk":?  |YTƒY[Sj--%]PJF1u@uI.]'v%Gk;m5޿O?q0>)L)ޤQj^sA$[UQ@ZΠ/˷wOYҗ<}C6mj R{lwmJ{Ot&_v+v̾R@坼%]%h!RR^Pp22@_cP+$ɕrj@Ҿ{7xd~¾>]%p~~Z/k;N!޼{t/Xg.P2F,0T{m7z^_V~^T녕$6m?+ ҏp/tLoKL<%C: YF,b1y|-OOL8x}\p] xxp5bt++I/_l{:Bmʑ&ޮ??.񏦶>?3>ۧOoL,D5![«"x"Zc',O{* wDjp~z>@mz.ph" 4Bvހ$_7i-,2H?|ڎ&ޗ\^QYOyt~)s&,Ew MQ(Sɩwe0g 'N]\ xg *cɧE^Q`vEt ޫ=ڕ䷶_.I}nm4zr>OI4L|.uj7dzYID0}9 UykLz{n#x &0ɑ=Ai  5o@w+ɟ=MC3x_>|k#6P}^=_FWR>d; &b4g"K+{OdKg'7b۾yĻx$[),~_oC!I;xo@b;a{WO_]Gs~!x8D](ɐF:ɭqȬɃ`x&xOi8H]`"kkހ+ɗѠ7>{~t{WaI'"#7Ǫ~c,>aۨ zn&]]꼃\xDdrݿx4.I葅k iX|*' synW?Gwr?HZ>^mߐnoJ:L<_ZMW7| ;aAޮҽ'g&1 C3rn( S k~P[XsN|-])|{}l*5)xN/pN o (ͬ(<oЙ)o P_N/Gx*P kÝYŭ󕶯Ik]?wt'4n'}}t~>twJǁϿǕ-^2Ic@j#h*̰5`Eo Ξx>> MZ8p&9q79 f&C-ۥWھ&JNڼ7ǧwDa;t-&^= $C,#өƒ%Q O ZEa^l7#۟QMrpNx=x Rz>}8uД}pt?HV_П'7k8\* .<+҄7 b8Pv}xpzw~qq9O፳ݕ?E%39giʭVdtܭ6vkף}Ǔ/K~ih ݇f]>Z:x8dHߓ_g8jj>CZnnH?v T14پyzؑQh$xoH?7F!s^\*֛ ޫѝ|r\/~h5]\;&ѽ KM㠸 S"Jfdfk  5h6bev{$;('z;BYW;iO'_~wt5/.B} sv Ô~d$Q-DAGq+_r*.\W}?}b_elҏ6J3Jt~'/zQ7 JJnnbTxܓ*h <};:f)#7ר/GKE6>]!2hW Gb/kA ;C/ y{lo:(z~EiWp*FнD ^l*}I#g ߫&lb#ۅmWOE T85_4܆Ά"=;Mİ!xIBpUOnWttݱaYly#n.ƋJeyʖMt` CreжgDy:NGXidT:/gxbNFY{>~ip-NE2?V6utE76+Fڇ+Y.ly8o#t9~H)"g(duR>67bſEb%:#dPQGΒ` ђ ,H<^r/:##7s{w1&#֡fc^U>9"6:Ă_k=]ocopY+ c;]%'`ȶGqIS)x ]GwtseY?H]uPS\_&@ N<[\)+R'vm.xSD0m؏FpSWQcY9s ^E&q_~9oΏW1zʞríɀ4utݯ;x; o$`|+o=(YӬ9'(I\S6+׈S?Tkmt~"aa}3+:۟xaz$BBttV4٘F>( iU [ؗS'6Ӏ^I eIy:X^\F@Vd7лA*/ӽs 8R<=x]GwDt{O:ނj)G ADDi:ZJ;Lretd.&=L\h?\R 8~*yJ&tHNzȣ>!iu)4$xzf:vo!݃(5L*irN֤ z 8Z_^Ns[r"{A'񚞎2Wy.z>و(;]m@mςrƪY]utGEx3fHஈ"ɥ4&bV<"!i"nVrB%Kӡ&dugxydc/ape2͓AIWG}?$Vۼ#BPi3;xr:&f3/#ap~_E|ک1#a$PWi5 >8y9Tv^5ڙP]vՂa!ͫ Hq aBf5>'dͳutChmJ+]|Xj1 )]{5ČO&4WTLgd1/YD{|e I tUoT0]I!۬7[=3x]Gw,tLLVIjemsRW0rg={=T:8&*9'lO +“O ^Gv*}YS ʝ\vɮxp#f:mD;8MX7W5g]봈!ܜ8dqDwm[uyol;z씄WI7V7ZgXy$'$MiFZ<0td/ IDAT!9MXe"8gP x{#65 ~ aHoVs`Y?ȕzutI۬<%̓^e5TXd,Ree8yʓpL ٠`+Z0p:EpiDxA$)˩FWJ ǐ`QT=0b_>%M}m6+D5wo\]Gwt465*͆bCD [K%ôYo$!ױy5IVM'#,4R%fXQ`_\(BֶX+pNK nÃutHېy[OjW,u$HvfV46δʒ&"o\ec5Z{]ςCRKkc%t^yH֬%I&IxPE:=_TE s Z/&sutq#kV0 AQh%ɷ􌯤YKW$a"zHCiH\ hqZ#QK7wȤ·7GW.lq Y˩5ywmzBxڈYgKEtKH͎;JvrڬZ 3> Iy9}"M*.4}doRHi(Q*i,#iI%O#I>ʞ$ %8$`-ZK/p.:P{}V}} $Lfʒ[}:zdsBXIxo̒/MVkJa**h'В,ejK rVp(P@8CrY!H(01ڻtzEAҜ&̰nd+ g,$ɕx}Nr7 Fcj)fNF^>3eE$jPE!BR1),'+r,7"<6'$% *ҜĆ܌kI_eIYi0i]߶utIGB,ބ1j_^Gݭ3`:9" ^+\ "Pu{TP _UYS DJ""#aR?Bǃ|JQyX>e\kX[R3af&<,X,ny:h6g=ܖ1[m{^^or&y`.$7d މ"4LPO#4AR&3XPHv0sD&x6Hs+2LP@D,Iv}?GҒ NMQENv^G#&Ze[_SCIH^ ]ߗ4$Vb']ƠA7$y&qPCZd^hO%4&:QUPk(~ oap DmIx&EhMaеutGHG+2J톚F_„ެ-Z1f-l7<&K hj7'LrUZ+'␾2D]_Px<2;Ȣ Y']M Uh=Bz_)$!t3暆ߢ"-.莑&|DrzD$YJ*`nX sVۮS7i CY"C.C5ZN/-s&FW#>LͶ@Tey콒.τXII59& J|2R j莑׮[JG3$eg b3>C Qc2;Ki\L@-Eŋ du2$­yGyF࠱j]CD'\mYutGGGo6NCΒp%9˸ۑh{Ini)27utHoN”McVBRs+-5qIawr12%+&xSQ(sWB.S?Lʅ3vte栱F&SZJ X.bRv:0nm:݉X ? jUzy!j7-K$FXasH-,Vt( oNC>Y ɀ: Nm &!IW1*eCG24r _aT)I[#qΆS˝E)fRػutݱaݑ \AM0&Z>LՀ+}I }As?鎅7-LO&x`aZ-#Yj>َdx{ M3 '*Q ^1⳰]Gw|txtHW܄ py VHjot`&t8ĊjPH cL9Jqm~ 3a|/V +$\ G#rMG'&E%5) fq֬vjLݔ/FHd0{o( .鎓g &s&63.ɱs>N 'QΊЄ1" bU֤HP"HKqX bpu3:vw;>:W!6:#2 <DL4.CU9~(n#CJ;l Ԑ +)EaFVOa>u1\?SlHOa^ĒQM%Y70'rsI`utGk|XjA7rmL!7Y$nBG:]@߇Y^n"b#{U4$buޫ5`H!DYi z5\T亚9QKtsY:zއUJsPIcA1Yp-"5B:>qG13F .8 f)I V蠰0\h.΢ -\]d59x䄝:R* lr1;>:hSZb9w@dx7 s[P8lnr9 3~7Hΰ@ u_BQOUt\.r 2% *fC:ߠؔ RQ zNs c{ۖ,N:5Ũ$`lBNv`كjUS؅L˓nr&!!#MxHzzRcᰗ!<U*`H2"`kĔ&8A |mTUjH$ث8DM@p.Vr [ѿ|o:{4)+TqtVgϡ/ehl-HqZ)B$::^^ PKL}?MFi׊I[/uRt#_ZǔE(!=̣:k'5jp'@X[`Q irAn]e?Di28F5LO1Ȁ`ٕBP%B7l(ڐ*J]sh:#o& Okňe&k%gPTֲotOƉaC[X:=_HKs(Y:Núدj[sؐџ>VXQ ^_utFL6u2ӱϼQX-!NZ+;PI(l1u@E, Xp f\莎O.AGR͐8%4ʕp`hmƐF,)tw`8f/ϞVFMxOfDrV-5-oi͗f7b :㉇m`HCE:S0#^lSQlAqn)VBDM2#{[<Qui S}W0SVgcea~z{K2^Rl-xl,Q-h{9؎;2^Lkq!- TTK>`=Y!$֠HL5a-jc,9ɞk|T!FMkMzڊW$"};\^ڻUy#za1b&b;Xsݏ Vfґh~_9%  `^c&CEW} }]/33;²#AuRdr e8>'C%l2d:_#Y_lG/ eR-nz6$!є83mWUtK.:Ӛ+ٜQI˛^.((c-Eѵ-Xds#hh'4T8´ b GM|B'x K \~^"Aԭu7,)]E|(>95;c24Qw9-9Xg m4ld$r"`fD7^HpM ɰD#s6ܳ㘡?C|5+jqAK.w辔 F1/ MDsPxgjM^9-,<F6QW14<;(ls{ڧ,?Na/.@S8dѣ(QkOթK>Fx(m75:*C/rE.2߿I=%;pFbRj}!K^{l=u,MA~BD" "77Xq,ox*X}oPEA%yd ]F[Mkvx` kIŨHw$sTv}/}ȅpbNL*CQsqn09(- Ȩ-}?XG]Eqd=2_OQ5}{CQ2a4i6f_Z+c;PÐuRѥ|>Ũ*`!EGsѤEd@2y;'kR PUt#3s 3lQ 7nnuևgA' e)OY>עKBWBD S]xxOP :h x_ߎUt?"/gn }`HЂʕYTFJ*Lr٢ m`U{I-qgCi&Pl5IDATTa٧_}C5j. ` DDECVEQj죈ËUxِ LۊDt-ۭC,|ig .qTޱ h%EX#77T-gX  ְ7ࡼbR}Utǡ n`<O[ѽpZi-ߤ.A; ߞiXáDփECs>[P}l9LX٣4UEQ2Q;*OD'!^Ѓ930?z—D}R{?@D n՞O lZstasz;J-ȿx{ =\Q*Ƴ z?Б:Xk$ eEAU{>kdhK`Rö z+JӊrMOo;<4 |y.OݿGx5J,LUXr&'d41~+ |$PZ f UZe)AES8_BfkAwE./w=y}GihG3 Wr)聞r*}1bFЖi]& I<ѿjBe0Kh`vQiكνM &/^{d8eM j w9-g ;%]EK G/APב+߷ ɱGߣZQ͂V\D)?S-K歹ʅP77ȱs@3ԕ9^=X *e""rjcsnt:x5ݟLjI޽ǤrE=ϻ $-K_4?IdO=ʳ}oU)ŏk(sy7nZ x")ݡd =sx>pȉ/yF¿8tƼۮ9E2iG Ys[zO8vE/>_<˼yO^;䂏+\ɾ\'te2rEW}$*&)IENDB`pysiogame-1.30.811/images/b4.png0000644000175000017500000001140012201770067015226 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ AshtonDIDATx{eW]?>;mәZhaQJ@MLD>H1F$ #1*F Z@kR2JK3f>{Zӂ{=}Ϝ~{~kYN.eSbf ,a0S<87NΉ0g#@ǜ[f_ .5%[l>3w,}Tw!G!HRYVcKx[έZ>E>xY|9+Xt.$ p8E1Dnz]_ PmxM|*GtXt\ '@)JWiW6gċK^Zߞ#' 쩞E#^zx* pT8R4S *G_,)k+b|…7o:cUd]{N-# H i,f5l(k~?A;r /sa.@ =AI2P<<9zbu!;ߋ ?+V qom. |@#AaȰX!x=Rh{={3~sN?;^,LfWuwm տAKfU[2Y1B1iHQ'QbcfW'QaECRsSv?'AESyi9)U{c*@ĐJ g7ՒHtlqVn|{U[KSyj UaŮ:E pf8 W.1MrVZА ƍ)$ᾠ%R>>,NwNKe` 4 N 6S+brt̷du*|G=O6 \y77.!ZB&=>-)HsX˞x T쓢t~ڱcǐLro؁Y Q]߬[>’{TCT%bmD#3ETY[bZW)flSN 5˵띝zBbQ̄,1 lfOmT %Ԟ*ԕ)a xHT \h|Qf.4mZJa0h蜣N[=(-ʢ KbyD>-@ĸVdfv#!m<#er 4I6=JVux4/ܩ, ".yqp])G0zT&@IeP+3Ɋ@~e:25Y@- A@,x1_fg^{􀪀+;*U8d.FlVܘ%@Ιsg\V )g#7b)9~sw.B@,3]ѹ+?R b*{gOK)faUT6 Y_F6&Q]BYiɶFn$UqynN}.szIsefJD$FBfxK D"J"jO RCi0Zd%cX"59;1[z IsͥIZR[4Rb!oIW.>(L&`%+fhJ6zgkLn׻~3%67)+c,Ǩ-U%1-ۿnC厥+mjZ̏%H_O2x*_u A\uXdUc!Y>PSF @3PCWIVJ%3,fRmQc[ߠsW HKj4֤SMԆ5ImmrXe]cu"6)'}mW~&zt+&V^>6[֤4"6Ц6oPz)))8ԤB&&LkK+fLzz.R$PƆj|Viu 5U#tcLԨG Ͱa4lMs4vٮ4Uޑ SѼTmGqHiHCFCF4$$mES$Ŗv\SmcLޕ\yXLqɈ5IqHרMZN*$F51(Tm1/i@|+TMꭜY"@=uX(qM|fja.iV݀& YRk7YKHH bPfۦ/ n_Fys-w-.ᤇVhc_Z-`d*{u 8s6 ]i\w葟Fԕ'TC\^w@ޞ%DMk#rQe <3\=s6k{˜1T% RDԖȐ!o$<]vMior6>'>P5K64!^+sy.B"ZQXv2d׭yRwГMgnϣ/OMȀ>EO@pxD`[{0 7.[~ll[xCs3+vmiX2oVzwJnXmS/V{]ÑBM 9-Mf]o ,[~ Ma[|ox#~}X2̄@rqcp> ߃ ˼u,6}@O?{lK e_;rKOh%eH51E;| u-]R^MSwVm!UU4n{: Yne?Wpݖ6-v2 ­^ȶO;^ו\_t oW[+U>H,vea[l9~~Hm \mlcec{m ๼zVz)P-q=KhRJ_0(ȃ O/ >>XJxUwc8#cVcwA[kV'y9g8HI<ﺎC5 u lVKu[`=}2}t-]k 8/d< 2imn<_  aU `PQ8MԼA  4^o(^Y-39緿R֭c0ݭ{;7`L9_XN~6Oh(ko{O( Ov60PA)N@M(?.~ =gP/vcUbkbWi7)A eƿᑾȄS6w0'O0۾ChڥHvow@.% VX!`e &LJ !O_Dz G@C ͦviS2"lBzLF|raN X֓f$5\a{Gw'ZЭ0k0\<ßԼNB+Pz7~n@Pu g t,efs8I#HnvFTӥ"rP"h:opE87 M4x/J Z1r 6C<*9غu-;揁rI`{Ώ\9L@ 0c\ 0t^FjXC;ALʟPs/$b 9&C, $#筆|_a4kſ`J,B2Cl畼 Xr& J05D96cZy;2⪁J\` 败;e&RWDzOܥH1Ri75eJP ;5M,[}@& oOP.pw,Fu ja>JxtS'ȷr D̗ʛ5ÖG%0Um;t)i;v+(`ra$TeW"F?\oi n @U#$ Ll`v^%/Υ,6*t7KXܸ*wŃVz"(-`*hB4MXyzMjObNUp7$5eJIȓ d!A[HnC(dKGct &Q 04 -GEXh!_3/(zKGT68T "‡O%E0@òaȽݸfceۿ00T8נUnbJ,*ShlBb\d8Y*R] {eLuh=HBEe.3|N"UPV@M!@&"u1O#>`~mcY<^AR6gQ0Dp H~E$ C/<_=&Z"Cc"a!Qrd ]ϖ+YW[EDN^NulYJtB$vn$; ɨf+@!)~bP5g2Gf鳿?x7z{oD@KK˖4GReMеg$fd9K1N@?oiZ W3H9E*/QygNߏUzv;5,̶ `cK/VB{=[Z ]G HG|68kSb\ՆVSOEI|s%DX@١Ar*H~Duv{( -d73/"'Ú+it/Z|{I@.xhPXjkSHW۝OvKpߎUξgؖ1Nv?OkaJ`#C&;F/Sֶml\_@GM~x]}/?Wv3x֘@cҞ?LlOK)Bw'Ein tj(;J3md OǞG?^6PP=O֬d@8K[!5;zBߧI vb@Wny^+?k73]&,S>Pߡ;Rw&M.uIENDB`pysiogame-1.30.811/images/bug_32.png0000644000175000017500000000111612201770067016005 0ustar tigertigerPNG  IHDR D`PLTE .+5478 LM"KM/BTWYVZ[HPj(egHfn;nokcz7N>uWoȉЬ0@bKGDH pHYs B(xtIME /7 tIDAT8ˍ `KLH9]m®/}/[$?(sZ7@f@d96!Ibt0ߪH<, A~(S e'l9.@m۬Ţ  `Z\&h>VZ*PW^zQ*@z_;Oei)$r 12^BZC}GP~m6NtCc*;{he>FMaqwm@4=v%ku%B=1%ހ=g/ʣ{,c KǞ]T^^qIENDB`pysiogame-1.30.811/images/paint_redo.png0000644000175000017500000000363012201770067017053 0ustar tigertigerPNG  IHDRddG5B:8;0D.A#G@@>F;H1MIGFP8XDPONIVTTYUZTPWMYJ]_Z_\FiW_h`c_g`ebAthb`fpdifklljniH{cmqirlpnxmS~qptnnrzrZwuytrxyzw|}x}zz|܀fˆ؈voȅ{ΝݐԜީןݬܷ02bKGDH pHYs B(xtIME $&cIDAThWVp!2J iYq" R]tjkUK ӝ<7/FXXXXX'qT*?Ԫ%ϷƯ(W.6 :qbO-ǃ܂dt.KmDEZةo rĘ>:Fil4BUV~ L'!o*{ G/A~r<%[GzVd%z8ϣ VLVL#Ii+^Gvq幾H}ŭ@tJ*_(e/0/OK}W$q4$-Ł)H_ZV4Ha#&E$=|XF#mGgKi0Aȑ"S(naiÄ@Mtt!hTJmoPUnI˽khI"H4F팏be0d$nfs HH!9 ^ HVY8sd1UcѨ,T|W_>G&Efl%98 EHD8 :H2ܬ`4L>D`d9䉠Șqzשék }n(~L -a|ǏwnQuᗓQw_y 7Z1j!&m! ZI/0g!8*)ໂj.X!m,m>[KN @X]Z3y75Ḫ-ՑFFD2A4fL]\ŁOM gU[f55ChWlO̭YE=l=q3 J@&2˞w#4M?b艟؄Pwj}v2A`aM`4A'ug6)u].,=1n$@rm/_Rvg2I0E amOi2sEZoq7\޶"F x?[Ct[@{oߡV4텻 >]x7rInr>E}j[}Ќo@43$Ƿ0&tDڧ #4ݍs8`"Rݶ"}Ic!~y>L. Ĵ=K@cϟB^>ld)Nލ\M׋.IN)Yd}bLDpq IH v:B&_"1oz]IN0HlfȚ)R #] _& ZRw=SO.A ;>ι %EAq-/+zA G] K!! F q A:&SSj%L ra$/Ds^~    =BdIENDB`pysiogame-1.30.811/images/a_blue_150.png0000644000175000017500000004427612201770067016556 0ustar tigertigerPNG  IHDR,d[sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx}w%Gut03;QݕV9ǕVYK IF= BdB6㌟1l,0JʫI+m<&;3}=]uo_:uN1RJ)C)RJR X)RP X)RP X)RP X)RP X)RP X)RP X)RP X)RP XuPYC8)ڷn*q( ͩN?e𞫳8?YJL1Wx~vչCdMUz" XX)Χ4:b C RB_am\*`e (_cC ׿;SC@oOKsQ+{RrR2 g)Ξ7TJ:mZ<ŧ>߂NrqZ4o} ?eS X (dZ{2p(}NgaXz{fݽ hE&.y[N!wƔVDA<^.T\A.OS]>Ju>Y4%*\7u0\B$]lIi.Kߡk<=jR٧="Qd%=Ŕ$}x2zSCJ0{\.w|GudZpxUV`~91"ũ\PMV,m}~~e7ݒY Ю\eۿъ3?DoOqS^""0p . kCz"&'\pLVCe +݅ sá𮫲pC)k>}wy Z'pZ7~h|R{xiU șN?=Pڽ3[| 0':wAL.pȞ;Ş5 0HP&r9޽Rڷ!f>Î:wx߇S?7̣Eպ5>Ȟg7C_/yJY:&9xUit_GEÅ˯0\3-- fP K{LlČ\QXK#fOc@جNs;Z0=/еុ (  wa%a,?s8aX?ao7#d sFB` ot0}#'`Ԡ5)O0`k FDyHB˪x*Lgx3=E,X!|Syrr8yegVP>d1_MR3wm_l: 00T v<: V ꛁ6l;DsfBqc@z(yJEeZ:CAl 3,|0 Udq.|+Xь\" F-;j)rhsutxJ6ᙗ= |M8xG۽+m>*4`KBXwOyFGy:,T::Bؾnɾ3@{;i)5u13E꒦YG<:}] /%p00O/LTwl H7v8Ձ+=̙sǷøjX𜇾'!dqѢ+}xyCⳉ086cx9sn=L%[L)\ Nhwc9 .2ۿP(CiPiUе`ŵ~]tG| /τD_03Mό!$j[N#O s\\q>B̰rWJI_>GLn&g9t@p6, u)āKذKS6Dd wܖnj\#3\D?fq XxiPk:aᄣp9Bm;:96vDNG+J8s >?.u4;3ʡLEZ՗gwd@Nd"},^ P0 \93{aōc"+_jA[ n~|J;R_hJ8$VaZWæ%̴dkpa궏vC7 nTdxq(Y㌖ {J!E`s)>澰jmOyBCb֡`8f cG'WDY9s|y9K>(=f }G"`&M \v<8̰@"0\``6.sR 0P*fΔBB.KسOZǐfwǸm{{W f:dѦ4w ↑!g&ݽ/@̙AFO g7Co/p9AG;a7Vhi!\|97_HZa#  (WV G$@I63Xe&ncF}w\h|{ظ16 >tw 0OH֍Y@O﫠<ٔAeT4.j[& >i ^uE*+y] x b xt}FK.=A;h0@u7V$D#0QO[:vI%Mwn{*xc+\̞.?mCІ(V b9 h&:/~^&7\yg7<Ɏ_`yi浛} C *0|F\Pm[-ѯ,KDw,XP`(՟VȫYK,8^ƞ2=Rݪ 9BT|"yTm[m [7rXn9GB뇰sJ7=`͊NC;C-;0DۡWbNm.PRօds7,L5O m.hr<>|%e@!2'Ъ\#ϵUmXf@4ɓQǮ=nHalFjjںᙕ!Xq 詄JPըTЉI!t$zh["ҥ|es.?J*zrE/k Nw+]ܼVg|(HF Q4$tbh[V-#ж^岔ir-7VMMFӴ=,x͗N0Búm8`qM}+^sG4ysOw5ݴ%/j;\NyMҩldӞ-!v]A8#L _01Iڰ!?$劀ws|<^_|yҭP~e 8E`C@ !=u).YBB9ט d%%G 003PХkkCMۯ4`V{@.=볘8A=?PAO)+=rcR̎QN)MU/.;pYxf;p`:9|xeYG:8}fxEm'!\~25/<X9<7Lc TsYp~/7n9yM7 <aKFVw>b$)2>P W%WU"zLר5q~V5m+"?WdmZ;6xm2j:z|eL4$9%&OB52 s]Nz  3mEeV᡻[p1eaytGJi/mDȍ=.N&` z^.Ex\IhAI$=_5k|Mn1SNtn![\aS o]ΝC54Mf긢u+jw$k^5x-Ù(!`9.Z[%h +i\Wˤfr}Q;<򲏍2-n Qa&8A'[մXByS눀 [ }"d/ߒ$ls}_?]$4f7́6Sr4I3In],aӂ&5rIhtr%\>RϜ. h"_;K#5,a͊Ly, PVo )VCIPt?;*i'E{ @(M@[k(KL uBKiCDtdΠOU6eCٴulPNZr"W$ gO6sIe+},pIJ74`<7o N@>\q5'jkWMiTΨW1a1~MT;I:3K= Wm2EVVef߽QS%y?/CAءԡs|ed )9=fW~2-5Y#9+c|k_m\Ciӛ3&Lo0Xe=AaU%P};he^?Jt0]M <J X& K9Jxh=:>W . L\:1[%Y@K/dOJc~%l٢J}:c8܊e>1 אj' 3Nvt3 u ,[8[}omi!<&O|1|! 5^gpxv+$08H}A`{ Pxz`!"cX!T/F2@+VP(˖.8ۅʲ]] ?JעkW|G;_HJpH^Ѫ:7 Ahd $Q8j2Di] [ݜ6ke\S77^tC] ZoKa|pϕrQ@3 f/g!r<{G=|i:dΖN.U[DVO7Cg'EgDSs.w0_!Õt=5 ` Ub(( %X 0K#9S$?Lֲz̈́ YI0z 3@iv Ww}0w&@"~xGrb5]XYh}(V(JW:c{g"\o3K9sc! 3 x=`~(5+gЬpk( Qt*AZYP=yWlyQ A,5~<lZvH|%oiBqPg"yD.w00j2yt=!2l*]|Y"WiG7 >Է&x:j@XCӌ5+S;D8xǵ@KZ@ ZoᇁҐQhO<ưd/%\x.Wΰo(2DG2  I z rzFt pcI( y yz+lf^x֮=~a lf+04>㧅1͏kO5'4 *VnVe} `9&Ki4ً~^4ಣuZV]ъ .x̞L:BQH׬.F|etOcrh":nIezOlϵ*f"8hZBNd?aI|0^@i/pۗ]!%-^d&f+rQ>ˢU Tc%ߵ5s zz4zz $^~a>jt1<fΐM[!SY8هT>h} *ǴvJg5 z_6jCK1|| R/GBg/dDla9I?Q&;_ĵ>O(=ceoFҌJ҃(}gPG;hU~oe!}S Lkf/-{r+؀eZ&uҽ}RڱaSj?S?A. WH>=vJj!-+rP$8MJ-MPku1vUlpIcm /x8$zpj0MzJr(8 ^c./%5*`6>Od}$G IDATVK=hq!ZF M=|Iϑ(=xZTь*G<bȸ ?Ŝ+`?eB>ŷ"x@(YN!ߤRlX( ϡٵʐΖTiOeO}.3Hj[%A XOmc:]:0MA{62 U0 LSPɫlHQ9&hih%'Ъ(̲z>pA>Ev< ;#"~S1 A j O: S`ZܮژT0S 1h`@$} [ΐJ{#x ewk7qqEv 0p(1uuvML9zA[5ֆ>;u>p Svk F(n4辧ܿ)̨Lk!3Ӑla&? sIZk=;yx&2&<Q'>{@A%PBj@TW}} p1M> |/VPVϘeuk5 aqKk3I !y]J%Y`%g 28G8}!BW\an6Œ Z;|.n: `f+ޙE`Z/8(HVM5<Q.곸(lwqP*QAK#id0f-g0P3v3+S5A8 `3wVM>+f!wqBWըN3]Mx乚OQD1[Jl7yUx`J|?a W?RhF .?=- /iv&إg:ΒbybT7iq '@ؼbvkZFz!%ɡ ō\έ6:+x9Okޛ;/ Y> y],Zt Gc㝳]L[)In <  pJ$T^z=%h=FB ʟuSds x zh̀{';9.IRaʰ.B,93rQ%dGmfP%.=5;UIE @6$#]L)^>}c"<xḱ1hz3~} =4@r$ѪЯ96Hm[r#-7bϭUrrG!sMQ.?\F`ߘ՗=ܿojW_;'ˎ$'ŝ a=B E/ L1!ZS: hi \I>mzH54 {-I? o|GΔ0|#طowt>8uS&_]Wp*ZH1-7h.SK!#P:gF򪥅G&Ch352#l1{{h.ld=)[C n) pt[2|(_iA ɜ6B`ǠR=BL5B#+AOd1 zQzK.L1he%ƈ8ejJCLQ ѷa uZ#^h.|;ZIvEK\\VmˑZj7MtD2ˠ H64/UCÝ~QYn\˯xYž|-yrxלLQ61̽%_"«d"iy#\tXJ[m BTdYxa4db ]a9X FMo22F!s5!ieSn1U'-P0)[*tТ#,V,N5Ҟd&D!+vOE6mB8pܱ.EQ=t{%g[=*˲8pl2l`oKRGZOҶzӒz_{ؐR muDiW{ؽ[9T'\Uc'<<%mqRcX8#_*SĄ5ϐ+SŸn-T7B&>U هl19چu:D%%,_;\wm) Xg3`=!@rGf0Mf5d^H=QIغtE9Z!Kg~-w|12Vb6BkgJ)¼]LHw>‡*7A>uhFetU`x`hM FI&XrP<; &#@D4ˇuD'\RuЪ\`WyxNR1aGvBbe(c;8F%{\x1~伩.撼6U4ڗT9Sìw"QY1c)BczzG<8P˙3Y]JC3% Oxr!QL( CÿΥ8a}BU;OF;C ʮ",1"JpA IU&_c&?q0Mш<)xkx)Y 1\x1 ӊx?4|4(rqbWA`i1(yJZl wjDlaDZ 5uYpywrB@Ljso0 XH4d $sui;¤u;Y$aw+~Mn dl(/LBU0Z5 KUqۗ BݗUuD-Y`BP݊!|ΥڳL<_uй#Wlc ;}PMfxS]#r'wpRsywqFHMV@hn[\r>ny9Y%  mb-"}eEu8'j@?]4elBʕp71~%::Z 2jFxHtPSMnax  D:ayG~ϣʹVK{[QM[0߇xwP R 0TyD/p2ђ LԘL$TLЪVW>Mf=bT}F(?7xL3S_SGTQ@ TY3_9  z%Wa#b Z5(ޯP[)K9ZҎ@L6@17>PyB0OvjYwyJ6ec˦^R՞`{~lN$T*$CH;{{d!<5x#d5SCC2UyƴyhmKFN5E!cQGKiQu?DdId|XCiUA&iF5k mdv5nr)ߜ0 ;tnSג!W Tܦi+C#L3-t8ŗ@*fJT2 T34|$сu_mDaXx"@y;ġ!$4 h&Jd#$ hqɮbϙ 5T&:nweժtp@D >+KTijen@@VYVʰلp)rB m9'ᅛ^ G9' # -dP3NZ'\55<`q{q^l׸Fu r&ZRe"9I\'|$*pפuDۿ'ZkwTu&5 r&W@R J@%CTeX&euC +5]O8āB骆U]2a4ɿ/!KLp +VTu$^o`a9:e*OZ/[W9YRU6&{I6ު m9X Xe*eNgsPg$]X OsQٲR:`VZ#Nä:RbGd;жg<ӡ:CSIdjkDonቮ]'3b-K}"ym\')De%d{%G72LP6%WMV@ڤ TrղKT'4D2s&f QЛ>~׉s/\Բ,=t&W XRJ0B:8Z*P4,^H,%1ƐēҘȥ~q(lK Ką,"1$iFI gq!W X5-qƌT;/aVq%luH Дp$Ea dviPL44DFgXo2jbHMO XU%1fZa8F&W䆑ȕ)6afRk ϱ, \X V Zi-sKڨM.dHbwhf\lȝt4b\Y VJFMq5<`K;GCd!vT( ђ6#U =Z$R, 3T]`xO8$| 3xT٤z5ꬳVu:Ӏ$60 @LfyNq6vH d7jxX))%\؇BuΡ_M+~D,piPˊ425#egvz*KR*w#)WZW52ӌ,W X\Ê6۸Xbϥ9&T]Eh톦1x$#Q)4G-%ٔ;EQS^+EXu8אZB@߷mvM"PB^T"-3{B#vu%L*6T2NrO~횱s%ةٱo B XA4-Fw}s?=`.k)*A_ƀ Wwa"2 t Iz}FV&,@?D/#IDATr'6Gz]}f!AU~CU]):"ajYccJz&,⑶ӍHOȒkiO[Z5{Ki@EhX4-kIcӨrI,A,b?+lWI媤l1&IjmyM$T@*pڀ)b+[#DrI^XIIjmyM&WX+$ uaIMRM(4fiP.&~Ԫ2"azALQYf9fYP0LrŤGK38fc)L`0o% * {(V^0g T379PBC_2/ x~BدJie8A?t-\iZ'2IRg !S?2&Z}jUQ׮I&x[Ecmt<C S*,Ԯkre״y!%OW@5ZUylpjxn H4+dj[g|3쌲dgh X XjFzFuahIyIr$ŔY¤we55?ܪs֚D< .C*(UX# ,B`g$hL{RVhtgCBAvqU0[c@!DL ]{Zd|MiW@VR;-ZX@&fJP,0ahM0A,DlX~Pk\jx~rTMbUlVKz7L5UYB!AqF` MmS0b#mx9ᅑg60Ү,abRGjB>>t }r+ch_$qt2KW_+OODKJoNIR(Wn/&>lq7viY @z@(ȍM >*iW<-5$`)R;}#mK#W5)q/SU^QM"W aIz+f2$T ۸?@OIHuW E³H~;>WN-&,%jD/Ն:FM^D;P5Jiĺ{ l Yzvxi j|2p4)o݈eGԅe {GMmk0գ<1-DU3hX*n)CR,`e6*6-ח)*O,1 1]T/S!sUlu轤ngA< V| V|X3CWV;2JJirU!!)dp- d/4n#36mDjx֜ 5ޢb,Z`5Ƽ3VZ*#Y ;:jAm6ؔсLRk H2MZ94Ή18r*IX a5"}Uǀ>ߖnBiZ$UPY)T2M6:tjov1<Hr i<[*X15iD6LШ$P" Pk8q|< k達RJ鰧&ԔRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)?4oq|IENDB`pysiogame-1.30.811/images/t9.png0000644000175000017500000000212112201770067015255 0ustar tigertigerPNG  IHDRPPPLTE  ô!ȼ ## 4)'%48x-IjQUJEP^J_?r`bվǘ-䏝ϨMعoܿ~ПܷlҮcbKGDH pHYs B(xtIME )ڼIDATXv0h`9C$aNO3UVPv^p@-(%n`u9 ;9x1eY_occ:U o t[UoM:Mboa.DZ8Y+ f0p ,F#jF#`嘤e3 .s>1<|Fbf;pR.bNxRcqǶP 8p©Q6cErQ`#l Y7'bA Lc7"jLdxdB͐2fUx` 1̉c%{-?d  7a0&K]&뾂:*V߫E=ja?vd.sc*V)j`}թ?O6>O%h(%v5A]OhlV}86E;֭yeA #7-s38} $y S'w퀀uhp$A3Hu:euа!А a$% c nJPzVpTJCgu# ")dW5*WĀ!B}y=Ԏ0k\.8   ۊ f;5;)h~= <}A?@?{BA@CwC A|FmG*C DCC{FGuG'hJ5DFHH!HIKKH JLKK KN,N ONPRQQST*RVTR'VT V&W XV WX.YZ(Z8XY[/[\5\^\ ^|cT_` _bdbAacece9eeh3gdhf h hk jikln>mEnnJloOnmpptxhs rtsuwzIyVzx y'{&z |P|/u{#|*}}#d+%Ł'57Ć1Ƈ+mʋ7kǎ7ŎDfƏ?̎@tƕI˔LsǖQ˙N͜V{ˡ`Р`¤դdϦjéƬլoװy͵ܶظѺܽĮś˹̩ҿֺubKGDH pHYs B(xtIME  #1\ lIDATXtSDžajMk- k hTi bR=VrG^G#q-5ЄCG, c?Zu " R<5;C>=9I>>>ovO7_X1'}hGG7f1csrrғ?w{>"OLL:>gʼy<03rƍtݰ3Tz죏><|1,HK.Pju^OX B8yԧ'?:~ow6oo.XSYV"IC, ZHS[b3/l}N?Gtjs A*Jidž]̣**3:v=|_^'?|ooGs;xCVLL]< Yy7(FG::z/)*;طW$0,tּyT^dbVUϿcӟ8v@_OWkŧY՚b孲+C`ܥ1+mqCz=d8C}=vB>Kh* C`y30 X>_{hǮw: ҡzv}OlѪ,YXr*o&1fAXWvn_`uu>Q†UfAYQ,q)mFntvvo޽;76JRiԅg+QBS6h=vn#AgoӴN(X^E!unMڃHt;wFHhsmwRkg1Ĕq^rec+ GVg8$` ź4[l`Ĝ) M[m $׭nnh|vuuE_ G")49PAɗɨ>8)/pnF/FO‘ΗtUZS)%O/V+'8H|M]{Ghp=$4 Q)J*<)O՛p1Bk6Epv~)A:r^9 jC)17GO/-5s˹FtFHgN, (3słPco OQ+Šq&? (Tle`84jT L) n~?@BV{;R*,ꌵki\lbJ/pRWV卸|^,(@(U!%t"fhrm"aۃAB{<`9l1Ξ6^^ +IFbF3,׀% m mUd9.jcsZ5lz0fqLKN̈́&X[\.x Dɭ",^4{ !}5,IP7ZXp t.9Hׯw9j!L!Ϡr ħ)Kgh#c5[׸5'*Ee% UO/ҪT \4uFKR8 ,e댺i*xI>qd\|i pU^a",ck%!W}%6n&eͮX6IsjU9K}@6K L,p0iN`oL{drDYlLrҫ_%Ȳ ؟/$t=ˉi zX"o X%SU劂g~,MYXaXh_[k-Y?ʦTqM#,UtdY@8 6w|51R-폁_0bT\oȜF&5 1C9U-1 EPu߅sG0F$$$& 9jL2 LH JQKuF7)DbJESBճ>?;Fp10i1Qqeqw39n&Ϟ$g@^k|}syߓ3f{o,]|;x?Ow~ܰ| $IENDB`pysiogame-1.30.811/images/b5.png0000644000175000017500000001207712201770067015242 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ AshtonIDATx}dWq{}짴v kdEmb;q9€M$ )SN61!$)`UY1Y ɒXI8;;VIL{J5yotwM7\,'N<-;=%NOӷpG{;MC×A RQ9իo;=5|CP hBj@EFDzN!AG\bT Z"j ȒϷ_md6Aw~\C AORVuF&T!JE #DDp#ش34CNg,yo'ԹPg!3~/Mƫׯ VdRKC%"5VDPDLa yfeƔmagM"W5_5Tt@sXiֹzg-cuVXE < QEFcɞil)LTzI%Ym?u|9O]ʵp!A&7Uٌ[$pGETTRQI=> $0ad|8<9B7xnՀmÿĭ?$6=H[KTB\EX^TXujjygc+ x'~J7mϧg?48T]pBp "2eihXeU]!c`B+8"$PU.s{}7?^^k߽]jnn5rauZ:fefhizzzH jX5&4= ><+eMW 2ݏ v=7݉JC3+32o3f.@@hcSZ:::Z kyze8 Sv;) d|P5A>./(BAUif- +2aEWXU!Vu8cmaLd,"{}]IQ"AǓC&y"`TeMF-h'zp`06}%ե}6?9/Uߥls}.V[TK;L ƈP-k\PzȒ$@= Dl~\Q"Jd~gg o9e\z?2h x@<"(cf3<5$\rD٬D0-55l @,->.]4A.Wp{:-7n@M(E'{' 6Z  Rbm :3hM#@ ;d7%ψ;Xc` X|` 6.M|8?BP@b`;23f:cVi„F** @6_%/NÔj~'nXKx&fgiPKP&exZLˣW%\<ޡR"R@-P\p2<>'phYZ/ͧ{I]I)l> HXH d2^S0 W%`s+Q;`ce ,7A QL3&I<πYp1 3-` #gʦ|?My닗]dNY[Yxky FҾ41?sd,Q0C)`x+ww- ~p(sukb07Rpr˂I9XO.VmfcgXVjrow߲^JQ7zI=s1HBJyYDY`S3IDkg:wd D"ť8zEY@7 B b*Ѳǡh($RF 穈 dKn dE*H,*sN"^Ocg}j+. ຮF <@VV^E$Rcٍ 4^B7XxνlFGgy֔#.KMWxDGhƖ#rK%E"DBq,D%Gee,FD(;}MJYQz[KGuǿ R{y~VLDfx0)9APƒ>kҊ8ϭ)JR*6Z -ޥ-Κ1$D'@C|(~q,"gzVEZ,ƖsdcpIdD eׯXQSCpn Fk~lO0LGhvLϕf!)+Pb#fiDc!tmZ:Pm,Oie&MIȥrFʉI002i9f\36l;y{FChX]3fyMdfLS`L&-ݷu[2,NISI*MV٭^Kyb5ak4 6^z*묄Υz)O95;4MN:O<#Ib\l czgUsvo\}iD(AB! JfI50ҵy8)Q}+tDBnhT~ȯo^ >3HtgpװմTVP极aэ?cV5.Cx6y]j+]s~;|ji_yGh)Aܪ *+P9H*[Z{UV 9;x~5 ocFѾYoB9*w>R >QG&3=v `&s]/၍;*V͊7*BX쁔r|R;a";/걣_:Yϵw/tiU%nDtO hqO\Jo_Tc@Qss {coO 5}ȼƀT4n6ί?c>y?A>-mpnZ:]M6aAkAVW]x'wOv @7o_qbq{̸)_}@(=?zy1*sO{wș_g}ؼqqy~d;|;F/=rpoy!;v1cro]Y_+7'X?Ǹ5urַ"ԍ|{u1£I>Wmٕ6-=|>>'] eW0(<￁?_7] |;Tmɮ7<3|7xNʮw;w=<;ivvZԯ嵏|Nʮ ?\쮝_*6 |{9xC{.mUD7NxzW{vNdĉ@蟗 IENDB`pysiogame-1.30.811/images/fr_broccoli.png0000644000175000017500000000452012201770067017211 0ustar tigertigerPNG  IHDRLLIPLTE   " % ),2!8"9#<%@(A%A.G,G*G%.G1N3M.M/3N%1N+8S*:V!;V';Z0B^)A_0Gc'Nm0Oq;Rv7X~>^}EWIc?^PpVkKaXkZzPuWbVSY|pUnͧԝ߲޾SbKGDH pHYs B(xtIME  nYrIDATX͘Rۺ" *ŲTE18 &@ B:g ә/Z_öۭ.kU՗Wa$˓ÿ} - <xyӵ.8g9OSyli4K"yHqOV$ 1hB1痟MaG!O8q1R!P0M2 ,IZ  {$!(2%_.R"CB8IraFLN]]_RP1Fl$) xN !V5Y#eH08EA H"^DcpVТH\ bE 8H8=I6Vj%Gd$ k[6 "8tgZk8F,I, eBB*ږ,[uo`e0C9g;2y^2uM|Eyص El ~}8K0ORDK =9}[iA! AQ̰|$5G $CQjdm \k4@gz:ִ`#2gȲ |I.I{ahN5ǩ|LmוMɸka-Vk}Yd t#'ȏÖm٪&Į)'Js(tu5ESjp( *2}t˶c`B񷣰a(n9ZM X0"Y֏z .\0|C"D!~Q&ʂB'F"X,'lki tr~MW,"I9 6L. a ~ɼ y Dx0F6ɃcVaL/l֕ ~-/y9{ݧߟI˸7×n_WnE!: = l^̿i?pY?ymIENDB`pysiogame-1.30.811/images/b7.png0000644000175000017500000001161612201770067015242 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ AshtonIDATxy%W]?s޷>I&H !))I`RVEY,dQ))! ɀ옘,d2d03wow9}K}UN{ηUWϞ{6_2ػ13[_b'ak׍M-7VsHB E;:S=sӜv↘6oiQ?sf]%S3ތ&F5mb*` EV/`[ ;w:?SzcڷY݇WG9[T}O9%`d"LHbPP`@o`>;= =A>yĐ>ou˪xM-#j=GؽS ܔFAO2KjZih"Qe}N z8¯~ /8樤R u n4I}GMbV@ e5AUBH煘 6 sқqVJ^!7 dvS+c Q@h[hBiӹM>Fݤt77-vcΒŒwdi5 OqE/Kj#ƶ-i~y^;#ٚ\П' _|lTÕ˱]TXf ְ`x3@CU2]m0 U!44@81Tz%.w}^as.]t7Wp 7PN:vrD{ C!.ٰq (Bۤum kz=e[TtS8OV^jbk)EM!$F``f̎9mL!%1B#r)|0hn3 M@1j sp7'UO W\>1{ J DR(㌠ddʌ[dy#h5/{lib^eeVCr"Η7mkVϹp'@YJqG΃qGON ܦI{s([{fIUxds$$fë́4\hŃnBƍ=uO- hH3޲Jߩ O,iXnb.j¦'O=y8.rsO.d0%m&9V" #x3b 9ai`,4K$0PUuv&w}G-R-L D/faTj!.زa"IUQQsDwN8Ģ%.oДfEs$D)H!K}Ye{WJtYBQ$")Bf^FSrQ5_LŜu=*.]uC'p @PV+:>{mRe.؅6fcH=M_w&1UT5j*W]!Apb).,XEɘ]?EWke{g[%:"GOvSi'e5 5 i"t[@2%reʛ%{lI6te,w*؞ФUMv#r p.0htۖm!SN0U$FU@UH|L HH*51 ь) m*s& qv ' `#%ڠD-E*pW H'݄BR80A,BH;y)l4mR T1{ɮwUzcq@)jH"mML倹{yԤ%ђUrb!ƈE?w o}Vf<3hBL m!UV XV 1v咧&kJڈF#F7&s,_9gmn`~h V Am1Fii6ڸ ;?0Ñ9ET5bZy!( <摞6%lbH(m-4unmiH(:=P7JBh-Eu廚NCT#5!4IC1OeY7.4:VFH]G&בԭڔGj0DDC 4#B^d"reHN>WwUYN8qFFuH@$VFzh ke8R,,82 \ lhH !8!(;\5(]0Nʪ?ˏiO=*)08IA]Hw6J?B*V mۘD|#`Ps99_r%e4RFR`Y\2KRdqY\mc4GC&IhCسS544*Xodz/}LO;-^clY̌cj^,,X) cd(0jH%g'6Vs]eU׵f~Gs2\ 8W mQWBU!yV zd#UFsPݕ =ܚxQ., G4 ڢ@=uTPB0rj+ kM#Ǒ(hVsMyMu``'Op Uy| f(P)HPr'~M[RόYu+e ;wA(z[{s&yy 1r֓ftuk<;+seDYx$mMv]^gqnptJŵ\dCn%o~6Lc꫖~!t'ƍN]vnk>  ?+_s'm]C\BK=,y:WLѡzOΰCǰu2  7njpõGZRB~tb 6Dž/߼6׼ o?uĴQGb -r>G̳x^QV?#T+享a.?ǧ~;nzzz5(g8+Sஃ2.\{u=ˆd˳^7>v-|KpIVawǔ 0B/zvN=m}=ɆTg=^L6ppũhʆ`0}D8ˆ{&?,>TG{/غ=\I߮l^6,0&lٺ3zxٰ6=p {&?Z6 l`C;~mCˆqg/Jp#ˆE‰'/7[ײaH'x;| ajg7ػďm[o^ }?Uvߡ$IENDB`pysiogame-1.30.811/images/flag_us.png0000644000175000017500000001057512201770067016355 0ustar tigertigerPNG  IHDRxxPLTE(g )i *j.l/n1p-32n6o 58r ::t;vA{>yD~"Bx;%EzB(G}+I"D$M.K$J&O(Q*R5S.L8V2S;Y5U>[@^`; &|9!o2t `uՋǠæU*55ڮb;C$kG!5!h4|ڪ:;گ}uR 6cM3Is睃A]61EE[&TT)UF^u7ks3j><&&&v|.joyp^ς;ycG^5 +gu ؊k5M Xؠ`]G{5x߮/MF1W*"L˓ VVyJY[Єk|޶eX@'imPP7S,! MԺu~oۖM?|*3 F퀝PDzsϥes XTU U'xQժVkHN?#fkWψu0[#"`Ɇ_M&uu e]C+^fg#OZINdq P)WT#U\ħkm[6"x"H؍da5Thffx>\RJeJnX._M̰5XVfq}`]]v2@̹YEs%\ٖtYx`+v Ew |GE$O{٢b:A^_^aLN큂A7,_&NxzƜu-AXy`i/6^p1J"ԔT^Xa+C͔+4M MMz>Wd>20$0isDV9 )d2hB~56`AGh0ţ.Tg XLZMu~\>pdCw9C@dg\LZ=r"^ug 尓'-"G?1R3 iف> ;[_qvwMQԈ16_tQ dxy^aҬm7gzؔw$rMTORQ _@Jm[6FX22<ӳ$B=61$ֽ>+,xH萻87TrJj¦V\Η 醲4ۙBȁ{%iz$ԫ}7GM|fQGC_.ToXKKJJKڄX0 1 8v=lQ5k92rlݺX䲁FYpOZS싢Laأf]^WߢK%ɫr.9Dz?11GbKGDH pHYs B(xtIME $0yGsIDATh_Ign--434DÐ+.#Ya{fwy[^v1#|wyf` 2@*IW\9[KR tNa H :?'+U9m$--7W^i"i Hkĕ dN\]ѳ! NY/R>>pg pb~шo9y Y!\\y|f5gΝI .ξzՌ|pO6ŤT91:O#ϗvD C=)ٗ/;"_<J7D?Uϻ"_M@N.8 hwמD~MЌ 4byP. DyXDN5k/08@%qR*X@ȏKYBA .HZŖS6cMͧko"Pg$ƒ4YJ Ѳ"wF(JmaLUaH9 QJqَHD<(3S i*ط(=ZT3jh@E \e] Iw&1B>~ yw`lfYݫzƔB3hJYI0&N2CL3< B!:(c|@I]_UeFUy06Vk|ttTT[`UdZ ]BόB 6D f,10yws<#W#PgJ6t7\H}sԆu@T7)Ny iei+#Ŏ2eƙ#|>L_1~9<>nz7dԀ|QvK$[CZ Gj*f 3*7>3_r;wbc 4!E$b hef7-H, 1ZlP\W;4GF*AH{aG6)R@'|B0A2hB*'R պ+ykn pl']/ds-~ QZR_=x"xP">m#5ѓעt Pdj'S+%k~RI ~ٳ F2u?`/=AyvfzPLE3BpHEp&"fQkΆ,\e#1=ui42) YqVnAer $ƛ>_A8Q*riӮpDyofn!ԋʢ<l>$ #IU4j1L)펺X1"iyn~K%,7'obM/շe3<-H[秃XAх5dy굖^Fp_[b7ONv/r۶nc^[7vm[VX)kj]dke5S {g-^Ś:)euց%uօR0\`=Ց+Yru֭R:)X}Q`3kiav9^`^`8zڜfrm;{sOS .MkIENDB`pysiogame-1.30.811/images/tictactoe_x.png0000644000175000017500000000224212201770067017233 0ustar tigertigerPNG  IHDRUU+XhPLTE-79BIKV RYc `qwfq ms syyІ؄   ˋ-ڐ Փ0ڙ,ݟ23/2իhجd96gkk׳ݱcIbKGDH pHYs B(xtIME   hIDATXYW@Y*% "FL Ug&,w\.w#zT꿯xu7}XpWwW,yG0@yfIiAUKj`h^YlCK# hI|7Zrbkz%h4*Ejg):lzIQ7Kᐫ{jT$gEd; K՛56g c`[*Ks{mvdl\AkbqUȁ] yj[О(б)+ˢ%r6@B2-,lΊd,E;9>bߩY9X72[`b2:B#5nC9WʫQi8gT-؉q*94re@eYn$JVρYDg`z#>.&$q(/q4~5oiEo_I 'cv(ԹE'5m{DkZ 6pD,PU:W??<MsP::TrjYgU@)/ڸalhƦu0b0FAl?yKP\;Di!dЦWy0l۱E я8,ETRϋ))*b -PXMej@@s6T4va~|AjWeo!pJl|oTO_̆}@VK+VLmgbmoL ,Ewz^H2U譒)˃ ^<ey%g ͬuB(8_Fy%( O3wo{߷ouQ?0eIENDB`pysiogame-1.30.811/images/flag_es.png0000644000175000017500000001005212201770067016323 0ustar tigertigerPNG  IHDRxxPLTE% " %K\%i5ǩ#:mΠҦzzt8?ctbڒ%ngϰYM؎:<^̊뫳d8s\ee.Wݪk,%,x0f6xXޒeIìmFdLW3Z2`v ݋zS=,Ɯ3lJDfxzʼ]9Rf#8=vpfѺ,O F[J[%if4&w` Xfw$,P 4 @2DEù<;-cs,7uF@p 2 ഴd#Lpj*+g N[PdʿVE-`urQY؎ NP2DC*r E5[~btap*)~8M"8-x@= uԑ&X.!\.0eR^L, MD T- 'b،mU^ϔ]e07]|L8˘f(SJҨf`a,%NlC;Mhu( ujw,]Oք̺Dy ֳ֥ SB{L ` )#|f`h['Rkr-J&>5 *ME)Sp+暜-8aI1*ھ(QiOjrv!e:3d)U 0uѣ֬,?QU/-"KW(i17JwӴu]y9\^^BT*$,;ZSJ߬|]cyaEȕeWi暄k8XΝ;vCӲ&3NJ5nՄY1oAZ# h&LX4ݠ_ #E&MYSg,1o+BkJK&,4 7 M&fF~&%M5gΜ˗Λ7oil#bZ+͵;`fnTWVfڐ2/;$9W.U9a].n'C 0׽Ԕ)sްaO5BAs!uqJ0}J_E7pP)52ME,K7le܈j&.Sh2aQZ=Lw'~9ucCƥ?x )"s,lZqi(UTv~8E̖qo?d[?ww2 buqm &/C'߬Xso垱99?knwG?r:M/M˥ѣpCR΁-OKMAu]MMg`/y#`?7_޺M]8Ů&n*iL>Ixua葷_3[溡C/8r 7ާ/!{|yKzzc?6fۆllBzq?UaGw; :r9eAcbFL_8hIHqkA xQ117&?4ܨӭ KU1؄Q~ Wt 6&s)Q428Y30KhW-NمO K3*yDl?•kwAGFr]cbU1#T@ѭ/'7mf> <"5moSSc{{oc֧g-KEŌ𭓂M٧\xIc&/FhÊKgn|~eW&kݻVNr/|4z$򢿏Z>j7;W#ھR+CTHǾ+}l\߸mހCeJ9^!#քU;{R =lZRPfOϗUzSh]75T}(]mY.b!,G//\c١KpBfxo'`h"@q|T+FBe  Sk"BFFJAadhU:!ʡ?d"v?"RU,K;H[=WMҸ 3:@iK=:DzZٰ#-e8,tY!T>,{y#cN3^xJa,!`{B#^#D:7G`C-}Zɚ&I֜ ա_to>ҠGt֭o9N;SFzB~[t[fO4ޖQv};:u+ W4菤\O|O۽dIENDB`pysiogame-1.30.811/images/paint_brush.png0000644000175000017500000000174112201770067017246 0ustar tigertigerPNG  IHDRddGBiܤ,[@E ChH)ʋF[8]܎ =XMz=OG"H~a\½h!_c=Rwա!l6@ HNJ_D D~ <ѿBK>>escR AhD (d]IAm*$v/i*XD"X[)=~*\,b[= -ŠIENDB`pysiogame-1.30.811/images/paint_bucket.png0000644000175000017500000000622612201770070017375 0ustar tigertigerPNG  IHDRddG<@H"? B C@@oADFHK(GCIR M GCImNQJKI,LOKfDK8L WITb#STUVDU@VVTdNX}9YUYa/Y ^=]V]qJ[0a.bY`MaslXcsccl`drOe^eyeeg@f5g2hYgMh,m+pzu;kFlVmomp@o5p/tdnDpfnmpxnomq>y+|Hu=yutxCx%exEP|LG}<,j~|WR\}~TrVN6SCk\PS?]_p~^bPsX[Hle\xg^샕pblZ򓛣{mғxj}i򟠞rbΊs}ၣ̓ڙnvpz󩮷}宯Ҩˎ›唾ү㿿ӛԿ̱ޱ=bKGDH pHYs B(xtIME $56 IDATh{XpXʠjX֪CUQΨTE S'xAM V R7D4 +ZMI[/$ =|schBJiVFk/r4yNѻQ2L}Fcq?+>Yd`FߩoA;$1ԴۢQ EфPM MǴOu)=q0Zx)pTs?ÌDlt8xL5@hjhhPƖ:jm$F>x?׶Au@ j)nT"cJ O;nU{mN+  ]#U[8eеޤN?BY=`.o!59[i oL[4-'ct٭ԍZTܯސ3Leӂa4@>@R!Odl ! g3hQ ryL&_!Zr-kXä.ih JU%rX_&H$'4Ӧ* %PS[]CDPHYՔF,f9i.0jբz"(rL.J$P~4f21~"GhbRJ PzT<=6 CJ" A$ w26mt;/Ĝ@r2$ IIݠi&__ߥЯ.555*eeEe%L H*~?!!T{_\VOWU@rHFaZ*w]cWYb,',7Hvʵ^aק.WTB͠Gp`}.\p\osAtM)ɺsgr*GˌJǙwEz **<<"6 =‚~h-,ga+b)spА`Y ɓ6ݘG|6.߅'Q}Ro.뇇s ez)*C$0~5#0q gm dffNCڵChh}jīsOffǭ;F&`iia9f׵GgffggocLC =55,.#h+^ R%;&L#-04( { 0L<h^G^׃.?nmi1rHX >ve$oOqqaaϟ<oh>>kܜ\SEi )Hc<{5YBbN}DW.JMK͒H$2RU.J$YiiH$GzHs:/HJUG*J%izY8ϛr%1jk@)Iqn'y߻y;dYʠir: ҈#ehW\P@/Dibt ,Dl4l8=3"{}ywn=]|WZ950_Kӗ מo7L%7L3lL3liꛪꛪꛭ7Oy4qyyҀ0O3.tej%J+yp>qqb]3l7L%7L%0UuM]SuMVuMMWn-ðG͛{zo\WŬWaqkSXxw|@:хSg>].JI)"%$$κ(G_(OjuApqoSl-}]ϛ.xU6_I>-.ϗޢ_{5-c:EugxK2jP;cK&lmf-KfEWU[MwU[UmWu][w- Űψuq(?bKX+5 5Z[􏝭U8eEGTY⾏K%$0RBI)5)($t֝+ӱ(OjQ+1jej"B寠|^&圞1rzCi?/lg}Qz秼ijjMSqIbTGE;cfԶf-nnAMVuM5NWTV6Bl {[cКs4Ԯ̿7o ^6Ġ S/ߞ2+ -bˊ¦Ub,/cR8fZ>KfIladREIT޼(/J0#\-nt綆{U5 6 @Q2Lf#'=Jæmf-KsKdSmWU]SmWTU7U[M[;=|(5]{>oxp{O+ηIdeDĈEEcX#7|ڿ%y_#S\W\WaqklΫ Val7{xjxK $$s$Rj D('lJ_}ywYgQR ItYcXUu^i^b?\hPP>y[qߗ :gqK-:}l$ȔqXXQlnc;y~W7L3t%%6)mꛪy~8=ylL_32ξG?Otߌ7-r)f[1+5ښ_Wר\_W(D&+X+⸵nmuurߑX!qXz?>Ux_Ge$$d^w9tq} lq* X^-{ߝ|KJxij`;==e3ٷ=$ӖLs +3I@!qZR=Jyw߻[3t%7L%6)mꛪy~Y=~K(ֻy~Zbw6<)0D@$ؖVG;զ_[צ 57O_'c^Gϩ+5 V&y9|A ?s4Y>-RBI)4KRIA) =o={9sSy}q@ &`^-v>w|wDAy3Y\ݍ{P<j$͜x=cs5:Ժg2Yi,bMc)gz9u@>w}1t%7Il[3tͲ mꫪmji{`qO|sؚTkV]@~)췹[ײ"S.il_.ѳ©Wi(Z|@ }s+d-uUaQ,.+ 8k:BZ=s!%$PMI.5 |^t橣:}p Ѕ@X7oF />\]y3Sd/oYG#Z_Iv+鋤f-KfnٛmSmWU]SmWTU7U[M;xO_=sؚZ꼾@ϕ.7s MM=J*q Py>ߛ=M^yi盧~wEOW/W.^Z}q⸮*ΰeąXX\HXxzl5C\ I%$$V^@΀Tp,@Q !`;>w>I` a5}u8($ɑmY뚻y{Zyjnkc"sKo;.r͙@!qwvvSFۓ|{zh~WIl[3t%7L nڮnm翡v9潾=6363ֵ}|kdvϣL:bb!aabXfn+܅ąXXX\V%XX^QgzH%%J[-z@ ^͜g8sZ]p I` [_;9GHW5zg_8sf嫩ܖsuo;RH!ph9ەN&˭1W/G^r[3t%7Il6*mꛪywy`wlLgg8-kkew 9v8]v4u4*A]Lj@y_?wq(rzͯ}kx"nn8u:,.+ B$8qXX1X\e}t98OB]ka=\ nuDn^+ ,q}@/L@(eB][;}?!DGssx,ksߗ%zxyoRz_wkׯwO|竟Y8Ź޷^zN{jɜmڼv92V,ªtu֝e=ث.ٛf-KfnAUUuM]SmWTU6~úMོr-󝉝s妌ƝZ5RN ɍijnSsJһܵ㮟;| S#y֧Wuޭne~+|V'1qXaqXX\eGOū.$,.2ű.+~IߏH D sWW0 (_[]^=@Kǥ @P p X7o|XNW~`vyT[Sb fqN|~xO㣦D;^17[[Xz{Y^{]81ҍV:sng;.6/-ya1tםYnڛv*鋤KmKfnٛmUm7U]SmWTU6uMs<;o+lLLLlg7g0p9p7;b]{InmkSi V nͺ&+}Fo~5J9}Lz1ޱX\eąb\VɅDb.+ǧ̔+<@X!D,<Qx`DP2_SPᾗK!@Axˆ!DKwoX4c}?_Sqר 7pɕ |oC@G~^OyI!6mgԛt~w@ϳz9ןuñ5njsNeҲg6sך\S +W=MM/s/=ث..f-KfnAUUuM]SmWTU6D׍nov&6&v3v3gwE׺]gérdSjUeJVb &Lwk64g[W_j:Jeo?; ~/-aq{}bwⰱ.+ ~6qGQsͫH Kxr (~Ǩx_,AxQ`F.zNG%X!Ey\vB ]=g(0힗7GĮ+J*RL YZ4J75JVz7KP+O;$.+ owva]Mxb`@޶!`,]A mm^9\(7|gOPtz!@ۼ r߶SxS,QRc6`a7w|~G=9J sޘL٥_=^N/~[5'm5\˛755U̎]}U7L%6%7Ilͳ7H*mj93lLg;g;;KF޾uFww(ijx?u779݌,$YNZb QVmMb/@hoxVb\V\γz.|pƱXwoYw9tS !FrP5튻y@!@g^:\ztzD=>BX7t7y_wc,`6/ o;Ya}ܺ'PH]",r͚Ml盧g=qoϿ3m9ֈ2&ln+ kgmi)3wp,|ۊdfٛf-fUm7U]SmWTU6uMs<;A_5bgc9ؘoؙj\}Z.{}j1C;&dBW@  *ҙj>6.2ⰰǥ犃,or{ʚ^'9k!D/SCu@ ,|o3_HyX<@]6q;ˆQ.@kk>'l*2*)volGW}N,$I[tӝ=gk@:ZFuz۔XؼSdamS+VIbW7D3Yg[u8<⮹f.f-f-1U[MWTU6uM]Un|Oy~_13Llg7Lg4vkkѭkkzT]zAmO7ћ.,aXYEAUU[Tg^þ !K,,.$.+ⰰgG GKr{|t:]q 媠,Ǥ&`(Koǯ@.Y =Gwyt7>/,TCM[y]1w_Y{{|&Q) c8NЗJ|'ޜ6ʆޙI3,bżfkyuU7L%6%7L%7H*mj'}_63󝉍f0\қpW_[׷^_Z*YabgD1+ k/y5|K\I[İ.+ⰰ6=]z_TwA-zDBX,ؼr@S^̯<,G/3煅Jb Lנ;^@QfY0 " -Juxu7%zxŷDMqǯ&q}>nO6BJde sIv 2 ӎN6\kg{Dels̒D5\sUWzN}N(S7L%6%7L%]2*mjwyffHkRe!Qdv^wIw_ӣ kp}R" \c{y$t,,.+ ĶGNϓd< 3D%Ko˰srF}| u5@X ǯzss<۞ nYd+,b f?doOŒ ]u:Sdw7*:'D8όc+5֌4fjR"pÞS7L%6ݙlnsl!*ڮkm]%VuU<;q&rL&rA͘FS]?_= u/Ok9&IA].;v )zsD,.1ⰸ^۱è߇>  BX!vo,MzpzըP!:z~( n|_Ѭ̻:G1 ,A`l =;T`koWŝ??(|Q/#>eO-J9:ό.F+Tܙ&Vd+YצQ͹$cf54&$Ș7뜉&5s篢xvҷG}19lII)ي4ӕa5XMO=/n(!1q1"ȬHj{g~_rB)znOW`ؼL?7߿˰ !zO)_^(H ÷ggzWx˅z_YC82Ǯ^pB/dzMj)twCXY۔^6>>wkekY:cRɲ%R%]{yLw99$gwK2-a. `s_@7 IfPs;?G-u(:˧b v/+c~.(ksTp7lOV(x w:;h<=@Y~͍[5+kî7=aQ?oQMyxTtN\_Cqr]3陱@*@eG]܀xVy^y䙳lIgq\Zkf\Zy3>Sوrg4ɜrLQSB⸵5^ǿI@o]sdv@8~7ᮄ(c{XלKz,hxˏw^]9su4)"z|q{8o9k9&I@"Xq\Wk]5N^JŪ#uޱ䯪,XjR{=z̖zßsOSz̤{)X1'q9[liFT8q#G9R8qH#G&Y{E_v9k|(;;3+_{YQ-R%f=y1+X#8|6UZY3%)(DB! c1"\95mx ceUUY%86&;zy%[cݔm#veyӮ3nt 3 ݐ!B!c1f /.fEtpƉz,|77?e2ș=٦Gk'~݁'`y#jq&G5%ֻeɫ<ֿFO "B!C1cϕ]kH "Ro>߳2Og=*5C'&Y=NGk'{YɞEa)}zp<ߏj7)r˻aPddeV<(H4>vNp"b1cLqcp6TE<'"MmtUdSzp%YdiNLg{sMu=az<ߏ{MHX׬7rqAq2]XfOE'&Io}b6;!B!c1f7~e$S9f$rQS8Փ5l=s=(LmWEwWooEo:ZtMwwh}*EFd&}J]T~OkUklUW9'}Ac.,oj]Зdɏ\dfYѳD{(B!B1ccy_2zTSw4d%_(j_a)JoCCCCCCCCCCBJvY]ܾm[//U]Y5JCLL|dϥ=K~1i6vO>vM܊7?)(k&I'ݮ_JɧȎM=!B! c1c1tEWFі-cMھ6NԮr (KkJ%Vw[z#'Sݶ dϩ=.?k+X>oŜ!uz!- 6V+7? i\*o-EY?4Ӫx~ݛۿB!B1c3r!ʹ f$ĺᕟfIJ9g,hhUmOhC#ފywg+ҒgJ1^ƘeeK&}olUsPey? Vc4<~eUsvOw؉T'nSVnO~Eܘ߬7NzY_ٗqW(B!B1cc_2|VqryYpŅ"D8z'rP%X5hͿѺr5|l8v4+*Y3?ǩؿ982:1~W|ψK"}mj`dsk{R!.\xjMqJke΄Ϡ444444444ߡ16j%B!C1c+JMɡ11'GȎ5VY+Q#Vp v`-$'Y( 7;}uW]WD-KW'CJgtqjjިMVlj|y!-͖| e3&"$2whhhhhiCCM4·7~7f)B!C1c+P"CYd|V^Kʾ1!5#Dթ)6 [ءoE}:PnO/u/w+Sm25vkʖM)̋UycVn׳~t*}pֻ~G.'h]kQ>---McWˬ$H. :Yq)%["yHB!B1cc_9סE1#jMY(@Q&K=XFDPZYp' 5ͻQY0Ȳ6ϧMGw)^VTcV1'`|3VWFU/|~{9|= k$2^ZbAG_ْ"Yo[44444ݎer̋1g?{[!B!c1c|,yx"h1WyϹo?.W+t&1t).Gdlʤɑf3T$Z v/Mjq9糞PQ#H=DxL#UyYeY4fӰQw~(ccN g]~W,Ŝ2quZGw?#_}]VCe[ɣz. H!Bߡp2j[!̯ir蝤*ꕮT宕Tퟤ㿍rƲP+ǝksznþm_&}(?BﲋRQji5'mqqJɒ O@K{9R!B1c1VW|*.Z҄!E7sI_6Yl`"%v$2[baL"c݋ :d`8֥%'O oSVNUzS9FQilU9û Â]lwtbF.RxJ_/;ۻ|,?#~njUsMW\-x!XʙˆKcHd~=B4F**0P_p\RnQR$ݧM}K])B!C1c++ĦUT+T~ӷ!B]ѴfWl8ni1$AkIuYљ]R3slRTRa&WeQcii?$&-.&"ޚLOWN멎AK1[MQMbjbkXX'L\*e_ 9rhgn:6S9g}/nXM~ӷEU(J6=$?J5GwlCHd}u{!ޕԡ;9R!B1c1UWE<_G=B<Iv;mB"Nܾ"V؆DhheYTW agKj%V[!Si +tc$1"?êQSE.{w2ln?b[ϪK1^?o_nb1 |,//e]ɣQ)9J%Sc떺o;B :(u=|{p8LKՑLoЄ.2}zljVȏk#B!B1c3s!ETƒTA͖U1v򲻻W2pЌHi4fc50h9=}o Lh¼^&L'B.OPWлwak{6FJqr:Ot>͟/zQd"n2_rsЭ˂8)B!C1cVu`cGIi~=<{VF.RTG,?/o&ZǢON *M-j=xa͕?d~dCQYBS6qbУs{YR!B1c1y=wB!FȌc3e]gw'95Y QdfF6 g15556ns&umh1z}>,eyo>_F-;;GǺ5ٜ?MYQ{.̎u.rT.g٩EW[N?/.k^oOG:зޙM!xbh iY/%uLUm Wm\I!tNdr2+YJ\U53P=ݧw 4a˧mq5ɐ"]19P909-l{'!B!c1cGoEw?!Bd4X;9c17r2Nˮ{qqGqGqGqJr2]P"um8%JȢohx?n?Db,leDw_DZ]_ed hhhhhhhhhhhhhhhh(q<\.\X٦?7֬#(AWB߳RF<1iGTrI6nE-q={ٸ*\#-Ct塳0HB!B1cQvaH33Y3CCCЋ+4=7s~Z]$qGqGqad\S鮕h׽\s1o?{w.rTG}N4+HnǮeqgqUwR%bxR%ވUumb7±C#g\lV4*TAM84& ,-"W /WLR>F- w'B!B11w*c<ҿhhhhhhhp"H44 mEM 7lnn*J{;d=cedrm=$["GcX!Mu|v]:g;QFFυ*ڌ\XZi޲jrWʺ*o/|g|7YUBni^6ٰų,k-revcKSSkSM MMMMMMMMw9<->R5Ags-8?4g5aʹNtYĘ<]n E#CCA}%tn鄝su_hpY=-'Ts۱髽z#)r(K!Č\収Ɩ1Üﶘ] ٧V]PmRY=n-G'(5"yTnw1P1Ux }U&p3Q~Z˯]D/NβOMMMMwhQvSe2444448N88N^c\mn>֦d'd%9Oy*pUBp*)ΩWgx]j_\X{UMr/kvNυNtF0ݕkhyIG/9۲o|mlܥ9O}RfjCv>;QFtȆRȶ۲(p(F%|y#˶m*ȼ5$ǝY=MHJ*\qJqvY(gNrpd(puJpt9Ñ_9svg1ZF [,-|mWYTb֏Yd\eP9;:uV5ԭpG}5gNe[;,݈XF*beuŮUWxXY:ll"[7)))g;"WJ1nHɁ8N8#838#8"a 2THB5ǽm5ܮe;&qG6xk䭯oG#ۢ{tOn='؞"{dOl='ģ4/rp+5\i/Aiiiih}xM,<ۭ=ۭ=m=n+ٲTcаL?53cc#٤=iѐ{FAc{3ƈF:DqƔc%,i8{$4g{g{i c@DpqF*+-01@ !2APQ"`Baq??gϝ3>f|X lfQOϩ">X4O'D|>H}inMl[-eS-mILeYek5o53Q}YCFkfkfjfjf[,tJWЄ?^K_|7G+sy2rݚپ}uǕ*5TstNzD}C&sdq) $QkWo뱋-R$+讫tJWЄ?_y_Ko{Q2yYu q-]fRe<;V^Ǫ '}qǞ_I #HH[$_]ur\Ö_bwŞ72N ; ON %NOst=l-7}#Vi'tY{ +Mx"CvGR+8Hb.]uq%rQg>OkzPBP#5?Tc%|^۾y&"^+ON|(QGQᵓ߇t9EEz?U$pe"p-o򜞙`J)(~k"nߔBFKEhQrt. ?ى)ԑ9{D`i-?F[LyN7ݔF_/h[zb?~m5"jt6_ͫ$N6MV|~snO>,I[ I{~ŸRN߂ vG"Bd:#~C{Ye58?[0_F\d![Fnut[~/8Þ,xy)4+|ey.7Yxh~[O8ܛSy)Vh] ^ImbqH/d#lc}z2i+! ޗ=<>z8[+^2t!-,N8mqK쐥Ւ'Ϛ$^QmA)XQ[[Y8HT2jyg떗.vRst'*[I׌"ŸBnb\t$)8S\ɒBe%w ]t']V$-mb<†!$)6b-l$JCOB\*RDj Y{W-Y{($] 2H,/-/(Hj9}u=i؃Wa-X~?d~Z[XS z5J]r>|Ҳڌu1|tj5u~ > {ޓ7~wZOX|(t$<)2FŎ , gdžf^Ԓ\l]Z+}1#4NIY^7Ԍx{jf%ϒVaKʘG4מ_jr5YK{$ BUo+f59P4Idl#$9HQYCif$hQEt H~f7ף.|ROMĭɇ^"NyF&)xyCP^{Nݻ$%UVib~ě"lcDX((HKuG,5z4IY/CQvCor"*1sacl?8a#ǜUQqDy?C %]'"X?^ Ķʽ^OyGQ~4QEQ^%C[,,Yee^KEQEQ]C#^qsZ0J~*6C 7HuW*19a1* \kԳ9GCCEEe!-IHZ5FhFIY-7eXK,2Rb&iFhG|q>4(%^1\^%I_OkC ˒1Q㣏/}M?f'9gJ l˜ WbPR\ ҦBifh+j輬,Qj5F~/%r:?! J)rG[J#JUf\!=&5;I,<=BUۖ<b+f+>[QEQEQEQEVt%R%R[a2-G>>0Q %韛?g]v1`33gρ >|,XDFD#JHҍ(i4M(ҊE"4i4M&IW.- 02@!1AQ"BP`Rap?( ]]]]]]]]]]]]]]]]]]OhSqD?ޅiV+WL ]2etʰ?kn0)B+B+B+B+B+B+B+B '{ӣiTک g=]-*'~]VUjGSqB5Xj´.Q7HO|ߏb3tL]&.Eb1t NCZ\`*t_|N*U6ܜ,9䱷:*  B ʄThڣF"x"y iiSk֧"G4Tه{ӣJKҩ vrh7Q(6L\䆯JuKx44@E8y~?x5i+Z\`*tS٤Lm측5] #%z:mT8 (@hFRKnY՜v$SǏ p ʹ SfONGgE"D'm0\Ƶ-zx08)@jtZtEȴ|_j--V]kKN~.Gg;DM#5f\h9+ ^ 8%'Am'(4S~"8T)moy2 .*;3}]N]]gCO='B BhKo51Q.Mc[TRJ*T-> zl:l6iqӳ?Sh6Ls;ZYh` |Rǫ N/xiwQTJ*THZ-߈VY §NTwO+ë&tӑ<$h\%<#Ko-1rjF2*u%J(8BKjPXIJ֧i֗ ;8U6J+íMӭN< 9PtvmE%dJOn*nqo4Z$hSTzNHX8xn-zxT'qG`xTsA!8SۜO.Q5O3ՏD|#R ֦PCRǫM3_j FLNeu0QB qBa"!Z?)c80넡:?L{UjݩKhxT 6ޕ=0 mldv*CJ[SmێbZ8#.]6,/XCJv7Zp@΍W0UZmM;39! ,<* e, X{A Ko '%fj*uN $ .*R>'!&LhUGt>>Y1Uv-[ad Te84[ 9vJ-zx PDR} 2J:PB0L*L&:ywڥ8Jc=zFމW:dǵx&u!6Ӑ y `x$;V=]m^ Z+B- ى^p"Bp&pMANyRNН.'PG&u(o⸆*[yjePw Nyvg]d ԧ*i-:*M IP .Q )֥]6rۭ@G#TTc % |5w ]v.᫹Gk=ߩTRJ9Tա$ !sOODM#}*[xUjL従+E񖱗q)S\z[p?+WMttںm]6WH.]4YՅA^~Ԍ*S[\mWB"?ظܺ]G.Uz:7>sDR(8ePz/9?'8JIkRJlD!-\h]!=B0z%gLiAFg%?BmaJt֐ 7Jt 2 )I; `+>t\%T^y[5`>wSEU ձ<-LL77"] #ƒl & 44Bj 2;Z[|z*[*KSK|T^yZ}zEgJ4J[<"gڅ~w+z^SmW>@BJZj#uW$zMG+\5ڝ\H}ɱ֙]]]]]]]]]]]]]]]]O_*.Ҫw!w!w!w!w!w!w!w!w!w +gBBBBBBBB?#DŽL?ණ%u]w.]]Wr+rxu.w ]p.;1!0@ "2AQqr3aB#PRb`Dc?ÚdպպպźźźźsXXXXa rl75\VeA‡ݸoR EwFӿ]oWB:uL鏳e{Ҷc3:CwOIs{[oV[oV[TRUJR3L0tM[M#.#u/4G ʆwj(ll[[WjڄGB)=2qTqk:nz8ns;J-N Q[/V8zf,d P;iAJ} ]|5rJJO~y` ||)Gh6A9盔8143a脛7ׅ2jPƂ纮)͜jq_}0fE<-I܎I̞ ˲dF`e.."ˆmlsf!h\!{Յ2!3TbDdQ?VV$}ըnB'qw?SGڝo|zv&!{/yS771d5!7µ)R͙4e a<&SwsPh~؄GB3"f'.x{^p˶-,tx LQeBfVd<)(5$>ц8]syi <2}@k4 M8!M7c! /Ƌr]?mdnY.M޶!lh꾑?-c ۃUr*|8b) Y;u}1pW/y f Q!a P@S~ v(^a?QN)FrV,^28m."G9ԛlS{% zfKժpƿzVٕZj x␦nh}'\.vNӦ}R7%q9+rċrYǃvFY᠄م/uܸdfAVcCj1ǂřS:B#}1d#a듇,\8Ay)vMWo ՙS/{^xʹx)i>e2R0emCtO kgM'yn){̂`Ωua8rp!W^p'˷ι9Up9'=hNLM'dru}B;zq{^xʆpm管+륱?Rf5[f 9<6Z@"8۷zw]i^ #!|D޺FN8}r4 a!^u}20NںEoyo]kq{/ e :~9+n{4 ;_I><Τ[e)%u 4,YR\=Ǹ/yS74Pa "yo]X}]/ut &bbmmXr1cpL)Z4->9pUV"(2>MWmLԗr34 7FnbO;|5mZ*A ^|<?U2fp/up d0qBM<Շ5Z '\>njRMsPbnw5!Wݯ97D;k]dg<Țs$B5c^x9(:j}&*/8Pߐ[Wצ^e_Q=\p<1f Rc6xMTuY/yS77}][uNTzЄ&Yϻ2;dmY?!jH8[%OTRŒ0^xəU gxt?xDPl^{ %m9[Qz/Q*<- L5wTBchuꨨT S$RP)b>ѮG0E8h%Q:`Z-4q@r7E!6.qv#<eb^r.+Иw^(Nf$9Fo:%A:#M.[\MOU$5NVwO Q{^xj|ڔo!INy$sU?-iN=AG3r8w'hP ^?9`_TzCIj3£++mudpLoݼ U!Mq݉됐7^ʼn'"]ƃX5EƥM.տxW%dUjiSvcD1UdP-2F?Q^?9?Uԯ3qfՕ闑@ojŏJ!Е hF*UOD JY;^_uM0Grn#멲 [M%LNA'p484g;"N|Q^n!E/y( GڙЏxưc>4#E_H.<:FWsV.GuoFm3(llo][ aeo~B'\!l)5譴_]xy )-_ǰ({CHZfRx5Vd97GRhvq{^x߂UX xJ7HG+0"n7|`ۨڔ0վ(6ޛWZp3$Kd$2T%5ˢ-p24qb1uaݨީq0 ˗mb#[V>p|/~U`[q9Jc[f'm4LƧ/y YxÓDʜb']^x"SAY`|2į iroA=͠RV[ gP1FMxEsB|1+}+x[^cVEӾEP+ڸq b⢘jg{j b6P-/- jח+sOʛY7]@pZ&J'.llrRxݶ`w4LWILN]q!|EϪ!U{F'& m{o_MA9Ԓky elV1*ci"+Bd!eSlRh =uCEJ+v &W7q9TKe4fĵd57;FJ!@6Ɓ!eգ5gbn6}љ|*PkDj\TIH؄dњxhj4r3NV]-7IG eqqe $2.yy8LrS:)Skd9)G%66ȒmY05Hi2Nr%8ϵ7'fr[oV[ouS/ݕٲUZVUUboʗ!V*UUbXgICG3?0/.] 1WGUtF-k~[J߆ڌO.}I[0=p }W[ )[1^c5 y[QWw¾U[z@?q,!1AQ 0@aqP`?!ĘVOg忳_/G~c?b.g㿳~?i~qeNRdÀ4\b-YaW$+2< WU>r,%9{ wG V}/־F 򌉦9\dV#SDCJF~~~G~ǭl<7Х)j6. o%DxY=^s߯)e+v;}ؑvįz6~h5sD i'{Q7d$Lj s%/ C&FTVơ9wCW$*$2^4`j?!9.G<@ΪEI}/Am|Doso[iD\Hs4iHVp9q*3iwe Ѭš_#WHO4k⢜v6A/K$:BEfF@إL>Qo.=W ]*BUlx5Q;}s 7Ԏ<QR;;$<\LɌB!e҉O;JC"H:M|"Y {*#fp.~ujY>:u€v/WKJ‹Wsj3O"4xEGӛ/aąMO~@m;.znMX,p{ۚ5p, ]Q!iJ"Z*1Z,q5&SOqDjF82n/j٤;bаk 2^QnR \mV@#ђd#њ G0i,{^2r@B)OꛟD9̖,cx{.urCUj}ٱ7W xGP>a(56|F:$(a~'."zB1)"h#_c'#HВY,6 ApB i]ׇk6D8æ]Nes )_alze+%~ TS~,8fAd$5tLc5w9 jO3]f\L\/{Gӄ(3|\=^H"YSsbD呭oǿ Zwn IRWXXa  rV_]ׇkD+}zaCsa򄷜1If}2fwb@h؈㓷yac rmqXR5!4I'4>*PQm8Xwz x=0?#i9GVC*!nbJۃbi m]my)JȸkڸU)%&02cWM5#׆fsV}fDA,.h# ?5S39[,{!hLRZo,ppZ,[C,45*7lƙ4|tX\GAj9}=Wql6uJ2E( "2Pa:Y(TJR"Il(;|\4>0x7PkU} eeIerhEf:k7,o%q(D-D -̡P`m8 @6ȫfF};/9n8s^?-c%0yy˄Wc.E(D@grƬ*F3/9l<^/o9EH[]!cȡ[nN@8> ~;Smp>w.͐lk|Z,`Ja_?^2nWy*HGN?C,QHYfOp͡p! AX(_wupyxJ+Elujt'v kcJ0Z،FA<84MNcnW iQ&E7nHc3Ѡ0M5K:C"|c˔1{G1kx6(|-NnOwsrBhxFLϩ86l-+95dxR &^J&\gfZ7"#! uB-@ A "hJT{+F?ݟzJ͘xB%ʫ\lQDdIE Ve()%D mC&ͪcܪԗ1c 6jLbF.jɦf YSNTmLjY$}kd:As]qIPg -տǹ gS$AٸK?-;bcX9(R۲3C9CD2)Dg;!,bhiBBBB[@aoTP+I莿U*}v}.`r-_DZ=036Q$I'`3'$&Epo@(ƴ{lHDJC1H+h{FϳSzmPloɷf{X(~C4l{~{!/_Pِ\="N$ƁVy `$(TM4/-I6nʜD&V6_e9L3KBZّZMm08U7< w?`ӫsJPD >ÂF11FjQ9xjM([HڪHR]U V&U $-a| .GFů45Vv@1TC-Neݞd2B?Ie$w)yMJ[B Pl XT#6 $n,CЦ a`%J /Ք-4יt hcfgD3e=ķ}4ヽpq9 Y,cSiMYRԘ2Xm60ED]O7,_\b"m9Eɥa)HJoޛOr+aB/H:d,w"vJ5hMR,DI4!NJ$y EC"PSvrsC%!ro]a@~vaz *uSO1~$J0-Ò] C-*,jBUcdd2)pB* ޚZi0R+l"btu1)U1? Y 6%`Vչ":1 6V70HY-ut˒({rMӎw yš6N:k3NABlP/ m|Ir2 *([| x6݄1X+ lhDA̅51BȔ4AXh  B#huu+CnNǾos79J;.0g%]WYN%зIX\$&9BSiYЄ͑F ;K̐L i0U LHc $m+ XNM zW1  1p5 11I [kg{v\V #ew9DX %,S㳾pSWüC+Wɰe,3ɪLW :+2tb@ħkKrJۄ2cZM,|%fAfXV10RAE &ںx]`DnLJwN-S7]9*e0kH|*KbBs 3PdŒճ ɟY:, X--X2hmPAA0#6+vwA`uMMOu]9<;xU ()wPux\l*w8Q/*RG8uITOY[Cz$DAKyKtG܉e3v&1=]B4FtoLQ6R,&Yd z]ˊ%H4MUAim%fH#bfmbB[yK5z\`%* !~]*Mˆ4 -bÄnX<VR 6\k p%LC1OMk {u v[łQ] <1~+XomUm T9AAA\M vcŰ$=@uo^n( eQ%DD#1r*I{`h$ SSp,aN**ƛ}~JV3c%xG$x`>$x&\XAC$xE@Qcď[2U`ԅ0BZ]I?{Q$X{ŰI#0B[n,u3y5:BUcٽm~z|Jf1on;ftA_\{s[6KЏ5dZ߲ 2$,(81F<AAAa\͟!ZUybGE7k90'Qcۏ6;6J<]2h@ЎHЎt#dgE-J j7,LBn_L&1;0Μ~XF(%g&qj@#ԅϛj&"z檙BĤLVBC _JEQ+պPr=EO!jg,cb( xwltxft)[HT5a0P7ꆛ$M<0o,$ pnJIoѯshW*,   hUQRy"h:!o62Gq'&|׼GPy]%[\MG)o6g=Ō2O^˴N䟭>DO4K˨c!I=IEoBO 7"Zbk!@b5V~qp N(BJs,upi_<&ՒW1?By&˸%680)-y&lKG0ᓴ :ۚu}Q磡UEAXe}tz䖰B! WB1J16H`OdN\ްB A4 rzHV 9z1f A:!m0F\j<ɆFxҖ*,<=ea {b'd]BzSaJ?]e|bZpb^Ao* w9爃.XWIy4B[Ԓd4n%asYV.W}-4!K_ݾq0AؒH!"OX,$%gB!c_QBiXG3AM1dJ!Jдl)eYgw@ q 0؊ MQnFB)ĭdv"R;a&Fx o$fKҚa\X{g0e#=+$jCBytZ"sCrЄѿE%uXhvU!fP+A`-˝c_kvI^9I2Ew(E #{I XAB?g~G?!@$v3HO.j5n[?mG鿣o~?Y %MJuid%0yɤJe27!]0(KR }4Ө M ~C[5k7P!0kBb0Hv%IFMXW_]@`ݙJ߷ѩJunHĜ( a'8 h[Ao\X9<<C"0ы}pHjn7IWBҒwtIϠ҃b ߿%bQP(bja ˓J$+e42=7&AC3JW? e @#ۀ؈7J+l-s_3>tUɡ TDiJ΍K@Q0X( @A@*5ZkjVܙLȕ,Gij] q6ٍgx^QIE 40T)dQԍ3 3zC>k:+w]<&c]y$%QL0X( @\4%) %[\ۖ0EM|u=Nye;`&oQEC V,(ο 붦 ږ`vO\G&@$QzD5 #6=3ؗBrP %QE0X( @ jޯ~sVܕ߬i;zFp R/)DH>{nR<||wq}Vp QE! VWoc5=!OD{d5B{ ] R`tY;rz vь>A&,vE! w,b fNԡJv?D?!(#q Vl^k2R&\L\RK1ƀ-QA2(d&Brz dVWփe6#OVөMd 쨕|_Vѡ'̀%CES!)az2Gd@FX3n ?(sӭ0io~·! ER QE2(@?>yQWW' ]0>-S:yH_n a t@w!ZPS S!)Kx*s6-CJ.Zp0.Qv&iv_1 ;8Ih:)Wc}ܒ$QE(@V:r$0ezG#W4g3D3]Z !䲽svޱ*W ?@95AZ!-i))=96 M"$6W]5JY?ҵޢZp .$$9՗N&p<QD(@EҞz ll_ў"T @ԅ'*<aŸͿ]_`d䇲S<ႊ-$ ]Ù@r U 1aS _6!rjR &PȈ~S(A$@ +E2LޡP d]@30xJq6ETRt20  D}!R o#&]"6Lnot^hHn6۲ %9b@@.e ?@'!1 0@AaQPq`?mmmKKKOqߍ_Upjݻ^bK!O#x??&߇333331?""""""+G!AfDCV͔2ߝ, z$~:ʾF4}#32I$I$AA#A=?ڹ11"?:{} Ҟ][:^ B8ísh|Ue,5#ѶXr|DDDD|xHbm5DDDDDEmx̋{x:,6Zy6gݮПcgԭ2<!d]iOy +_D3Q0x|6a垭fffff""""">0û^3:1l"""#msm~42#߻=uxџ_5a5$B&ecwK:$!mboԏrDDDDGp32_?r]tA<>X\ 'ma{/_z==^g{=_Ǡ,_fO<.3gEa% b#nC8r9/sK\ KB-Ye00{k33333]DZ[A}ѿz }6 "<n[lam/as܏Y^g9 \9U Yf1 Ia G{ffff.{'^6pۨ= G ;D[mmmt?}7gqc<'Fke~S)|*A@ǵ{kj33t:"e|ϤC̡h?_өiNq/?J}oml7oH |,ZZ[o-Z]w8H|/9d4ie|dx 'Y,'({f8 333333301}|1gQڻ!r:DfL2G=O7;>6m|m7N/z.o|&2.,/CIAmo՛w &IػH[wϊ/!q} Ӹ!iد"I33333 -FxضiŔw=y<31c9_h$49͆?ώ Ҳ?hixm@C՚L6m'mmoPa>OϿ=<|\tav^&AЀ =˛O TP}ȟ. 'eDDDDD|7fff]xK:3ew+N4cf!)1KD1a+#ſpmmm mm6||mSKKmmm=g=?ŏBx\0n$OtN@ahgx9Ͽ:Gst!3>Iwppex=ǀßOFKmˁͼz7${Lmmm5mm 0wV,#:^|'][B' 9`\_;d $6C0.u&gvxg챐k=33333< ٰF3rI=o< 8Gmm`aCAzP.&ل|2!%)5}OZGxxܣh|lT. Ae'iɈ BGD"@ ĒI$Ѥ$(ڴ Cȼ,"-pȒ!AbV pD$wEnvh,/BI#FnL2v;.ƢwT{$}Q9 I j8 Jutttt[I2_; >@%-u˷SPLv܈Pˤ5f=(D"[=ǁ%3AP444AD$"Q5hI$I$IIɟt:$|^F.f()# pތ x5`jLIAg7"5:A0{}*1 wĜ| cA F1zQ &~=vb)3ayMD3%O*OcOFI#['zcJ"7@!-+lޗ. sqڤ:.ݡ?1n$ !QAA_tzD!dƈD@ā\$ Dk Y Y .S9u;n0$wmeqrY|O !ZD:1Ԫ h|1#sGQhTBLkaH@'aeĈ1~A:4Їr04XIAhԵ:V* l[&Ҹ^ x8yhB1F!XT,s[ .8pHARJ66=(Nhhv #EEEEE\TŀcR.)%la&QQT@bJ\Lm+.BӄMF;$F`!#c!\k͑W.n5z6!bes\bpR\ (%$`ԊAUhv"{xGF:=x?͈DkBc 7I5Tdr#LlXwJ.LH'c'J[;+'{M}.T!|̙X\r7$Mm(AAAI" JV:=x7ѤpJIFH96{XBtm1~X0s^Є$ww*h2hx3tdB$藰6yJRXE/%a$HDA"G\Q!cEEEEE\]n,1ѤVSa~EŵA1&G2!p]^le[ CvTXYx=CUTA؋Lr.4$$%KYc5gXRZżcEEEEE\K:2B ؄*:(czZ\IjFvL= g>#Y BK} BjDFSuIx/U FsX߻zZ vdn'w'A!h 7 e/:1tTTTTUbQatB[J t B_h톜'u7cFB2dɓ&Jظ^Bk\1p2q3z-qΦ^KI}sg) !bJbCk~aoQ zV"HM jOiK^p1DzKC(J B ?vVbr^ȁRcM^'Σ7 WMUn@NVI(B2֥dRK$V>a2gl l-#2J$C%1 N:=.xIK#1ciCu$C]nh6HCbj"bq1i,K1V=e ;TX|hՂd["n4 lL!U :GeW4E[fVi!D1tR RGtpma#dP#{2"P<@̶ZcwK^1cn,F!Q:iXehJkvQH7Cib0e+61^ޜRE1!Ԍm%eA$!"bLC!d2  {̘kA cLNUP0a1L1LdLwBP2I$OCٕttz]rcƥq->DYƔ N0WΔv0ZIB05JDnE[P(y= ,!:<,G /Nh CĈ))!x(bD,R:HAd5k*****#/D cy DD߽: F@gEc"Ɉ!2B}GBJQft 0nED1+ pf~/ *t7;1Mq5!ZB::=.x1ѹd[V&޼MQ1$!Asa;Gkw_C%{'Eku4[KY xX{ iZzǗH2&_ğ3еWK2D1tnEaB;# "N.'j DA1AFE RK>ҒQta=S”`=s \z9V +# =MiZu\8YdCTd,p"6 61-5tz]+Ơc1!B:PEE`; [}RXb,Ņj,B8U{0b{NkVt Z9YG&M tɗ:Gީa2; Ѕt61LWF:QQQQW.Sd@!cGD!B&璄rC =Z F|{&6_HMAeeDlWT@Q73zsv .MkZX%V&O?K1?E),qJA?%%'oyQHKLXdՂx|t05"I$cdvWF:QQQQW.1tit/D!B"Iya%at:pѠc$ؖ6I =P!Ɯ pDF틡K-M}07WbDk^ |K#T-B2%-/y21DttomAj4=٣cc"&nbꨨj9c m ȾIѝs0 R k  eF8K!r ȎesW҄ÉD(`!-\LI$I^Z %;,d ib;'SeDI#L'C DdI5I$llwWUEEEEDeވBh%L{g܀I"" 2a @ \&&љT$IDU;a`s-Bd;03CΌ*@󉑕si-c{7I8=Mc#CXZ\%%/XK[*GVR2`I$I$I$D؇GÁ@+!S.)CbB5Aљ l hCBlq,+> =QH!3&1XbXTk1s w\<a YZIe7;R R LzFbcT ŬD)+=p%Bdh$Y$lB$!.tOd{`H;Dk~? F̱&1+v G~F! dq,!1AQaq 0@P`?c9g9}ess%XB_Y~G Ba,BDgKfv)h0G' !&#B1POʥw |c O$z3F;g,Ny,j+ ~4uGz8Jca\ݿu'͒|ؿp{ 'e)4$`eww*vOԉVnh^g+P?Wpoxl  eVW|>p< cz'D-aEy1ķG/(ԽkDŽ2y>>́+FVWBYwrWy7ǫz;c,𲓭%Z-^BƁ#9@#ݟ!"/vG`_X! ` JLKO:\lF> Gt"z9h m!W,0҃ [R-cY{ <|=oDO9*jCOOU*Bmb,\ @I-;< ء8?ݞÁB86\Ϝ~.4FN[Ÿ1a%t5UWU+^'R jytuI%A63b%*T>{ RoO,KZaPTX /{Ŀ@khz^(Z~U_It 8^j4{ =%J)"Wפ@C>^2X?JV|n߮u#2\F%~-jȫV; fW@vMU"p2mx1^ϙ+i*/$63g2aEqGQGqpluZ22RܥKr|7yO! aa 6VhU lc(~GUJw ̆Gg]ݙwaO]!BBQWʕ*|7'yr˗.f9He;;Po$i4${#bέуόLw@ee.%RΧ ^X%*yTлv.`-/7a[,rp!"'ĬƪP}B(-H# E6 }Pw}h|'9`]SM'x.WP_zgs7iNA?1@1-yEL Em=Vh&A|kJ!!D=}m*j~)&UϻHA"D$H\0DUK\l~N,l~")W,}]%|]`7Yjhp9ל!OQ!!))SYRTOrŎ)فlmm*T$Ow㽴hv3pWzlE'`L'G wI\*TS9>2˗.\'.%JW{”l|ffT6ɨ黌MF{WျzbZ*ZX4/Xyl#NjAzrKy (@ .9,s( tjCRFY^pc*„>;N\RnmǗ[> ;>u㇆l&G< peGůUJn:=z:3:D:'d/΄p2A'%=>7䚏Gⳙo(-F"AH HbosRbF$H"rz:'&cvnGUJ~n$Ԃsy8p!OQB8T_*T>r˗.\$IQ%DwY[I/FǁG4 X-Z98"s=1gx{?WY0x3T-\@VP4rGCTtp s`Qjs/#l ְR]VqRH8 ,PLh)O& z"7pK 6:?o96}`n𼟊;zz\WU{͓do^cwenǹM׿m=].CP*\(|Xҍgc s[o=S%^G8`Ѩ" 4ts5<ؑ"DuKn:[~]CB!Bxʇn ETdNiseJ*|//~f\|.\r$IRDzEs pK`l8;tHFPJ)w_Q-sim6`";LZJ %[J+1(wo`#8[N κ+ b^ZU1h+.BҷP!uuՁYH 5Uos*\*'*-S֫AΨY݉0Cs?]%|>D+`7Xٕ VqLtӘ~R4t"pc=Z05S{iiYrE>xlx8wD%!M6_]!yST-@?D^7R^Հl(|%>l&!󜿉Mƞ6M&LW zl!V){6NnbYXAC !sTH"295f63&bB@lDWy6Bԡ%Qtu6Yr}8e  :>:yĉ)SAӔʄsZ$H$5ߢH(3Xek`7Yvl@ J^q"Dphe$H# H# 3\_Q[Ɗ!B!{BJ+pR|'|8hYs$??.\repJB$d ?2ZrTQU9F^[d%!tQ*T_2%T.Tr')?r%+Tg>RyfPYDefԗVЁx,P(%@P[ԗ'P;~ T} g6q7pn_Kj^ g@ 6MdeT7Mt3'_΢"AaG?uKO ݷZ C B XV\\Ahnnܱ(irRTYlF2;Y>Ztc&ɲl%k Mtm{x1M_ƴ˙,9Q>\׬% TR3VZQ[X5})}NG`NSa2͈0S4UX v!,J( j)y,}g6xJԢ1,b42`]N}c$a"F$H$`-ZI PlTPV ;l1TIoU¥JƥJS>~Ĺr˗.\J$<`[Sux*TJaP5@%e)gYRIQkZ.AЅYswZs,fӽs}2;ʁ"R4t2I(G4^uD.,  ҾIhz̳-b<7W '2*:DFιܱB4@$*Fr{~i}g7pn>[zw?n(6ǰ9χ}WSsB6cjɲj y[t uo_P"BqZ`S eaL%D: H PX'>E}yÒ8pbb[3YTrxoxApA 1AM9ՠ@UJ W,y3%mRu"] H%EV եJhh]tv&mGf%y{S "RZTRTRT5ߟ%˗.\rTIQ%pIPyw, j}V# SS0y#d/Eu+\D]{% ^5t!]F:/^GuF[ʕ>gr`kŖAJkIYq3lRCnêviH+9qiW5}$1Nc8Rlݙ[|dnFȚp]%JI^CXeJ rl|[g;&ϲnct~IpYXzx$B~G҃M k6MdܰntgMfCLo(ߨLxp\1ce~SR aJW~U7aǑ4@LjV +6ŰANjϒt1qstsC){2yfYJҠ@m t K:P\[Ka߼paaxSy2 QHD0# @-W@}݃A"pIR D 2C,*?nЅ HJk6 GmU>` O' <|>@0FEX$C>r\rʕTHTXb[ޥJ r1EPm޳2:y3Pyʕ*|ĩRc.`y4< G5&jD.55&mH~'Y- RymB^-JĶ\ـy1w@^ey|l 6~2[_r:2ǒi{Q ) fD p[AA:ʼ|<ɳgϤ7MOnsaHcuSsb*7ֿtO]uD#^x;4d6MgWXxydk4T7yB7b@.;%2ʼijŽzʒV.ZS =T:j=BS3=V eBOYs',#nZ.PMi}^kFRgTF-aaa8i60{H$a"DheSǧ! ¢J*THhҽ%zyRpRJ֊Ձ.`9?o} r\r"J*'[~ynyTH3gbS5 WK¥Awe8"YuVSw=`j;vAT }eM wmDi^ &KqiD@K_*]rҀ: ;{"ZJ X*6Vbboe5C-Ϟo!_U_dd R7~PkaO͜&ɲl';+.݇2by4_yA++La!%Sh9NA S uWBKnǜRơbgPG^Y"jf*D,E¬(Vv9ĤѨ0@ῑ;Kg w7}HG2_6M'p42 O kV#hMfE>{_[p_=V9a`.˯8m:1靐t8V%cкȚY)ЈMXFYp* 샏E$4vhs 0 0 1M~©uüd@X`_Z+duo[R0$HH뤠L'C쐨pH"A(ѪWmUՉ*$|RJ*T yT VQPyЗ/˗._ pQ%A߃k<\(lV<+2QEi*Wt*W%+ׅpJVv ks5hſ T UhJ 6݀4nd O)rשQHw5׈̇>/zǬ \ =% E2P*nm[kzl%ܷ@OY -;81< '}zvj#q8ۛ]E>\UAQ;FmviSn_WzB6Mdòl&Ȉn7Lokg 0'[~;̮P'x.ZQ09@)Pm.\8^jM|֖qhlu93;:=FjFaaY/R˔R 0Z#rҩXZsHQRWx# ^|^Ј( W?he#QZ zB).tyRp8FV(۬`[1KQD9}W *T@ef#iBj9N:4|Miykzt[)xiu>iS`g|SN?@#k@xE;kT PM]`JhcB)[wFy-?[nʑ<Ize!9 -陋W|^pf1; #>/6rG%W`w2y#îcqWg>Zq:g}P}!;>7}d|/’`v`xMgɲlޑMtn镭{|Ǔ~g`,ӷ};isxyάxyn_ 7oYՖ: 5L G_w=X+Du![˗r< 0 0 16# GDuty|,2w1Xkx`k`F$k"D`iWz5ފje*TRU9=QŴ'Rފ߬>G_"\|.\35rD%/AE|X5J%JJc}eJhߛJToPIcUaZ1ѨD6TwNO ,AtJfW h9cYM:|NbR20 U4+RAW:*s#(X0s-!$9;L.t K)2&ra& ni r1e.b"@ SfAy^o-;>7}d|g/Q iV@pއYQ"J@dyG-eD%DL*2Po0<H\,kdq8NωY3:>b80:>ω3c XX.<xK7<%@hߚ$Rpvi26+M jM,z+S׽G*Tfĩs}\6:h|i0F2&Ju9 3%vX?BB!Y)ANRY/ Mn- e _,2\*ʾ<]L1FDX0%+8 0} "!ϗ^o ;>R>s`Qa  A1[ D&wUa=8Y)ٌvkH  ^Fm)d.sU- $RԷJ|2%!cEޯU*w_C^LCP=qIԔ@eb3b jN9nWœiuNццaa_27+}}tW|J@-b59˖'+J5*TC cX;]AU0tV6+Ф0WQ+w\ƢpHNyٿִn;ڋtagĉ*'+4dO\6V%J¦eTC!LזL܂4뮞 )Q5i0@ >4ut®e2vu%:>5!I*T%ZkU mH/_o8a Cл_%9]halW/OyZiHAVLy`rţ@SH*x(ܭo_X[> l]˴! >_ j' L읒Lzeؗ@UWbʫ^ Lfd}< zK{U.Gn?G߰'i٫wjTV/g"%n_iHs=*[e_X~.(C 0 0 ]pD,uu~YR *$H8TRWTA0 ]OǣgVkרu%˗.\Lĉ¦01hzw"(Of{ke@yMnm FLͿ3P՟)\*T +J2TS/k=ekrz`)o֛i?abs|4#*v[`5p+ {J+ė) =$] .9ADXo GuErpsUɛ3}FeGw= R؎z7.w_ꗺh~( vҽ;?+w_rΎ`ҡLu!aIhкM[%Q:a1[o1ˁµfK|Ҡ/Qvz±Aꗿ~\ u^<2][k{B9O$-b5:$QAzf3;Ѳ!l "J*THƪ+%PL`cһ5ł;C~". vr>.\|*' M .j>zl#< C<{Rx* 7)[w*0K/׎%۵NrT$QS%KKjףZ`Y -崭DPѬ* n- e _,0euǶwTTW@ϔvҕ ?p%pJ ۩;9_=ُyQ׹K S[\T., -be)Ёb6z FPb7,w0gC yֽ F& TF 0^|c+2J¥D>|Z2sՇT:|Ӿ=qY՝Hu؇t1;;|<; gieP>/sؙ<'%,^Pyd+}#U(CهT:;t\zeBSMTRF>O)eZrbh]SqgY'?S\=?OS IG&:gѿ}{Z,d~zYU 1fŋ"T(5Rٱ>e+*i3ߏQM,3]7͚)Έh@@"զU˥VZ)=my'1`gGbz/sie7Q]⺏w#Ċn^A==,=#櫚~.veH^mM@/J3ر/;)#p;Dn=Pr@zX]:<.?pysiogame-1.30.811/images/flashcard_numbers.jpg0000644000175000017500000123372712201770070020414 0ustar tigertigerJFIFYYC   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEC !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEp  !R&:\Pᕢo w"rXs:/=3zw9[cJ B6zWDҶ#w9[gWᯟy{-h|5,OŹ[OYe.hHXUqtE=/.W;1ϧOƳUx Ͼf=w0+/L w-i{x3 \~5&3?Јkhu)jn^u9럧8{B4)@ 9Dx%[8zt@|$fbחjQzVyw_;H"j#XЍ~?np+Vßz?Wi*-[.n6MY >N|k}EsTT(C$+z>~N{eYq^]@zYu7HN}:\ߖ:.9;/O>*hXBAIychNNP27׿=Z"˅F枇@ғj +wN O8vx15˶{.Cj?7҅R苮R֓+pwbZN{<1g??R0_OxtkOI)sޯ0g1/pud[):e7NiȍΩ_]|?/-9٤\Nabk1)QA|z=oO>sq\2\,:i[p"kk[fՍmc뵌IgF=Jϛ}h:R^;Cykz9~N+i}ǥֶSp6HJn?[ ~(Xm_'\%o3̀Xmx;>CVW6{SDuQ}pr9Rk{x96ߎAy{9}?W >{WSW@v[y7:*@:vtHpM&[.~}DeoWX Bo^"vqv%bUivGOV=3gßaӊk{kxr:q՗mhKx\zkuym]ĀXy_;۟KW=#霌I88>OkU -"gwolei}nuzìyޙ8HQDN)\~@ -9o8XxGNSa} 8\k;ߤQ6H:K7}^oIT8ż_7Hs[<޲$&HHJzΟ"Wr]˿L5ym'e5/Uf[yxf@k //KYΑ+ O_JFՍ^YXz!EP菦r3ӕ+@ J[: oK_8xNk5K9㖨o=儀Lt喙v1-twWmWo4~|myV7X J+0׍)SyFtqf&]byŹE`,jKSu[Ŧk~ql:ڒ屓 ӯϧ3'kag nq1޻s=k|xf+>cё[vijutӎם/?_M3֕Ofd)˳&2˭% ޾و" }M:P(|EzF'h:gQ5Lk /;&c{':\~;>@!UW36=0+Kϭ_wSM7LyŠVTbc0ΜtB8rkg2Nicױ )3z]ɬkY7S'W;>VTuK>@eoaL`hG^MD]v{09ZiNh->ǧ^|"{ϻh\]~n6Ӧu^1 ^ێ:'+[u&:MS |u-ׅ7Yz<;0arWwܫ靱*^_}QOKwq.Ѱ |5kz_5 h8⻣Aqj^>_}vH9t+p\\ųH5 lLv;q4jH=fIGCzFo[(|#FŜ{myE0%ez^^Z.}ڼt)Ȁ9z\߅NjOSxswwMKTKpSM!d#oW5Lum~VvsSf+E<#s *x;9s$_˼ 68x:ejC.ך4Һo]9surV}wqb9wP8:boAsz> } 0f@6:sj<~=FS} dA Jϝꉍ럡xRaš,52Lru晿"v;z!Qv2yTi0wGvxOJm|i4⫧FZg6}X!GwGG;W< =/EkM֙t0+[Z"k]˽\mhu׆T藛w^g]׫穬z9xc~ɸ[zw@FbiΚn>69Rʳ][;mKN+[Dsh:#E/BMx_)uc[g׵F9@ ,u7Hjl1Yj Mpf-"8"ΕvߚJ&4Auӷ8n84 a1/jyk-3+8z+2맛igTW_^n mzI[,ZۥO5&I m/=Ǯy/=N~q׬҃9Bm[Qy9!9܀̥=N+S'Jr}+yy]yp]H'bP̒ FSZ,@ĺEeʲtʡ8DŅ=4byxfixsyJꭖҤwfCJMo.wo?lyw[][=][vD@r׎PΊv5Z]^Wl>OB> y/Ol\]#u>Szӭ^JǏ[I+k1'TijƳ\<̵vWse # E%ɺz4^k~ S|-֜XBxEi@4c t+tˌM8Dsۍg8{Z|Oƪֹt6kR'6sR38N}3=@5 @$#gtONn"v.+lT}]/OYN/K3fTWha rJ9yTI6[e[Bן5?zkֺ VGN1gt502AS sFnq2>v qiu߅o8ô3 V;q[҂o>^L Wx\PqlD<K'DNOS"9Q kzz.4OMp2 ȇ&o_5'/6Jk,O8sX]5jjK~[6N&.{5|v28'ci-oU^uE*i5M@?ӊ] O;4&z|<@!W骶ϼ})՟L$mEe#;vqfyyy5j_0۵+\ޯet^I](wV`kY޶zHXuF7nqzNȗzZz9a='y0Sm6wŮ,/5ࣧUE:$e!=Zr׬u}:E B[oM-KǯO8W7Xst)9kK{;|-{xzZާJ[Kn.zp&*_;ĩ=;;KZ[;^twV6ݼt󜞬<2[5|OԥǮΓR-|轕썎!WO#@F !0z7V>gpjětpg^^vx15˶{j?;хrֿll9"딬çNNih{7 kⅆRuV<vo'&nWf<U]c$jDDsuݤ_XᾘlXva k/{g񮒴V'O@}t8z &+m?$)mI}8O:!x>wV֮v^’z1ї~^[X\YXޮkC[tw k>Wvh霌}{ڜsz['F:IgiP8V0T$z YJ(zi;q52Dq &iM=.=;'Y-"ȵ$[9t{#RHW[-W #żo7ove]"UjkM=鋆milͱva^[v6o$u;BLg+Ӿvt&WK!פM/gێZw?EyiSrts홭W=NY1m:Qz1|0h2ó iԛ$Lǫjߴ{TY/N~M 2|yD޾NNLͫnZYgc6ֺqDϩw~ۧU|r$jzz%F뗛y:v_0ڱ3ZzR.:pk.\f#hTra8@^^g]*X#чy&u[z|@XUWrbcG7[VDҖs@AZNȸr \^` 1n5EA~Q}~ȫb$Gd8E7ƻJߚ,گo>ӗ-ǣ͑~s3 0֛4(ίY}"~ |?7]ߑ]:Rw=t>OW"{mo[kH-7;:ھ\Mz<;0>.a;2btZ:~K R*λrvEoo^w?/W+RNo{14aMΉ4[˲.Aַ'ӴS s[ܗ8J'xmr喕Z~ܞ\ v땵q:nz@"c}و|[~Jҹ<}V|ԞO +pE^{睸c}^W'u -sw"6A2kS<^F ^SWasny3J^/H&=}==aWtI2S&*GBOP ||b&F&x/t6m~hT]%[/g>{->4??$MZoF>yT^i| B.L^-=oE׽ FnG]YGo~ f@(8{n2-,W p_7M}g{O`۔P]ݑ#鍷zIЯD3ba`OԇA!5Mu8)cgTI7/ę9D.9ڟ ֫nx5/k}~ Γ֐|>MރPFL14gM7F^X\vRyތ/Fs<n0%s̾~w=;ПMߚ6<',zt_tr:vz4G0v62tHsF=vMseFstsrKz=xrJZN=+ANo\~%|M/M}ErIDeoI =ɮy-=L:tU#j+{:V:V)}~uz¬y}e?\Nn}8}f&w})'t<z^zo ާL/YvǮHiNiʪܢ;drmCZWC+z|~_=:6OG_[ i|6rN ftSU@ZF-ߊ<`5]pyCu:t?YyWкy;x}\b}5:twVoZJXJWYM3Ϡ#E 6c2̚ s2[Dão@Hv ٙ $Pݰ,0러x|߶zQz<|l@ ^-6Tc:[ KYO?'Mog-g'`3%f@ @dHRs_w6!᧚WMmNYd^w|]pJ8o5gV;,6+ 2\& I@)azlC4'$H!ћ¯4UYI !CY׏ZZXZ'9y^uNζҳ̀s89z|.@5#7v_՗=h` d 4n9iB'\ے&z^ci]x1[skEzk\69Vtux@4nTF6eM'.i<7;ڕ]~.!Dæ)1DѴņ`un=oq dJnf@ԩHjnKI2 C20W#D[&cdw;1L;0AƮMifʜLZ鈶[EuM5,YӚ_0Ā'HXLkkA <<&wGZ[[GhY~wHz_CI˪qCMW4<'oxy AԶ&<~5b %cvF<α@=sOi7n8!%@ kNuy[rL3$pyiz;=-o'!U­{{zUc6-FQfkiku|lt4px®E[2zM{M#ΓmizzmbE,fcӬujX2 Tn|++Y,:V;zY Umb@_Yڇ,oKǹ:]w)z3Iɴm:}ڶҾ1$BҾc}g"=Xqp:9=GԙӦvf'=nZJ*v&4^>tCOxʗѤcb`!Q](͘5"Sg{sS!OD :ѱI-lID׫T `0 @J*MeE:[aI/4N9î 0]_+M9'[GMӲ:*ҲiN`@Ӟ5/מDp?]:o^tT$oh{wc+m+ӔO`zǧӶZFtG:/` !CϤ})7=L/Ւcmk1Wx #F-N?G7`#˷ {L?׋bq:Au.}H$ic~k9w&&% K5b\aGZN6hGj;Rqfqrt&1u^:讲)(6ǤǝDz {0G$F XK)&dN=f(r^0a31>H˴坣c,4 3єkܛf#-!;GHgOntgi=)r1۳>v0"hєkܛf#-HA6V\"fԻg:m힧њFvIͨҲa:ԶvQ}bTi j^[>x^$Z-:;i"ޣn #wӒu}{L7ޮp-KZm69Js(jGS!y<&v*͚յZMeh%oCMliz;i퍅1(d4Z>6F֬eelzH%ϦOex'tm1&+ekܖd^}ae |fzxn`$`Ϭ>~ߞdL0H454e+W֋XeEmm&ep% A 縚5Ez($Z0}b-U-bk~[M9'ɦ@!_/]NDLa\KdvGI[*%x:9Ѥ0`֭Vs!Cl25fX)s2d,%UPwY["\efQy \K%s JI,C;0jW"w9j7%3m3Hf̣YY{k95~oT;g>g`Y31,<N[לzBZ>< O]Pd&@k.}pcXOf=& 2VաFuwтuKn`.yRٽ/5^o`99d՚K(Yb|IWd(1yϠh6C N k7 kk5AΨ=2 inr|u˶[^.VY>Z?nu2qyu玊rm3cf?6IcrVכ7g{|ehYח~f@=}9khD' *@i,Ksz,eW[YVC %Skz|#6HfY*5q:k 4R2x7e>Ǥ&-CXl:M@5tH&i@qaYHC<8I2-j"TjnK%ˠd2kW>K]HnM8pfW͛\.Mv 6˷wW<66՟nk CwoͶ1Lzy;>ϓ~ܚ֔}ptCޕ=xI'Xuz=~R}k-<ΞEoNU=xDN!/ºEn9G'ۜ(6}u]n-9)+ekКdm:*i_M\EX7`/lL:z\i=S6šM=&: jF8YUvs8z}@UU3vl@{K<] RүuH`35-ivof5^=pmVfktv85ltlKVelFfGIkSIV-t\:Ų5枼cÏIi!הG>x[SEB <:ų !<够WZ9$ 1O_M6b0bX __ -9%=aQe=:F K02b8SgaA,#0`VN U\P3 u$כ97Mr};Fd j17 %uzQc~[y;A˨"j}gUmJǤV:Ƕt6!WYýGNptWv=wݫ"=b.16p;|G@Kw{d^-s,2mvs}h[qӿv]ss Y[v:rҶezO83k~/9|zM[/.& 'xED;D1-cl'vڝQea1a}:9WM?0"WhH=v2ɃL J/cHI+&}Xkh ꮫ\'*6.4)jy9U 8%Ĕqjz퓥!s` Y(E;0hWdrwRL8b@B/'ys߿~[Yټo8xo04ęs[$s E?wI~mf!s7WNfq5|LRBr.4b1 );˨ 9*^T㯆WXuƘvu:p#ZZ}L"lmN0E%5C!S%c+I=c`$r]PHbox$pJn}k }"l8mk"Gys@ʚ(m Oo^wwpքNB@s4_ZI) o5/kYα "‹&u[7 KK-šz_?n<:mXz׺Xst@֨;FLD]XV;rݖB@EæՍnS7b|ڽmo-i6z2 dJ c&*q1$fP- ^@Md$FH[3 ra~9w U= x2;2ן?>:߲ys#luֶ+8\ќw[ϷFy xVKԛ|(I9}9K}Wg&" _s/9|RQ2l`̧˹SG3W`*ɁwX٥jg@GldГ+9z6R*6X;M!֫E5T{ T7Y!\r{(5{/·[&Lvwb&$k*r`!EFftm1N#iIk7cӼ$Js0obN:s%fc23`C\ݙVzbINy\,uv~l!a+YiK݄MGR'4|Я+{~-^&5oPy3$KeS4⹿-L]N=}e:qHNK8[9y9U-$69Bh-6zmB"<8H匬aXiB7[:k(KNV{N^.TX jwFk2ߒM*Z.5JEUff˽,o*فζǪ[js1t}HX2!Xz鍵Fm},ckzK h%k^4Lؖ![ydǤ~=ـï]/{@(7K] +bM-<sbIk;yXZY1YŽ&Q|ޞ:Wf-1J[XѿJh'yzdj8O $31#N+K\ؖYM#N+ @8䲾 arp$k1 ZmW 0]uv:UskbYYbW)]lMFtl0 @ -9e,Bl9``0^鍖m!WU.}0 K0aӒu5ZL-'T̀#~}utβ1GV]ukYᖑ8Ӟ} sf{<^vD<)uҼ}W%AՕVz ʯjKǴ}2`Gj)8::Rڞw!K ݩ纱& rqk_TQk"Bc &:%wyGgb1Feg)r^iǼijiVX[Ѽ%SKYSfz xj,]L9Y=3@`kڬw4 `"}2f;&]1Ɨ LMvLtʶ=fyuPucKeKek|d{*vk6㶐@>+pH1Uy?M s>ҽ|vH ĥVy~'c{4!i_1ӔO +3K'-"gkj6-rmk11x i/׎%sۅzM20WSzlƑe>f`2UM:aƑ>NOC~]6G#csZѴ-nB%Hjy NF䃑![UUD5]]4;;KduOVVǼ׹(:[]yՎ#uR&f@#E]uבXm17ζVVMؘdbr6# 3YH%y^ m <ۛA7WVuw:X؉:ڞC1rJt4z*:rk)vXZgl҇jLe}s5qKL&:ov  sd0@Ns!r#s$s&@p8 tH:  L%sWT4s i*A0B;@@87|DmkE\7M`VVcQ^,f9]vGԂzU*ie-󕞔0"uMN@UgϦ~/dU0i:i}p 2ZLl5᎑6:M|~-yr_}߷. !Eת}O`A ):/z8dZ!2f~FwCy7҃[:V5Dhti+V篎맛XZ_z=O_;%-H1 6vɽ@Csa;y>- 4\}[ޗ\ jI][gmq6:E5ɡz9skʼ]ߴ,L+ReMoz֯d`> {jkcN}Mwgխ4ۆ^ 'E8=rklH]h0^Vn#Mk|&i:|7xa ]ܽud?7.ZʹZvwi BD>=7֥O4άv B76x:ye;]Niݜ48z;Yks ѹ:޹LMqcթz'jHmwubr5"55|SJϘ}>uJ+dgxQ6+{xts@/>|Z}/\-=kxiM}amkxLGHnU=m#^HUb3\^Oc} ү. O?o Cdz=G_1N{$%q̽GctL=MEEO7~M_EWOM9[9i⹽_%F{V:jb-}@ tyWkfr#<'Na[0ѭ˳y+gtϴS"s>@yvm7Dz3Zn>]ZVt_MicrJ>\=[I5ƒ+37–|Mw]=kY=Yz<<ݎ]濯gDr^T==s1z9+;1?zqsj]q|z,+`'| wgm-Na#i;q[QٌVG=--yA,yT~}+Hvd*kODC8=;s}wkWpzcçr9rto=LV:9}gYV@=Wye-1އ>Qu#S_OsvAo-+%56ZGOYɍVe繽$ ӴۧϑlF#Hv];8Y.ԝ,jM+[ZcBוζz+mӒL]F?»-LM{U{1_AUmoͼy=-R`mQny&CwkoW>iף?E(rz> 뷛}u<<:[uq3zZy[KO̙0ҧ댿n;8wYuݺgx=Wwx;Ťw/F޿=|wPJ>}ђB>Wផ~ot=2v=8vCZ}pF^&>.[ǟh{aqtYz<ZRiz9;!aՋVﳃe;8&R<\96pHjN=u7\68\>mUpVj;g/ȪukMrIx=)mn^󧓨Xbcd!Rrryn8hbb^k~ f:Fc ADӪr}6˶$mLZsV74Ӓl]6]byew&}Ӛdx]-K;rmr[Z6ZFٙ7"[k|YѺ(2腽m9m2ܰw^[2߾}uh׆6k ^xƼ`W+muxkg|_eKq|vsZCXDׇ&uz-sQ;ZLoE˵yq bw 7ӭ~1Ng^X3 ףzM4O5{zCqΓ4tE|JǿoT^l*^vB*.ݽ?7޸GUW68BLXxoRpvJѥmۣO~믗 Aj<;ZtN^0 Ua=:V&t|^gkSId$_+920F5!ƑN1nYT&<_Ӭ(qx(V|`QnQ2fxJ-mlX`;Uq餞=cww8DzkN'מxy:z8=:I>/Xz6WzlzZ k-+cKs׍6vf\_'D>~Xƺ;bKˤş@Γs_Ϥ|-}@\r oQ˧$8elgo?ɧ˷Up.6C >XwhIh;,J\uM[_޽1s1W[Y^QYҰsw.+VC(iA8h2}s5~)Կ|c][vq}Htz..= o)1=&-o|M}|ZsTӢ9ǡׂH"tͶYčz؋w~o:ut譧Da4[6Zr]x{M@:)t{W'A 55jx18KVJʹsI9vҳm^p :KD,DWC )9m]59QhX kY>{H@:'Coц&i6Η|uFĔ#5yut 紙ܑy`)ǷNLYe{e<]xiNn&,E Ug<x]^>,De&k{n$ $d0f@5(5H0bbLoz|Mp2A 50hAGrR@'ѪrjocԖI_ͳ,{d9Kxy84&}fd_[s{:ΓW21i45>0ժzZsޠCm;Z6=-Vacm/?Gm3呦y&:CwRf467VeU_{?NyaY^V&H^oyY<=|9n&6ӭo} @Q>G"&Nq4Db˫1oa̶` mz[hi&s>@\S~p'>og^psWzW4W Ey{!Y㛶T8#c7 `}99޹ C-<7SG;Jϣ5ͳDR|su:vpϧǕj<n]2K\;qGE}O *ki]Y< 8him7Ԑ!Av._>N]18^]ϭo׭m3+Cm"zVusXdHWrtus[-ճa! |thtz^CvHԸ:މ bh枕MmqzG;l4@1 ~mm  b]8m F5ufk,bd +IɴZvZpIZ!98D-YOI|m|>} "qjnݝU!N폪`'Ugؚk֫3QnQCr _9&'FVu>#yPZ>-tk[W^NkG2ɴ.yiǣJ#66[q+ , /&mn;EW-_:@iI}bz-i5&Dy;G0^i[;^֭'mo/^nW̚;xޕ}F!;wp>9IҶb&z⓮Y<3Il.Fi}z0z#pޣlm;pzn;8V[Hiyk9DZwO=#=q׾<ԹO?rյO'\^ s) MRD#swdzT0bb^{?IN2Q@j`8Q8&>i)ƼN1~I}Sg4[_WHN3f0UӢ1|B^LC&%NVǼ(\6YUeɼVOfYUXzt.}kwj=<_X|zGz[ {W]*7tד:i7JUc/Xz+apj9?zUy݌-k>oϮ3㻈*:aNNoOф.[{ܽReO?.Y^wo41׆zVyuLLO-G-q}vX_'T~m]zz~ *啭?>/d~lh)cvpg=8+:=gNFqY(8},|Q+|uq2x\rzN<3~ng[>TVp>p<צtKo5~i>|IV˴2|2ߦ˫uyuӞEq>KO%~[ol25ox媧GOYۂd* tQck2Sժ,/w$c`c]NÊk!/uᰶ6IKyfk7būy;}[Z}3 eދϝU\}Ҵ\3bsvXMgmp9:)wD~m957vѲnlVv #})j/lGo7mKtһHiYz澏l޻XϷmiors1.}q:s^ֳ:iL5UW폫viYz@jO?N۞zkm:yz>u)<5ϤL|wĬ;&gKRyIZ'7JV=U}KSJ7]v:7Q6|1/_'i&iEk҅vj[ܒ  Z֤l6[ʽ%;xɲsךˣNcMr׊F``|޿ ^]Wg<o\E͙~`15lyL'xҲ8cz^mNhfkmEï>wDFjGxmZ>:ןFӚ~խqzqZ|xYk/JImsIJ~MǶMb>{[wH;krm"ss<]ac>̀8c~{x:韘Oҙ>5bzz~(3>xc^}\r|;QRlڏ+ua;lfϛoIф|k]:Wڠ J,z jGS 5F@DR@GӃ& !5ߒn=fKXKN@O5|:S}4:E^nzUk|6d1o_Ͷ`q>+}4F4QlDQ]i]϶u{㝶WuqH6 iYY3jYZ"{ !;zڼ"{#c~ҿfԴ8Dȴ4Q9o;=9̠n$Rqn֭kDdϫvoihiUDz|2`  @!22$ @f@H`18CϢ7lΎZ;xʯϣkY$y>?Woly#L%=̀ȉ nDƦ_GnIIi⹽ka5Iֶvjn}9ntTӣ5\&v:_ˑ5yl}{B'F6o]=&V>4  T vyJ,􏖻R0["*_|2ǥlKݴVҠ bxo1-&i.c gcJE鍧G" bq˧{M p/B1G/E*~o>d紀*s˿oY=ZNKKZ.l5N23jk v}>m0㝫o7@M}/?2&W|;:ޒ3ק㿄;y:9rvrFSiY֥핎zoc@b<9x{c?L`N HFȜCwW۩my=\ِqcm XT᭞u@1 uroivL<-4Ƿ/@ LR;ss~ŢMz>͑lphWT|4jl 2di3HuҺŋ_iglwGluSh]/y~I@jLDף[ Whq(9-"j+Wt&I+Kғ x<=1ζçbus1W/{?G+aǧtt呦|-{V6u蓶2vǭHAz~.UCϋ[+ר5\{z+K),zڛl9i9; t JFq5|5}ZZMwc }YlCuyÅ4Md>Lk:k"OH8%b'[xŷ%Z&^'HL6ly{Y76 }9;m&qo!ȶ\y&;L_kÈx ]vs[a--gfJ67;xSL^Ʒe^А bsǯ =+ c/UcvֺYkedvH1˻7|oU0&(׋m+]xmô[]ty3u޸11*Ʀl\]}8j/iwFNyz^ړo?N6V2/=o73zyFWϓ@ .YizI0n=n N\=yXMxm {덵Z-SA.>cHQruy11yEwcySZn?Co3չiW x=<&W[ߞږ'V|y/n{.hZe覴0z4?M9wU15` xSz& #WN2I 0jh%Ȁd3DϧLF&XoDžw% T15 חںoNk7q҃N-/#x.˩]>@#o&t'c\<'Emc ~m4ΏkNk2W6ic;ZiӇ'yaoӅK=R "wG-fzikd$HVz듿kǦj.!|Y;;Scc|kZ{D]UnsΜxz<=$-R'6UxͽEe]_>vˮ5t!GūniK[R-f]γ-8^5^H21;k Kv羐A.YNJk^5 \sWVcskÏF3++=1;v=8cx[(R=\c]1vɦrtRW4iy fF F##h 4[H #SN[a=@bg`m0qCy`!2q6Ȃ@C0H9VԘVӫSSIJ{Gۆez\cƚ10WìM&=:{ǣۆmzLcƚ05xu&=:F%{=3o睪z6@*zmxBn8o1Erٗ~Yѽn:NI>l+9:5TH"qݗ^i]Ͼ bϭ/2K';ZofV+%5q|g>r;0Iyn_m4㰵@iQ>,z=Wp&E|=W Iy=.yxf4!Z}.]q%$-ySi{{.8'|mת?ЊDq1)v)i&]>w.85lmת<?~3K쯅uSe2\Ͼ6^]n]!pl%1'\f3۟>H[DϦRZ43z,}]kϦLofs 7a6ҾX:e:rz 4V]!{ϥNԡ·Moq`-Em}ܫbd.|>w"R9ml5ṿ4=oA}]EYv~oMَ>}~w.؜[͸--uwׅ4linĶueiPQ& &Jo]җ*,гm 7YJ!Goe=U62βEˀx11p "xGw2'c H:`8D4sq<&0H: 7ݺrc6^}6)1Dz]}{)ËNA ۇs&8X/]YymqnvGۗ5t"g~v{k@>f%o Mm"m{|='\ EG%#DFCKrM]jkF4ʋlE->g0]<* 6D9=tsAH6;[+{+鿑ӏM0@zMON>$2H=mTgqW\L:Mll(͛ՙsW KshidVSd1-͡S4J&!nli.e9b͍Ks1/i8q_hȐt^%B?c"@ ld\$b<;v%v7Y[uv+xl;+1sM *.>ie k-w"RoNQ;l BWhk9l$@#i-&f5]z`Hz+̵:WN9z 92q5TOyaCTcܘk $Kq; BɒdE8IyEs8r,$v!؜b&H@V}Ca˭Wmxbm_*2z^}O>K om.{< $H$$T>M7=otuϼWMGFYIɭ&V}|'?юŏ?Dy秊LHP.@$HA$@@$Mv[I9Vjo*EDXZ+0M2N~':+1l:O ܋KWXW4i_G=0m.ə0k6k '&f2H aՔ^f+9@q :Nhs5TTs M9q[EzgLDhs<6G^t "s JM.\p>j.u;mxG W4ϗO-aa9oyzVA,yuWcz|^Gs [szwqtQšz;Yhw-tލ|2w6Αߣ<˝&&LA<3Övݖ֌B6lC:Mt:SKvg|Anh{1B&pTN39p߯>enڣXzz.}"iB'(`*zKqzD7"AuvOIФ]]%[8̹Z]KMWW=|&0NI׎LAm]:0LH\+8W_;}e5j_*ròzF&$M./ּQ):j`57͵=-ͭO.Z)=\3-j Lf]r>=0׾:kYHo+ipY;+k6 8%$Rdwf![ϧޞ([aƶLynal+JiaBO'џeC<-EG{Y|Sƭ60+WP w'̲w<~V}@o9i8ϫcIׇmΘ'kHty7y|>&Qd[ J43Wdf[^t<,TC5^ndQy`K5ƫMh%ʮEU mENM,-򘌜|]UѦMe-m5ϧCzficlmɌD캫B5N-m5ϧD:3Kckldsbo×]ib3'ǟ5z8QǷ5I96]lBYwUW:'aM;Ci3ϲYj__T.Hr yz˩=E;JK=婬ÔBvfR 6'9K,.j`d gcj`d gcj`d4ez9fyG },2Iz>[mM@8Ssk_Oǿ)!ۏE-p[u$@ "+@&2&/i8)5ySMhp7RR<9l: ԟ.p s,%dkYXHCLgm#6$k US3F*1linjm+qBۚiYNb;.)Xi]xZZ8[%u蓷? i X`A H@s:B[K>jU Q0қZ ƭه7"4jKu~;jJ +i^i[i$O &KH@H$H;a{]^<-zz{^e}"`F|ח[ۅt#@ -iIGZ]2ti`.zm1"2Jt%p:ȅ RBIRЬ$!3А  1SFn2Y!I={j7 8Z ku$`D 6o e.5ZVf :C&,U6YQHbΐɤK]neM!nli)$YZ]siV%6]4fga[[5򜾌i(bcRLc|K+Te̹lo4|ބV刍e&++Rty{.F%e7|HhFa%+|fz5VϨ GIɾ>-i}5[^:X;VyK6ɛ;x_T9ͷ];tfNykG~9hܺkOn;jnTLB?6vmqfjP zNY5:5ۓŽojz}pl.2jljd iתk f@9:s[ulG۞nK2˖ײ2H1T;Nij "ݦ:LaMt+pJIۚ)y6"§taͧTbE-5Mlw尵@ $  BniIќ=+־sQž۳~m_vϤ:Yҟ:Mz!۪oָ B_K0y}4DN5W-Iiy~=&v>>GDŘ)Ieׯ0`򜾬b9|ρ$E4:%}f.!媇^Y:JT(yjrT , )5Ե}Ӌkzۂ"k)M-Ǎm ἶ gjBNi&hk;g%oM3[Țc#C¢Ty%8y!ƴwVSiw~zco~IT,'J+O52잟uB"e]+K-n1T~Y~Zm 9sۏz)Ӫk;֎:掝TTC5q߯E:S:1 SCJO 6M1*O'sM2áyx7+s_;.= 'wk>~/_Cz]xgk\!o2< s5gyy슱-3\jfp,֮p45 _do1i44Z-5wk&s9! F#yN"hhZk5bL/"ᖑp\˯u1)9ZVbtenxs{2lϮR\[bs,t7²l9ey=mh#c|6Xs̗׆O^v։"¿j]k{-3dV{g}zmYǵԾV9z{2YuG\V65E:섶=9$M%[^HU֓>mW洶=96ˡE 2WT,9%(URv$9( \w B>|8FrYߗmMm}:4Nm5zi_E>]MF\J^KM9yVԸWӧDFYw5#Q˿|t$f[Ee[:ZQU-f]XB'.xk5xf:ba"y%x#2JLߐY+s:gc5NZsG WH7ZeH^[ Q1#^]Kt^_<Gw8fìH$ W_'ߵ4s{SWW~MMΘ9BO6hhbbLg|m-y&8Ml-1*r@#0ߎZgz~Myp:Mn8xrZNB$we33æ|6^Гۏ~.Eۗ>m1۷,ᾐ vGIA Ro< kbQxhc:Lbk$!E91MzJ7'_9vDk5ֳ|Uߣ'^amx-77űѓ?mw{X1n,9 h?Qr2-Ngp,cuWཉXohm1ԝksjyװ\lXdwb<8cD,֢ǦOm ?PƕUoD:?Q L\YRG l[N;ǡm w x;ukbcZ~)lT22Xi-cQP{]ëK,c"f|OۖE}=w,vsc#G8,Gkè?~Xs0g\%^ 0!)YdUR5O[wVrպhwW1/fd_Y{uP=y4~Kl?&=ѿhEw͘wh^9=7)g zUo ݍom/;<_8tU8_Gcw2}H-Sjnrd1,~*j7X^=o_/rZˇ9Gf1W2e嚴EI-#cH})Qq-lS!5Y l̴7t>LlOzn9NW6ŽBd^*@_F'O OeMXoi͏00xyƞn欞jȹ.JMyW҃/ܺ+e5-{IjXQũqᶱmyav %OV:=7U'DZk_,^uJ闂؏w[{@v:[ κY<:weU:sk>0vpqySu"Rv`+ T:=[sgpaY^(7ǓqXYr10h ɪqri˦3*b?ӹTi;8qfX6-ˠ۶9.aqVW5;Y)^jo8㙘oʏh:g/_Ҧqg9WWvx͸[+[Rcb2u ̳1!hFOs|L$^@ǭ%,~ދ]V,70R\Ș~"gN[oFT4ֽHiʢq,;r:58j+D=z8c/:DNYSKR'y&wWs6m06;QjUB.J)PbvmZ@5U<~6dq <9F.F_b7 bw= Q`"汴b\mL̉ZGnm(W|:,yYY XkPC}mdۏ]6/6Lerp9IF Cv0%xOP(nKӒ֜?כ4@9Ƭm''r 3&^Cy *2++;O#D-m۲N-jg멅7,ͮ|Zq'Ů0D.,X-hiuBz ,dպT|8Aԟ4r˂r>g 'qn؞b-Kr\vo[$~?ܑ>+S!,5h&ºf7^TtuxR} ϼbpn>fcrUnC#+dr2} *۫ +K1Dq_W>Чͨ D Ң B6jJ7a`/+(v$zSs&FQ/O"Sːv2ɚTd[j>=T;(`b(u쥫9o3 rWogN#?}*KBc#}GB2'C%N;0ۭU5Rw/mBh~Q= ή}Pa]Mkb}@WҎR;mzLKU`xspY2bt*6-?N~T4(0D7_qE]0A^3Ð&Iψ֥YMv.$'o[X~::yy"ց1{>'^amx-77HF0UFh&EWYJ8 ثBt)m΋ɠ+[OǦc?vuHٴ|I!#?Qī.ظ"%IPh;k'A w 0~'&* #^>jNT`zb+?'*|zn౩{UkRd̵11uv^t(}wt,,4JN#5:͈:܊PgA^f[dh{eX;ǣOeKԏUyHoeIgU~I*tޯ e=̥vrR}vLUR _k'A͸~UYXlb nUghde2̋-Neȭ9&G;RVM)g@j\{S?% ՟peF.#.`ѐG^bѦcm?a؉W[K=}bW8O)S'MMt'7!F2eT-,t^ /˸N?TbPZ΄lY@!OQ[O(F:?x}~n5=cUݻ7'ЧkFm:ʑ ~#+ae(d=d}y+:|*ͮRuo- ke#W}Y<՛\ȭ)ךr`O `aP&#NkU󞵱r7_#50Рr5ÒTtp8i]|I{ǩ5^68b_ŏx}_-,[!9,TEY ̬Eⱽ)1XTݚkF?i%?ʱBֻxQL.ѫ!_WS]:kv<ɉ,mTzv9[ -%&(P;dM@wRCf>`Wݨ'ֶA^u4aR^{_Nr8ݍ݋vrUdSgqNQm"+G_m{#&G{YQG}}Ėڱ> ooS&3Ll˾Nk*qze}c;.gP-b7n:"V0(j2ZrҬy2rieS5a9Lcov&]a.]jv];CoƭVv5|Ct*+ӝu ygutWJ׊|y =.q~˷0mgTd1Oie#EnH%okR7@x6F z|>4wNŒlzJ9[lZ J} el7ƪ'l!t9 9fJ!źV'aO+CrW!ʼnZe8?ChKE&Br2Sk'|ibsR8 2sw1T*.ѪGk%e:\rWuަ]2,_ +Ku(˷& X}+oYc3r}입s aXGFAV=e Kd[9&~+^umf Ezh:g/_Ҧqg9Wi823n `}ym_]_Uj1}=~"-,`_F&d[٤{<¹?k+K+j:~}@J}B#udQe6Uo#}5E&Smkʼnv\mjK87n9?dnBgeV#p'qJ9BbGɖ`|;tMS]Ӆik0GgX8tNWtmxf#riʏ:T.Ʋc8<`P>ޜo%HeX n}; . Z錡f? g%V>6Yvln?̳_A"LdL> 岥s7ċ=K|3(,ҧP6xl ^Z _ xW_l׿B6,}Pڱ:݁f;Upc|$sV,᩿YJZ =>e ,+5%y>:kn4*WI .ק\+3?-SAHxr|><>ظvO)z]UӳmR9\zU~?uݏh.;2WMMMK5}Ln ]_֣7BFFC}6OS1_SnE}?YXj.;bMM+&.oOL,vZ9*wslǤQLzËFEfyFO1A2ǫOadEz-125U%)Wa|uFME=J@ %>%XC~l*(3]W3'l 3WDg ,\ @Ω<K>)m <+K̏vs a4K8 ha(_mP?PB6LYO4&2D ՟ Z3*Xs51r/S:vS̚l)M _ʠaK)WW_Ccoo$n j-\7YVJzo.x+P?*0a xOW,%ʼ^fs90Z`p`ȩw39SAi0eǦ˽sgr Lu ۈv?klz94?*ے ]} u;vJN?,E#cNK>>CSJ_Q-{[5tʧgJU"&4Bבwb$MW%yc4\xрqFq՘"g}-88_c +.OMWPĚ;ڇgE~5/XbNFWl~A<w!,S 8~#0E' X,Rss}1d,fgsmnfsssspƼ'1piR."3n)Mm6Ƽ;& 1pYT>whئX0iHXDN?8X]pg'P(zjaNivn*"G,.8NqrڄTֽdeV)F- efE]-XoQ9Abwr*qzCrһ,4ܷ0,鞤%]i1NrroEڼp}ѱrљQ'eczWeO}뙕_:{F N^Չ >ule |V_w|YF&U6uԨWbZ22|Վ9~0ٹjͨN幹e`<>/x} 6a+%1+@Qzm.sZ͌ ].'H%jnnnnnoq12{N1/&v2c2=YH-K(UMcer-wL B?Ps1p֖ 5L\32';C~dڻԷ%ep ŶQkoLڦ 0c\`ĶSOib~uؙMӔh_} 05_v Y.zxfNFS{t13t!_ 65ܴ%5xof"!yߔ] 1uw4d OYB,Y{yaׅc 9*Y`ۄ8YXPMԾ~EWp ׈p!pqkm)z]!X06 Lk٭ĺEba0~xu.kE:ے^{$`V{,fRzeYD綺iƵ+y8Onpg䲚BbbERkSU6e6!=u55D|F9d>&^3bSSPTHg\y@ ^0{i3cᘦQN9 /ux>ϩⷳ}I< j>3E5jNv^vh sl3;i9@E;ڄsjա224Jѐ45 \f[ {n5Amz W58<:qk_ ٹDm!1_ / ~;0P;IVcvOElf']]KiR)ӹgwr㹹T>275in^Ec+ fHIm<"!A@+F;rWh׮6`ά!l?5WHS+IqK}vԗ% ƦՇk9rR ?Z䯋n:(AthfDB7鹩g;/{~Sű7$d8xMJ2OgO{yQs6q?w#Xu nn+ovkJ(A؎/oq#6mu3nBlMDkd;--fّ6&؛褡:ե-ȶr޷߸g39fw -opc{ 9fw lpCvʝMh 9->>D,~ h} mYCI\M9@4T45>o֨6`h}6~+,J (s+n|J^_Ռ\ŷz`!y qbzIл*WF=`HJ1OYMX1_Lc<<aͽ5Ndьdֱg74lZr3qx3X8K)ݝUQQlc7=J"JUD>.J7Xӑ-E%jsC`![rMQk xbXQX̮7Z;xEm%\l na]Ҋs1oKک,3g~ W̗++=̽3gt//9% ݝ;w 3rFg(e~`9NS{her^%:~`9M}h=,rkQy2+޹5v =p)j9cۧu}hum= *̘'Rw5ڇgEM[ZKS҇\/1}<Ō-s\aFF<9}];!ynrlmhaHQvd.L]ssssssssssr{0,k v'B2)S>2)ieP-뜛R9]9wWL?icLLz}9 5jvr/\0*R^em^W>+gUJpŕ>/߮VHǯfT'-h:pnQ၊56 <0_P7 l&3Bw7xuls}S6exnp*V*:{qHnnnnn}x<\ 5,LO;R0+T}L93"jjjjjk!rrgDEnC̰f_8iŽb,z2Ttc[ Few2nUU}!0ߡeY+#sǯoɅk1纽> m+r_esDz77#ض.5s_E77&vlB'ۦF2d-V}x+s1SX߮Yέ77m7_} -1;k} g_.~M/77 Nf)˄6qcUVN=Vҏ:ߌ0-HkfZdvŴAoرf;'b110"xm)r,jYqiڲv. DE{? P9Mȅ5ZE,r1 9l^D(E; wF d5kMJ8SL{1,mב[xx9n&`LsU;O}jAUp{Bo̠O7;ŢYs6X"͉>BWfԌ,])KEïC`4zquSBkӭ˼>#xe6@ 10CѩUoC<ҕt[*"j۵Z|8 z -D~,;?c' &%*l<=CQu8q։:ogLJ gس]6=tZf6%}l>mn%IXENUթqR|oZv;UA(6ektY_dg &A_CS[Ågر/JZRшE^~![PNJ#pJ[YcTmb 1.%{UÄ,O8feq$o& Q ]˹}gp˔c+<1U:kچxq5/~foFF777ǯsy{0? mŬyՕڶz7޵O:8뿍(| '!qkWqS% 'szMwnWF`_ڻ֓ `?Pƃ?Ml$K8NjS8DL$5 KYIifqY)'@OĿĩ'75`ӏ?,lɫ&VP6N3[ܕZR#rX喝gsm{z$<[";pFk9nnr@+hg 9LlUK)z!T;IV[}J4.kKsmvưۏ`pzno,[r9A[lM:bەz/vmSNZŗ= }{r+?FϽƜؕ(c+!*1X!{?״6f索ҿ/Je+}Ob֭EƨǬO.4L>|&\6 M.z6Tɹ<ț|z;mf;s̽;wx0*aY_RY;;w 3 ++3e;wx6[ASbMuǭ-N/=i`lvq4F4 @ C)DTTQKi&-a~&@sڅZLTveBbP&MMMM@"QPyy^wNK!H)qFՂ,~-f/=e[howJ!Pë8EȽe2Wu24TyHOt]&gm p5 ^MG֡NZO}:k7T/ kl_2S?KkfXj_|9.u[50ԇzK[ C;ӽK7#^K >9Oy_ۑAq>>?v`zR1,Furu1+8ucn_aO_U:~O[^~oZvxGTZ>6Iv 9L$ VC_Y.]t {@bV%:jpׯ/'C,\ƕ+@dN[_i}wb<}_mM >qCwWq{ˁᾟ˸]obOr l~ck-iO``c*7s]yq kBg x^ { &{KZ-s-=I56WbT}pXlf2Mx׭`}`H$rݫXחNUq^ƲceQ⣈_?ّ1l5J+ⲽ2+".ϵ׈#D^v xJp}??rGlR '_I[$oS!fsM+Mh 6Uqw{'<&p22V==c7yf_-)6ossq.ɍVWgF`FHȅz{iXW~+#2*?bdlɫ}[#ulzvԢճmgаeAUV̩'\`S/)-*^ۗ:fZZ\Fz]#LQ jᾜ89hn({S z1F,L"j]uv6Hlұ8eѹr"&:+*L|Kq%Y%w率bͱOjے[KȀ3U\\@ŴG=kP,껷u)^5uz)Y#W*1WK*6en;U'_^aa>կ'}}X@}Y-_ ⾃tsԢRfL v|J:uOžc|L%L}L:{=,"괙\ic,/4ì BeעsT"+xe E!>.qPGbE9 H=v3'5ҘqjokV_%x;AD!NkuqoEG:ն> @_Wz)zb6e鄋n9f5=3r0%^WglVZ^J/lҪ/Qf: q9 J255TZmphP?pKjcܪ_UN|5bPvK~-o.V/ҶwrT f [jMvJtA*OIRѐ2{zUzܜ)㣓qRu_B_ڬElNkZ}v2+aU=7fͮcYw~^݌{<6ַE˓0}MJc Y<"+b 5>כcSS [Oy99 *ұfO50we?rcOhivũo*NWfYx*~ޏje_$w5BEgpoV:+k]]KkOEc3[aܳ \7I zlD_b[a5SYARv,5?i[jU[[-~^踗4,-8Woz4qd\e*lgS|zyR[b3׍we njY_vjjW(bޡ#L^WPmTO O.'u\?waLNI/h8?cz23wU1j65^JSpfԍuZ7}7cz5k2Gшw׈uXz-NCt>*[:Q͕F|N]XX_mY5я/s<&8FB-o긍MJ=5<-{ɭ3*?^tȩ8R2:{d߹{aɿa3iN`7Rid6ֱB"jhNkד\XW#SAMkАeҰS!.bwj!ΠC5ԢۓdNT5"GϤCK39-F-PfDz[Jpr19SP+*XEqoݖ 5̊lq[lcQoV-bUi~2(yaG䴎7[q^7&?,&P>21Fe lD*1#/4 ^%]pɊG@ c6Uc&ۍ ޽t a}R5G,~Upp5>RxyęN"qT]OSV8 C*N:!&fiqk18 g/tKϧ5s|8~/|f Xђ~bMm-T{bz?G@fϸᨻ= [4G@oS DkҪ}54zj$O_.押jk$?l_Eܨ󳦏PJPݿ Euobc$,>Z,UeְK=$>Uj.dU˵n%zZ>wҙ<űR(#֢C"mUVuHو 3lg_qZ5Ma>Ye5tkDu4'lMz;Pd12ՠ?m/s 2p؆hn5Q\( @&l[}\__aO -ȅvh__LSѕQ;/(wӸW5+^+($?w\eֳD iaQّ> l}R[h_DVXU QiLaFw>;Q5?ʞ7t)E[`ULk;ȷ1=YVi/'YO{d}C_^] +{!;**z,qZyhq%jD~G0T*87\*Tuj/Vn7 2ؽ"deӗddY`; VJRYq@g%xxYq\w8 Mk18 $EoS>V)HGVΌ֦5V˦ ȏ=.ķ_+Yr{98k'gюu;[xWUZY F++@}/xԱbֆ&X֖?nV,kU*(UC$,k<UV0:/,Ҏ阜"/?G·L;U{TxM\Xhrv[~ʟ9k(- FE쵍"F&C ^Fʹѹo)٩3 N6UyIVȹĬ)n]s>C]v%|#!+,L_[\M}2.+dJU2^kǰ|sݾ)8^ ێ%WemTYPcuV+|)^+וyT=Ek`Dv.Wm(ik0[R WmNJ5b*j&lC/%Y_#m`/={䏧E0 zq-q?*qע;Vb$8kn22j- xS崭׶[]G#cֶ j0ײҟ5<5{0` k-zac:׻3.Wmk?deG]om^4ZpJgAgMMo;`/;^Zd$q5_Mc8npۥQϩbٿIta1ÏzncDnur-_2αYqG?F7嶵Qվ^J+KB-k+Z4%cu5fU*e16ܽQRZ^%ipQY|%Fa-=MpP2h7Sݫ|}Ku\ԷlWx_X+S./pdY˹^1%p{LnIOu6UnCqYKm~rcyjXՑT5emG"쎹Xj(av=n(&FSMbePL\;;ܿOY^>f6@8XVQ0ّ̩ncٯz:؝)޺֪,\-9/]prz?Gnr+>whzC/bk&8jA0՞S%,J K(u@@W߷.7:Тʐ>"R7wʚEF>^ ҶV ePJۖ⥍PE}I^x*eWxJp&5@l_,NVz TkUu߬=쀏Y-K#']&ږںRWZg;`N>dE͉kNتw FhKMZ($j^Y?߷( zxo{U3`ÉQ8P8{o!7:Hr%5lA ʸfGWPvUY@H6eogsⰛ҈uT 8[ gʟEGn^8JѝW SdhO|';VR[]s 5X,|ʐ.pa i~6Mk看mg DԣťP>)丱VN=#_o"ۉ3)Ni-kqce[_SzD{DdCۋ];*VU{ ǰUp̥!-FRuO-djXdL'l:Zy `ġ`DXlAձ>MÆOUV2+I5+>WWYRZ?N? e4v]S kXYVwf o&r쿮?-d(?\v7Yl\~IZ:j.:Y-{]+W iӹjc*_)O_LE=-j!#:ؿ^߆\%mnR*V.Rliz55'R܀bqle[XXt@gׯ#+˗xH2*c-ɮ|HAB?ٷ46Ҫ,ՁZ@Gb؏>~ĖY,ce\л4 U_3L0{"~?QM>}EN|Jk_;%HX{(-auxՍE1($O"aX2XY-t7.n1Qb,hROeMƽرmWo4rp|+¡ /銬>qxVŵz]wi,鄤Krl|T"ցS;Bn'&6mY>@fܭKmݥf?Syr-ًr<48xlz C?sFŬyX00$~}yElh-F(FSc3.SMciGJZzkS 3c$6~z{ٵ1rMәK@tmȲǩ+Fz,v^4שXS=l/Ӎr[;m[Ѿ8y-X7Gps%³ҫ -E} }yP1,G^ ?k WL}UJֻU!KJ,N+[c܆]* VgLk,ocݖ0)>wLb5QjGI2)^lE6=4C&wL.fuc W3,=W[[,v {DT'"-ǭeBV:[% Oœt88 @ZD]pl\7#:c3zMcMWKZk?^ain(T.lQ()Kjz]*/qm[x25`>-oOSUg@sѦ%;}-]'qJ{BO u.c.Bsh[kԻڬ5eJ[#' aUTo~·5Jq(?!&5& *S K~tĭU,;`yɧubķGTk-+cݙg,<}WJWoMBo5|EC/%4:0t*kq+>%u,%fO2pf _zٵ,&688n򝐥?i\lPVqSn} ~H\5bN+АfғW(Qo+.WO2`lgDbMpR:qv@ǢͭR`Y&CmY\jrmű3U06\~Ex$Al ;|`ߡjdV'v oNaP>KqzcYwO' v72ACAu<~uj+}A㋩JYXl?{:یR0FO^:xZ:[S$O۱"U'oSϡ'Q[,?p)Fh~zB($q`M@=N6X՟q(gۯs.U9¡+7oF}ܜ'ҠS B57Tei(aʴq*'a\fMVq^_bpk,]ȫQcɓ^wq1Z>#xNC]:staٱe#mzrk-SW!)8xj0l쾞[pW`zr# Q-uMEr{i3U%vd\iB/'.|7閌ժۓoi5} Yݘ?s^7!k8ٙT0|l6]{jUujk⸼vs\h4$ZLz{[Zܼ mc#bVz*)QHXN":bcїWv4znTqTFQ-`:cP}ּ+gyz1 ;lh)jӂPvŴ[)Vcm7"NTJFN6&2Bp^u0QjUr ~6ڵv=ZyZn&쬑"i.sA$*\ E'*GB|SqZ57Ve)WFbb+pU4eܩʆx~Vz-/dpMb_s@v=6Җ]'ۢ{29&ƶ[czKeS֦2!B\G/?VPC?3SWs~2uWjc"t >>F>.FB-j8o?Bu@~.C-YŴ4{!ߝ/]g~w-||(Gpߝx'QTmMA,>PY7^I5ϪldWf s>PY7̘X,gfTYF}A3]ZF˪gdZ,=9leaz>V`nG? A| mG{ZH>"t;0?zOެ@~mbVMX;[sIɜ)s(cΞe-r̆r)s0o; S9N1OKfC9NS9\AZkbZ02ܬsi؝E`G)*c*ǩ` %YQMǵxh"QVI6\9EWxleX, P)mVTyG#|(Z4(]MIU(&V=K5/[s+83emЍ483S/A+83ѕ7V PiS8&)}lOqPXVqf7_q +M$OlAavmP8Q3Cc0Č{ ̼su>ٖLk-8{_.c1sX9w[ W'BEw2nwZËg$O.ʮZ𝞋c$lQg "⵷#yf/ .FzI .Z9=ѲRf+Kr3{szR枬s0XYv_)N/}S`hw!}k+Ke7>5|O aȯ<3ʅetE(_ObNHT^yzg R E(_Ob F5K"Ê PX0f p" h WX9t* 4FX;L%zl;M@K xb P T44VRN ^VvAϩ2Oe; v\ dxCW ܂N JPYm/Lr2G!NJWpwn;1\WOqq{ehZ/232eD[Uʼy!ͪ/\b׋"U =6U@#7*Ljzʦ>u6Shjs9t䦎эZ<C#xPጓ]tע+7cxIjhQxu/FǪ]5xR^EpKC3pz:kӑ^D>h-dLŸ&68WlZJ鐭VoȞG%ba_l) cbxȮcD_Ÿxud^O&.cUK[RܖxSm: 6m ?V̶ }TV{OGz8+¢ p3:3zaK6x;^)bYt؜y M!9 brc'P8 `;zoS`17A ܝC0Xl@?#?PlʷE]1 4vXg䈖Zsl|~rMѐ:؝0V-\3whJ|]^sňNs{lev7,_of>xN~ȳ4ś_"xUrݒEnkŎTDd2nJv km_/m)ɯ"]rRZ.!E*RVpiϧh[AG)tF{i[B܈]~|ѪӍ37LIBR8-;٩NS4|隻 bdV[⑳oh]:ŘM]5ohsk.̪'a{MʝīVWqEqsjU1kSKiv,j]*bChzq1r5.U-c|Ӷq"^iŢ[r-;4VDYC0{8_k\<թm^ חU ߐkf)ryM6Bt.r)vn2e~B,kf)ryM6Bt/r)vm2e~B,kf)ryM6uw777l>azAkD򛛛:з}nnoۭLssqL{|qcYwj[E/#+źj׏}MT>y+%7Q$(eAp)]w񲋜"?p3QfS{Je,[W7T  -FYR䷩~%6zWQKmvޓLY^/뗕s6N[N~ F^Wjs!=~ rxu)w }{=FnJg]1ns\îz[{<9 GrqREdlOiQ@e6&nv}(Ezj{DpX̓ѓpM=^PӠRSdxTžˠИف1<@V']CqPq\ 0JR.Js̠J.?pK#frh,vkoܑgxsWYڊm rFƹ!V[s X<2kt|66`ޑs*e\L~-w|15L|;/#’/"*k(uý!Gkx_xi\zr\Yȓ'ڻÁ8@gv'p3iwL[)|&cI]<:v<IJD~h}),c<>]] ڲsq<,4C*vvʰ-LSRȭj=li zڥ$ Eh+Q*-A:vV h2+AZ35ӂz,JYXǧgm}NYu啈b*N jov92ʼWRf18ߋCFmJ(J"r%&8ۃeU%+RD>E? ЎQx/Ȯ-Y`4>Uq娍Ҭj*JZX*ŦzHyj!i^4ZpL,zv0c8Ӷ75qǯ_mWTޮ8ې/+2jc=7$ev"8:O37z2^c볿\6+3Yz2cQ>FG &OVUL$I<\Ve[>]W"&]-M|>ᏔѲiXrNP)ܑx!Zi vm꟪J"_E+!+!@ B<̺LLڸYFm[M Uu$jiO#5y^ȫvfņգ*""֟صʭM]@~.Jy aQ:n7|r[EU?] <4[\fcks[:9 vj?z\"u7r:'ʦrY8ۤYV_VzV2ǕZ'ePldY|beܜX)j:ؾx"eeyBܱ{c Ρ%$˔FYUQN/[Qb՟7+ų(Y m{3or>U5:{ َ_`E:>`'"'y,BS \0'%|yK#QjOiߖde>QǴ@u<5d.p~_G>9ysAU5{ֹ<;e}$ww^CX;w NC}I ~Vww NC}I ~}fldW'S7ԸNpY>Or0Y jm!g3m9gBrH&}SYn3j,6~2]FX/ +_)< v#cxx ¨cF:cV?OQr±x,+% ijyNSJlcL̓Y/>9A)cJJЬv5m9NQ)<=Lr32MD9A)cJY hWs3ԭzv35c*5ajU 3ъt~l]Rg%Gcv9etx݈h˫qF4ǶȇZ#ޥT^7s69bXf5VL 1\?PѼ*ٳf6Cuҡk=I`o &?eoCUmi}vҗ'wO <0JiJEAeIr.ž~xᖴ*?N:P"։ B[ž~x1*F2cZ (u«%)W bQ+Eb6-𺘷4*ye,J0R <<@5)Znux^M7\o]Q=rYF5ŝ2B{6Ga\1Xg˕&^u6z|GFFOp~^AG^Q}.Ng,*RKcybn9I| O<9^ˬ=`4=wdU=kVVgcpKLLj BWf05fBe*m7܀:Y1+d\Z%6wjmEv{"~"xb.LZ=Ybԗx hRq,¥X :|zԕEykDͮ[vVU; -ŠbUZh`Ҍ%R,lZ"-jkF==$'R׼gfڵ%&e&"כ> !vdnkYC#>;"lf;8K{qp15Tf; }Xś Iv@;wO!#]Yf%bc`sv{z 6d^B}'rw^CHXlg.-zkeB#G ]Wn`;ƊPUlFU]ʦ?V,FN-iMb_x ;8FPV:2s7777ՑC\Vlߖ[ޭkBݷTZWdowx'n3Y [F6cyPEMRlǪxwCJY+"Z>PkDH >gsZ)<(5HPN}o(s+æ j얊Ó}-rM+XtNPrhҼ:`ƭ`^P0g)VMBD-|'Md?L؞:VCЍ]BD-|RlY75)qV"bS*)h#pQ@|˰=5<<| LJaA/z5php(ᢟ'DR`P!L芒vވRT"Vv*gm} R$u*YP*]vPGNZCT-c}03 75qWq$3!1 0A"2@QPBa`p3Rq#?Fq0rB1+ d:tٝB;GT[!?XaX|O,Rb2=<k$_ $.DFБyc,z~=b}w?9hVgw?Ql{DbZ~ُ~GS*UG]$ivDp~Q(Kz3?#ИrG e,1E"=KY%/ŏ[:HhS#+5gRk~2bgP~1B8G}"P:>d62X܆{™C?`[ R4i4QǖLm͑?(uiHhF2(_%f8&4#B8b£$ƯQcF*<#B]>Nߧq=;37+'?ŋJ((q]:%Q nb?Lg1TmY[$Yяl{[4F1q'H.8bltc8}5%W )+> 2cS1rM>#^M4$T3F.NpC$ubS-FY({ƪ>9n"K#;VeaJD9j~m~=D Վ54-ߴѓ(:wuQFLnI (k{HcXhiyFp4+;Qv)jVxK94ERSbIq۩E~i z8#G#k2KTMڣ'.E'JǹQ7n2܌qű)1획FD-oNȽJۓ[brrrsi^9bK䒗$E55FB%ި8&K݊U K_hˍ->Lc2XEoMJhVcE>CS.#ع'E_|XOK#5.F('D2X#{Oc}/٫iѥx˨?D)r91tlj@ >|1OOkϕ'eGf,ժ̙%)[ 2gF Ӕb7r~tbR-Rslq8혥fuެɋVŗAk4i]1eJ./wq&=/=22Mr&!n~ 623R9:Wn[W'F'k~EŊQ/|v+uXd}QbqE˓lڽ#-Pkfkc.ItGhXfx(҂dP-0݉$dmFŻWzl)G~ӎQq'JPOumigQΜN ɴ ҉ ofi2d;ccv[i3~m ;{1w O"Cv#z!A1rʣ▙'N1G iv)j+rHɓQef\lyiS%| c3R&_}22d&D^IYNlRhfALФy'.OKӐp:]cG-;."5,;xeDz#')QǃםPCMv[ x&3ZzF_x߸B (:rV<,#~T5LdS[Lt$NOkތM/>I=OORv@hǃԿ3W޿-L5llJpr( +٣e)G(Y8TFO_ﶯ"~ggr|1:&_)4j?Ju<垕]N k s!Kޓ.~ODԷѩK9GUKni=XFIch8Q#5%C!&=^ r6BN*''o,/Pڗ[=/߶7q6 R$Oa*U͊w*/šʌֶ*xTO=J|9m>_khY^G!'F8qrKa& 2x8~ާU6[D~J|$:}_'QdK #q~ǧ)1bK=<kt=*lJK/q^H|b2)[/΢2HǒfR&ņboOFr ϕ+/$=Qo8mG "G)Ij1_&ǎ=үÓ/ mF,xDfd?!hL]:h5;"||PVa_O|n?>=D;c=̪&+q؍?Wnxq#(|v%;܇LS[ W? 1I(WF< sW~92罗أnfٙ1n0HDKLDsホ(%ϑ1[W)jv2hSOF(^9!w_=uQvvDWۧIE sSCS*nw_|cܷbbfR4;b£'Dq繁pO<~,zآ%#B]>ϋv."GM?= sſv蜵;ie] bY-t?d&e7*ߵY⿩|bdq%b%I8#4ԒSBZl2c[1dbb}IEIS(GdYɾ}8[lp~=nzPɉFK-hh?2=1Ĕoz/Cc>}|==$kTHrE#UBob҉=;*cg Zcbꝙq٘^ݥ&1FR#5#J3}r)A (܇abjn[PfLz=22Mr&!ng4,ddyruڮDs[Ɨz2j9"=dpWj'IvJNJHiL=y G#u'@ee^J*[dz:F,j o'j2BMF8Ēv((Fd(nR{8&d:{F _'ސՑV뽍FQe +ݒz"FrO(}Kt*fM,q*ίc:2gg'u?q=H=KB~{FN<E5k=ɪ;")9vO¬͎+fx1:yIEY#l^:y*+}bF11wWD3F]t}ɓQIZ! CgE/dŘnG<.|fUIQ'>?)Z!f0Kj܎?=Jj7=nbD~;߅_f<%n{XF?%9\a2hKKOed;(|=QzL54/fId?N!:fEk܄lKSȲnx喩OĢ'D2Z&3tIJM߾ߏQ/3J}"#i39l6!wuyq#.7~bH\.ͳ<څE_ rz7G8yѝ| g5_ޥf< r-_k,dJx?,;&O< %eY}OPlPA5᥎-x'Bvi(Y(KjckPlPA-xic^Uv||vDԨ'(#b"=a^p)pc#Ǐ:)Eks% )qE"J??J챱JYe9$K2\ZGVoٱJ/ʉf_ZGOv)_k/̗#֑2RaEA#S-lQ(QSSgj%Y%mC~*- ډGeߜ{k%rc/ B O v.MP*][=kE5"QM8-~R[/F9)Bщɑf, kGԈ!cmN<=HFz"WI˟7 OWMfhz)4,pchءj?גB#5"S'вPcrFT7ߵuEQEJ7*%+bnex%#̏۲%A~Jc~2V.KCy塀p=Q4BUeYe-\{J?&DK(ԑ=fJ'Q-׽nI Ԇ&=8"EQ8vIӡ$R(&òVz_)QFJ;_KPlJ(MSk6TU)EQ-nOxy(6(IC5Fʊ^Ē'~ ^,X.?'oob0E"Q˞)ib&._"Ȱ[I' a %ٳgEb+ic"}ƤJ>Pcc.DԍH֏R'ycfL勪G$eDžɚ5,~8pCԍH֏R'Ycdqt5RHԍh~qkLԄfkGC978G?SLԍ!~6&8K4J6'*m9?fxF m4G8wPRN5-,i(ؔrlOٳ?ѡShy$[eB| hμ#hR%*}e)5Hsob$t2G- 25̑K8QX"EI')YQ]b?Ջ,əPYGzbi2isoyu|jeF4MQ>HƉJsLmM>oD!"G4,_FGI9ecwN<#?ˁǂS>|GanQE{%->ޯ&mNMוccj,̋K3FƓ@ލ j.%$EWidrlcZ#ѱp<41\d 1Ǒ(:Xn[DQ){ $O#=I 'r&z~1%lܷډ!+RtA8'2GL=+1J&&5"J! ݉ڻDF{QrؚeQEIZh.BH%dq~1J|lK,P\.d]Ȏ7!kSGb鱯cfYOvGdHQE#Iq앞~I~ER4k*EQ8wXyG)",E_Š(ԉ'쨶,3\yT6(~E4,Rd( 2>1J*e3MiFH4߱aҍ(Ӊ!?dqH`,1=(QCzJ$(pC(Cz12~qJ=77G'{pc4 KSXnoݺywOQ(_M{tQK=(8<ߝvOI4QBg,X %%L5 m)[$t)em/ٗ3sVC̄,/2o&<Iv,/&|ke,7'B"5cp'BQKQeJ͐~Iвc(BPr_f0}ǁ=l0[l!wuyw2P!R5#R=HHԸ"9#. M\ W?`«S]4_8FzR=)5С&zSg&zS6`n5_GcHuqVjD)>|QK܎}<Ɵ07Ⱥx(PH&e)s䕋%q\#}2#҇HɟQ%.L%Hc/?(s9'XG>ʃ|)7ʯXdƩ׳R8htL]7(PTgI.kd(FFYd:vbGHg6߅GF(ɗzC|.|TҌ4Cݑ#OҊF3?WPEWl×nx"+i$:eGQ04}%HbJ x4K>k7~"wҭnISI1F3E)mu\߶hxbDwgɗ=U%ZZD%ڟ|U.v5ʊQT:bG<7*ƈ䀹%ECcIW nGN5F\ { -G EF)ElK%c>DG+#ǃ6O׊t6Q9(g',ĖH-L%[񍔔eF,w%|\Jhƕv51CS%2x|(҈GT&LN> S%:F(+e'Q'm φMj{#FU_-Gj%}2ڌWҌ+B[RqbkrQkۊD*%'IQCK)_n7!$ŻkXZ]JOM;D5bec5I*dbv%H\_l4,Q2RF9Zؚċ#lDZ_S2ahľQ~ƘSD;BmUn ę(~0cv=FL+xC*pE+%7 ,%n:yh.M6 D'YKtj[%Q=2%%~dG'$ߖl%'&`Fjշ|T%y6,;f8j:=U~{REBUߧkQV-g-bGTҖjt#,:x}ϱdsҡz)wb{MfiFxK+?9csQٌDOQ&-c.<'QߏOCfFj\3LK(=g?a6JUr2eZiv&zX_|No|cr:wZy(xԕT)Kk\eٍ§4UII|_{ظ5!#ǧ\ NB2fUHmf-)+$uNu_G5_c:,'Qb[2i~?zǰiq~$u-kc;T2Yjy)i$]~ $=7j*fK,1㎑+nbYܨ5i ▹o2",%aƪٚ*/nܶbʶhfD _3/Զ/(!.Mq6%GYz%fI:1-}sBF7ξEٓ&9OǜfEQ9$sb{_f܄Y7fIR&cxEG':'F)-ɴ!(. ,&|SobM%xӱ2&i\㛺22MlYaIWzƨ}4~ t\ VFn/2_ZobMŒwkS%,J  dSbc|{G"b1t?/װ'BOЙf< rƠS6pc[DzxdPHGWc&v1.|].&G QXD样'Sǁ"2t<|iGeͧdInf{v)5)X;k|1y]/qJnkUZ Li[4#J4Y1u)JX=*4Q]},W=-*uUfK"\yaG\/nF.~8IvSkv=(ǁs#,~ٓPfZbΚtHp+}HE8Тqcs0c#G=nپ ivE<y%5Mq5ٔ.(qkkK(q4>V,c2C~6>! Î*(~R>xb?r_1¯s̞P^*-GR32?? 3.Cy~eemJKWE_I{i)hVBzۘ3#?oLd1I['k};."4J_++S%9=Td%*ۉNvGmn>g=_]ŋ[+LvJr6Ibl3GӽDzj89(x^R:؆=DbF6cQ'6؆/A#aB4eԻIݳ2RbRY'QnݐfE{rl.8g#pK/Fv*،X)-&Cvi>g)Jzyǧ[Jﴶ22,,OǦ;v$I bdrF\qXl[!2KTƩמ5r 293 uH*JTp6&GS*(E4eU-g[#QEUos|kqEU>Ѻ1ֆKzU 98T8u+c%ҙOGg!%(.~Mz3bغx8JqCwIz3Dzy>Olj/Nyn<ɨLcDl'; md [&fL0?ũcgd;2_)}GhԌ* ҉gʯaKq3G#kFYƉNݘH1m=X0dndeu29V>|1JӃ1djZ_l Y-S2鑭,̟9+fgv#-.̒iVMG4>2FYG:M5NX!-r2IZ&+vK7̏\ǁizvneƮEuDp'-.٫ԗl!l:mF,JJْ,Q/,&,z3biYGy|_#zwǞeӲ9oq{qVFr؝73g#{pGx`J<vOϖ:bKY+3eӲ=,ܒimr=(~2i y4xfb*ٓ%}(N#z)aѝ85!jP]6,JD1vgӱMFolu#;6M7G[Tl6CMvb[<Ư7pG;lɓQ 8lz)c_IǙD#8?(JDg F_SdhǓR%j~/F̆O_w1OCO{[EcU.WϜ2Y Kb`/28N1#!LsJ1!YfO:1ձ$"S3<]of=8ػfLD mr>}QIdM*Q_Q<=CV,XBUn*!Hq$rkq*.G l.j~=>5'l|l(ʌ1ɪfǭ GB 0\ı7م5;'f1c{tr/½2hͺ`ZclFN, eS#.&ଏQu3R{xP-)fh3ׇ웹_M+UcXEP,\)dKt*cIљ'ߕX͐/%1^K-?9cKܛ#5гŭzR$2%Fҍ+^ Rk3hN竎Dpj!P\hDlP̱9/<}L g);Cd1_ J\v"A+Zc"8Wɝ(%-cbHb%bs#X2G1Hc)7|tckf($.OW/O+fkiGR?u݋,fl/ˁuBO6IZg17f4הfcQ9y)24J%,}E5gRQqtB}*2=W>Lh>BpKizhYO!WWlȏO<B?̗Q'Ǿeckٌ,cBp:{v0}&2_WCcSջN.( -)Dy>LxpLcۧ"G2}Hat8ۧR9dVG.V~юZecD#ǎZM')Ս{TbŬ5=V85ό!J%jrDۢb3W1Kf5$Fxы {A"i%VǂHjiZ3h||ǍgfGӧ%JM;#W$ҷB-OMnOM")pzCF)pPA&SFl^OVR$(. +,ވ WVljAv˒8ݽ;< ĿE!vCX_v52 QFiemB -1zX1H1+'% j\Kvl$}섴,/nSE-2;khNXSسmBLfIjK]'3d4' 'L/%'#pƻ!= nF]RJJ}QLhSԨWt=dbt*~̨slWf奓{#[#z'=LjCvӲYfOZ&Lyt:wc$'+f_̳ 3hGyR!=QMőIve"l:f?3"->;ݓmlF\-ݿ"_K˱lB%R~,r8 Kb'-[\TIofSԈq&.oN+ٍW dS%v?$~[9pJ:Hȕ~ddUր_ V8=1Zi* ((&C ~I8c'=oܢ ؃2Q(X1'8%-N>Q(uF: TfãufNVUbǮZOˋG2Y=,y&螈t'dzy1a==dpW$x㔸#螉,"J .Y=GrMWq"pnnQ8F?RwQlX߶N㨡*ܣ$HƷd1B868eWWQD5b"̰߹HE,hpdO8SGlkTxdP1$zH.Hx]?N|!SF]>5$ȕ>m,5|I?KYv%/%>O| kc'Ox!ǂ,4R,c—pYej=Xx,,sH"̏<)}YfՉ9&3=d#YeXE|hW}l/QEvj5+E4d⭜p"+CWi##޽Ռ~:F.=InYV_i{_Q %xrrWk#翁ǎ._Q[yewġ哃7eyd|\cQU/n2<w.fGz=X1,eN#zHOZ#ǗHD"z=X:%DsV"ՉDyC~hh$gՈ"Y[/:Hn].Ź,Fw,hʄH߳tz) wS#ssrY(SR%SP(nJT,(-{1hI|Y'luUBMGI6aơ2i\| =3U|_p\!t!Fe(i چ+4]C=6h4^ Y>㡞PxRJ\dc}&8(~]TJCBbQHЇt#TM)T(^ *ej)rY Lrr)/-,>L,m$竺G!st},QKN<ђ;TæCaDŽ)("zq=4< 2.YE(hx.Y1JDzt=("zq=4< ȻdbEQ8R(4ol;6E.F'Ҽ#(IE 5%+ؒ(' $4B4Ima1F#+$EI_=ؔ(Q8SD8x?ԏR(2fŝq23i|3Œ;h>;Cz3/ ]BxZ=h~̙dm3H5ԇ+ɕVƞF,rHyNV%lTx,YeʑK*}=؍EX'+B*%,HA,b5Yc:?tmv)E-4)j,5]R5-x͘Y%x=E6d[߱Ge,2v\hJ}\>HfT#Qʘ䜵?5&S&LDZ LZ$~qf.}̹5qG2{Cw꓏\_3o9d랻c'랸66ߌrGzǒO2qY랹cm,y"j݋'z벓B#((dl55#H=HV-݋'z)P8(֙6ͣT_#Q~=H{l&=OQQ_/PQ'Ig%2^)Y(׊tj,-E!, 99F^*-UX)|ًNvʉojn< >cg5K 1t߲i'K$ڌ,D(,q X$%IucT@Dy,hc.WǸ؏dE2ereIJ+Q8RbJ1(~5 4Y&ndrĜ#!}2ӹKgntѣ$4:T[(Km'=)wNiKfϚc5Qlx䜓%UY# ]Eσn!SF,0\"NSwd(5OX٠q}A42x%bnj׊gh~Wz~iYDx"bme{/qFĄK^ߴR!I&]5KqIwn{C$qF=IpepCK$mai2|fڊ(j7K©l"+T7}MEQ%fG+8WgEPё{Yd#̱gnC߹e(Z"=b$K#~m,Uq15*D֙)vbE9K:yŧVceXK;=i|bE9{zx[ǖEY虋fyMD)9kber7r,rFsQ+:iǜUPю?,%U93D_dCƘޞE|='䇇?:ts#v3N Mג3Rr ٙqۆΙHG4 _䐿NfbbU9g',:|6{c9dF[_҈cs#)&O&#)f<9rdPG9$O}/LH,2Et=c'/-8WBVdWh*71e7Cz,zM?.2,ҳP^<zWN7ȢamIM#.iExG/'#Ցo/}˙˄E['c2y1%?{ٲC?BR%tf?ټgƸ-s?>Wk?:tq߉9,,M R|vn=$ISJW|{2u6K4(")£=d)yҬP^HJ+(d\5Z':c,3"}Oz ::7l4!3'1?"9#/rrGNv47rƩ,QF5H>hBATk\Ϟ1,ybweJ΄"^}&>=p6ޑxf&3aRVhYz/$:!I?f˹HHɏnH1IzWXs6=ܓv\CHxza3 497N7+)wh>L2 E7hy/:#j4mLPK}4GF. ndyze* ~PLlztҵι_ۍTIʕc?7o+ʄwrl|{YxF(EXY5q(<3Uɹˎ<(<Дhh_%X'ʉGkIP {y.hӦ_(ɍ^}>\{>DM.Xcu>e1Ds&YiZ`d<ȥDo ?CϿ7KJ(h_jg(WftQFԉz'h'Ş^IWrXԌTJyQst8yzIH>PEYGO;TƬɁQ8BGN#KN?M辤8"Q[$/jkd_R2lU໐N;^hF :?,7ƉE:XoPm(dHr˅h%\~XnFłed¤<2E2zeǸX$cY)ng7etqn7Ew1gL[VǢ7 ͗odOzQR#͈ [O_Ľy1R\N0TC Pʮ#\4wZcbwk,x 1VCC 9#).-<6='3z?kI5vѲ&z߻]Q~廄}E֕\_Iŋg,ߦT2Yjj2?\ D1ңo"Thŋ*꼝;{d%7D:>'L㵹(De0ܴą2G䌶ˍd8fΎ_6,n#2O\BT79iE[%_3ιadc"f rJ?Q:q5"GsBTa'L~ ě!)pdc5hƶf"۔w53?Ojʝ|'FR>LqGً}ܙYEh O=3#dû(~y,=Ϸq/e/$q'6輘ER"ѪRe5ۣϷ}ЈF)?12g=_%))NʹdeO'QKɄre؇'/$~d%z\EMc|ilJJ6mJJ啫V% B5F9|~fN{qVʸE['&O;jb\Nz Qt.N;]lt7l3"}Oz :u0 3|֓΢&Dz/ O>Xh⟒}?x)6F;UVt1uwx"Q~\3?>ߋ NW_I)^tKR#p)ISfG$W%T3IMq !,J&ŹYH*j5|"2 E'hy/:y1ƣFr'Nj$r~"JLXD\(2P N>D_#3IѴqhҏxnq%X⟁G+T̐ƴY1?3R<6%kD1x2FLnܴEk\|ݳ&_ѸR1"C:e֙,nZBQ2cVS7Cb6KHtzhsrGGq%\3ɒZ%wJc/hQaʦ 1Kx1#|5s46G(du:{ezt_dmIK lSQXy6d-T,biEkgHٱ%:WN􎘚N؍r<76,˿$fwyx/8ms ;9zfE qhE~hܯ)d eVw!x:5#wJ܌f|ɖD,j7Cr21r"VeʥnM(̸1j44Rhǚy<~Db^˖= q=7=Bd'\Lx~:wXڳ 1VCCO(P>lS/m>fDzZ`3:?Og~'5RO, ]2=ŠZdt<g*F.bctoNa5qzC{UXG2qhԇ*QBa. 7{OG(G_RF[d"qqt :'̩i|kK\n/L> Uۍ}_ ,zR+ a$wF+:<|<96G3GfAxFr&ӸRFhӳ~ ȅx5,νr#N9$RaJ欜)[QVd&ȅm\ϞKFj_߸eQ]t_RV\%(GI咍c'f#>G #'MGMӞU\1=3&(\2k܌=H߹t ֙Ͼd--ֹH*Zct.8B%iFc6ZLxe |5+#~я7"&54O6Ͳ63k6f~F.2Z2N]KR=uyF>_{''&QNJ(='ࢊ!~JFwݒwF##ࢊ(C( ZC'コOw~;C!w7І"hޏݪ쟵BڍڡDmFgPl6i^Ħ)JGЀh_,reLnc,J(X8yh½B]7y:lmzO'}!/SHB'~ t9DJJ1˖%]E2&Q.Juؘ~r~$Q rQE$,GƛS/񲴌ٮG^/i '-(~^ś7$b-6V}Y(ͬmaEQFijk)QLͦҽ̙kn7pbƣ;3:|.To55g&Jn7M)g|#KڙQ4z,UQD*MZj6j6#j6i?D~mE"QfF5FȞkmQ%XmQYK֕dXlsek d|vEkEibp*#ٓ*ks7{7go<ϑx?"ėk#ٺʚzqƙi~L,_Vu?FLQ}8x sȑO!UIt9DN ު%5b{LX"{2>U?DF~IMs8x 91p=(CţF?HS!A ${ ,Yn7 dŸ( d9 v0:d>(?(I%Kc+(2I(ȱ8k<߄BPIM_zzo'#ƟgX\~GwK?Fe1|;1&6FPx1N2ɧBx1׺ޕbzJTE7vYz]B,oز,,/[/nOM2D:S, #o_lc?C RtюD2toHuRD&,x'ƘyHyStDQO۳.v"Y%/&4n'$s.oy3|}x\1ŋFPDr>cr/M܏R#̇$ca=Fnzю47{.Ib~tznzъ4Ys-#%*䑺cz-%+|7#Ӓٽ7_ !V!v9$<#Ӓٹٹ]縳q:dE!ћ69e"Q\{ Ybxt>ƴR픔G=ś'/MN* TAE{S!EIx(=\HȆ=J<97x'2( "(5̾tZ%d1Wy?Cm(O!ɿeh[Hy=.oF!h74zoof~ Ǻ~.:7$҉OTOQ#%5N,)iKiETOPrsq,qdy|2QF.8^ (_QB"Wti7EGeCTPRuD]#-#cţEY1qbh/|Pl6#n~auMmʉ&%tYeY}E<{NIy?nRWN;DJ$,,r>Y*Ƚ:Ci>YEDOQE\$4Vٽ̣6L(ZM f)'Վ(kXt5]QF(w5c]QE3kDVB,qk~%kEh֔Vy #՛ ()MwcEQE3ip((m6<HIE#5TGb["߉?Q.{gIzgT\$~L]l_)nVy?S+dg~};oL7EnsPVw5(z&޾|/UDI9ng5-zd]N%%>K%3g0t37OpJ2]g儼we깨)JKq"cSKƻХ7$Y2!;+$^bh^t'WB(%E'Q0PlǏ]"X9.K}#i()y%cb"Cdl*#KOr%=c/$eȻ_Kʼn߻ee)QzZ(Hk!vb&Kדyo7J[ٜ`^Qօ5/Lyo7Kq3W/ÞE'HyfND7sjٻ=C{/W#?nf6nfJZސZ8{[H91Iإ-heYe~͖Ye6Ye^ߗ7SYe!ٸn7yrG۔nN/)qq"D]y%U%ho3W?c>g;4#x7O(|3ϳ!I?I'w46!hG=!EQEh♵*)L X\Q"9&dr D"}BG&&+dpE/D%NOmx[,(}C~ Ïw,X⿽l/H~dYe1/no]K+sw'Mמ؟nQRI߷>"%Ƀ3篦#齌}4JN\\bsPV̙eƹ˝˄EratK#D/#<1O/.ZKe0_nL'D0rbU)(ܹdM5ZrU"y2-#䟎%ΘƫZ/>|Ѫ7Dan2ɕEe'kSQd;>S Gc&\Mߟ,|`ɒSt9RO&/i+?&/&*mk#wl?qΛg6^lݺD^OՈrKY:V9<䔿? im?c&d +2ܽQ=fcbSQK3f<ǰ<Ǘ ד&o w͵^IBl:7ebȟ'A_hI#M YGGL}vPϓjC-@v8F6$}4=H2ePFNR;h;G4/G4IErdN^J!tx=D"Нz$Q \麒1gT)'/PK4 ŞHfLK\.Ic #2 v?/3YH V(ޙݲ_jBL^OSd甌͍xzfǹ$}I$ DQ5!^I]pnrdqЬ2G#䓶LGqÏ'ٚH-yd3ђ~Gj'3[t;(ŏi#^k'VN?eG< vY;d,F<^EhP䛵\>^$CHߵfц>4>ɝL)ޙ_ ap>KWfgl_g|GM퉋#pR36Y(#7?نWL,c샵cVJ;#ΞMl 2dH-MyD:y=զGbW#, iwSOMmfEEhfk6&{ڱrPl6k~bŷu =Gin>#&8}N,x=s:riYd#!(mKƓ̑R16FmI2qq>&5f5ZfNUF 1Yi&K$lۻlvL-"k!]rJ>?US0LJawN62|:Wxڄj3_R1~t%Z3޷Dm(ڗdOr2Ee#ϒ|M1xj> *3x -6㌼S!2O,̌ k(y2GlQ3D\VfƠ1O's5$*>4DonZYӮ q5sbUbNIfYrogŖ>續Hy%!SBۜ4,f+]o/ڥٹѼK[Fo7Ddr2܌-1-͟VIfH)WgoLkǃ06'd?Fѡ*T-${(kF8mG΍Z-6-˃-KhRl|R#pkñD<﹫<0"k1MZ2bYk'M|{%5LxVt^ni?#I)x8*x tPKdQQi,1Ai]J)#Ke<8'cDqxPR`qOȸ,2i~H6dw t<P܇2ec1rJĒrr7[1qCܚ<2RUmcOKt֐u䛷m}RTy*ͬ+H ii(OrHM?i9xyoȣ?E >y$Q]摓4r?,W)>Iu Y%hc&ĥ\Kz,e3x(Ri{s #QdORm> $%%'N_mT-zPyn)[(QT|z>;e*L+g)p#ΙRɗoߒ>Lq:eȠoo>d®};'=7Kq/%Z82esi-?cڞEgNID!5/a%C"<[g"c/ДNUeYz@KjLMr+؁]ҍ wVٔyfN99QjN.LWy\d`жKAɞ0'ς'0Q<}U9dcl]H>l2u_RrvP=2 i2Oo|EL$h396I1JrnZu+%#Y$>l%䜥JhFXnTCMSi2*uMZl\~I!(Kbv&{\kV>T$1Gj'k!K.8%&?,ɗi?%n2NM֘b۲sڈIKf,u"څ~KeU E oaWglf@l6}fͮi| /($6ʅQcOg-J_#ڎ:{]L}K^HMMqw$2c8J8>ŵQ(); AXJ,H׫#Q1u \=f;GbCU0=iQNrtDlMN:uPJ|M/=CBtc-KtΙ\ﳨ 'L2x$6:1fxn9N' 1kWB &GKO7qYdqΘI:`k\qdGVcݻ~5㹕FWoLMkdr#3-Kj=Fzȟ7>IGhmBIquP4ho7Lkr-{VȳylA36.x=995Hŏb:|<^Sgzs! QY%eQ;ՙq*=)]"i6HȮ"\Ѷ!-ѽ%|| #m*2OIA3..x=91:NͶH?u|c0F*#Uٖ4L\FΓ3qѴmY!abwq_ԎR}F8qdRF|[G1J[Ye4FQT鋹+tBt3,\쉏-zdǸ*RAlY"Ι!>fn7eWK5>VJ;ēgO+f|2W܆g$0O2?'œw~NYZQ#BYdwUmz qGۡ͛r\DN*71Ls/1rBF)e^M؛f,m&,'a,*0Ӊo{Y鸋M$,Uq5=я-[Q(<[K? ~3-r 4R!lHMMĺ28;D1[T-72rjtG'մm沣wE=N _vH>'Lhi?'k%j3t_:zq}$a0x-xo[%D!,QcMzLbG^;aRe6Hy3x01)D2I&^AXqd'%ɒR^5&5QѤ&l[y!'&2?rQYW|`g|:l/H{tzlMnZW9YeGJ). L}~IwI-#^5QCݑIZ6=ܗ3<\=nFXSB*2AMQ/Q^$-tJՒaWr(qMQQszN;%F #1qGΒVFh#Fx:ttCk# d'eT\~,Q+r#x1O'|bO G/Jh}Yp"ܬ=q,Ftv_MTK_cN K;/ߏܚE)Gzg͌kL}ZF[FQ=6zlٵ>;|Q,$8֑^+kl^Hc2 S# Mrc{BƓ4b>ě%:W>Ҕ:w{B̽>rU.$`/{WˏYCJ3{)3x(ЄmH$Е{sdb)灪6߹9XdS8=FzSg1CvqBqA=Cԑ>;g*Ւk9=Fzr#^~-2FIU%Hp#KR#E4d&5N̜1kB$͌~ ^;gǴ#g5'_]C Sw9$zѺ%uGЧ?лn}oIfgҗ&WLx!2JTYe^kgl"y+qö.k1ŭ/Z,Տ좵RiA[':{oa:LR>^oY''<1r^I:Xj>OU]2̾bUsH6σצ(w"q6#6iQKpF`mE/f؏L%EM/ۣ+s2uurh=+&ҤmMQ^72>AGd(#z~!CRQV|R%̉}ÎCcsnb>8FO4H:^}%f[V'~̲ԽHE/fSQ#?rRz)HhQL\{s - *ylQrHo7b]o7(Sy2 +bk#픔|:87I;)x0E4[HSIIĭ`w!vxH i]c) _:;\p/!-'1#Rt)?YElH1GԻR.̱#,d jRj̙6#׍jY%-0D(9vޘO"m mdsEٓ+\!ˤ,g#Ei Hލcdcɗ" #lI~ܝYe9Rɖ_dUrPOIcmDSˑ4jF-$̰pz'N˓b2MScuӉFJ^42OGI?3$HoBC$2DaoJdQ8t?_?r|i+fxmg/&Ni ̫9O_a$" ||c\r[$%^N.a<#勃-rdȽhǏp0;e"Cq3;u6G& ˑ+d f|QF9N,Fzf!9#^Yen^M#|i^td#^5Nž5#>9P!;Ϊ?MbF .&)m;cc#,n4y1"X%^MrFcDP\Ŝ*|li!gMvN.2 jFLKnQd}7ٚ,jq/"GS+w(TCK'2eźaW:/1_:fz!}!K2h-.y#+\JeuXnw&&x&7/%%e ْ{f|pZty.M51'ɏ.&T tw*2bq1`-ә_`tj̸\yD%سf&we*3x(Єm#Э~Z2}m5j%ȝvnuFYv^dib969 >;fn%;s,iΑxFho?#C=:!!"hY%QlZ1+O̰?imhgOgTP0(4W?ٓʿ_C:Ym~GS^)S1O/|g2x)_?Jhk_OlDF}pD!11F<[;2arbi/:y_$jx6}o1Qwb԰ξ?PLpkBv4/̫xH"2'(2ڱñ+6iDm{) v(Y7u~U{UWHڍڍڍ<Q7/fyc9T"-<</#ync=Dzޅ"lzލnc=Dzލŗދ7 2M叧.3W)Z#9<1s!N;fDw?:$/} Hd~2J5JҊ(m+F8;ҴhR+I+J ZQFaH'kһ3ſr$n7 JJΗ"%jn?n7ӄ1dSV",nf8KzM$ sBjJֹӲM$YF[m&Uo[Qo/,bL|='DqUd?Om12iHIq'n711j9ؘ!}cRhNū}|o IHz-,z-$!ito>4rvo>4rh?$\od_ѫ%A:}m]+F(IQ>$w|rPeآf1%#3esE:plJHGGEJ"j'E YGBLJ_e%]$ĵlwE1. -+MQC(KJ"҄6҄Ő%iHqd|{#S8~\k$i` I5OtHώ}VTaO ߰՟p葚+ܞhu#q6D2iի# 1e!R$r^5(YQR# gljMaKMm+m(QJ6J(hvm(6 VҊ(heQEE+g9ڲ|<3ərm r$C9~^'bND'ٜ oq^ٸ^mvٸn/Efqe稍-\=C{7PCzyūCo7稄C7y,_WlG N|2Q -e%ͳlG2X 1W"W?&؏>tQ3'Q#>^ɶ#./y?Fd.46noH'CozUI!KoHTMrHy JF)wC-ѺEޭeYthLYeHnFr-Yb$쏍eXJx율Fi)F-%*.h%Emm\!4G1!(ٲͬmxͬͬl+QeYm6fim*%6QY 1XeQ63dvCyL$)'L1'x=6zrZ0`y93sU\LHƙq)(d#G!)$:HM105dzr61ţN?lb׉q~4ˇw(%Fl nrډ Ye!Y=:FF~E}XT_$b2_>Լ ⍆&#lxOM-)'f6 tl#,xMnԼ2dVե."o3K KO[C&^.DMGź7LY G;v)|Fʾi$$c"U^HqEv˃ih!E?kԊfRQ)Տ){_ee5^QFj^͞lfYHI~6G|2Jٴ䙴yX6iArQ,lJFJVQ=;O蓲މNF+rH~ӑe9v9^B񫑸D#Vŗ%">5lYz+%";,b,b/ز/&G$dʹlR Ewj摓՛ aɏx D-n$@,"=FXy0u+/)xD 偋~&)&yWFum#,. KK=VHy0YIdQ#7/j'9HFmD#f8YִlBIkc$ݵQU kZF7C&/MX[cn,LT9>]BӔnlZɌB>NQ F"u|i'(zozGƍzoc!z[-v-rr[73{ioKe{7 Fy?F[9.Fobz9ޖfnk)(Soy#&|NmU_7NƠPoݞDbk,zn'/ ٴB^tI2o6:I[6dEyFD(Q}6#` QED((.;((%]QEm(QF*hl6  a]Yl6Ws6 һhl6 ؗOMjD#:;$?8.1,oOɁ_&\,|dh}.bJNѓ~`E9?iHek}d"CKܝL`-#HƷ< 'W"j!B~5IDڳ',Fh%Deh{mrc_)b^#dׁNBND1W޵}ɏDnkBvmo7Y}n7m/nE~ԲQ/=8~.tg˝D.^I%>G Mp7hǗ˂1eI)ǧx t'5-|#[)({NōT3 d$FO$ N2K"y~W&G%lcD<~ܝ!dM5f qeI?Y؍nj͢W VQ5bT3iE X m(*G1jn6(y?CmV!ͽ+J ͓oW=c=SGMRVntS)6FWOXTy?GIKz[UԼgzǪzOk!K\9rKꞱ,:LjflFK+j=1*1A{m&lFbXҍPk;+((QZM> ڴnl6evQmrމcq$63k)^d\HxL2`k$ͬ"3?N0JBzeŸ~ FL#k[t1dx2?IZO$Ͳ6Ȧaf\2R.ܢQqdmfFO{80fxx(ڍڽڍFmE"Q2jpK]rJ ^O!1gSnҭq0]>9yB頄YM zz0h#E,q!CƮ L%btS_QS`,kk]66Gu2N<9ԇ ^9nOIbD`Ɋ3Fϲաa>|ϳ(*b÷bfX"JKI!"1 AQaq023#@BRbrP4`pC$cS?Jx5$YDNs0egZU UފF/ U I\;_IR+o.,%eg+7\t ^dR~jТͳ̮r ׁUytB8YBB:4 xdx?jOxTxT8%;f_*6O@Ÿ؜>JGqq)R@Ag(uFګ_+hB*ngڻ9 |BE-$ j?-{+u(,6ه -O#  y-A^)Bke9vxZ0s?PPMT]Ocjz4- WRe{@*!nۋޏJ( :DdOts(BCDhL-Ft(Т~;EGy؂(:MS1Y+ DRMN&草|t[op}N=kTh8/ ɯ(ċ$t!BMR-wH8p_nN-,C^*\͟ 6tTMtwT&(v[UZ*V!a:[{jvۨ\˚:w .;RU]xT#[w:N2 1jz݋xOnGqD665fO NVq ϯn_ER%;R#u$3M!X@ VwQBx氕c6{R0!9Qw!s w z.|;:hnsUo={>cK׷*3*wWm~[#3Uxr)N#|6}Fr3;L̯x W;2-K_JBܷ-3WNqnN{\>R0@)nh#SެQN5˲,*mD~1kFqw[20UVv= H=Qrs^%dwQb E\ƽ0t;{j: "rYn[*nw?x"f +#hu?wF'v JzߢbAwFξw nE-{;=w kc^9 D8\8b92X r CLk{8ʥt 89nX^?+K+ oP*7vBt3;.mHKPzla,!9ЈECv!:*勂HP6<rOvT b [XZy)ek> Tv{k#U7uBwmʫ7&7~\`(hPV Tr`7iG,T?Ɍ Vt>͸ޱ>Ti# 5/n{F!E~7uHR;roh\w)?"8{jq1ijv)ir@cQPhC;,_J, F;J|7\Qdq z|6 %9-yبq ݻZ}u7]b8y*Uv$GiU6nb9b^WؙgvY }~@*BꅮĊHTIjƛ=vIecQv%bw{w$+0~jŢp,$puS-xSdWd4T@`.oX[+O`+5 a d?f+v \ Ь:xtp ()8#۩EM}<ԝT.,VQnX`x#-wbtܫr.JJ,ͯ3r\㨥炱<[ :{s[^QnKB.5w4$j&qUܹ{Ar<4*Ӥ1^Aw@T,)!auЋw*|ꅐӁ\ X:jRP;|70PAچ{axTpR2ڍei߳X]h]" 2jAG%jע TE/FrnQ;#PPw񹇒*J.ÚZ*Ց .qT][;Gt3YCtZjݟ5K6|,!@yh{>a]@Xqh+# cH>WzTeghʨWp,~衭qTj-ZЫ\&';LFn  n8kFAR;8LX+,'˱Eb u]K?ѫP<4s+=YIڒQWɣX~?/t(l+蜂uv8% aU$ -¦&9o;05453f0|FP1TqmVn(Ve1_T fux,[UlkrUٓ(>.tgTnh]PM]<~*OyO0~uMǝU,׽UUϚ#~AꠋO*BM潦,,kur/Q꥔*G|-@{q};EZGU=e!ÈQsn*%f0Ge-)m 'Aeo/iuBp=n1nknm(J#jh?r<ǎ>KG:] AKLR*@_(۱1qAPM^cx+@/7y\Of~"Xr\.d FmBoS|/gi젬 [6p*p&n3aU@/+0TtN?Bp"AijՔau&۩R, NoYiG {{MNUHi-ZT  ֮e@5Lv2:*DGɸ@~ J;s&*eU|;ik)Ӽ]iaqɒdƧaтcQ 5PT  8mgǂ#Hc {0t;{j: 0 whCFN 砺5qܼ#ppbW ;<'|ׂ}T:XGDQi*[OUB WtKMV/ӛh7!{G8("B-NboA)Dlv!y' =fj.fR][k& ~5@ɯxdڸrmǃ(.RŔӂ1 -ZW?6X'MOa=G?8XcMIS}JÅΪ ^\K0No,_J, F=VfS寒uEG'a,R mX${Cצ̄柔 JNF$'nou5X78&T#=RB)ݳ-0N;b> TX9>j0CrhQ<;[0gBN˯EY]ͫMTGB;s!?+ ttҜ'@џlJ~x\{!/s W?ex,tZt*[DZQF@ !FP݋O+fcq #VfYD@\Q@}B >ZY {wq A:'4SN>]˚-ާu!a{EڦsJ&X;gv.tpv,n^][[hܤinw⍒L,E!ɪRPawvUP(6K_;WȎ+ ixj?ig7]HY{X]Pn5_@\HOIUw.GఞPtܪ5;V{SWc/s6ikFB<KN EV}.;3Mn#? fW}fӎ+6AQ\_R˘,#Ywcfx wy$ xQB\$lwr!OvsW[\c," 2jAGvYtEWF`fxS<Xt10hFa?4DmYG_l›3ժ pjW˛c/[vduv'Z\17& t]dFS(7uO9?~UUJO -XZU2u <;~9`` fp UXX.*bẼF%5؇ XE# XX |vW1R2K>\KyNY72{ByA|Arh&7J`ޱ4;mU^͕idU"؎{9(Phˊ4裷#UruBlO:-x#UI |lG3{ΪNȭHa 1NŠJ7 ZUep1Z:Re; qBN.Eu-Y>o.08?÷. 5{u<'EU5Ch+$skO#s:$bY};܃Z g+=DAAy+{:^yVlEVoP=l*7uVHi SsgGEWPUrhvyѨW@[EF%;ʨ jG'E1lroW|r*J,L,sdp Pƀ;,/ooV T)¨ٸJ#F"YPcDN߯EUUMt*Ai Gk&*a 8]<\o.8*DmVjuP5%R?28fGénF1wV2/,OK9GPyXEhTs67ZLĢUP7@E5Zvý'OZepq^ 7rÈFL*@,Eڭo3bmDNIqS 2{ *pUUSnڭ{.']PvvVhVQURUCS ;u=+Gj,;E~V,co{;Rtb Z.%w -]ы%( +YgZ:4ԝYjyhٰ} pj~.{y;+=#|Gjιǃ~?V=/E}YwVg>uRhб;p~RiUe >JUe >U*UP,v5ۥ_̳ayW:W ѽ@Ɔ3ئ3nX=7AsFo/'E517l&/q'%Swy(GOewE2A*7AAB5 :pT>u9PZK-\9*梪ڬ6Vh@rܶ$bhP^ b%U%Ad|eG8|ܔ4@P]?p`;^Hw{l|M IԧV1hS7p{=A};dSûf[r̎}w칯׉^ qz괭ХB%E\F3@*+:;NtqPUKkRU%k~ EtP,G5WJ@pnTZo.>xj h.z9L Ca`"@؛M:i]GeGo. hj<Ckn]ju$Ǻ(8ݿf.߰hԣt䇼,^y!'XJh[iuBQAVlҫ1Z.躅V$7K=7C'Ylk|<@M07SSh[9[Ъ>w 6 Py=؁9pPBS(NC"vKae}m1 Тe8&9<݇+un jg4F4{GO%m}j&UMUiU2x^[.PRCynڣ8QBE&;(#{׃<^Ͽ7ط~rOl{h^r U^g8)]w~b0)4h]d?a ZTۆ{muZV,CG|mJVAsYZn*/'7ڸ;^*%)u{b0ړ@b?{0ǵ9a{>U>@/!̪Z5ߙ vZx YڞxSZlF#f(f@a?C;>cn]qX5A\!t 枓UCg緈؛K0OGZ5KoV~YmO0845Tg]OUi=J mX"鹨E 260Mn;U*c,U*,mToc@i˱j*U=vhڢgC;}> ":wBZW ?xoF(w)|#*5΍wxGyKUM:,;^qC+  cbi'z1WнK 0S;c黊z};X8Z:rFwJw5թn=r2\ 7J7ջT1WSv!pZWyRK]UR+U^ΫjʕZ]UEvʛl{F֞5gQ^݈{΁e:&^;/{nV^5A/Ž,ۉ8,vtܯYzi^uG㲣,#;xnU igVuu\$jMu54^Tr7lZU[,5- fߨ]ef.WG]*\ 5޿ي:(vuG׋1E:(;z@VgLwJ/5Nν [wV"Ȝ:'[ʻ@0{7mY z P5AuE;O +]^m䡭*%⭙#PvSx6n$ufnFO`?PN;RpOwd-H>!Fh*Ewc貴]YsVsAnEwcEmÖLfi5wt7wJ軄uYVHv`~+eS׹5eK?RYq,N:S^RDp}T[g L{l[zh.E-$gt{CU;,ȫ?Bf꬙X|v|%CFR{ZسW/ڻ!dkzhwUͣ⳴;^GJ-?vWٵo!@Rl+o:v\n!T]pT[_6)T[6&7`U-!ދ5UJ/"bD g czvÀ5h$.c Rױhh=ÁYqYBZߘB' ʹf=Ef/k- 5_)aEދ5_J?,^ =[ԬQEQδo"qBɶ07StxyjL21B@j6`G酧--:eRo_1{Z_OEV+Ӱ ivq ;E+oypT y&N˟bqtz®!zvԦó7> w=ƨUnNa$\F$3v u\뼓1AAkqꊆ*y/$_<ܥe/**SrT;x\5TR(V[v+q"m6@>;;4vDs6^78H7dڡ`=ʮUӊuTKUQH *Er fWb)y 7 !7\ u+hE5weutx)w%9 bOa5Fubc¦ uGaUyQP<{liE EFʨ4M8_1^uTުNԱaJI߲@ToR n(@c沁O-nj'XUtsR؀Ź~>Iփ^᳉ʃRAE6}tMÇ#GpvU7{+O)@kUJ*.[N5kwU8Clq+[BP*j@F ۧt9I|cn'֋UQ󺚅]Jo+R AG 8PEPBJ\"fuEz݄ ܅E!| E`y*@(bw9BD)᱌n@/%SBJ*c'c>P#GʣV>i[7E,}г;PmcߊS5,+9Gd:'Lo+좚^aB8f>ǥÕ7ЧZoX-{a{jҝ=p6T(CQakqVVSCwv/ePu;]݅<5^%CB*v^N{@y9l`lb~VuucicBm^)_J m m-;Ⱃ^ eOZc.Y\8Z?{z5jo-vf.Pds =mnp-;F6fW8*z,]ߺV5Mt Ԭ;m?ub7֍ҥe3@"{.BԬ{,$k;k٪z)cakZzz"XUt][HUtCZXy,ϝ]m'r̦\7Qܪ"@Jt0Qvȴ!aMBkB~h{6ww(.)ý{@z_ZG,8[S [?.'"Nv7٪@W!(*ODuTnĕ'rˉ { + $ApMx8YW~-+H4(htU+!]hESspX4(i 8hݠf-5uM#RQARsn|IN󢙕Pv z!BTEJvW*@@egT m-Kz)g}R*fُ2C{wtj3YZ\wjyΎ9ÈH܎"@Ukc/¨7CaÞfSkp`AR/ rH P?'CF`s!s:l݃A)C<*jktoLXZQԝ S?!Ux1lFf XeV'&}PR5awp\m4(e5q!=`;:7VN'{A-[.fSm,Ľu䃙P[P.in?ڎE{7/u"0UX#.'\EƭF)]9;)v hU3@;sA{EnVWCrݺ`vžK-dz8x~~MN :wmPB4Z7;2Ҥۇٟ6h~;>wkE0Z.pU?rpaPƦ4^ v+(Ga,_Á<-|G-V fJkY`9GS-fƢl=HmbimU⩢z,e>EW ૯cM:U%goߖ8, ,SEoyڧ[*@bˢDs^͒ӡDLQvcT g"ⰼ6.VսS]&~N}TV'-6XpsxQP,.v`8\G2vq6B+ ~ٴŕ9@!a{A l#ra.w{. !X %eͯÚ։pqGt\9(~Zv;qU _^AD,!1@"­ ^ÃFQq(MJ(̤(RO-J$DF^(a-LWIN'ERgpGXMB"PBG{Zf#R .V-vn*A 8J%h{ j9[P8RHj>liވ:‹ܻ^Tlk=滟u"ʝU@{]六2u<Uj\WUuX^%geCtU7ITZz*Qhn VfUKx&l}H26),n-}$בPD)xᅑ-WIq$5{gsP^h&xl˔Y \d̝/U/q(Eg%J8O$oo* MXIӱtvǪHPUC={Y*HLA}ʎjZ U UP HT3j՛Zfո.}VS;Y+j|VU17ˎZd{ TUȏRhAJUV֋5Mv%˗N va+)N1qHӰȥV5Y{-h> CIRLU _^ 9!{R2(tP}naTB @x1f}Ulݷw|_U1PP^Wu3t^fa ݶ:*.ݓI^#T!K,%xu2 Uw$>AdhUrbUZ 8QTE5nwssN(tMPL,]Vf]rwU3̏7.M@sEy)ZE@!f>WTPU&G%GeR Vcvm%!Eg1U/&UM8\]C[9y`@ 7Nx FUIUwvE-U,'MQcDBP5Yai<ԎVbu`*sKL&n {= Kڋ\#.Z]UUAp@Jy{Iڭ5+$Fѳa5Bƛ^O,My߲\w)v/2v@Skp -QAPi5NÉS2%C(+UU..+U*` leWṍ.jo-vN("B+74l{AUv+pŦf+Es๮;p{ە5(< ,Pz_i嵗LQi7МpnnWTka78læPRM 1Y(25ތgYa$@'Nù&<5sD4b**4pcSgΚɕNa{Iy,3KO4𺚔xNwUi;Y]T=5REWXN jQުrmY] nXy]];7H䵞l"$7uO v&_T @]kiRjn@@}FHrE`^pR* 5ܓYMo&:Qߔ|A߾#U[Ǵ%TVv˝E (CݧuTfSm8CDVuDF?> f%X]M~SƊb*sq< 93@Vh2na:s"YmG;z;5s0heᨸ8 nVzzjF/Kt(Cf TUpYD9{92P?0^YsJh//\Zc,&6Ҏdq;ze oPyiex08 -@yf]:&Wc\8Sf(3=ŜQMcv꽓,MkVmP&{6m!6gg8֐n5(Y5MZ#}Uc[F8ƶjϱhd<1G& ex^0M %mWt8{)Mv*f=[U -p3tۈkv{bpG 3΅AK 4):Ê7- hAS[rTK],(p/bD1u;*F1 j킞(X6$+5Nn0=wd /䩹sNPZϟb]yJ qL?Zv9r) _!- GQYk?\O"rk$5fh=T4k<5M8‰`j}A 3i&Z^5 ƳK+^(ׂ9 _~T&P;I'j}vKI^ZmUR[R.BYm?%À!eZpHC@j;Y^9Qu[#B9p~d=J,oESve"1E'm}WkMUCo~o[&Qcc3eA®#Kk?JZzkng9؇5J:jZ:{-V>Z./t6/qBDj@ɿfyC/;.}^~ݙ.0-6Ĉ:"ӹ8rPMgH*:ѿg{Ԭ,e؀5*8vr{ Y=zp#-mPZ6?ўiYGJVfBS ~' 2\gXV{2:UM+6nE$qrўaY٨ܥ~0Y72gXV{?B 6uEqZ3T1g+ L;X`#Dq٪VbةS;%LU ; JcUĩꡧcUR٢VUhT;yUjٮJVK|!`E40 Os+9\[iI״|1xעsEȁfܽн|#ItfUnU#bދ5Rzc;{9%$UYHgExfy7Xdm92x;V4%T8Tl~mN(QOE )!Aj x{4ILW!N(]лe8}gn C#wBIkIB^hXepX^i =$yfo=ebw࿪w-q~V]*RF;sJۂy[vETYmn@pRNVbsHJ=67z SX< - "Uua`FeUٮmOj}yFΤ_MSA`<K G'Cr kXOXZ>U? %eu hZ-~:lIG-=f%BrIAxY l~/XZ!eOD9"WzԦQR,N K3_ڐcH36Zqmymݷl7]vqî}vw^ řlk}䨅*#a:Ä;iO%cl軥b{Wo=V›'O"fE>:օwÁwqJp]6AUR&yo+/vq*ٻwJЫh嫔7KB7G"UcWeךeֶR2BC}kTA">dmT8Ao&b\2z#ܜJn^°cy]DuSgsA94ⰽt;U!䃝ZÛh޻r[ԩ]&ZfvCuBۂn P6nTBT* T-!kKZlhT76&*EM?EnWSwe9[ٗ8 _973jwKX0 BӲ+GcYDJ;plJ|U f$s^ Uo;0 @ق%x6x- ,7Qk+g17wGlWEY =?VYC gF3^#}W*d YMék^oP<ۡن N'66Ǹ5u^+?R{+e3`R44:IsjlWp;@9$fGXY&MwpQ3txKKjQv?ퟡX\+eA յg'9V`cjw貿* !b h &V~[#t,X=*gh٨- JIghy pb^'*fɷcZ&ٲz*QgAaoqѣzHb#vL>;Ovώ@U-=b2VGce=hxeKVv5J>jA鷝oROZkzZ5ޥxRyiϘ]h?i~ kFisu E 3f-`(?%gSD7- M1.:F]ՠB䰾^ϸA2w-qCpEkj0wV!EJlˈb浔dP\&*qEӪ*Jdmˈ (EZIj:,v' 6qU[苭_T0?ug<.zr$j*P:ijt6g/)awK ]f8X,75gb{rի@zZ>k+ٚ*tku{nbMlUiM *.U(Z-ڏ*\jX(EYQ| Cx֟Ǵe-H墔7̘?ſOkOe}ih[e֐4*ZꅒR1;h9J h->8ɚzyGI2v#:: Y &;pww8|;9qyBkx y\`ի P>krnenxASfZZ4BY~A{^'Th lg*Z4B3C5uYO*/yc1qxЎ^7UAz:*Hy/Lr^7T.g]xЎCKj/PE]O%IڼByBy+%U-G>ɥ8/g %Sf05٢]*5ٍk} TU7jo}W NcvWcX[UR*Fk:+3wѿr ߾t (2+=a?DIїo>K xuN.;RD Y2@Я (:q+}VQ^!{HWUZGUAoToigKM{7z-V,q*}w|{4=q shYMڨeO%>k䱻(QytSШ6gkv jy"}ua+,x >RVZQkJU+[ZfqY(F%^9xtؖ*&ڝ U`#;vepT>mSY<}:^քʣ}`hă^wPuڟ.\#  TgkgxaX >h?t-1fxYЛcN,e%z ;psY!KXy~wADp^غ) UKv y~PJCUA>k-.~wWDG JAHoR&7]D_POEF='kͱQ;tuoQE!rTK3ʖG[hiUUWjd U63ʖyJ/vҪ]مFGY *NE EEU]T*.WieRMB/fECuGOw/!1AQaq 0@P`p?!TL:ՆcZf;xW((Ȭ ݆& = ?s4j33Էc~:<U[6)ݟY=@f<DZgu+aEa xCKV3wf3UaY/f1e V]{8 ?XܯIң {jݟ Gۡ5a.}aÏ8;Nf}/S{T&,R#5*`c=c/GAwMYG~ }%hʻGʾs}wi埙=7Z8Ummh-egTV-/h}.o5P,w?zzfR*ui:4w cm A) ΧSe|;c}4%.ex||}/]~˗.]L9~oHMfAZ7!MrEPR5`}\r1ޗi9R^V%D4'YGCIu@ATПIpս#ǽdIK7H5eо{*mUW7$T)d݁BыKubK:*n|U6HՒ+Bo nq/+ꡔ.CW X}@uˠr&q3Fx+NQ4#؇LDnˬםw~~ƕ\.m~|3a7}~'KKoj"z?~Yi\nݿ8-M4[2),L!1Os8kloz&`sU9>'d a4ugY`HVn;ĬJį?)j=w%t%Oİ:;٦]40-!RzJLb1Fj޽s, 7B2l ljV~D b6J~*]+3?jiLX:f:cIxKPPox 6D՚?e]J{i:.*T${Gߍ3K/e afҥB˷?%˗JADlKNìjziN:k$F9Ph;dtzTaDc'9a+!Gr@ z9Bz/u Pцi:&XffiQ/k80R w  s00fX#:!̠Ez[,x\c8й.ɧG^/ NIqЂWgRGs_}VlU\_X(N GCd-ʕ*T,}~bֻ0F-" G 1E)9#Zw'Ïڄ]%$äZ8[o4Ǘz\6\)[/QcӔ2SuFn߉nK)9F0ZP2qtPZLտ#uw',vk,7{U]%KV^ hcMr&1z&i0y:59iLghcΙ*<}&g2R {TWLrwʕ*GEV114b\qB/:Br]B `QTRf_%FY*?>:]6w^Q4p:PJ*TWӬwMz*4@b A]m1'@GN:{CX֡ ڔpQkYu,W jb;)u}:iη8 ͦ!Fmz"1KhԱCt洃VIPOH̝E}uèA2L2fA-I됋#N2RNΜJ:|KD6ݵ%.EvgLcT0.RKc(i3ĦS)Dֱ OT]Lʍfa ^t DFS)Ip]i*\ O }6HEjءgqNu`Z-N9Oe78.;elTTP7Ky#}jy4q 7zt Yb֜Zь[bMq >ݻ*;JL` Җs6E5m&,ARWt[{>cߦސw՞'b𛰝i\SF:dSрER96GdlKEy dwyEMx38m`zMX$]ץ&AӴQCb--g~3pCt+Tx]0RK-;p =eJ m(|JsJ, RÑR:T+rt !GHʶ3bT* hBG%AI%vA ulE0ER+ʆ%=eAA[Z?j㠍͞GB.%h{3cfD#;'gʗS%a0!%&FRHܳ}g]fB |#O(8ƧCu}ݘX-JPf|l]#o*s O m~dX.#tƌQҸ@mi&٥',Y}`Cj5 GU:!Pҿ Ca@3F z&2P &U%k _x(lz_sXCB gH ỻ굘3 K(<_\!ܧ?03󯛞Mxfd:J7^[ cXRDʿA䠮ʛ5{?_3O9eCc5u._#%EI44+A}xI >D\+K W 'XV{:w}wf1z/>%*iIBҔAlxsֿ+>ͭѰ"ѣQq1F8%IS=UѦFo(d vb d&V<-Ÿ*uVVX n@_ KFe*vGIOf Z?(>~]ePr@ ߴV8*4OM˗C O/ C^񬜒S.d92&-SsfT.ֱ|!排>WG})gmW?O`X{2t4<2,{DB_` S V7g /40mP3}+ gSQRWb噟o)z~:Ʊqp!BHb?PZXٽ԰)zSB ëjZ+|y@o;2iq\irF*beSԧ8ekŸgWRD(j><~~] CccGX,DzǑT%~&]F>c RɂMY3Jr#1>̱m öݩ-S>&]HPs#[w&c`8DF4t;q_P.W+u }\I %kn@p^>3nGFD.\N0--ܾb /twveћOjk 5c!YqEuHJK Dmw0P.Fui4 jm_YHb\u an+Qpt[-8𴦤c5C5Z8\xzvJ*TJ5cDQr\&x)%Gx_K:؎DmmTMWXwO(na0x2c 1xGAf TY+(xy;2|v+G1hC,Ӟ~5LaVﮯhG_tk#bYnk}sX[E,t>_ƺt9无HWΧxw &~u+n_O"}TRNniV?h]&cLF;  l&{V!hˈӯsFpS%]i |uTx"-XĽ-,&|b. ū`1-*lɊv=ct37fEsrmWע3|?_WC(\7Is)~]3A7o Zu:e$ ŢW@=JsM5.RJT:1[7Sx"BxYsq^&Y0:U@ eGF2D\sb#qS?UkkUk*k5ʕ sL ~m6 ю;LG)-q]XU"t9}WJd"1vgޘ,:K¯YABu@k}Vktzm5)/gṯK =O޲\6yP(5fH8&.D&)ψPmsa-xw\ q ij]G1zVQzҩh;NӴ̾;N{&e5O'P ^V:[OhэB-ױEjLk/R 5`X`'P# z9Bz/u Pц\֮ j- >PϨyG0 dEP• M9h[2ᅮ"[i.$|E8fZk3GF#g|~<2.>A\1 ID=7ߜ o<*ʞQd4KP2qW[{ï3 ^;[k@E:ˁqƛq}JTd Y&L > -ڐaSx6ߣI:%,$]wnT%TYL]z;oGh-㍥sP[ [QRCkh5H \U)6nPSYd<4f%>5x7?QvaΝ-ٷȅUu;ꓖv -u휟y`j?ᝢُ :dXteJ7? + TRR&KTc;eJ@{We#YΓ_市isn j[.{Um-*)6U]ps}q!V2 V$3K_J*_Sxd0>Q÷6Im9zxuUօXST[V=ay7 I$UW^Qo"Kf'zQԙ[pJ޽aī´upm3{*[{ >p<xa\Yv@*v'tftTZ!q+Ⱥʕ{۹%1YRNj _IKH9]2}X״P@3ISm%` 4;.^j#5q: 7?41{ (F{<(n|yn%Xxё.0]_h]M<Vq7r)A*TU&Be߿\LIi]Z8Y:Xkh m(j)^!?iM="Q/}G/XHR;w< W{ Luq$ƇiAӴ QlxZZ!yI8Tx]0RK/%8\!2ˍ(ʸV-D*4TÎ0Eauu"ac #3lS쟙r ZAe ž&t>y=!T:LJӓf-1P*wc|/?k1 s:@J͔(4,# g% G6s~dUǣX tQK샏0Rmʦ= *[sy,23}2=eЇ,ln;De%O߇ ZY\COThζX59OJ?zXU­S./L-Rsn珿V'XP]/+Hh./(C2"g=јjwĶM |ujm p( VfT466Mv$,E51^@@+iRJ +Lx2lER`h./Ih&@W5y詎tMXJ4tU i&tQ&F@Rnu{P6!mrB=g8;|(wh+g3Xę'hPJC>d$pzBC'@j,5@m'o@Z @Xߖ|{ nެ\::Anc# P̛^<r`ʭ9   \VJš0,1s]MccⵯZ-#yΰZ?ܱ~J]2bhy`}V[v_P_{~֜aΩK:AooCZsj(h w:ѤK˗.\[5HUˮ^񂞻iV P }ן &ʕSV+}pO˾pAGO:#OH1_+rA,=΢%ig\BGeL߶<04oPi᧻'X*Wz/A)::|7w0-È/1H!?`0-7vIV UlQ|z._q/pd칯cTJq/Wgi9gICe/iLυO7D} ^o:ĵ=(5+*T?m< ~L~ i*Y*)%,v0hR+5^??OŸ)kL+*E*h5}fW>Rib5u!=kN ϝDu)g,/Kg/Վc +l ]uM+ .c<1~79_Ľ`^ѝ= c WЎ]״ɯYjUZ8~>;A˽ւ%صYDA5MSY+{;W?#X;>sC7O"zƌؔernL&OYMZy" c?%r[Z;J#>Topzxϛ1>v zOüQ2&J;^ GW;_rΠ  ᎎ<('8Nт7)g pG5=@“w\VLOi:vۭCZ+j2\:îV˭ҦTe-yvE 1)*7);մקIv cmEx0ϼJ`֍ҼtdB#z3m6*o݂L ^eyG\ 4驕J&T:O0n#G)kT%9IIug|A^ wG/=/%^kG(@8H Kev-z@ LV4<H [/}M^G*-MC~eOzNEDEۦP !T&:L65cD40ᑖ&~Ę\9̿ w}}p:烐~$ď%Ę-aujaw^>tGo4?q%̪ȅz-Y AȳTJ+ϴ}m/J)VTbkV_ZZ|7aWVG_gBI3@kªЋ0s{ {C]gdK²wkhvc&F~̧ z5 _>:׃&]Qth1|,lqIq| bH#IYeA{MAzSzmĬ4esHJJїket]DE硏f k7Z;[6YQy:6=ׂ$zOzy@ݒ]RE# i UB>h4ڤӇh-RU^}5ON@T 54I;!-KE_LYeYC,M!ic^̰Uu eF\6xg4tLF!ao/§Kp۱p4env_P,c7&O .&]0"ս~mZ;wᬥ 1k:~1U{Jุ9bF?=DDz'՝ŨǬJӤH}daṄṣ^Jq(?H=g%u0qUpH D %8^FL 2bSUFGp,i(ge#O4`oEzAǂ}(YqeP f' ů|#Fƪ)G+ Qw9 Yz=,ptJ%%%"N'G *3  Rg Q(]82&u17_i Lg0?q>(g,}W]Rej2u= y~PZ(H&RC12ސ0+H<[pb쀿* Q) [< @3dݑn ;Ӣ&X 7H&__Hz`.$4q[kgFnuKE{o4/ >0Ǻ2}<wA\`*ߤ=,wU=fT h.8}P_m8E^VR*O*(mZ_*L dMbFgUu/;=/óq tPPT)]`'>_!hsP{CQ K5ҽu2⍥v/*OWF ֯a̿wO Vk'V˕/j=PB#~b-@?}9?:<Jȡ~OZȒ1O͉.aDFRd`U\n6=OѿIԾQGʥ>d@t }Xh>ΓyF"&5?Z4ޅ+-iG979,u>=9rrG\ BX'HGwA| ʝ&OX6{FG-~SI''n!:}]DSQnQzvbYs";՘bFFG} T!k7|8sg@7v GqTk p-~̵GcYiuc0+#,Q_f.4|f}ynKCh_y?}呂MFM-f:1{UP7fkϤ\0 Y~\sCcd7/O9}q ꥝֯ i@jϟ n8CZhPZ kG?ie3c(Da*20گO.SoHra×W0!~,m5= `J5;O/Cj>IU~{5~PVSYf\}^"Rɪ̕uI̫!^̩ƻ?%4z]|?&h䛨}^T\ʋ@Wh^٘Q{o;ݛl}x.W(Z dɇbc5#1^/hԇeB%h}TWL y\pMZ<ȷT`y;@4utQS.B@M]1Iզ;[ږN| a嫩5Ԫh$tMzz"{~"K$:iyllvL o QDl\#.|Qdc20}eao"]m4(v㺧0p.{&zMއUQU2^gqOݦ- LU=Pט"\*e֝I-A}fYC$Nh<^c2ꚁ5Iԝ_yz@nYH3`G)#QsʲS_@ s moQh4Dj.u=To)^@| "Xi&Nx MAJ)m~*Tbxv2O"iv-nkY\}Wb,ެݕ!oYRu?Lxʕ(wݕ9pul/3x м,h Z/l;a6[piɞ8k@lo,bNމF5eޤ=L){o$FޱmhZk}*U2Z8zN6YW6ͬwchO āivGKA50uڿ,k "V8Wl/|OVk1q^kSkvǽU 3CvI/TXUȫ+. ReuaUe9@#by8}_%>OVzR@{xy)r''~̻)9X4qU_3 'OXGz?.}49t]d>nIix_z7 # K=ٹ16Wr:w"⟇?CO>W-eŮ+-B^/}<Vb`yZM2q] Zn%xybͳ FWN&e9A,M2^>yf&H=P_y1~ľվ<>o+d 5=XǼ BטzCd^fO7Z32NSjjcՔ{˿5ChV BgixX{Y'׈8+Tl=o} @_BZZ;\(YpK@Ǹw S5oksKhKMuTCDQTƒK{Kp]C/#.y5="ƒoI>'JULoaZk+]JMYv {@`` P0 H9䤬8 5!E"vwQW|\m-_uLf7c)Q7,pYFX[`ρ: !P)/LTbRAbܾrnr ı*|&Xץc-U*Zeh?0w&y \7yzjJIɠԙ6{LRM5 H.}poɏ}(+y&A8w&P?ʙE:q= / 1j>z{zJCBm&y8(*8Aj~x@ߛF3~ҕK]m xAuq<]g_&h1(Z 7dHZNU}Uwԡx:++82 u&ɲT=hdb{^Ӱ8W3} Z==CL˧=.:x_pǼf=ЭNGbԗzLԪmG$R_?3 0.@l"2:-YRhbΜ2%.M+tDBd[Ku7Knrk0g0~%aj>&=NєcZ(D L>!߉\Jٔ"+(1yG%-zt;NԴ}c,kSe;+vMW->L-.z~!Eu|:b}PGa PD`W|2ٴ@lAhJ7:>>ήTkggcNsD<%xYcFc;:DLyOOl-})hFh/ֿ[_oYSt>U(sKe«P458KtRՇ9>PjY֎foa!u~ ~yS8aJJJ:E8Fs5HX@% m" wL6K? 9Vn!T)F_H25)higSpr'ppFhM@l:1qgAv{l(TTRaA# l_McQ  fi)ѽ]c+PT;sA2\=bF3x=g qnIߚk8fi)ѽ̱e(*Wq32g>a|4Y6Møn8Zʫ[bh`#cvQ RaۗY:=% xyu~uI)XS( +MYvlx\T4^sX|M2 7_zEhVuFYB"է,L[O`x:0woyk#mXծc_ӯ%~{J~"8H $+40fe,ϵEjz/hksZ<8_Yo5:>d5-CK;軯3kP} b 9wF<?(Ϳ]<ׯY}ຉW(Jzk30;d>f?Lp*j=a7--Fz$973NzksRa9 6,M|~8+-483?A' }tx%c+7/9&`hioS=4,%g-!Vܼ jdߖ@"X˄gi`^̨ha=WXʼYIEZ!{7gu;9=&y>R LޱNt-xBQMb#-Ji<]ՖP^ukƝz@hbV:ܣ:N8׈+Z@hbl^;^X[ RJyR0u Z&#tEKx-)fjdUA5&>f>zb!>-ԴnaATw,p醛tIi rk @T{])/ejT^i n}>~t1V[؍tA-q2>EiWw`b %i|Zڔ5 py0\ i$+-PTOַ>o>S[Gtp>Sԉ{}߼nKu%;~cٞU{El+֥)OV0h= ?^}9 *#ԫQ,Ƶ:3~ Ădi,Nd,]He1銝Iq+g\VUI;C7ki՝_S}g#ՈVIΆMDࡈh[(17.Wژ A5Mx CbXl(+ZDQY[0e J|/*)x]gF˿]ү]0h?ݗ:p@=|Ncv^~#iԜ*l 9ZVǥ*Wr]Mɵ~FQT޳g?ҽ*{BN QSPa&>Ev!1PQ$l( a: ;vbj1"(%\:4ha"-^u3;`>\>G_*ν& D`~)>Or9fv0s@w>~%%_Tk,f x(-#?* UK\2/R8_c*S^`@iPU3bE֧Z ߤ ]NKTSHkaj02J@9@iPT΅WX2}[Q@P-*T {T +A,rƔy90-]zuqjҷ^ʕ*`F[>Wy>->:hwEg1 ZJC: c }GYw9+%]wr@ߨV0HBy XQxUXnjoD&Mғ#Uj4ͷZ~z>}~V, JTj9Y| HUM`L4zz ,D^y w.ůQ}}|UBޓ%^iūZ1Z @eZ}o7hd_D %o$"6r|&sO?/ndB#0l'>tEou6<]6Cѩ'S ӹƩV_2]1,uWљI[x,{~q-~}!$.G-%LG8:1R&pW5SõkPgs*^,\O{p*'qà GN0 E_ӑ`Y4ЁQĩDN:R>O$?r~t_HШ7LPw:s 갮.9UnOY:SXa'`!H/ăGPbJ11k(nOo&"q-܎H,n|_@fgC iKEM=C?' _!3]|L!CAWNKf˫h<[gr\򇒄5&QKL2e/Ow 9u~e^Xs^4VyGql 2VokCOc>%֫_:{oaqrf Pj^ \AvJ vehӺhW#k Cwx`|[.-i&{K?^:?/&b8%eSH S *wMK{Di}裡J^EՀ WQ| U(QvIobG`+I. t=Edr/#df]~N'+z}q*_q[~L9oy0b]h?,B"f%t~am?WEvlXS6}MOmi[9"z⳰<6t.Q~lt8DٌSeX*1]7}(b i7? A+sͪ06%0IS)˴o#'PCSІ]4.u..JƄ  e-=:(MLJM)l>/h:^[osq(Q:?f~H=:}]=q MQCJueRᔃІne.`/<@? VWyIqna E2'q݆Z7e;>SiQ2>gB ϐGu1^t7ʃ:`-7y=뙞(p3setv<2I˱|?Qw+N&H|m~0Yt 'H6BؽbLpc cl#nt&m/Zy4q([ dm{\FuAhW+cˈtKx ] ¡%)Xf L D;MXQX(` ]e&kk9&27 Mmm_IM7"_3c|E|A5pZn[z ,>Zz nߟT7'o PT:Mq-FR7n<>[YU@.uoVDH|kֿ HtfFX:j؛F_;kz{#\jKlJi-< |*N&w2nZUF, |AW WɩRbyZknO?YMZrQZ ;Qн YS^/x[-4k+g&47IN4x7!ݏ ToO p:/ū#H,:s.ɟx`w|w[UsF. @u"|a}UV<6! q{h4q)!-:?G3G{mcaX 1VoùEӘ.yDyu!Ts84s,lZ3/!cz$|AFFtohZ 4sr8ı@Y3\z&|uI[cيmƶ82U4t߃ S>c*T/@|e ̨B\.dNRf2m@ F{ҙӀ T1XJs Yй.وta$ct%Ar7e@oDc(D2wBVhFKZ*rh9֠ \'وNͳ(1k tkoqtX:UI X7/{da#mE6&=:V(˭Czx e{3rǔ Qn5lMnWiaUe{αWhZQ.jd>Q%_JtojhюÔaDŽhH )Ad/EGX2Meyn5#,@ DNM[LAlQCOʕW K6@ʡhQD5ºy^^T&xVeV[[3u*ѝe3Ho V1+9G-j#],,q~P/taٗ0Al]IfH(ɦ'6 A#QnVafvXeO4>{X6r8I;k [< #F3Y@gq+yw^=XC. [0X8)!@q*W}ɞ|Ra5תH&ۇ9m\B3 5y(>VAиY:1 ]cc9yo%0/[FҦ"ECԨt\.EɜlezGedw?F?zK1TuAh|k͗ GʂBob7DrODIࡓ*ilV*. :?;KV^e,^ B ]`dX495ajpFt v\d@o:@m k'*mY]~acG\IƸ|'RSpF+j6S V#qY`ohMUXlk e( R\<%eQ$eELjjhOr)AcV}>v:xc۬}/YveÈgVrz%W˙t^bY;x*Ǎ[K}iGSȖaE_%hGb7`{0J;BdA 5P.8Lo%W\1,LʋNy{NT>Y;+:]ao&n nDM-熲j+7Jh]k00Jb{{(R#j2EXY&XBmuS ծn/u6kj47eя@aua_V3_XI*DX]D#Fy9cRQML\R x88i,y2h ?~R:1b*[b|۴VRoIM4QR^(}c( 6 bgBټ]AvHfn]wݾ&]>֖}Wv-5\B]R`/2Iɱ^+:o =gx}bEMrRU=cc8X ] Ur;>_ѳ˜zDK-Oj~D%Fi,w҇GuO RymUD[+3uhXyiI SYQmWSY|Pz v k ~Vxy'Ku8Xu+ݴFe0 |24q+E)Di Jâ,ytKQk٘n>l<7̥~$%A*m/ǤkּEqv|v_AOmߔ"VnxG(ÕTyfBp/ǫv;8G6F:,) ,6( ~Sd*ܸZ ;|0;}"1Gt:EiG/10B^j*{FD_PрXn$"lZC_6HviV  Eg" Bw)!5zߡk*q@EFǚh5cpNfS<)x/waGHp׻ Ы\忙NՈ 1s1iu2ݽt-T抌?_\o~o2cf&/TQ:Ac#e[?xZ(yZ jIm:`xos~UMq*&Z&!׀E>Rhx)Lb\4Ӫ>2V2Ldlil۹ d!%mhKXΖS)YK| @6ۤ ufzAǺ+ИZB9!>@7bgF7nn #П0! W.7dV y^&~H|M-$}Y^ K[VM3Y C3Z3zFs;8'JeorB0I[U1٩Sz5A Rj0:Z6ͧÎ>) nG`(T5I5mn{5fRNl#G\~U #[Aoxg'BD6J45i-/\t$ѱCiu]IAVdQu{x\H9KYpP(lV]۷oᨻz0}-LXm(%7pi q 6՝>%h{G1Vq7 L_hvQCSB`q-*pijꦟDS=u{df=j (-h! @ V^'r1/a&Cd=a-je2(`&g &ɮp)T&I>oRq0+PG3o6s)̻kyQLF4Vݔa}amE#Œe+x)#B0"lÅˀX׷ doĴxS_-$ 5pd4ٌC%#@pA,ȇ_]0oj MfA~e%x,(6aؙ2Wϑ YFP>jenU[>Bd_GѰBu ] مc:c>6_@ ˣj52R.`oP ,r?:D!$]WFjggMAt _Bc(P/LJ/ bFJ^'Itk1W!:~Smբptr> >cZ(Z3iJtE^k #}A#pl<ӭcyDPyJc%Iqo;ι[TC{}f2Cti0y]Qġ&&9\Iݞ]_C6+ W4Zge!-sK X6fօ?a4 ˒d>V-Tĸ)\.`wr|^4`>wM.!HdS_irh 36ygΎ2[(XzyeRYz̪n歈h:KE@SJ3LtJ^ЉԹ/Tk.=7X6zE+J6!ayRŷNeizT2.9mWʫ/-{N@ݜ6WgV^0eڐͯ/{&%Rt>uA.KzMNeO؇R6MI8U0XGc(qS޳T<+˭ytHNoE˚6q4,2y@ ZxoT鿩3]GЫD2{ԥoh2o%b{~]#CE`:]'|C\#pQԨ\ԿTڮW.5=`,szJp&&h>,ө1&;FF}+z'"6e_3AA)F.w8d0K``ˇTFu̧:5bwjjy:g·2SK ,DǑC.DYu^~&NŢ#*-YY-[r=&SkiOAN*LI9T|FפјYXATS',>4O4x2DT/+r5ς&Ugd/h q2 dFwn Qb(<+oB&yUǁ! +S&=|el1q~Ȭ *ö3 R&%\Z% j37[K^Up%ّc x'lGk0vDzhgڊ5C2R\Ɠ~yb%@ 5CEhho"J34i *DGiʨC 4`If7'"h@ swSű z} 1.\g-7a􄁖@0/w~ 7Xf}TNԟLq|/Pbe;Ҡu]\}ǝU4q{㴂=4S;Yi9'I}4yԽqX{?Hii) EyL0{L P'Ra,qָo.CCr7F#LI{z!gL9mSNVbl ;ÎL3jv!U2Y< D›cbٱPm7H# 5GkPLL[ ?߇Yp5VF*{Jbgi3c>Aѧ}2jUi2s?nPr…xa ZU[tafIɒiv1SN"᜝,k WKyWI a 5bf ]E ]8iZ̥ܮWK5\K`Sc]¹-ZyW7 n\z=H%:\r3RN34.4q޲:6%y+_)][rovɓ+ey,)y5@USI?8:ʕ (Qb Jm2-J-lXnFcWQ*\xdnfH?t \@zEEgMe. Vs1K,eԿc៊=Ey\tvSꈍE߼eK֧=oN`+K]X虭!KNى~JAZGJ]f>oYMk1k,fLTŸQtRWuVmv3u=c=b 7w(Y5W}PVA(l:a{&9?iFu¥"_" xt9ZUcD-&>^hY|­v5є+yJ t!ܧJE|8o}`]-`Tx?aBO FCu7XZʕt<2i/o 3dFv3 T>_6߭k_:t ̢mSSf} ٠-p4puyt볣 YsֺK4K{dF([>c1*JpLUd;.RL+6ik-PG_gJccb[TΜ'fNJ* ȯ]aw:_=͢熂E0l_>lԂVyͼ_U T. zy*0VV  e,1"[t~;IJ[Xxۭ3+/f7)sN6=427SqgI ^_X(RiGn>eM/pW 70TI(]A7bIJx+z4zM7봖Swbq78,c_Ɲ vm{~<0;>L/"G"K䨘ND{bxuK%Ņv_he!jSfUF0F0;&,ct_>5KP#E{~b&"0őgk0 jƧ`hKlM[MޗqWqg\~CQlv:&Y :ɑӼ/&,|cd|M@-±g;cTh2#5CcRo[]bk`j<+஥EQ!ty-#}ellg^MguY34Lu`e5u`hqn̥Z,quw0L+Ͱrn^Ҟs*(FhF~S(eY4LJWYc&[$.qk&EY&6;2|p~fT/ϔ9M6.鷤BX+76TھF EumˏuRSMmê"WH0qe_r%qc-a:5Ng5<:?*cٍr)g3~]`Y~x&!RS 5!`ӻA)FޟIZ.XoN/#(;)aə_[&uD3I~"$wŒ[O7SK Q,yq:bF7Qc+:p 8z Sa`:5CY*Pxat.s(}WhG,(/2i0jĢCC2XMJ%QEOCm-HH( (G@&W^&L[(@]ׇ9 *.Iz$?|*Kaa =%2T֭3:2weێޯ[4.嵈7 sR^2ϓ`j^D}f>"o^\;6`dPPDE>7%@'xA]`04VLʒ9y"^\w_!(i[H+zJ3Z]%!oɆz)/I%kSYVo)~mV Ÿ)VC38KZylvoʁjsm[r~k!+I }XPϷHq˦,te; =I E^< ߝxSWn!9f[p_ `ޞT r8!P1Smf\k(xE%˖ُ%V'r&NF8no 0k-ᑺ%WqYg sF Nf5c$5bi ~9z+XR^SxN'9 #AG} Q帝c#TkV xJ+0<+2*`}%YPhyXXY{C=}_ysm,c5"fzj<}ϬyjL} 6+%΃;+OyNlњy};ڳm ܃ .z:G{F nG cM4q:%~gMÏ/Hr_o 45> OuE臩sL6N,bm}k~x:Y h :?:4yZ/^N2d\`kZ="3j% Uŏ t Q;s0R|*Sġ`Y"NSV؏'D-^ȀA.1n J0-&fj6P)ӡ 4҂88[Z|D: |uH,{Vxp#6|V,SO5 s`-4L%C4-7,bk@o00'0uE=]Xeh+ E.2A-d[*aKRj_+XIk s--8EF3hHVN 2xPȣ=&͇YXUz&S#sI^3="\MKܺj;lw}-p=?y' U *橡I&ۙ_qY `fK[YwH<ꦠ2 h.X9V.Fδvs wʈS1HUjs*eJ񾶮[( ЃՃO5?0#$D&CT^?/ v]9lMJ2(SFH-f%>bh0َ6PmOjCїZo4cj#NSX;1v׆%fShW$?)x- 7XYVZ,N61(|R׉EpW ߥ"ts*ƍ)e:A ,jboDDbϑG4te!wD*, .й|ͥ9-j6=;j\\ư(h}%2!oIւ)z_AepNn~K(0x0q#޴=P(AM57Á.,;%cV! tkBO/ĹO9ߧ-#99*fKj*^ln΍`ת,HmAroSm4D3TG]e4 >GHٹ̭4-RJ-aXu f u=D UV@MKl˱/W[,[%F"nT5qW3u*>^sFb J T8rN[~'x`Ie:yFrQC!NG2=q#etslnYl8GB-o$M.^>E*Tиƅ _CpVClT&N8?]<8.ҰL ^&&`Y!P+R tBu඗ Li/Egh-%s?&S)4:+Fe<@n!L J|x7$_9^&h[sHU8Y K4jΕUUX(TXws2m珔ndsgf͘:f˳fP",v/.Omh߬>sx+Kyd`"j>Eh'\sQG&$|dQ~\Ҫi义6\ ViAn:]ӋJ'JLX:ɦ8i³~뺫 l;H;@f>Zv<9^K±LTI˱S*PE^;LC(kǫK30z0J?Lםwɔn\n+Cϖ4+F07h/=jhcs t h>bVC||%\1v}e񾺠XL_Yx/E SF?1K:w/@n.$gSNUX FA&?o-RTlSSGQt37*"*iS0P@aPΑsuhZ_?x¥Ӡ=<5@ղ5jzS3%.W¯P5YHa:lK;-P@x8a{EsU"$ׅz!+qRj[HzS7?0J_O {cᨵ^xop_}ͳFaWhc#,CnO7`&XxSw?K:DOrk[èw 84RŕbK1OjaT6fكvw*eOpALF(ξ@6*W2jF8.qs Pw mjuxj*Sx3Cubl4@[6tL6lt"5>i՜jm=@e-K'Lz3%K"/Yz&g{LS),~ 1[9J ,&^|0Dg(X=i3l?>r1Xw*]LՏjN]> o7Z;Ķ'DI%tZ'f=?n>"pD3Nb\-_ww2x{9Jk|<,y?DȞsP.u[w`QGlh `9>Khؔs<%'#f+/UJ yIuyvAZ|P˃i8:f r.Hu~1N$%ʳJw1|i"TKe_ѳlc 'L8{1Q Ϟ+1^(sB 5Uf̷Fa7ѝ`QzrB]6|6]hexk7{*"̠uˤYG_ ^}I,ZR a[3#^ĭθIO*iUXtXdl*X?}[ ypt\j7{Z$ztabr145vHUEpXQC [TBX\ whU$j֓仄Xxl̵jź^XlIS<%\K hv(YiVug #LRGbT/᮰ N\xleN0F`NѬTҜ #,JgbTm67T/&(>5bhc-溜8k"|FD6ib\ɏu?V-L{Cr+pv%A;EK4V,zu4UUIRlv< 6]&兵{o҅U;/mPuzMH[oH ȕCCԚ*)d@̸wooâ  VxtcڋsXk"M_r( ]flo̽_Um|f!Q=K׬SrUm"4 @ȩN:ә첅2)VRJ׬,bmSw%RARR2OWnRŘ|f4K)x )UjX p1#`ĵUX0J4Dw EVݲhMhbj=H7iHaC fYu*koU|Qsuk݊o:Cͯ^ު}ΛKwt-ҦATx]rNyrCH/кj"[}pˆYA *`/ HH"3x* yr4]oVdELv7,8Tỵ}P(QĠ bv]d\Jq 7K5LvqJq4BղGmt3y‚QģN< xeM5םG<"fIk$t_ZLKsr"iOp~ar9y^i7us&!t_9yF'4kAd}PkYp.5@v"($+U>:\1OR{z?4K:p{PCDj3]p̍4Q/AހN!g@ e:0؃JqĤaHG^'A$0B (* /Ĥ[.9W][A x+ b3,KTX2F"1W&feeRVx::Ӱu]Z=!44wDnGƈf0\IAM7Յrult|ؒ8r6᷌zFg  hEkq5g_+z.{cefsfը[-›F'`?0,ւ\ݺQ{+J8]'o-3єD7}Y \ _!: BMF?t >#&Ũ}tW ׵aoHYA-NRt`l29V舳ϑIM~9|a&[;*վGp3Wdm5:kA ]lݪC{#Jz.62îWp@ױ QԱPo_;q)-Mf])iqZUM\10td՟F4`zi OmB|nrf2fh(t}hU˟ΕY0.nҸ!h/!vX>Ĺ j4h܄.MItOX#n}{p"Zt r`ʻL];^8dP*o49m]5~`g4}vVTgHg'-"FTHF6S/9q+íU wh6_@u52C4>pl)ǘ4u{ƐVTOM>pl)X^C7\3Yi}&cK _+i|MaQue &jD;ᕶX#{%ڱ.Q^$^'pJ»M>tG"86^Nel,W>ڣv7INB|ڋtR'Ww8} cg;i q+ :eG[(LS]k竩K_CQWpGA݇0 AkD=='Qb8,ՂLQt5':ɚKr|'G*A p=TLCiuХq0nh+dU_3f6{_Iur\ղƂA:_+Szw~!%9n1z,!,jWy|4wZFusuelh3};"S%l;H@K%2m*_}75Cl#cC'8Os𞻲'ۄG1x⢌|. X@PXN`J)3hcRv22 rZ|%kU1m4Y/UrDdwu7b\"ɢ Jӕ!&%9H(5b;R46ZCE!L:&%auDC ϨKq-ǂ7_uzŸvK^<[Ox*x-O&Z Tf[n'd-`: uf+::COv $c}1ܾtpC,[̦ՓR2]3L:f55, 9>pnZ4MSuǘ 3?hj'4+ZodX3Һ6 .CE3Ղ^ ^ԴeBD+[mɝҢ(:=} {;;m?/nuy`nvb9'3j*)5dL; mp)H]%DxByyS?H._9}`Ԩ, Ay>tR)_kucb/z0>t Ǝ_*MYlQBk)Z{s5Bz%Ϳ(oOa9V!b jEȴlǼdtCT'YUIJ ),=} C#_@ rf,D}C-XyQ h*13GQ7:>V[S5 aT7>,CR hˌl% mU]^ fxcl(h 3y j~SDު#G}8P!na=7 )zm.ٞtio+Yv$=KQ2wE.!wZN|krLJƞZ4_ȭ5t)BuqV7z(-򍂾Ҩt(ҾLu GQ72fQ< :~b^̵[G5e:#[Rfہ>ZZ:溾fGrw~OgKԆq莇,=SUOjcu4F5w+`i&k@ Ut^|hZrfA'J YzqcC?XDžUԲچBFAtS~!vree~t)4DKo42bAv}as<v Y?~/aotFǓ+A#P䖡 jjcl uJs*ɧ> [2CbNH}WJO?"NOHE1߼2aÀ3VߡޮUx1,~ˬNu"Q$mu/;{tOnm%^wʈ\h<t-Q V<a?׳j:, !Y8CF'>@"ot-hoP-j`b9^kǢe0dx(w? N0AdϬ*W TGpYzNB6փrG(ݎ3U;K*fqmq̰I{TF%q\:˾z 3SmZM YEu#%nXNx4Ar4 B6 H鿐nb[nL\[c%q6`CI^:J[n|\[gІ`%W 򳯑x$ ([-n Ѵ^+Gi]&_x-v!(UAĴHw(hy"&] YX芬t/eY5߉ K<<yc |5L*6Nӷk[`8~-i3T[0Qk_UKk\*D)m7ypaad̩7| )?HL)]~vg,#D}"5W^,]A).3y}1-/RZ@:٧bi.h{&y"7{b[]?`02*3rxn0-Nۑ7{Bf]]uS.yf \2^ F{¿(%O${C2j@jw9OD4OWZ0FL+ ^!G?4v9a*05vwy*Id& NU/# p*R8t$}=p+<#I6q.IlCD5K < )^GO saT8t,19Q+ ^\{Cl Քkh}%Ɣخ v0 m`C3'cYP-9gxk(3I>q3Ӕnlxue0J-8yKlM0Bo<5 <4!҅lwC$T^zQ˘n-H4hz@jr7w0Yi98>4KB̼hfOszf\v~rGѿ6g%fyjŭj$,+O#%BӒn /щLHŠy~N[At4sc*O|E04j0O >  >ٓ~sX 7,e1+VL45qK)Ӥ(~/jZXOm}r/!`{2aէlR#^z ,<$zPX=:C|# }̸_i?]&EH!s,w@+]}fh@gV$".Ur@ sBTӵ)P_<Y(m=!ZZ} tlW*uNzRѡ/ Ծ:ʮcOZ fFz?3U`|ieHgPJ G՞qcҟyqC5[#wp] ryh-ajguӃoVKf .P` F7`%ѸvGaÝV}#tˠ+y~fR! n[ʋ0 ;,vXcmlgpV1^yOwضC&1(-=.вܽw&QMCЛJZej֥KnwPC=zGd?)ٍSWTǼHK ,kVe'0|ѼXs93on<:gB"SR|}CGP&ߴq~frʿz6C|V,A/B)jjBp*fA.%~-|lNeע/t5>~Ҳړ7 Dx5EdtrC({}S:*6Ik8,r{qP@Cpnӡ}g(s2%Vۤ"3cNƄ A |{Tdb_~ +?k8A[Cb_B6H_V [ M]` 4#f3,H ֲݞ@@q7(j Xn@:> Z8C-AZ44ƝoO0-5i{~f5[o1F L35`ԇTPhY=f QF~zKZYHDepYL)52%/#͹y,p3k6i2wZο?X5lJ0EU8y6]*50 17GwǘT>eXetqhU19JHងqnj;\ l89]6:yUtm#`A* NΉSd,`!Ls]M #!Aorj1 Kur^ķ:5A=2-n{A-\Ԃf cT/YCHJ0| cIf M=ҝp§RM23"3x4_dLN4;YKw2kjl{:A]}ajzW7gfվc~,a^]]wqQd{\HlD\>s8m;go 6au_>xz%7#lq$\a9%@U.M6}BfښdQEY ڗ* ~]&p[Ӷܳ D^gʻ+vz>Y!ț T~b>yŻ<%bſȁ@65:˺WZ< 9mq_bp> &:?΍jPwZ_Wt`M$jk9W%x)^΋Ŕ, *[Z-%*ja [G%]Fx@,#+Jt&p_vRiOcȅ.鰗K&Uwӧ1_<{5),D},nM-哒h]!F(X#kFxk(+#,&5)r,wf5=P=o~Ϳ3,)\;MvaLW-Hr_&{(X@~Ϳ2^E?VXi6MRpM,C*5V>-p+O F.W-eBw-D#`K3PB1N).N:f^2oRy𐷣? H"ˀ\) a`n*<7+MȮ |`P3>PybPF/g}y1؆W;f8!k)g*iK蕀G0u-E$Bxsё@9%k=*xżIϝ€Ԁ D&q"@ƲVON1(0,۰ i$M@ů8#*ba3^Mֻ0MMw U3lZ`AR,%ާ]1eyXߛPݦ+oQ<Ǡi(~Q@1@v9 y(u!hk4w@4`L!ɪl֠|G!@ډW/D[poK*ݖEpAAid3]VSJV<x F4m ̖cVnhfoNTn _(k0HuC`X Z2mmP2÷ UUx`庞(HB!HmmPMٔ,y y`2 5#@mmLfmګn _Sc!m!qovm|٠@n\ -^$ɟ\l۫~[GLJ} 2 R@ ;9|Ҁ+ K߶"!P=i?L638.d  8ѹO tjMq9IEs`V yʈ_Pm|'x (z`q=Y>VVrFm63I,o,vBe$o!I-GctC64WQRW@eJ3 ^pP`D p'-R m}t>"I%S6S0Y \m.@8aFte# Ȼ1p37׮@\vj [auA'pE `$M8 K@ @N X - &gy El^~ PtpOdQ]'%U ) -& ) $?&B1 Z=o R%ǣ#XddC@j 0AQ'Ant ]е!0X@2 eh&x/jN?8*$?m A6B5ؾuøZ84r6wt摯Zs< +'pm6miSI iJa ulƿk$Q@ YY$ c(J"@J[jvf I?`))e T%&$ L4`I6 @ Aڙ;1 @ 9hU  e DYdPh4f.@JQH fTha$P!$cEPұ|Kz ^T$  KM2-`k<i @ I"JLI-RRo J]&r 2`$x@d$Y L ¶ u =a\եא`<p'[ݸ5gfa$L?_Ҥ gmLh@|Q Вǒ6 A} "JjJ*Hjh'X <5%pM[4}6|(4d |usrćfW3}2X/XNd4`^v}o@m@mbm6) MMelAD: 8Iٺ2Wjؙ *_Ϡ%<_G$Cx^ Z@H2eDB@@ez: %/;qKN0s :gD ^ڱqҐ F\y$`i6 %$ & $$ %<ѰH".?8(;B:Dd$!!}.ςE&I%`,- 0,( X|7@w$^5D0W@Y $DJii- M`M`89YA)$@ eYDI @lF8aiŀ.G^\JT"P,`a9tiKnl"d   HHysX)cQ"Id  n EpPm6mB 0e@I*W B`_6- @F{0pg`iPJ6@dh`_rV6MpteAH`0S$d9,?6&g% ֖A6B 't6`*&C1yl6@$%d0  ~ ^7 Hx͹@7WLCb  @2$P@lH$2 1A&K%?2}0@  0M V8"؀ * d-@(l6Y*kT--`< 4'pzF ˂k Ru`<;}!0oLu@D @6]JVp4`@02Ň~@\ |9/ep)d iM[*h3p-N࢟jh`@톱q4': `$қԤm8a `,D-(J>)1\>1PE ?Od@~bDwl32`7S 6!W|.ETZFP$G`1h p29@.N?8T6w:BMJ۸* Ao A@8< {G`Ґ$,"h5!ErHc?gYߠ  Cz/ 02=_  $&Nz`t. G<=D& <O,fI j.8 Nlz`R@?v;G Լx˶ׯPVl (9 *s\.lznQ l!ho@C- X Uq@g Յ+X`6Xճw va Jyo}Hd @`GT/RmXI+ߠPp@Ԛ.+Ev/W0 #f K@200рnBm ~'pHoE"*R:eJpZCp&4촐qR< [8ⴠw21I>o x!}%@`[RwSWm:O.LO" '(ް)5,# 0-0(_W 'om%uMJMP dqUG. $v7:|)Pҽw@z<?DKf[:ɉ-λC# Gtǹ ds'4Hh@*!$:':= >2_"  @DQ!B@Ld;>tB y@˱.l֘w/NaK{u ggclo!HCT1\C1L%Mç_ ߨ5"H @wY#4K1HWK@1IQ8R`WFk`/= xZ,iBP0K2ͥ +1dD@j0E;M D ނp~O+6%#/^Hs=$V$; smoa tYk-F6Xf7eWWk>#2 ҉W]9s@Z3[BIft@ԛ&2\t- 1+&H&0ΉҵD(%~? $@pI(beW~Ƹĕ{-f@lntm0@eK䂣zr<"fbN @ :Nj|CU ZH @~8'AG> O0@ AD030   " 9P=hJ  (x \LHd 0 jp~X|/;@,`BV&F p D Hk9= n/"zoX mP+&p@+`*SL'S}1 =ɀ>@ 9Ȁ "K -]iӇ@Zc>d$\ ton@H|WpP&_v [Zқ`Am@ )4X-d@R;9@0  Ȁ?HB731VΕ#HoBvt Z%h5Uh26 AI!%& " H@EA7-jo" 9Dq(Z) $Ihdg!A-`A ux /_P H MT͗&Hp-P,@ڀY@J2)k@>j! 0$391B4B <H@ $ H054HxLi00SVSV~p3M(ŜR/3@&Yc''38j<-ED% mxާt,KDh{Pǯ6O?b 7v[֯EFM94AԚ@@XHd0$`7=`"^W_cNo57 -  C8qJydHiL lEII M)Z 6L0EPjfu2: `Z@ L6[Lhi5HiK5yS 28Р5 %+. @ HP%+P_`db@a@ (@HXD@#Ӓ>Zly0<}d4 ŮJhH(laDLb|oD0D `pā(]KA W*Nq fwh("OĮ@Ѐd*LْA%NU6`  iKEI2LHHyyebZU$ y 3sdO@%fp4L 8aɯL$ $D@DH)6I +K$9<-* 5 !<hpT_3p@@ @)$`` aiH=1:b1eH ⁛?rxA$g$H <=,p]W$HA j?W,FGO@\ o 1I h r!a,W€ | ld@4dCl < .<d#Ip-(lV:j*vbț2ki* E [m4 E4x}]Bm_bՅe ihP2H AZ i& iАPIo@c(^ ShH#0piw9Ov¹@0@byˠ|{ZG"i$=^tW"Z܋t N_P @8qv \q0 XP.!1A Q0a@Pq`p?GH޸ge໮,ʅUI]}Op^$8{LՑop3FςxYrO9腟=h$:%?3vh{%r5muģy :_?].eޤ:\^n! 8>2ׅsNy]Q#pܮZRρǏzoŹm#u_uż WAViuYeH n_]CYeokԱJq'"gCnG.oy@qys'=_g6u}l$}^tgO-^׆r>'3[u#as$WAfd0I`$!q"bŒgw5Ř|7Lm\A0c6CxAǣ}'dl&F?][v{!ɐZ\-Nvۗrsmbgw/aט~;M#}='0KN\\12]0S\϶^"U}HumX7By7`O%91xU{K^6xb;=X0&t9G7-XGP>]i>8C]C2.'"{vɰ<m ppfq`'$elr?>t\;|7!0OG9Q6G{B{H8Da-R]imw(zI8YPr87NI$+̏^1郙rq㰍[}xthvn "[`3іeՇնrgfw.vc /t9Vϛc6==c32!z.X4w# e$Ð*oxy9ya̗iMM! .vMF*ΖL4s |l18{Ba"8bp<y8dF [?j#>mLd/LԆ> Jzel& 1ϖN'^hN?aʺcn3լ2'}̷߶p6ww!Q4vS㻫 $<]w`c̑Ȃ Se!lq!tǯӉH68x:.\x,Ʉz]NI6Zߐ>[8`|rGCV]DO.WHn+cy2{Ȟ7 T@':?cLӦ}\Dc̑g.`|ϒO>AgG%?H9MŸ`={{Ҁa,sV~0t|ܺd{]6KYܾNˎ/dw1xp{`<\du` 0! X'K* K,Q2s'ZmWIG#%AVe.V:O8'Ÿ`k[]E1M/IGXJ@|#lEP߮H3qFxV,Z9=J OVﰱ 8w^ܷ hB5̞jqM0:k Ζxx&B^2eht1=os'rgٶCm%/ qȠ|ʱujaLSܼ1vc_sұ ݾz tp f=[ ]=GD=\*@M Yr.8s g0$:4NL'ݱ^JH YdX;C]ms1q]~/~_䛑Xם9ǓuDdQy2MsKnAg`=a1˩ o_. 9Խ<_즟|u1&F:1wEM;&G gYّ#vY?$CcdxaĜ=䝤{,|u.[YD0O9E0 AὕW'"uK;|zUq8}~0>*+zzw䟿"5dop3ѳ[edYd8LWv v3EԹA,јOKvǺ6W\"S* o q#?= l5}\6V2$g:+cv&ny8q+!ymk̫=\՟̀i(M_xpqޭ^/ԬP>OkڿDznEYupܛq밾;m~l2Y28Az})=l5w?Q.<mop5! C\\cfD /S^G ,8'..,=s.qxb%6PgۜuiݶSy=Nl8Zat0ܻr38+y'sdm\mۑo!x -G|=Op[slxԪ{-eW'#?Kww7&g>}H6!{[{mׅ_pR>翥e9'5ْgwxUOh%{:>p?\TxvK@ur.>oϙf+5Ȏy]roqG9baQ0:.`͝ݿ90q]!l]#7`Hx<>9r|6? c,#rhu[4Fzsl?s~]o))j'rՑ2]g6=xm8<\^DA!LCO:{t'py"38wauNo˧|4] rzY ?۝$ɜsav:8d˴$zu[<ym'?5̼Z!Փݖ͝qbqzGrU8a.ڳvxJzC/l{Jq]Jq|Iv }I+h9k.>@r)/7#q,ܹ`|doq<*3m,fw_> Ǧc"_P,Kpf!{Λ\e喱Fѿ~XN5χfi.nE6*K,$ nwDu{D>.B(7\Էݎ\cF]&GlncHbFB gv'6&석CvaneL=Lc_>O,l)Hݽ3YD5e;@Ec#%ǩ=%W`Œmp'?/C,p^xCR}ߴx8w&lP|1%)m$[{?li q&72s[gGUV]-?Wv"sG3km]ݲvǜC8<_Odu!780܈a&ˏ'db@aumذ,^݈}F1#?s-(sܯ#bNK\W݃σ`[mڟRd2-V$5rm,׋{ pcQ<6=sȡ&k]g<ŞGOàJBil@y u>'FV O(_&β! m˭k@8V1 mo7P̘p/%!&! rW_H̓}^vVgZM9/7HP>$ 'O+tLu`dxdsܙ+ԯm _&8𦥏1zm gv)N(7e>y'üA@Ky|6oxErlg;I fI[~l%mqo ۘu8k|뎼/L%^_/&SH_r>Y=q"q:4=N?=>Pjۢ!1卟`;0a~`@xN˩dSLL~G7HD7>FpŅvOEԒo'Zg!Oq_ԉ:;ql{X7͏ rJ;ɠ>Z,HWE@٣?CL&YgYmE"a##a0۰ &I} tJ@}.-4݉x;p|R do"0[[qc  _WԿ^PgJD/L7h D"rXagkd|KIMșGfg6mva|NQX|x 9\m^n~KJv6 ^]snխb䩆w.`)/U/;.C/ Ia m|\-ykmmͱ~fLON:.;E?Ѐ1ө?;ܜ 'E|x 6ǔpm16m'8tL~Yw;om؃>8l퍃Ey>8w}/MUĸ춵흞.P:cx;b|Ϥ/w޼'%韾[vtuv/Mng|.XMZ_cm~cZrQ\gZŶ߆_"[n܃Fߌj؜F[m<#.vm8I>W$ퟲܻl_>oÿCXK'Ip_)ppLmŅqk_qWAeL**zOwf[[¿M#z͇.mmZA 2C<^!>ov;F G?Krd]Tu{.$fmxΧ_GlZ⺺=݌?$cN'u.ޮoh~~zF8 U4u7/~PXȝpb']Q*E?/~v2|cg2.j^l[ X?5Ԭ/eQ9-W?$$No跌 0#C3!r%!zs EofD s cc+?R>YdHI,!͟-{c̉ifd~-݋Yv?&ˬΏSz˯|>}W =]Py]3N?Ώ%#!aq<2t,o tHi6||m9Dg60=]13pKx /x-gΡr-pr^񎈹MSqr;9g/.ۭ:Hp$=.'q9zSr?\Eۅ[odX O+>udGVovIuk,r׿#'o/fl6d_ pCOre!Nw, ^dq?GO9|oN=xE}4-|6 <]>|7mv7ff|8,}Ys_#=77,YϟvpK1cm3ɶu[ģɳ -r'௟~wLd'c+r5b;Xo6-NΗ ߲_wMΙd)?ud}?ݷ>$Ku S[S+7HI.Uo#'6mܳom?LqN 7(~=[%YIl2v'?L230}v剎[_vGWȓٖ 6k-ko{}˔4V[[_ϭѩGrt0NxܷG}e=uwcлOwP]1/t ǁ%-<{±Ժ)rfQԋ_sW?RmԼYzwJF eL;_lȇx'?eR1/x%n$Id:< |ȝݻrext?W=*k'2CkN\LΌT~.}Zʰa+WNe\Bx?q=C9Š&k<2 [?3{1N <!Kvfr{/E "p'yhtqըNKǪ՟d=JYȰ?#ybd WaՏ2dHu"qXlg;816,X͵Y9'|Z\OP$G?0-C ݵ]<ˠ$tL`=v]3 tE>=r97x>rL l.S0~L8_ ?ԿM>5aቿ^ 6ϼ\7{. Q߮~oԵ>cg0pEĻO9O >FBɓ.iNlLre~cMa<Û|6Q'[k,|9J]-Γd? [Un=了Z[V}]>>Xu/a/O˥FNfKKAo;ƗŅc콕lF dɅ5)F[o=˙q-HĨ0OϥF[+mtn^5vQ6>+ŬFoОm5koÿí.ݾ9w]H4jըq{3p O?ès\=Wmz7|OVAyY9F-}AX9uo&V~43"﹜^۽Dzr%>׹i㥟)"J{_VٕN5=|S+{4]A?l:.x{(5| v)??Y<|Fm ̻1\H`:mV\ak,;q"u3r{r:Sn{g'Mq.,:ڹ;GɌ.tD~,8c_'yoIp7LD " rݣ.L&X)…ɬ/,'%.'nxYHq 1D ._tz wG6 ~&@WEs[n7  ݛuo k?#Oz9/ssdoc >87^Pzx1&x 5xsXOd_7^}F`㻫o^0WDzǥEc@g7"7l3fpV1*d~ALߊuddJx-<^ .Bf9-_ Px̸d-Uwd`n'R8#A^$Ʉ3uS^Ðx!28#ϛ˹v!y-=r.2uťC"2iˑ܏]Is 3P&z'8. 8C[w2]rD \θoq8.Q⮒.:cmLެUqE 9ŀ3 6+NqI gG djre;S$i12j-[ ah2d0>-}PF=\,5ŕxsSlC-%H ca H>!@@1%̴fzhs NJ!2"g-7V!I'n-$n$}x-(qp&:&%ƗbI.vSYB`!ڊ.pg! @at˂Q:$nOK'^\~χ*q)g˱k>zVe?^ۆެ5,38ud q<47x6vE$"~x Dewgex[U_r-a4 v>'&bw6Tapᗃnjo^E&ר!{uĢ{aIoRw!(G7͑ߋ˛]ɚ=;): I^!}v.a&CvK 亵r06GG2aXcAlQa"|ˏ\XCA, "2w- nR&] w}>7Ս]$#66zc;M$Ep܋a\3 #݌gw=sF۶soG{ .DR7oRpI=3zqp#,na,r.!cz'}u$YL:BGd}Kߠe^'d{1nNDw3rMlSlIutZIKxK]s`[ߍ<]L潖<ߛ 9Оy;{8Q5գW; r=8l ŧ$" E)"1oe*nfq!ճr`O<txGy~`Kv!u-{ Woٓor Dř$kٺː2,;pw}%Ю&`4y0Wd]qbD?Vg.{ȜmKOW>̓~1V]9E{y2Y~? dc tϊv<  %*{-' rC g<ac`#S) ulNE`y'"\㹋OĦ>]~݋.|>D~f &t?r#\X͹{s`^zR]@s.hyAYu7z%}~2d93b4gϸg>"ij d;,"H;eCRў~=??DH =]k'︉u-1oNXuZz>= rDO O,.S6n 0l-yFP'ǫ02cK /2!Xety Pwf̏K$9`gQt쟸XYsֶg ߪxC؎#OBrMw`e.$&D6 a '7.g1 \R͈}|;GA-d=Qè; [6ogy?PC W?8|~S]\9c9$Y5?^֘fm%Ds>`qqՋ{˒g-J3GQ&3BT8䭯~ Ț!}'U0' g Ȁ,&f^ yI!~b'N0|\ƿo0pѥ Njp?i+HR^;tY&/&dB>>H_h^]y!5AqPӫN<2gzbX]&7 x#b盆-:O]ՐZ˱̞ϏDj&E0KsW2\=mɷ^d]eD[Y\O\˦ҜKqfA^%>mLvρ#Vfٲ{xg~N?6 Z>vy^g\3uL7uܠ~WTX\+Oq^K$?yeEμ? A9]Gr]A nxdycp7+wsݮ.& @w'w>噧#,E hG/qG ,@(퓵tmAJ6w Dd8#*.)mO~xGbNQ'N [8(r/W%Sא018y3,_|7w"]{Fyo[k]R;]3sY6 =s=Iϛ? IΌjӰz?^̰ rK˓Nf/TLpM˘xw/^ړftfC19 c >ձ.\#N 01a쓛5@NtX4dF<;ByOV-%/h̲O;ȯÀ6FYpp> &&s,mý7 {L-pK1kYƿ?pb|9ɹ&{esF Qk| Nr]=O/mG['ը P?6lAo|q>-S[=rK;d7Cл3l& Xí# Łcd.{~L*#}<ߡ~K/[h XC7fJ l2r c?V k"` cy z7)x`Hc2q'sg;SM vtV`-cZ}^tDGt RF)Ʊrl7/f;/[BÕSRB&'ǩ\>: r_k'Ӗx:ᅥ˩ b*qP9.m(K|)gMMdK<{ ^('!}fMȼF#+>iWͫpjK!&7cܸ8~-ճp/@t]Mpe؜7 A72H!x'-}2MLzGzXTx|Be?ycL((&v3?՝qlrF:> 5@Bu:F2pJ//umǼߩ>Z5@:N:vqmKlesO܋ZvN[l+/-ow\@usyJ<\|ձ`\6L+Y'ֳ8a`I\0iA]zCm&HN7c|]l^2E, ~#Y :;< 6ts웵0gg"w|!^`??{&/;tY;%?n-q dbjԁiq ^R$5A{vO^%2@{-#?.:'bLp :/&Op ] FSz gK=}wl\8ÒeɈ]v-8FB?Ǒŧ J~>HN6-s$DhĄQӗ6/,2&JgǮ=F;}̛vcԍw\\,.@jLFr î;l Ԁv̟kno~G.7&loyC<q\&Nν6qdN%NO0,m!Lcwuı;M?k&V 5s=Q3>JCsy9lG0 s]s9؈G7̙ *xk{K#mKA&X?hxf{dIGձ3B`laaq|ݣb~ YcqgrvTGddK1\ryk;hq$(`z`2`099bI&mL&A,§2[.qOe>ᶍa,rcqF˕mAi4Ӹ/ o<@> mY}XIz`-=d3`.)n_$&Fc||4٭ȞvrkĻ\^dyu#{-/ߍe :MmHzBN "dL&ُ-w>F,<9?D nqg#Bd?A {AVq9N#ׅ<ݞ >ű"7Ֆ 0x\K.URODLn.ISKs >jK9ާHz.i˒|2Wcv~=عOκ_L^gU\xm6gḽClܼo8Q.^LQ }G4.ntC xă!f:%61 rsm6 wqsX8'D~9ךaf;qqOa -o ;h. CƮZWR/$nqj |-&Btڪ4a2jK ;-@xn=ܱ?DJ%]|Ը#:91l<ص}vI$gώݱdsw+d]ۏ#g;-},xl t،> [y1Zq"w4E 2 ώ $03a "q=s/CI2lY=D7wḼKU`@N1pý#1츈QOoymd3Pz|~?0yp-,b s63?vl !Bl/hnnx8$JUP:?\\C{öS\1:.ˆqfuOs,LDwſ~gn|k` w虽^m#Ss;]xܫH(!?eWׄ^-Az '$$<~zV~Sro J0_՜ /|#[>^g7`I~=J6?SA 2}Kv.}B1-es":9\=?&]sLu,ʔjΔk.dy2c@p7ǽd,O/#1zuDYLl(7`F;/&fds {[\&v&ǫ2n{/~/Wj ďnLl ܾaX893C/A ;tɄFeIh;H!&%G(Gq{/mzFqŹ'3qfȋ|cbXO^_~ۜ߃.d -76˶܇luFZ4'G~p0dy#fscݲ949:s'?\~g,d/W1ĝX.~u-pfgK.rg^#wQ#wssņ-}yᱷ skE;matd~,R%\H'K3q_F9z` 1cz '!sr\- 7>feCG7'ͪ7!rխ^km#Q[o+_7X _Jw$ IIR ;S'S|3zYo`X^+7ݟeS߀W zoCd3ks.q鐗Ȟ7du.#YMH,6}_݅uИ($|r<.9k'Lq%Dqq8vi/g/lb\ W tnX{hY>l0b  Ϗ%^ٞļy,xhc 7ݏ\ękcYO.w݋?w .RK]|N@lز_Y5u0d1'6Mͅ:yxc-^G^Zol1(1x|IN$zyVx#<8xgp~,SI2+>+ܮtgWK)2_w3;sݗD]7(0Ze~ɞtx=N:ѺiO{J{dWksG2ps5. K!Փ>%W(]4z!vr"qOv vw~Wq. =Ym"l;9tx3du̅y& yLw820l=Ȏm<0]@tyh^]/)- k,6Jowk-9orV\Y.:An~~+k ˉw#<u./"8C'-Ou{㒏wY ;6{ lKv>0GiŃncǰ%w=d@Jg`q $ukܞ8&69kσrg$w eE*!?RQaŹ"_`YFOĿ&D1܉4r"\<l8~>!OhK m+ɞб~V9Q9\!9a6"B^.^_~Bx4 )s^a-["<^$0=[ ?SM,30Bqw O/1\^9~u !ώO7#ώbh[A4~]i˼ 8~&e*r;|q1ײg#! xOC\fhǟ'9 Ӓ,m ܛ„z)6=*k1'c{:Ō#ղ]ݣp˾,c?V # rlRPu"Dax2@]~;-|\To g?DoS˾XH#F^F|3$y<.>@J~{IrK`!g pG9]RP1cx9Dq'dzƾoɝY}rwj於{<2qtÅpȵV.Iemv ^o؀z)wMQl՟WUvWOR].%͸ޮsw씛NϸGaиRug1%鹋 C ]u| s9ds n[}]Q0AtOgM6l Vx K|cly:ﴌw?qYǨsn]vld?9kO3&[xe"pw%e ]V8ĺYL+l-B]MY8χ9ds-oAN;Ra:?0lM@ݛͼ^Ճ&&ώ .Lf"&zar'v@/#{S^z" +3'sKᬾ:BU N!-juN) ..ŗ`/1ZĀ?x{O"|9һx|aI/"}OTGXB eWW.߀#c~`o.e#2grޭs:ïUn;gзq%_ IȇgGlO0_jKiy1u[k ~["\@w'o} _)kr dipro%qu6N4\X<kvd@ˋݑ=mp ZJg" [',[_ĎB0zlws KIp <-p\ZJ{8NkuDijbsfRA;3 ~g5yǝ%'[;LF{Jp$H<Eŗqn#3͵.[ 8[5. >?fFW'${p|Q{_K]Ǥr /"CTOrF' :(b:wyM-d{CݨX 9)}>6lsޖcχܳ,?@fm<~2#?Is2:ݯQA/#zy.=Mwvxk"G_Urts+ť'1;L'Nu"&0;t _] >K[4H \&3];8^3:BWki,dž{G9yqGm{8DQNg 'ˌ[mx1 ?$1㋫X\n 'IKh.ġj6 -o6gُwbݷ21\[6gw kC;Ic{..k]  2e8lDHM|s6KzLV+v喧];W-%qemY_~gFT,Φs|hmV1iGN??%oLπ[CHqn]}x:w^?ow.tx`&nl?ܘǷԵkE `'Gc~-٘' ݷmXܗ3DulهY6̒_&G\˳@.[q{&Cq/7'OVyC%=e~@*Iqn'$7,;,Q >vgŶ=)z'%\$-)MC#2'cԮ o?W6Cg(we#O˟KyΫq [év ~];d0g?ٸcdžywnw۶{1#$1'Ip'l<vs-0l,eI8撹fܱ&r2sLmd:c| z>!@>:Sj|L f3𼕓[g:޹ Us;,.[3Ku=b`3OWw1-H6ܟ%j̽^=O0R}CG$.Y7ݲmcOn:me:Ciᭆ{G0՞=]Qs,!GéLI@H3xMŅuftT\A$1m&>,y?,辩gt̙wY;1qqgcrU\O. ^CxKp3gP~pb8y3c%Ƨ 18yM2::0;ό7ߢ?]` f1r(%l =O GJ#Z3q/P[eDž-YA\g\&o|5ynLN:տV(F>YgPϒ/3m%?P>=%쭃eDPwkU17gE}1o1mRxضmHᅋ|n䂔Gձq '$aǝ-g6q=;!&?I#:ۋ~(x@}N0  nzoifc]8˰{GvZ۹{@1aqS$O,1n[mчKx#^\q"9 vY Yx`x&\.Ì~cd;̾荶mBED4e݊]O?@o5Lz$ټr>S%.s}Cmh^aD'̡l;GYŀxQHaHk&˭]ܷ/XZomxÖ>¿m(-h'Na,iT Ξ9Bh=wXupGlƫIxps0fb~LݥKZƬ8bϏF8dEwn q݄ZBFQrH&mT[8שόt.an"+̧4ory 6Ο mC_OKUnţ2lP 5r;mx?p73 2/ic7QQ3q$xlvl 6H37Ckj:n-K9^vIv@nZ2oi88ERW=}D!͡.y䎫Zܪf8msÑYLdv:- .)mx)-Va9W^n{ HeY GLsyxلXO' c*I1 [\,K~}ɻp =x3H=rϜEG=4G#sܬaŖ,5\3m+dh//Y܇3ݖY)$<Vȇ;<-eY 7/o^.O7!YăW\_˫o微awbecEcS G@}g$t ;.Wp.uI($<4mWz˄ ܮo= 6KkdܽD,^Gq '%XBq-ZS,H;o0LqunCH;`$9sQeX;#m6D-d:cݿ>}CrwQc"/>oC 6l3,u#2gݖYeL&y |3nݐhٜJ3nV\?gV!|aZYdxMY l׃! +]jEP\} pg7s8?Hn!ժHcX?NYe4-~mGR{C1nq߅9G5ٺtK7}E/pN<~ Q{g-w$=t\~~x?1W=.辟@s βpfϋ6klٱk?v~7ׅpfgy ܹݟP_ퟻwy ÿ[Ln,y2d,IFnP+26 g13_0aʗE, r_pў a"W(9!Ml%R_\6؀l~Mܻ|~=//踿=m;􎸖rϵ F/'a?J%umZjbf5ӯgSuy|%,#+}́%-2`C?:o۔iK-'GO7ؠg0ag_'&Ӊo3w|hG_ՖYeYeY< k)9,,Y׉!x9exۛ%|}J5<=yBOSKξt#s rYw<$v]{k6_ .lbH3^xtkcK߂rFq0icȿu7Q-> \l,!H`<'rYeYe L^9,,`~9}$;Dݑ #h~+1|Kԇ#e0`͟=&]ۇ/48#f58m{=x:iB ܛ8W&9@w;nNsc,jݻP|õy-Z+/|z*z z? XB=6mY͞'@F(w&_uegO/l H>-XyCܷ u7Rgn,?g.y5>GgqY}n@ecK[lo fW?Lu|>bqs}ƙB@kDwC ysUVhNWV|XG:~~#aԢQݤ'#T;,ŊvKu˃rJ"d@DCeH0l d44N%&uΥ o9!|c!Gsx3 ɒ=%ΆD 'ni9d SBz@lBi niZû-;D'7pdjw#VGs@8a'7hl#77)k9ypx~T&ۨ?G5q 6Gχ`xsaylOshu4&AnKDs!!+@vū]'!ݫ^!ۜ[K"{놷x]d^gw ^4\gś-)իvJA埃KlZdjp@_~KVaF b5AIl'쿤,}q?u.?pewb7,.N|h\>~\._ g|t].N[RxR@UZ~s~K? b\m6عIᏎB;~=ec4_8N''Ю/8|w;Mq:mezX9 JHr7ۅ1ŧ$=W Ysw ĊS/%CXm$Y?r}z/jkwԧR H<+ԯO-iqZ=zRNkkԾ@We=0=Xfcj 18c#.w@v~~oDSW߆7-vԧW&6ݗE3Y@\J!_t!Wy-SW&.zugF0!n{ ׀ r&9.ts8~Di#O }_x.OSv\٠# [Y~|͛Ǵ]g.3$Za>[> x!.X$apu'eYg>"&XYex9g\6ɏ,9ecR+F͋-bE}CGOßY2a,Ag0>3V%~LdpGc=X&yy8t|B \wvg"z=-BeAY8<xÿ/;`:σVN,^x A?e6xϻ7l~ Ap66YgX,gVf;Z\e:!aNu@`ݧ{>#q?.E>&a:QU|$ :Cs&f9#<#l|$u!>F0X_<6˰g|c< e;&_׀@yB\q_z:6x Pdju,cû|Z׈op}:C~k8>|s'vxk/p}~A0DﱺOWoiVL,lllXg0DŽ6?oj\swޓޝ{ĝzb%\\_E@8}^`s"wν2a1vo%g>Yg# 0_3 cY ?vZwͅy̮,OdK?v$ f׭x:)6-0M^!ugD'p j"@_;zjqzF?fw?鿉..`-? o/yۄ9 ‡r+^>a3iibh{2rK6mrq[p _PA3YQqxZBq>!7#x>#[v]}BAhjfc1\W2^Es765Oaş~X2 L4#;ۋo|CpZ\|4ś{o@?qZRφ> lD=\i, !ZSݶH8'?dF pD k`{0Kǿ,GL ùܿR|;IQ:^ܐK-#莿ZCߒKx }C%6h"{?Wݯ_q# %#5*ڵk?p@+'>j36($;aɫsusxH Oyǰ]n~z9g_r'@ŏ{e6lbCÓg`!X,nv;y5n4ڋg^-C>B̲" .pZ84ާ7̲5<lgs ˷!=e2,elx qeYeY#v,gDpq͖YeYd6V<}sWv>ԇpzw#=3W@~G^m/χ".`ȵFty:XHa sd7 "ZNw l@~$,Ŷ2MgigܬfG~ bXڵ 8E=>aCV6661,݋2!?|qk-2<~\x}.&x'cv =Zǻ>t&[3oG`.9(=]#N\Ɩ pbŞlYyabŋlX~[f k1;#gA2(0gt ?2q<0?9(87?h?Nn;:AGA Om]$zˡ% KOOO-?}[4i)t* !o'ٿն.x~`a]Jm}Zcxs_ =x-cۓ8]?d Ng?.M7(q9? =χtb-l Pðn$6Ec#Wg1_mr}̻1׋?ûFջQ;X˹ڵ*C'7^Աu-G)e^~-%̼3HA?P6u}sr? !^q0C DǓtepK P sն{'_ qȝ̌#QC"XnEų< k^q 4pY2LOY3p FTǷ/φe?Sssl\O\ %$ѽ3̢[˃~\eBEz(r9k5%e'TbRP# l8H:e N 6`#Yl}n2]֙Ζ:'2L/_5 \+e ~mv4~cU,\ [s)c IvŽ _?,][c`qd<`C.GgsĖRΒooJ4pyxLt|@lNb|0(P!I5@Id8'Pu5IXA;XraaGp-ۛA%۰|{xH}p]3Avq,20qJgԲt7ˁ.Ut}'-[˅&2dRg8 Qpnڜ 6.mI=VBy~+dct>ys4EE^~.\4ヹ-aMd\w8 jNØ^<mR6W?9p>|\5H22/R?nuiX\%G-5mԍ'YH?Z#e\ jũ+< d̏s~<fs(+v/\6}٩9VA~9O @avC:rOLJw8'ơ~ ِ mAr=D!Y|g6OHpCaPxe0g>6o{9bS; rFÁdG0tٰL{#Ԩ۶[.N7:d|nݨ/ om< rK 3o[nr(uzpZ"g탙q3cr5jU ǡOnׯ$NKzxa> ax<3 !-?;0"-H}>d?ivwә\A* O-G՗Twao~M`ݧrz{"< `?,Bψtσ@.kgH'#t݄̮|ia8גVr%.}ܻ~ FN|ȣ=\"8\ U2,[͏p6ibTq7޲^B̖<6nƯճlW|ʧ!8-8'6Em:>Y1x Y*O+JIG ?Ot`ѭ}wt%{R?kc09a[g ej g.yK:gIge$#8A>ȈJ)P:%m2><kb^e鞁d_ ^x|O14Ģo! yǿVh""A - +G \ }^x\mk^YJx7< K}.;ԇ8cXʦD܇ ,#W 9EԵP ?#&nEnHa}@<&Ǣ{BNc!=G!gxFc1?r]5GP NO 7]YF F:G?ݢQ7zzOc`g ]\⮖MI MLk-=2zF%KCcvHĀ%,㉕.ӫݹ_] $- 4wdJnY@|4K:}KD]:$XXMǢ_HAxL,{l LXo~5z=Z{K[rqu+mVٺ~9Jmxe] F7⇸$q6|0S R[.xVFY!;IVKP]i{Mbq1Eh.r`nd m3|1 G#:D#Aωz=ՈooxH\jK9]S2h% 1Ǜ&~DNa {D0U[B˷p6vRHɰ\CݯlM=Zd-X԰i 7-,q2pLvagm"N''W/w\[~Rs6wgݼ8><oq*sm%] ]zɖ6vsj}Y7'I%w[`w?>e9 }/׃G &:`}̃cp[KIVC.?mޤЖ 4g}P]W&9 :~5[pcl!lͶr\n %6A>(&Ls5ə7z<3uHK/,S#p6>idžma/^!%ÚRqf}6|ξ,!zy-eԥ>]p|fjD:_z%tzxh0w<-(݃^H_n ,qGdHqeN;L5tG,8L#.cD;ͯͣ\I,xa(9du;)8#\^,2ԎڇW= l:yEK#~:{Y3A^$az%z}}O lGr^\@|(­bz peÛfOL+[:$ӫq. KS{km=mcvI?D>}XN0OTDqi=MՖn;vL#䬤ORb]gLUX  ZKeذD!pyj/;jeHt̀|zAWx yMZLo/KHx5h6|Iw|i̷k.Y"’F ԌYe5٫n%\K1z C.)'VẄPZ/mrG˽k=Q&,\m 98m-k:@1oR.C/ I.e7e$k pŎzߗIJoD>&r܈4s89rOu>*D}L bXOb^^L ռ 3|m`͐Kaj6y}rOߨvi.<8LmLzXд\ݫF̀v5hs&62K`wv pC4`OVΛoG;3ݻlJB.: .LqrlՋ&OW C}~2:<\x|G4zhչ $=~ݷ^][kc`_|AdIw2v#t']Htw$:lF34zz GؘpX! 3e8u W;e"տVOqgpKn^K|+Gǟ@{OBLkB7K ^>UvӆoV|(tx&w۳2. }C"uSoᑠ6 ghf'\]1x7v)0./m<]I_u%FeJickA8fs ɗ=μX-۷jݣ )L'M*:s<ßYrunܫkԇ]Op1dx]c]N-ɑyuS9,;ṵ~ bX3"XC .!c,7 @1WAļV$nAxo ]_5 Y;N'_ gF$0rݶ3%-ozgɑYP{?o "lN.= K(-!&"Oq3_iZGٱZ?L^:!ߚ^^"`Go6߹\|ro\w`p| 7˪K0PgK~b5q gFxd? w=7m}~j6H\K`6bQ?ݟ $Y'Ԥ``&~}Ok{3"ՙ^.`F]#+]8B:W1a^|@՘lI|Y~9˫eƇ{Xqw !ل3p_ۆ!N[2/@zG5wVܮ=(˘, fԹg?KQˋ|a| n1w=_ ݓÝ\v1I77hN!߂'Q^!~pO#<7hÿ++#LKĄk l2PNٶ q)y ׆'_-}߆<z!k-/?HqfNtB4qz@rtNmV晬 װi?ŝE:seS /Ty)I?\Rp8f6g1p*9[Y&a|Cdl F撦N#"k ᒄYh"x}yds+!,|Z|OpMϓ  ׈iicq+Vڵa]~=q8BOY7^~| W_Ǘ:uso(ԑϫcٝkOnKNqzE`j-g, 3kӋ@ʕR9J69׿ {LXGÕ4:lèk GD螧~Um:0Ge?u6!u>LS2Lde/KB<_ q49rGX%ɫ|m b . <?ۉ8ݻIrJmf^~;pKm ޖP&z;"fr.\XWQ {r. ;`OXcӛu$mҽu6<ӰAJz쀟̛+[2+|8_ &ٌb=ar'0dG\x_v̑uǺ#ܸB=V\َ,]ժizi% VV6>~@~s'ǬkPg n#`y-xx5NAA|ĥ-?:ϲŋ-{#{b{PMo өyubcNJ vwm$䇤3!C\퇬~OlN )ձbMW$>Ą"Y} [Ȓw-ӟ"H}-$>}$lXKtDܟOMF2kn p 6g4;oᑻO\L;<{+'k,3-ZOAxD͗$V v./QǃGz+'QvթAdu+vq#.jyp"1oĽqh_0U>'@hwbW|`ϗ"eP]+0u(,i7fu6>ugg7h(Mt`7}2M|}_q̌Igd}o=ŇLJ.# 2*ar $,Ld!e6uQ.vlX2]VǠsψ7aH au$>]?ſOǼ-i?41%v2N<\cU|BJ@uuC79ݿm à82V9#W~ cz|X7-B[ G*ͼ}C GfW_ +aKGYR;?#" )oK@jİH9YzZl3XVUliϘ\=JwN avIa0CPCi'>2像Xz%}_?^x_WoݧRWտPw}VAiԭ‡,=KΑD?{ޚ{q} 3n=>TB(_j+a%mZ-EoO"o$-[MNgΌRڏ n"=~?y WfaOugջs DSu%W0`m~ 2]I{pX.WPΘa`o>N|oO<;'(q<}|r~x61=,nQ˵Ђ;,yGsQ[NY8c,8(\nxg}2} %n%ўӌ8/KfHxzQ܎)Ծ.9_fy>h'ȵMf:Y8An},.7`cWܰyU%:Huk^pC̮x $:3߅iP-FEirp%9/S ~36 yN6E<') 2LeodC;D5o#,hżr=vSћMdfl!%&xI(ۇη\$ע=Mi$fpxH}.y1vX>F6n 1?s<3M#cr ey0T0gGM??Y>YgesY>Ye0 8 ް`.~8];ㆺ[-}x991v3Џ P1/3${oNꏈ87p|.Lj6~g !O۲I.w܏P`Nm:aAl(k:8 eY˟W' Y=>NȝH{׻ y`FK͋cC~ ŻOV,c P͛cùBm7019*qʰq. 1T''"@՝XcS]pGr9#ỮH?v,WZz/4[<$PMt4qGiƍ4gvB w(3.yeϓ2]>;GS=|wëN޾*2mcpv89eԲlY1;=-~c|ܼ5 'W>7s`N83>R0Ov-l1-c+տ[Oiݣ@[G]_i7(cCY7̆/zg6wّebAqz@ucĖg{OQ\f# | lġ/ Hh9m.-= 85tySOb̧smOu7pmO /&r//CG7߀W2-CzE ^#Nܝbz%O;r븯 wYI <3-`q)W.!zXKr ,!>xQ,/qd,,C.>#Jju1_Tq#.ՇL dڷ ""ߗԇڰIB6CuX60#Jaׂ۵x:[fpOo-11%F.[ri85w~4&˿c|~b9F~ú9|fv~pt?[Pph+?h2/P__~=sE9ܹ)5E{`.Ȝsdڹ 0~([68q]ù=~/چ)#/bMoۂmYO ۘ5vG`-5f7ݿVMomwhѡo$lۋ >=x_tpwrƒNF trNy 9rكn; =JZ{̍ç+  M9a1mRВ㴘f}&rpdmz˗*_g\ӛŒώ nB &/?F[B~# l5 ðׇp=@;ظ%; =pÃg"A)&h6σ1<:dL.8|32m0ߨ00Md8yBc/#pŲxт̇ 8KG~LH{r0}54dxxYwz(N%b9CrKOIgHǛ La<9>OR{,Qv0se0= guǗŽN.:&w^3N9u)9/s3 CJYp<_N/W\ ؘIwB\8J~YC$?,ʃ_VRLq vE yDz2l3=ɰQ\!xvwvDϪnI4c+̦gv{ 75QύhE^t8 4G :(GoƎ`L:;#/!1AQaq 0@P`p?& sS 2Aރq>6Nwth?56N/dw;gBO+I yݸćIsSC~ޝm#cqWP2a R1?+J!SC:\ܾZFߺ}F)%K Y^mu-E,?u lTRſ##s&O +LB^|?3߱xix9=#N]#54P{Tş?T"bۚr4S:f[Sz-dLYR^'0t`} 52R~$=O< R|]-(V S\PZjP7!Bs_Mv>PDE a,/ ZR7V`|3P+nIӮs@\Xf9ࡐRuo1R!Z贊%%@7tW셴M761F*P*T yG?>CgOkGwzy0D>C5" vʢr(AHVV!vב/QhX<l!,~($?Zʆ0q% R)6P`4"Xbej3shN9=HIPF4"tA@eOv~zP)(ez76V|mo7 ߽ y9y<ޒzin>=9c[E\S)6"v >$*eh1ྈmdؤt`gd4PXhQtf^ay?\KRNyS#8@lN1jAa)u聤NݥHrJgU# k]L%VXCؙZ|E([ᓴ TdMc ?R#*oHKO>DwZ5lo7 $J:ET{5"; dY~Rvcy%9@ WBpbKj P*`jU4իoG-,L# 8 .!ҢVD*{eU٥>{K"UxN! `mDLR# WˮlPڜABuB[Y tV z}% {VNP = )QjM EK@P$!iI}uaOeN[Z[pX2h<Pg`rRQMR^ܤLzgo-aKh`h`*%xx7=,c&k `yB+OZ{Zfp)zow[?j!sKcA=tJi˝4zؽ*"wR@wXu9[whb6e8OhRlGLtoZ)7AkݶMGgO$.}鲚M6e M14U ⍐@f(@u6XڜMVJm4*$R$jS`@߉*፲׻N ^7sKڀЂE")WUmTf,*ʜj%dt"QHZքxVr=3s/qA2s9?d!gԳy&/Wc](l) SYۿQԩ,MT05ˎh3p8ifkgU}8>'͚w*vwZI E /E"h޵-fzEDd*&= κ%,r~A k8b>Gkb]آqp4Zh+Dbgˆ*L"*F(Bt |F&K 㑾Y-71o3B" $3Eʄ!7AY3W(׀.1 %xG[d'lN}, qX 2u?ʘ Jq7g#qLQr574/ FB&1M) ]W M Rr;b.RDCwl3hb,#J ~nGC |0xi:0^zQiM1Q|k㏽@ΚNJ6<.:wU'*G5+DΡ$aC {эOz1HoP*^mV41{ޣ 5$;+愉zH(gՏ<0;1q_φTONJ<:3Qt /}rZfiɽE\B%OUҴI=>~I#J.&&\JBY*>n=hA;t*ڡc./-PE]Z& ߻C~ x k1?RmaݿPC3oFSIr@- PA.tne;X6j.%b[mV; A{PsF=Bg,5P˂J]Nwb0bEqK~ԊP͓fRCir%2P&"pB {ѹ4*1r$)1|b{+n^f`rE>HkJtlyBّYC lJ$ | 4. Zآ R%q5xOԺ0BᢕHvd7[$$ *uKXjQ27HކB>Bw#rxMEY/KṖT\P85ZE6]ޔ)KeuVrSc+- uX!hf)G @DH戲1vJz=#XxXjgD%9ܕ(P` IV5a="!Jjk'NFC+Хܑ2ݧ_xԜ7>>JW $~YV,.vr7I'Cy)y,i7$U;P@n^ߡܧ Q^v:Hٟ48:'SR˿&u%y޴s.C#Yv"4JFT #J Wx(jޗK: 8"4xYdnbhzXHFcSj$=10;HmLMjc/~Zԑ .uu=6>iwEr7V3Vh@5)I ?dyF[?E<):/zysFɸo O4f_ZEh$?Tİa7P=҅2ԡdJm4(#bFbI ˽x$ uIœl 02L aLiCh,I[ن@ VJ?5ӹÊB#@uN(lD5HaMMNJ0#tzeJ9_2l%@0azޝ!i3Xkg}]ŋ]JBx~)+1;CEF'}GbS_4p<1߂ksFDp-#| M z|SH&ƛCQPy=Jޢ$wx>82`T:}Gxf{UX&KhaHȝ舻IcMK.>i"0Ltll;JGA&8Q%x DK\SΞ<#H&S;4%_6huL@?BH$'tDK/:^ၒnm_ _ 7`=AOg=9J8iR<PC"wT4쌖ށN)(L4liٶmvJlc+V#]Yn~Buk'gJg^ތ%M;akTx|& $'?$SA`,r?GTy& 1?>%0U]IpEwe'>( fiKҀG5 Pס4Sa@`95u&/Qc6CР4prBg])7q9\܉ЊȞ(TDla1Y~($8ZW?!\$L'g䠜+\/"(ʰ~jp⋚?`tc4uEp*,g+J9EG搚G.< iPFI#e@M P M@P-'L9^5IăVg t_S>dJL65=ID2$L,oQCR:XbT4IƔ08e䒶ԐT`Ϣ %XtAb7nrRfѩ"0ӭC{۞_S`"WJ6wޥ@bՀ-8Ϗބ i Ãaܽ_`>)$ܪ1L Fr4*Q*X \4Zm*&PZBNII7m[ُjkTu!%M~ HZ5@@j8f : "js5+q>AU:]jk#<~PhFJ+ zhEjDǓs6u+\:f@|;@,V)C=QGz֛1!2e5nMBIsK%>_~R#3ޱv|p+KڐQRVMP"c VBD+܇ONuhHGh }(?uuK; uW ?jh>5HR}H^/ rWPm+ }A _~ %niT~FC6#2 @MQ,C/'C􎫅m %4EY} W,ֺڢa#FE ~&$rs}Wo^04#>EUaS3 R.EvEɰ=-IĐv˺ОY8FۯNNrp:Q82R҂CZ[8PF`@'"3M椗8%)kԠ,&iFH=D0T`oÙ}*?4Qni[X@}pƽw=k@?DV71I9;~|_3WbS)-|[ޥdeRQW0׊M.v@dJ)nr=DkvWކn-߯x_AYD1!@W'KmRʞu44p,07a q9y<ޑ30?Ӕ|zsGFMRtּ{޻OcbEޜmru,}? tH/SA =Iކ$M.:UvFFok?`rtLiAذZGcg}4H.IJF #pLQ- A&ZYU -JKa̋v,V#$+xd$ހ1G7UJ] ;A@@7%52ٗ* ➟{NiT+>~FiZ"v9B5H \bDa'=^+/cOjOkx+/gc-=X40IpPqJڡTBeHދ.. -U.ꜪnDW-)OC@)N\F9,[|QSTGi%鑄@tr9Qf%n9uD;E?Fd7Wi4%\!oZr G~R;t>CzsaB4(7A_!H `LtOZZUuiw'c}ff3Ql0%F0m/j \-x%7RK7kNhvߛWҴvHZT t=/>oʉ b.IdB 'YiZrH({{ J&$ڄxbqk j;*i4J0)[MmEf;DkژԗO@~)}ЄjzZ0EPq`3=vӇBES&g䩊-hlukHa?0vRVbl$S[aHq#" ԆF`: 4|{Y`W2*kSKd?!ܫz 6"nKxGޡ~Z{S]x{6M}ʈ) ,Oޑ֏Hno?8 =h@SQ"ǚ)o#QA HMz2!yC^ 'EEez, ,5AghMO&Xԭ z&) ZdY*%)JbSBֳw~8i~+uj. % yq@TԢcPoR`,/I4!]Wpu0do # &l^ԔEz2MfWԑ{K3o38(HsR,uH/ Yw[E":%3((Hq?X zhbx==&ʘj߳J~R&ZZg@zǠhVQ)-ޗ8Z*< P[ [TY68 yUGG tD8OT$_Џ%A+2Xh@HcoCtB #СXbVߛqb<`CqDMKO^>I0aQ``5s@V{ңX$dai)i.Gz vbM E{攌 j;U(c'ГMTpbWa`8 ʖW[ڝF6I 楼da*a5d.(.),"ф\edɈ^C4\:T&ʒV+TkrecAS0ߒ #4nP*MȳhBEj]@QK} }_5"$VᤥhxϚS!#1X8[҉"2/`4*2Bgz"+p`ikK9PھK GF#v `#ΧşԳFh4ʻuesc gnF(oC%#T {дyoJc 14!6PnBzi@SZ4_.xPȔDfȲ>F@ҲGҕRЗI  g6EL(ӑ>;R੖ԧA@% @%Ik!Zx%aw*RH{7)C:TN9kbJP ~eh5WMG56K-K7֊njMHF]p 6mSQapcʴa4= SVGKmM)”ʉYXm}0~$oG CAS)Q\i*RbaJބֲc8g5E6U/9҈ HfjjdRH=} oL#jFڄ)dz$|N(@׹jpڎcr;57ᩒrz8QCg|٧mzA ^ELD~6ޑQ9cdǠ!_%NO1/V3(Iư-%) AZWA]u[jr V&wWc+(3Z3ṡ6X5Lf#SAbz4"H4;BK(TԎJDDSkՑf`t뱊`@F|SQ`^("HQ %"BRi@`4-\*Љ^4~m%ϣOK>C ik~)HIp.bA~Fc6ӽM 2 u[-UP@@\.JiF%˓ _*իfXr9ȋ8ڤAm4R0̲lנh>S89̅E9i2ETu2V-FYJb-⛺-*;5n\mFEg_^BPOG:p3 A+fJ/v\WBhmmZw@Mha㐾cL=hI9lչ_!*B\'Zyq`6v}"PFC V=]@)o [^閏vr8WUM9&E .%>jY-S\?_:AnC{^2;VP h.;N&v%hSe# 2u "d(Ep*_4qP,s~e p׹攥r1[{|f*G(Z&Fb5rV nMFO≡&fge|##P,:GC>}Տ GL+q_O4%tΰjҡ%l^RЬuoO KmW+.1C;299a>(;&?)̛Vh4V'|Z2{Tgev T!uiZ{ ^+U7[ւʱM]JWthk[3䦤ԕha9=&2h򪹿 : Go$ 5XA6rδDKfj ԫ+-;%cOS!ȎW,j!d8'ڞI@ywISHphp.bM9$F_AjB/A:b|񬜜 \ujM- +SZѦO)t%j/@[iJҼMU@%\Pp%M aFCDSQYzrPO򯕂y}$4tՌ)AW5aW(}P u;(^оZKṖT\P}qk>޷ُaK1vvv NH'ȓ:#4K7@ &ݿKʯҚ=4/ H;zvG'Yuwz# %i U㞈_<ԟJz\]?B]PDs!FNJaNըf)Á.vbv`jT-6`jK$Ju4w9 J[6tM:4W]*Sp}{z'L5`r\h.[?y)+8T`7dr/8@p5Թ)s>}*&iڶ ]4L$"*5^qrZ0} ,Y?@gjpNڏM>ΏO&]\9? "Wp⡽Ѫ5IO [Xh3 &=A=mC@2@JA`4q|?V\ԡ44@E9ix0_9T r.!2]xy@::DPX$E 8.-J@viJ1;P G&TLhy+섦hC7o 0 vzLh:^ۙѩMZ/Z7(E9VXK9$,ֈ }DcRf=G3v)%uR$*V|I^'ږyKE yju"z=`Gɰԭ+e#AH\Rj4U!pst_@$sDdv zg 9$֯GyIJ2EsWG5f@MR00M3Ϡ&čGt %ኹ*s{IS_J`%Zp>8X{)O6# <3b*VMndCo4]گx[@@0 _44ƈ^(bէLQ FeMu֎^+V3>h,Ѹ+#}P.4ÆၻWkSUhSL*SE {ՈOȌ:aC}؀Iia+4FHv7楙`v"+䭸Mk+F%МHjڏG4KBSì5Fev2Р2?79:vlv=rU qvc4a;"v|wvOx͐ 4mT bbXsD֔6*0 L DGޒ~p|m֥sn0iY}KGh ݥ)qiu%g0yq,gO%ޅwiz ޠ:9>Aԩ_@KAqB0YN"y|։ 3"JץYTPG@Y Őv+Iy=*9!6oℷpv82 |_4Thݒ`Hd+ K5k&"H8 ûIBҊ@<1cg^%v[kHB],c8aulQҦ :Ez޿cIef 9$=I<{([1ޛIvmzFd@ء.u ܙFEՑF[  =!ZSr>>mE'z$%ج7鼴I4*mx2-dSODmcTiex@XK'$@G-$Rx%żRHķ -aiYop_:L'>J'\VXˋŷh)C!HRXnV/T+o,l $FG &/u̺ڬdCcwB%i:7_F8)Z uXSQph*\#J eO?J-H?iUYj^Wp炯;Q塐*jՀIVo):@uҘX BWP8b'G2@jlvQWmi9+C~'?%a91o1AGՃ@eM]pےn&pI.ItúvawrgyW&b62>*)l5a__~2NiKrq~-d{`gFI"^xEDMN|nO*)̐ '# k6k)%(v wJ@ơ⢢iUIWv !D2ײxj۩5VYSRm!SADnbZL\+w@ J^ XئaZ46:CV5(YM%9ڲX)>}z\:Qm@{K]G\+s- N/~yGnބ*fgs;]Y 6zk>='i\%d`PP:ҀO!:|fQ=[7r9Dx?t* RϷմy7PLOL{{FhR7B3vg{olm5"#C$ӄƓPl?`5~2[hK2H\@fBZvL# R*c:sz&!11jV%&gH*˼} ݤ͋ӰƴAè*g7Ж4ҰъXʓBvH\O)%YL7x0}R ZisIljr4`PT+ހP*6VO'ahNBLZXV 9i`Ex,IVUNBZ5-ڃWCuq=OPJFdƜ=`(`[Dzvh`4E u?wX]/eEEEe}EazbY+<`j-[b5 꿶4 ؼ#*1ۚ(ALRϲ}".EE}>Q躤^ilɗPi>_ 6Z)|TٰYg\xپh\<5%G7= ڢi1 J$ ص%ed5[RH(mznzӍJN654{MGi!J V•LdچIHs[V|k;R$.n&hrJ+ij.([~Ѡ;-6{Q5I&mb<ݣp~idSu&mx?փ JZ{\V1^`\ǰěD1r$SF M $ w)5! :9b2D$,֛]yMb] :>@Z{iݦ*yz:M"HN+p !WJ͉⚥;<C0_0?Y҈=ӻ]UO*hѣʺnqXHQ0t{$6S C:&5ٷl1ԏ{.Ne5'Z(x\=G DnblKc3&B7F[|Wΐl E,X`Xf'J:%"Zp<ڦQ#ҔS萩앚bDT(:%e(`foDN@~\( uPTSO0P^iL]P#)X`wz2@B4F.ޣAؗe@B&hhm=&Ue.#Iwi*fB (8%4S)ة&>W{B\ЄFI!NksAcGʱɓzu@`0)PmRroA,~8!kF6Oiџ'dŗ0晓p=Pm_SP$cLRuXX4t#۳L[kQw-SZƚ%.&ㆦ9!'4gXB,R!5OD( 3WCEޚ/, @b.ג4hQ?I1DeZx2>: J) 9c2wMaiO/CFjPۼ(( 6>+:yT4=,dYqڡf# ]⣬,i%uShŀB5]A5 Gؠc+c]:4 )#@(|(R:#=kARawۇF|?s)"Wb7,, 5ACd+7; ZDV- 'w},<jz2֑(%N;1̻ԄNJ*f3P5TCjD)9.Q1oeDRĝK"7|ɣ_t[57ː?}` #̴cPőB-R_Ct_crO2|sZbEz(BƋbP7er4xo"g\0ҺcN!HvDfFFBkuHo~?*(ʯcŗi@j(GKjZA!ܗM,3Vjh7cuQW *꘠hjt+2NH ل8 ڭ oDW D_E5-:$f#fDK,(R S:! X$c3# ca:dfj:wX*cDU}j81 lofZZ7%NDBnF'N ]<Gdn7,AJ `Y`-F;C$^Q پu D XAv`4 :+Xv8Y%q<nq4-5V*i{vYE -Nf5QHWz6z/_jwX>+FñQA1^cI^Tp[X z&}mL64LH J} KM>Ϫ%8B|/3 l`8ئsQ!d^2Y=}L5A4 k| 2^u:=[TZRO31wѽ%Z3粀JfoSSާOzNjLKu8}3c(37,)r> U]N4?mjTu7^&_i (/J9A$䣚hﶧa/pX'[VPy_I4beX'NsAɍޥ {XU H)@&8hJp|Nb(&B&,C3^FSh Uo UP獇69tދX9K>Y\1OKsFOE#(5GK~:%'dPJvPmqrNB}x\D╄7Qy pPݮ}c>C/Xr5;cDckz$dD\@© H / ^ɂDK-1VqEF\rW1O/$ЃXքK3 aI Ip3ͫ?D#dK-VqAFSjW!\r-uI424 _"NRE.QHl:%J :PQZe~_ڟ@Rt.4DEiRg,}ƚ #sԙ&cL (6i:T,2Zjf NѬKTF@LQ\!hz}H}RxD6bKRtl%KYLdv L Y4 mϪ(nLJ.2q9 K;9Y݊ښHҌ6 1L`u˟ΖAބt2&IdBRDPQУ^bG A$[]5BJ(Ē5rohŠ AF7*WXQtL'QG4t׍B5Qd+ְTìS0R{HuEzIR(fvX;_&%3vP'!2)RI4spb!ؤcbFJҴl武Kt%&41"Iҁ-D},Or EAm6^)n^Sɵ،#Y¸]c2X3>݌Dq @A2oxl÷{GX&d:#THy&Ϡ/ `jl-:+acVU" n #Oߞef+n߾nSuj{ $ݤG+h8,-eԌl>δ5ӭ4A,[%#+7Jv>\)&ṩD; XS#BKT3~1OK;FۥF\Jc4:MYwTAe4qJ,U ziRCfY=MK Q@~(EK`2L9YeiR(dj_a`5jy;R7dR*!*ija J`E 4svyyUn%@+r S#s1վ$t; )4fU u-vl[tHv^iW ,Q S WM*Fщj.6j`XHq^:AsVV1K1L W^QUA/H :sDv-K:u2YRF-nra,yfiI@v֔A+g ecycPnfYށ$4ңjJX9-IQ&x4>cK4 Tɍi42YHKmQe+Z B8*:nИ*.s k(5n3ʵh37w-VMb镽 Zrv}L KT?ʤ*<ܛPQԒE%VY c ;ؽ=a= {%E$̍9;>I{ЧSW6`1t-HTCulWo{ YB2܌S2DE[c noXlEm_' x UE.Oz4K@%H 3 87_V(}U1h+ ?>)j >L1R5L$=C*A.Ӫ 2Һbdan=VЗ=Vn,X@Ew)xdN B cB8JMsс85Cۻ-Y '5.!$b*CP j*Y6i%ԥ'DrR0g3` (r4PF&yFjM0yM] !`LӮ&Z8ڒCsJ'5mFpM *" DzIz'()ݖ[fCA͇Ao&9T0F`:dOsl)SyWU>O*jVVbx@%WoӻySʞ^U. 485Q{ Ґҧ'vTySF:@u)t/V`2Ӯlݻf:ƜM0ޣPٮIH%$_v[\H& 3яE`B\@b{~AK%gq7_uܨi2}ڌR,-*'S+tBTTTP[ߐ̻zr2X`k'|zD/XJCG La$WdRRSr5Wd"P0 ***(U)\|iM 6B0Qs*dгhR" h`anʐiה*p`?.WBGK,(u`HYp_᝭虵:!҄8g >%.,K mECc^ =A '5~DX6 N(K2rܴ2+jb;7(ԈbZ(٩%'ZW[U;KeDC[2&ܾ^ |ͯ妌\0j#ݮZiޥ ׽M6{с-D0I4߭ wl^4Sdmp?@J3J$2oSD?BO*h8 jq~jhAڗ9z=xLZ,I& s~Ԁn3*h@: >s𛛔4hл+BbKPX:=N.\uY໖=DR)D!z\:$h(T &lэ)1DyoE\"#s]>(v 4=/B2]4FMF08E,,G@y]5邁K*Ƚ l EAraZ/Cˣަ> |Dk>k/bښ `M$*.k5f3*sj1#F"V ^ \>3xqiU#?-/\>#/50/[R?$$wmSSSSFz8=-X`A֑Vzh@;!V2,o'ꚗq,z{i~!+/T5J]Ʊ}SH7XE0,IF%pSLMsꌫQƳ4m)|,h E#G>ԥۓ%LnDoK+KZ䦨ck]} y*l1ZIxM((/V.~R KOa,Eđ"Lbο.0ᇇjE>\Q#)/Wژ _ʠGCٳ^ōeoX^}4Di;fG3Ks!^ ٘={hAB΅ͽr2cΨI6 zE/ppڡ6ٕVv3hD XT4 RZY { -0Y8iNlf5yJog0?# pV8ޫ;f>2IPayH5PHzO͉LsQނDv10]G^tJ:$T 4y:@$Nl*+b*fQ1) 'XVhLGZج0"n( %K%[EPb`Pg^s.) ;R(~2P{јz~ZCǏކ9qA@52O0G !g\qMnQ-<3N|QY).E u8^u0dy?ʟp"$Ȏ3 hdsvϊ`旻pM*@h+#H EplO- kM}on)2X4LejBűJ iVT[ߜlRлV`I'5v([hB ea(7eҸ7McGKOZt~*^ .,rrʼaR]]p.ɪcpe>:'f=܉jIe^gu!+]l,ٹjd"1@% ,Lٿ᎕>bx١zr}!QCJ@R`K(&q7C@{;bu-:]!In͞>6*fńm䨩}"-4͆0 Q h>*IY:5:dJ~<#Պ!hHXqJ#{TJ-?IWPvIO(~tyQ#䩮yf$PD FU3F"MʳtcX3⦤]#ѐGԡ/敔qql]*01eD@@mҘAYq( R AD'%+}d.qWjtSGޯЄ"IlޗDUź&"ZbSaT=+PnW(> qS_K*ͧj[?b/X+-ؓKD:^t$ӤALìIcI(SZ"l&HOk18 "b]}/E)) >sJB[*<H'DD0$.3JQ4% z~"3P@Yb3{!OX#٣*BkHxAn:$2\/lg@B#ڽ\!3#5{iVYoo /]"GpH`.`?i]ba 5q9$F$Ȯy}+nT l3;ZmP@`%}Q #Eb[) I+iwkS å✈7n&&$/G+35ʢvRa Y:@rN5.~ 76hƄVT˦H1eC*H8XdC0t9{R*-KK(6[aT.%*q6tMtԌT\Ռ9Jʘ*$U^ɶ Vh)!- L̵ lI#xW.HgJjN(D2PE`0[e{F!au3uu*Cu(`(3nL#ACYޱw"zN7iS,FXWm6i/dK\g"Qކ -YާP%廥0iZ>Q#'զtGܐ[_g}( mP0 mB~E"vGLyZn2dHw`R YC0lp ?h2CG~>&SID&() ݫ@xhdYև$@](/șmr]f# ^ގ'7 -E?lP(JMpc_a(eNIMKR BWeTQL_@{3H40;ϑ9Km[_A. f/F嗋kǥ,)x`jĜhJ.@[$s\0=ռ)fkJ2uvM*"F $4@ ;Hm?qZ F9bC$!/.hJ #&@a'+`o+Ŏwb*YW+~t̳FI1xǷl%d dimF0+i[e(@Ʋg>sJgAADTX̡Sqs`Ju WN d7඗e]"I\&'HkRBCZMH𑍷8`bsUNRލmsjc6)+t"ن?0Lf'1IWW )lSXӟęV^\IMܽW?P%` ]Ph4Vuo8K*)2G=1J%VrbzR<6.'ݡ].Ue]Uդ;^B$JT.|kd,!Ҟj[Y$P5pE\OiKmssZ :E!P,1l@Zj{uUdQ&$i%t2C*+̏r6 ~)_PBm3Q|ITDA̞!x^~2u\$1D4DȵPBALX]ئ %ܹPIdN6 H [TE2SeNil i RD0Nx n̩I-HWNk]ӵ'kJXCsDƥ)):P.qS+N!rW#'YoE$ 7["r;QEyԔ= (;G6Aj _ZK7݁%c. !Z"$'dLǤD&Jf11&rZs ا〴3= H $ꒀG֒A6o4ι6m&HU 7 HBI\5RIK;isK fUoքCfXŒ$uF%CAc_!;Csv%{Jjd5=,S2sB"-kP"Gk)TY|"G i!j`U\FSZ?SHb::5.S؁J687i*P[U <RCuFТa+ ڭ=biA8 D4PnTV>kdŭeQ,òSQ{d]lvP~jr%E0=sDH\ҵ"DFX @dpJ.LyzzAկ2{64=GH2݆b)âF=n&o|5, = e|`n[va)N}TTmgzG]I*|A@b:R> CJEwk:{̨/SشKvW`Z3-9m˓"ډ:g c h7y z?3!XȨ1ޤ0nIqBFpF%h]~t%z1e.[ n8AU 5sR]΂ᆋ7KBz"FZCNII@fllfSaᨁTk95j"_\*-o_e1fb6-)=+.iF-R'UR)j0҄-)z)Ewm}Sop=YSHg2x&>Kk ;20ci.(6I5,I0/e8itYA菺([BUO*hЫ^>)u, mBPcإFo#щP+m=H0~iO*yzV 0P pb 7_EqSk)KF@ޗ:IO*ꮪhkڂ?4!YG#Ih&5q28Hϵ$dP x KJSާNl]ځ6j]w?YJ l1 )%YV?` Bjk&|>Am2=W#jjcNH8f N&I1 X’*@㋢ Ir⢢ @Hk%_0Ib›Hdϣ~iVJ&Rѽ6!oH4ntv;SX&1 FЃX3⡱SiJ YzFDmDR.}Fjަ![ e mh2TZíJu6(?Țl U<:*~oLb)Tii7RE3CjZCXgBj *-*J g%Ч,vi|%Vډ!] =:Ɏs;/DUE[J{2Z/9CũO_Fhjyr0]*|kP1A3Sڧt((W Xh9pRdʍ͇yVF54kŜOwZSCl90сNiWN*Pze \2zX5rv;&Ax'e)Dvj\bȦ.=)rܘ[Bd0` 4<ᤂ24xf|/GA#Irע E= N@%CH%"Ϥe" LRL!G #ޛZ5s4'JNBF4O'A"h(/1|~) Q7=?G$je>A5; 㵔dE+rrwClKNn#d(+"In:v2ŸMG@Rs?)^s䟷ܤܫP{7"o a)?/˥hGj,|Tx&&IIIIMIILsRoRoS?&IRo$\>JRTe)[0t¿9-˥N&ؐa7cчB(,hT$7B9LދyY_ޞF}Ky 049O1 |?L> ą Ytv=di*Z~ZL_Slu يk;RxO rY!bRP3j{ zCZY斞>GuCөM*iaUڋ$r[_4,/B> 0t 跽I ;5%nwmIvmQQCOjPV`h`?*9Ɨ$&?): <1z17*jv<6A*AggOYB9O:MK9hk{#Q lJt. Pq~jf">uW4i+MD@5b&r45 Y4bNV!'A:Wx@w-G[Koj $ũD%ifXwO *j֡䄇WHh#{i콺RAE)b?PJ.5ځB ʿ-)%l`'pM6*1!0+Կy cpG59ua_qAB$\y{}^qDϳV`6cZ2$)bj~ڣ 3ְÿֶ _k%poBk]"Tj;G=:Q7S;eqLREwfcL &BAb\pлFȨUƛTsm됕ZѨ@L#O<=?mǡWr$%]撐ҕhKƝ סVڱl_bݗ*IҴl)SoJ"Iܿ< BI hkk20Ρ5tp=tڤB@0l;y5H7M8#P طaҸ8- ,WT';TF+G_F4Z~;0{ȖnR*A[[](ʈc._]|rC>\G2HiMoXj=$fF̝L+[!uҼ戍u#1.3ftE_He* d7*lW_i5_`BP͔xt@2hg86̠ B,H&@M)/\.m$X8BoLjICãڄ  zZh| HЭT B[:$P&Rr݋|Iv6F<ڡiG֚Ei=i扫vObbR!*nbmB$QcA)\B4В)h> MF}AA M!5F=w%=ɠܦ~ ڎ2o=d8,Xhn)]3JQ 1LM: sI"K@@o hy(voDJA_`3ݧV@t *?w:Ц?&WAIZUsPCW'ccl\S@5cW@LLkG3^9fg(t֖8O>@Qۇ]]ӊлޤ>tDohim492ߤԛ^dj(OsQ?aggFUR߽D 9EEC)$Q9o+H"n!{2Uwy,BԦIca5oVd/j)ك;SN8:SuJPbHnP` %x[pҹŧRx? Ǩw'bw㋋G,hۗ-ɿrijΈVxZOJ-8 BSђ%]("S%0yh& ${ۺy҃`ɾķ'5:bl:T pNޖgL[!0S6 '$U/u-g(|A2ocpud^SMOɟ!(ƚQx0xS!5ءYga]&lY7Ү۰o+ȱ]`0RYչތ(< 0\#e{:PD_I(/BB^P"J#I-FF   BoBj]x& 􋠪on(d49JEoErB✒yӭFb>igq)#@ 9_q Y &`i?b&FeApÉ~銗 1f64ε#%,gE""f7|/!D;J;1ǼU28G<v(G =itڏj0~ d3(rͶoiy.[{Ԋ h4|g,DXwbpΜԆcҢ6 S Εv-m0NI({ 4)htnrX%1>;,G1D+u}ȹ|K|U؁fTzԫ^٩댒hPcDv[ԋdFvz5emSs0 J;[;k%cZBLN!@9.zDqޜQxzrR %'ރVӎ3ggFt^&5HrVjHugVY4Dё.#Nl,C'JAσ>HɖJZDDҥfC),ηδjݡ5Ş7yѧ'o+4WJ[grD bo ,a SлF[yN+P!{fSw 1{}!AB5/=i~=Ll"r;ӏee2@rB&!1 >='9bmR-ikS*1>hIB ҙuX!:aHPڶӉ^eSXwءd(XڔJ5,g66[Y] SLXD$6eޅd"B/uI=j,|Zf  ;ak"DRDك(iIK IF% ޯ +>$;4 e痚:N(ѭ3avZA>m@x X6CRJtj>q⬻L"b_B#̽e 5W+ZAjTU>͊#`#|ƝȖz١^` Pۖ%&) ٝ%lI=m "/GgȌLyy#zĒSV"CxLOUYsU~RPas¾ a:7r+#`}001%Qd-85/%`m~gw)Y)-, N2̈́ T'0}#bc0$M-).ʇ޽[$[6aq|L2[ Nb&j>gGңܤ xyЕV^k! $srL+%%Beԋ !H :?oz\[%HH]#FXDڅi#pdPȑj }$'U4J` ewJʼnHuvMa (ehѨH`t"enPH#kùFgI작1f8eѓ{`X Ip`WemO)%fR ]jA V(w I%s_Ey7qP"CkBδq3KK IZ8 #Qpz12u?wXl®::fkU,?z3x@=bܙCB'd َG`?v 'R ROWf2;;R2Yd 'M"ӄ]G4Fr>})\?D@nh}~h =SތءqS( NVJ%tP&6ySk]BuAI֦ bYӬlKox?]hЌ9!*y Ir('m] "wޚ4(!!>k63t̳fdwYlN %J !ح+ Wp?)ϋݮϙhbQbZBi LZ<@iEZ S0"`&8{HR:ۡ. 1) ],lH$q4JDW)=&Z ";7VOrhIq(/ 84;SҀ0OW&#g0l?4rp`.,Ֆ7hkQEdCzDl՛$hNTnPɡ{)|WL &}i 1FPsy)<BRH. ɇ晗 ݲxu[Uqf,()r/i%^`)+yXNDx#_z C`%.䲮O~Ԡ+ Q!S(\,oE[a/~KMby(K ;@eyG: IV`?gl :Ђ搡Qp&P%~RpdVD{|Izm!*.[50J j?PG!>xouk_  jP:8iM H éN(g,?o06&$ ?Jd=Mc$vH_Dzy o #.q lq֗8`aDFq'NzF&K5 ^<ܠE ;&D~}A'9Oft{P4H` I* } 4jzSyJ.?%2н Hz E =gJ^pn(TCrYъZ%D% e:7 !jiD w7Zo7=hO 1sc~7%8~ǮdfZޥ)X'{oi,<U+qԭOJ.1g4qɥ,)[!Ԅ DZPWCMƺϢ!Fnjnhs ˮi[,WCS 3Mcy@"HXFΑ ^.69drR*2GC*˦/CP(fKVRh~ޔCqF}/I:8nRыkB_ "ZX>q`b&rЗ~f&'jȘw?wae #H ^h$6l͹ OZ͕`7]5)V<c>zZ!4AHBT.P6-NAb)ARhxEIpA}ٛ;V06IL+)q~%C2hpE uiK9҆_şjRg났"M| 1Q\% Dbr)qS$|ܻ=\/ODܧ@Z2X:-m+3e݌ b'9;7o&VM:9(zo%kH}B-]ᐄ _*qeٴ | _$b ŇG#~` ';H2h6SU(dDKbRmEW6 xxmΑRV]4Сӵ:w2Kglp}J(RQh٘JtxqqPJ&#׳OʲVV{!ޜS<aEF}igD֕ĂDД}pMAJs77((X 'KlДE Gңe4]E䢢}pċa☷˝Ob LFf-_OJ gLcZ)5_ OD("Ɉ߲C'FIOs!6v0a'⊉1?i?HRn/,s|ԢчA =& 0d Fdh,ƀ韢28.xcZ鮶6)j}gye&W{S/#|4zF U*(#dԫ8vɓJR7s7`9*5HlW*M0A?tDz6A=UM]FLXvu:8ؘ"x8%QJ"RZ2f`P/~I7dT6].L%4{X6ϺӈꖘHݝM+o}w@ 6nǵ jj&??)pv]YÊZP"c~f**K4VɈ^KohbXoC!VFm;6lJ]oI1ATf^DRb}K51'>hy7xF(!̈tf|(fV3H6 /v7Fr2L)vX/j$dČB NPe}şk֝I< 7yM"m fmAx3=N_XAxD:4jҴd1+AaD &HS0 $J`Z(QxqC刅fΏJ4y vO$5`}7pNW~R-#z_ׇLxѼҺ6lD`#CW8qACHmI@1&qea7!Za/#fl;P &lRz"Ybo ZEOׇ~){# n\aLd#QJmg43m?0{ Ą$J^";1R;05\6!Ug0QzҗM;§;k WyO4SeӽrT@0X0BJ\zVcD 1ޖ޶.En4'񁊜Gڳ%moMlUPfXD"Vblg>(ЇF&^fmڂ!_*@U]iœCyRU TӖLנ =LtD) D*&ˬ) URax\93GIVAbU7* dWo) doP*Xژ iVo vcB?   z|4*911 E"`HH8BJE:TL=j9 :~"ʨ|Xt}8&#˾:v&⣣A0D w+h<R!'3៭9,xANܶsi}"0dҨPH1fH$L2d"dE%oi[eSD2 jƜtF%ϙT%&5x%+4 gne/PIOK2J^! Nk*? 8u ۵ @KUބl@6͏{TR|.h1 .O[q821Iy*4K>x%A)e-aS!=*q1~5TL:b%0RWL?‰jACGKsCrO:K)0SYؒ0B R-)%_VBrTCmuǽBY# 2[p? ZINz8ŎNhZq|J ,uHRLcWJ:mXJvxHHF h/A\@)=LC⦘ةj1*.4J:Tv$gf)a0T.CF`C@7׹LU߉-9R3F[K ן;H~ר`hV$|Z[ѸB>fAA -EŘ0&-5JhДAy';mFpc |*#zŢ:.J2 );SXZ r48)f\6 ;TJ.ٷjiKzCްEE5}&n$N99dX8A\ϊeР}()wx9!p I`k׬k1PaPL;#\N+ٽ9> iVz5YU;;P&q}#w |Yur שXC:? loJ|pV:pllVy)B^Rqg2DM&`?qWg8Yeh*el7 ?L%4k{(Di D90TەA/<ZokC{S$揬LU ;H2Mt4C2;sF7T %l-"]u}Sra Jpy犗dnل{P)sVD3ٓw 'n{lC.R[}{G NK<i|✳7hm1`RfG7zRє@Dn&K]}@Hk֣ r"F7>i `qٝ>ƥI < P G&(]D(~ A?QNBjs}Nw,(+rAҎ֯zH|sI/Iv~NJejl0]iZFEP""z^[hM֘hGIߥnh!%֙-f7xЄ#Jix_Hx1RM9'5X)%h前q ;Ƹǚ0YW 6#&E % 5I|*9nR`C:{QZ. i XNk(f 5gQ;@]BwjҎЧ8jg~L sm+}lCpuiN[M,YqYJTid*T` '@,+ σJ] OQc*;Te^GM ǻ%g29Ͽ"K~'_8@<-(_LaƟSfAöZDNKJ]Q܎?yjQfDdBƔ,}A \-%hD4૝7'S߃$ ]p$rxWȃd∸g%O_/,f%?&e _xذemXƚ@`d>us^ʾ"M!vֲ5T z 9gw攝]4%d'`jWb+?<FS8a*];?j X*iވ`=Oiz+i#"C4uSs%qT QhX$> <j)ڗK2!:(RWJWFywhG UWn2z&@@$3|QC@/`_6iꄍ-RFޖD?r=E& Z)SJ\A`:tʝy (D bK$R+)k%A*"jypäPoS4(@^)!δT#HSoC"!=2w Y"JMAszxʒڌ d\DȚb8=vI9rlpz)r~qTlA( O 5jlZ'E.iBzi 3E@P!%(MPJkA+`t(*9*HK]vKLڅM t(Oz$Wg}U%m-dt 2/i1Qz iNV% Ҥ0Q?hBjxvhHpo"H$W$P^yw^gD lj{2ڐ6a{J  O5yݭ! ,Bɸ壘b;60vE 4[5}^) l4V fPM(qEmhbb @'c]@j]M(#|T0k]yb`R" f$ա{R3)G5yrϾ4_]Yhz$l0/#{)VU+Pm-˥;.sN րژu1ާ|f}Ph2 vIN7MB/z[YZ,mۚvRZ,R)̑kij\ѠeBG>{$DK^.GA4z@KT\7nBQi.˥G}ÿYX@?$ے&AyC0Cw9LRx yJ/$MC5hCVG5&G|Q}i.Jfz?X%qڔǠZH0h@4kHI${W ~(_j;GhVԼ *Oυ{ޑ vP7|i/ONh` OYw5ՒeίRC<T@$t&o?< a{Lnmz 7ʉ'e}^O4 46gwv 7ÙHmk'!r#Q1^){ F=)#YGGyROKñ--{~`"ŒH>mDB%("DJA>%JD2gа҈NyDr/Gڎf\Dpd$haځ%! "Z 奩(]!l8qB o7Q-ۧ+>-_RtRY' ƮD~JDˀ|du4<گc1xE>DOc}>3Y^Q */[F[.Pڠ 1IuW5>J"NcHPWPLM y9SJz^b* MAnPJ%BHÍi@$E4ΘAS ⌎P7,P]WPpޯYɑ.cU*wm%Q$ʯ s'^{T>QfPݓGqɇJzG(wPliF$'% 6 BjR@:K!Dv2aNQ?]JFt&Fa-q%0 *fE")/),ҝ]TiIA⟻PYqڙW`aؤAF-K.?|h3ІFrԩ`-7@%d]}:\Ę:E3CxY+I>!/X/lQ ojUV .Ԏ)5Ҟ ^磽BLA 8*iP&"ʌhW\Zr$ov7`542Xژ$ -MJbGN3tI2:sJ R$h ւEJ\Z҇-. C ̐d!vTtxhrsi``xdK`h^bGniS9" #P x*Q rb&HCi@)3&uZ66bt]xJ?$|z@|!vJQؙZnTAUhD.:#F(t4JC4n6ujM s}6~T.DP|z;(>($%7&D sX>1+ آq W&Ԏ *bk<%6H0)F[/ޯhziH\`V)IۋlϵwqѤ|Vj<&ɩBL³8"8i4A{IBbԠ/u䣳 AhH#_#`d-w[IJ]l5`#_Lj Q) {8(#HFDZ&Qes)Xy,9u2t.X""HlC*QLd2V)m]VA%DP!GtɉQ,u8Ӕ[:ߥ$mF 9l,~*]b+&PDI E>W[/[;TNKxlBԣ &u9ΒUְ 7-*ReYx{F$F/Dģjamth NpC99NzS3(Ng+-[>ӝa+lH` LL[iIڠ&+*%m 'wqhΎs4&B.MI"w&Vp<:i SIGڞҠĺZh* gk@Q8v-Dz>c~3g`T&OY9Ȇ^:FL/2KɋjԹD Q^^/s* Q|KR={{~](%4Йُ-*[\_A"cޑbr'H*&% j6 d_xB\̼MWd4;tD1t%ĉB ,rKޤ:Ke[]*pTa72% 6ldx;H &|η1!!4K-O [pPQVDfɃ5tk:Z[. ]{NHAb*nopϖRy=-jK+!)?z?m,T4LǸnP[3QgQb$І{QDzDLHl:J?jh~HA$WY'%3FƎe ݎ,3ڒK= ?@:J!;#hܥh>9}o#3({މ:HÖ1&>U͍Smxkɑ,w$;VHE{*6"^Bzfy ڰ>U਄N(:s`="/HJRvHyF%KA!$%j|DTzֺP7XNnOF^o%nWX,Q#x!163o;Р{pBecHLVN ,{Uwey(TQFAB2}hNx, 5ޯJdZ-Dd lyY)"Tʴƈ?ⷰ]oI^@Eӥ(k!aHdހ@+ CW9)#4+t`:.ؤ)(@i,0GRH8^((R2Q "|MJ"\x{T4\Odfx {:!'dT^[ (Z٫(XU|0S<9yPH*ΐnH'Ri<BL1= ]P0H'3سBnuf䩼qYutIe;[/N+2-P4\ q>@p%=-53f/$5/[ڃiN+<@Vw=elG6ML3NVR{9"OSL!I%sVVP`#.ᤚP@X*Qs‡JaC17 C@[.<4LrofC#8dN֦O0Ri.5u-#hpaD١휍ɶXFG:B)L!jln_XPR\@h5U@Q%JWfZ"!D;,C`]" h]LeG45fdd2)f $PՌC^!lLD`R֚=%tZbh 1f!٢oIbBܒ|R22/7tuHلѤXCЁ>?U1@cr-ZÔZvRQ6e!b晣:>'BI9(]VOiᓨW*ʅ qL;R*0⇀ VњC Z&xѥʓHe&\Y!F 1'ZEd5I"t*P]'jC$f ړ 9+=fIgMq Z8.i%=pRpr#GMXJȀ[gIҳc#sKqK#nX&_zA BW&u?oNz%Sք{@q"Clk(CI$j!lಙ8k+s7#\amLn}[57Y!sg[(T$k 1,.L'\j8韮HVY6mVELY|Ah}pZ%f_@M^cHQ زѳמPդ,>pR QssK\FԀ\&3@\JH݃1` ֈ1,JuPY4d.BU~nNjȧiPM,ЮG#U"وqz6nf() fS4$j`*U eM!ތZ.4 <76# ғ殅ߩ@UVT28K.@%׍91YI;0]=T;fd75|/)!XN+3 8LIiO,9EѰHgWCE:ݪB17GFT!D2V>wRC|ԋBG"`߆,-$֜Y J"m6m]nPe KA- p@ZmLo(F`xɠˠ:0 Jjj-b[ǣF?AF?@,jJ x@@ #}6GZ)%:"4a~h 6OA'luN"'J5h AT6jw`Hv%bֆ )+i4Hn[P:V=? L+iހ( Q,=_zw(@ <4$5蕢P@Qe ) ɕ߽<,pj;5RJ%v?1 +Խ B|2 A<,-@3JBW, 6?~NS~jPý,T$&H8.w CB&'G{4鈫K,5-'QNy@!23RXk"\UܑDy>i%N&$g!5UE2bw,K 3/Fq&αN`$\baD~*T8n^ןQ1sn$G ?e @gh,=P}p\TB>p߄}-Vw9ǽ6gvF=Wye"/jbL[N:5!m=p (X%5nBU.V,["-!oH!R+/xV;Ih<4wyT̳$OH[ܿڢ ߵ* H{+h~NJ*~#hh"IR@ %[zrj4!@zgڛxJ'DPKLm[p \S"XR_EpQ(K?BQmÿJsdM;*jVj&D>Thy"TD+yĔN(hn5<#v[CDG<\W+SEA$11E^H%:&'j` ޳D?J -;_E`]yCMM\K$ӬJ+OeqI~{E90[v?hUG2%}j," ]1"BVz&zЍKZZwrcyo!bۮfb<}2jg> BùWƕĸJIV7jav#آ)(ҒUѽ7(ڗ,D;@lРJڱXKZ.z-8 o€X%Oi(ܠ #fاnH1 ,XI17ڕb 時B46`G52v~ؗQ #7c'gFNuaG`graF[pxFFT&y2_ڟ_T?Y@\R?*(irF-R6UVߓW~h3QO>D{4+4zTA]AJzz^z'%4#ЁS5:$ م)=⧻Pw )PtFH/ -],Rj4ɽЇO7vMO ZB&ZapOH4@puVxdn?ړH>ԫ_mYW?A'-I41|+U՛in=F&ҳQ4m0+W~([k$f#bW娑3F՘_lC@kR82ZL_A/Q.?ۢc2Q0@65PGyսFiVKL"+ hZZ{ J\!GzUk/m $rDO!Z 'оGJ"8,Ţ%ȓNTHa)"H) kJ cd#^$w*LKz ySiY n֗L%&A?49<4#goTӲ@ -EFOJ'>ӽa{CLF"7I`U}D탠}e*u(Q(ju2Qy.ܺiQR~+Gޕ*sN&C%ocm*@Ṟbhrr= j&qjqڙe2-~4T킫PyIsA>M"bWiu0]N#HÈȉ);K 8jAm4ΪY-v*,p} jZDM(.%m-4bFDzښ8Z@Dv{@ޢ˒]ڛ{~cg~p z k Y?2dixø?`H|QW>i2P Aw4sks5MkjGN$w^ԍF(Eq ojRM,I|S){ :1PyR! i?4or]oFr ć{ݏ%ʰRc<ܓjHи^2-xzyD4*G=+y:qmVT%3B24dVP\jQسϳP=T x]o4[2Q|eGXrhռC΂lRMr拆 抮FTTc|TKK2@r&@ _OR l2sCFQ\~E\<@i, &.Q4v.:z G:yҊ;NGGlvGX92@b(s{V$MIPāS٢Q` 0"Sx~jLvǑ@ufgl {4َjE4nm#LIO'޻ؙM&[B8$cR5IDhO؊dW*w3袇i yZVe;]))isQ޺G5>c57^jp(1쥈ScCmagI[&ШL5OF`nR,sZ⮛6ޡw^5kFTV !V!ܡj#҆06[I&R/ѥE$4 4u=(ZI=|U&_I1AfҢXNa^/l7mLCJ/f" iIkh}&ҐTGD7. 5ZځĚ{TvVhuHA 1 DTv_}AQSM{.Cܠ=}+ńYNj\2nkB;ş߽)#лA:D%2P u*(N +XṀ#'[H͟H ;dmbYƧuJƅ>ҔI!zٙa 'HX!t4pb*RS@*H*;NߌژG#rt&BA rWt4ʜY} IOFs,a V$cj(Je2R!#t|ڌџA135pV&g(~z1&K:U`D/g*|)]+tM{QWI=jh &\͛ҏ@go5ٽ)s"*9O^7 XvX TeV?%$\ Ro!iCLsNUco٤Z-s\\jyu4lB[qNw*0\H %VqO wIL!z䋐I'Q(N@ah \K>j)6YmacG(1M9FzqB]j45$톐т`NI Jj-Y;d #hP;:&D`.F0'<~mti6Q擞z;nIRiu^!9oF1Ew*PO_F#]KT{QRY pgjxSE)a6m@CR0j\{>Dm,5* @uilgGJph^RgI-R.U'BnSZ#N}& Yy<<ލMҸBSLiViAizVqW"IY9*[g.$ʅ&sHl%#7sVx7Yb(Qp8Mtiffɦ.@#"kOb;YRB;eNjPI Biւ*9MCׂ5RyTReLݸorpDIΧvP;M[64r k mAܔ5,i{KN:\65@\T$'E+IaEU=)qgi6L`<5\Ky2hI Ըx~msPG~ "ZfxD$8%U/ IjՀxp^ibI -r5A,T灇T?_IjLHʝG4nыj*tAs'1?j]ٛ+uHވ5$q?*d>ʹt8#pPglܝ#qKo$%TK Igڈ6i k4!SVFJ#j\EcPHI(9N֡e "唥X^1D r4KxUa&G"ΕhD1AR;1q@އa:4KN6w֮-ߩnJ51hFB#awtA;ثYc2+QԸx1cQt"qY yY9DۖsC4Q '0K㥿fɐa~,q5 ݦsdO.f!*9-NhiL}"ĬYkDQ^1 R>LǝZQDDb*`a{ԅδ-GJK:ޅ(mZB;>MbYvô:%\zd*¦6\;ǰ doɹD6""Qˢ= !>ô'+& ˳2x qKEg2rfj:a4cRJ4iDXDuTq9&mg+ggl>QmD qٖSO3H-;+?7h܏/gOH;4pbԉ}oҥb910 (jR,~'!ɨ$?Z[Ip~(Pebnyq"HJeL0bgD ⱎ=e2=$vӥIbmH0v HԖti$`$"Pˆ c3j<` csw@cjWbj B8w1)B3G4 [$MFC$eFWu~lT,`F$֠%3Lp.xR{7hDQP2/VZKݩV?3$D4 lV>YfC蹱&i=)xcN`V/hFF ͿoNDZE\Ӏ"DX P2M=Kb!&%7 z W۱HpRxJ&ǵ=d(A!2wfI H*==& RZJINhC1$W'juV4(`A:($GF.Aw3 P,n aEh#ЌZ%x0Y* eeB!tH;;OҶ'zDazOj`4R/Rd%wP y(.Yi2%"C$d[CUtL }P[)αHsQ<~s#pޡV{éZR|J&TIa`Hju;L+W U)zDB2]?JN>$Ϥ'`dFhsloS.~OzM:4𒐸x%dOuZ(;֦ޭ5 ލA<;.ɳA#r$ɝ女|JG v^~@IZa;IoQ{Ҳ! ,"H)4EʎBFB\OH@1f\(hOQ*A!$F7X' ``^o "&0ܣb}SF d*P3Z` HhlZ{TwT&Q$ގ"2bBAh7X?{`76${T]wEԤC9撕pzއjBbBaN徤"C,;ֽ)b!D#HSnp5ZgB cjdS#2:)?%~5 zwsz\3B|o"7V^-_H}V3HnjHY"XA3ޣ! >‡%0cϷf't{ IXu(Y҂Y5-W%!~j*)QLkL4jQPaΣUl="\ N brC$$ d9jJSQޅ@NJ  AzIނШD >{z k* '4WPЇj$3-'DԙTP$4HЫ/w#deA=4Jlj(fIu ܓh{]^L2~Q2~o bZ݄҂C CW}d\XiHL3Y(eʘX'Ze2 V~[Pu=$5j=c'_LP (7ZKST֋GOP+`֑V8Z2h@Q zzftP##_$:[MBDsfbbbz\tބI[CJ2 ۪)oTA4d4A`;M(ޜ3 ON.D4i:$j(>fT#WHDJCJxYoF!GΥt("*.0&ڨSK4ftI S@TN䦍ӥ'$)V2A:Ԛh{:q3&i&X I~Cid[FPÌK8*Nt2$|Qy<}T3O/N@JH5-64 ڙgrROtG@B WZx._{Ѥd4kD_P73+3"&&\*/m #I9h{1H&| P-PYs :Bj9S!&`΁9 ^;4q*7I'KoKiFzy a]ٱKW*Qq=v]T/1btsR;uFVdg nB$LadV19Ke +"X^|vcB Oi@t(#I8ƴ" ^Ftix4)6k6L[3D0`ӮY uǬ]8k|֑$@+u5(zJnjL[`JU$YfhS)e+ ؐTDOLJ{ S P5z̼b: x<2'4a`a6wpnu`E:bDpcYaj/V_)O*r6<5 ޜ[;cب!(0ݣ5z6GZV.Z R@PD&/&rt5sIaf~5u ySΠ\)##>壊uR{cبi({Y0c+u#ѷS][̛/г CؼԐz!+۹5stPuI-'I8ĄPq(נ,MW 3F),/)$TGQV{RGZ 1~@R]ւRH9* )o6cniݥqrԊZNlP]<&@<,3"nh1WF%M?kI v8[o\ ŒR%+ЮlXq0ZnLMcM 92lQ<C`:%Q;!FTk`;#0֤rI%,r_5<*-05X?g_z0MK*dӛLXM\Q'c']u> E,7EoQj?SĈ$6Y΀pi43ayF:Si㛙ųx:X~&d57Y?Gi٫,{PR?ݔx# 5 '%Ia(\ 0n$iʈpTڜB!4'.$FQ~jBuICS4N34k7(%ݻ>j_oEbU9; $h\]QH1t%=کw$ XGHo- bV1K45KH !pfBǚH&V,X/$@#*S1J;* ,éz$?Kx=m :%qd4=;ViJ:8@["@z;B bˁ($JvW"SݯWzd|'؏S CDERYO4b@` Qt50B>BWGX#)_4X4 |m9%EA2wj?w̞Իi>@ !C\~<a DOjN`fLRj%0⦡[ ֛n.$#)p,>"K YP.5 8 cv٬y٫[`ꌎ@w[R _=hKAmJ#, bRu4 D$A@#<*ս_5gdF-,Ǽj"#J1w*֊`nW> DSԔf;Gʶ r-yB q99}ɘ+af\x) j1;\J3 @$j/8VĠ!i6vDQu^,€4(")sm=@9%A,;}CUd.C0e  h.CՕrI2QjzebBH |J h->[ P8K%h1Q0R; ӇpB LjKA!CGTP(L. QAXPj`bݧB0lKF{)Z,]:SLN^Ť9-L p, SOjXB}QJaPn\Q&;Шș쎩N ؍{ʭ t_-AgI̤Jْ'd=ߍcTڌE|3qCѵf\*zIS>U UDSfC:tƆ>ME;DYd<macF1*"B@10عQaw~j[ # zːv1PЛj",6cQ!qJ'>E17h09G!VDyP )BE0r!kwWGQN[:$) _$JfFw&@j}Dq(ZriQp^J0'e6<Ҍ@jш:PzVɠav/EKf4%(z$9j/GAD.{Gpש&z&S~ J֮$#nՠkVV-)@Ah`7 }W".(+9Zt2mmژER̸=z$u"F&(9QygG1:k"AVԉ=u1QN͖]PR'7Zbn0ʊZ1u%]d|R,#޶p CORHXncڥ6RZC B؜xueir#@hn}lt0YHq#*~{"6h'x1-YVv2^+#%^X(m> (ub(2};~=.k*نװϥb%,P/4\sM!ÁX2OC{Ԫk{Z8낓}\4v ggcҠvIA )17ea$ˤuW)y_ _4Q>*lӲ`b7V39P*kWrRǰx u !F$N@m4#AHT da>*J7"Dzwޡ7.mՇ ȟrGCY݂)ٻ&>~'/wݤH*ؤ=!_j4HAϫP$RRe;l"@ EgWv_mSqN@6IkwLbX,IHHOFU`*K|ӉԛT: R PY<uzR Qr}„j .cާ`! T4hh!OKqyhZC-Xo(1|?4gmRT)ދ4S~ M%hxG)!j`J>&㵙uI&dXSnbnנ[aGJ*+o~>PgNNCHd ݥAQra#/&p &82зsvۮik-7ER2:s4Զ)<N?oE!@ hd~MJ9(7/k4yN_H<&G]Z2'iLv7w!ӰdwXT18H tz;ga.p8FVҧ,&qH]}V ]X4@dk f;l&HlcʣBB"uӀ[lc.&Oj&kPǡdk+i;o> VWhyݩ[qKiO:yʧ-9V*ze84.Ey;CsjșZD,FtWF8V'A <"@YG&t#ݶQ fBXEN Lҍ2%J4E[J &R,Mg{2r _ao4zՉB*ZcIa8})jjh|qy,)%=@64At)˘`:FH*)<.?yBGrbd0HB!ئE80Ǐ rHi;u2!joa{ط.lH: qaKc#H"hIYT،:´UԠ.+^f!>attkh9?5.o|?ޙVi{ԁ |x( L Yx8}{DR$3R$|&M:´TԠ* B_,95) ON1B,itޥ- 2v-JWgILH("lcT!"4rj LUp~T-H$$#O //Zu1rzv`ygB$]jjrMZ4'j\" Ɲ)rjY@: ˥gH#`V#4n:uaft}oiK2yU.S1(^U;XЉ#'tu`\ "q&#TBcV@3Leܧ/xVX%:I)c/=#wXABՏjP"0?ӓ?UPjq"Hw}AD =ݳJ\/ [FZdhH9qPjv1 B#FE>3)ey)p̺jȡ~i>R1QN Fm\ޜj4 Jlx|xFfwKF K戚X6:TP虁=,\ %4uҬ b bd,L#j5Ps2(YUt=2$ ^ֿ–! `v.KnTT Tz'4`ލm6awʻ*ˉAlbImw )&K +ahݚ8xbv?4ºοJkqF2|R 4 H&α4MԵ98XW@@j;:&%ހi$ qG}@OSJB`a#hЅԐ]Ԏ%9mBDc ԓhT_Ce晤DFefꂘ"@Bjpe`B% :XԳPL c}MB%Hb-֢NhDPQÇ9"*dJnU2- XςHX(@D!Z0r ;޻]%4ԀS A`M 63](X0(BG'0Ѐ.Ú5'o˪;4^^`h^PX iJ$}OLuFO1`il}/+I~yFSCO^##=jg-T4e=%bz!؁davNo91 (FkT z7h$"gYfW Ye0w+ @0ie}SI͖Z! b}i fPH 8YB풠*Ӫe+X(#ҡHLmfLZDR:kZs >_z f5&ޔ'`3"q  p%yY),촵J& hy{Qe&@Р|{ð4r?}d !2@{ʸ.SA, Ek3) SҤLG G6ZB†!%?B&".ݜSgD,S|+PSNV`Rd45pJ+S16gFg H ,yS/8;Pn @44?vb )3 ڀ?D ;(<+c.֯ZzZ’vw61DrcszrWXL+^7;J!RS%b4J]c>@"mIp.beiǝd%e> . H.A:❾g|Rq{J9ơHBYdH Y x%vI0Ҍǔ32= 5-:pO;T;!LxƖ%}0BJE-fp ·47V3 ؃ l+4XQ:-j)40#);qoZ>F%"Ab1r6Wpa%wx@u{E6杋/աe / jԝXJFC&5DF42 (Fױ|ڛsJŷB^ թ9'q^XR2|RjF f=N@h\./NR-_zPRqK>BU$W@y] (9HD~$MTa{Ա7 "zd"B6)or@LZ'<- .n7 +e{[1@GF}Rk(1a%],{'+32{C:4)Pbbؘ$V gsCr/+AL^i Z ( ~)anoW+(J2NN :]r`d̸DUeV"a4rIfҷ^@صdIc!ZSJA#R n 7zi.1֡L8$ I]$D$k%,c(z_RPnXw;M@&W9N:\"p TS be.oQ2Tsjy( Ҍн{oFU. B`l2,N _[K+y3 JjLAx:RhI/ev^\Q2⹒AKI(ŞzLz, ʢgE4BIVH(^Eڒ  +FًrqRh0YL ewqD VK%w)y6~\gc@^U6)$oJTBA])Ѩ2Wʍ3˚t.p",b ~ Bbԕ b)% &=[ھ@rٮjCSڊMPOw_W 2FVZ-m iWJymF kņ*pqSޥrP)Bw֦Wꢫ;d =lT i"ъ-I ͩcv6ɋfvy*{ԷR ]^ v)eSWb"cFWѢB-SFF5w LϘ9KIR ĐE25>BR $̧rE@7ռk /˗2xMүfݫy"^) 16&ia>N4Bޙ9hxb}/XqS ;ب) >U@ƙZ%( .jE&rJaU*:҄$~aӾ.CxQN5dZ*&Qw X`zHRniS^ݟ4qx" {-#H\ޜj(Мe1jllC1bRЋ GcjƊnފrA=<ʊB(qFX ڈY|w-P Ā3f#6<$x HE:4YZPexR4 PvRV:oJe9HVqx.PlB.ZFGs7R!ɇ; -J6JIJæM K{PHX $?n/`L6V1O'{*DwVPhD)6994Rm8I5# DӔ5~QQ HԦ`/@1hraS,7(&{.!vo4̙HSʞtRG{`kYS 1F+M" ۲$' }LF]XU(P y8 jV̕hDzEA5)Q8KGqRjȗ4 աn=}3eBUJm^_6H%2@jJĸSn=M,&6+&Tt`|魖OL(lcIPRǚR͝j[Qq^i-@ZAs$۱ 䉍~R1y*$#IGȲfh]g> ' 8 5ϡMԻA}PDַthy*(xTOZPpZ}TR@6z ZYy!F|$B^CS%Mt&F,,N XՒ"}"#Cc=eoSo }$qz `t- 5jiV՗WS_GJm$#zVi33av>HGS ނFWt^xȊ7f/G3UHnFKm߶oVUW B\Ĥ)]bB7U-OJ38)6< wigJ0ADNjeGT_24MC#d}rNݵ^R7Ћoa+>NނkVSi_ZK9*9fG#SO&Mh4'"RįhUPMy氿I g i١5 U2ys}>is4bHϥ)Iބ]G6;CJ&0*cu ؗ҅:A"KD5x1YtԒr3BizΝ؜GޤaaNYڇ ROm.fm%o%IdffmMHv$7{B+f;P}K6.}6KW(C4C>Ff 8hrDh d-m҈eEAϳWVNJ,C:5oHlmxU h݄I}nuteN|Qc}1&(qR6?Pē 8$*8\hXqrC:)B\v 9.4`#W nVle L aԄ4@A$,PFhA; 6J ȨnӐR8%pl~hk`H˘ ^ e7HĪZo Pi:3,-:{_mK1vujs:ռv㬏L' Nj[ժr^̈E\7Aւ `vb\TrnRX:eir&ʑ㽣9ŝiPYzxh))$-H_@^ʠM }{ԒWPLr9RcupAbu]+cTB/d\,f`s(s y& n>a'HJ{)@gt3QB<4h63Q6Y 2I3v:p!dqEI扫hD30o" %VN@Hiu0LdӖ;AoEN&*?X.E50ar$x}Z=^Q!eumw sҿrQ =iIPNdu=c=Lz0QFoEJXJY(,-V͑ - uLSxZm"%[%e!ewh K&>q3qR3P#e&AaԾdBYpa1vL`{R2Kصj;h wOWȬbǃ UP-\< (wϽ{*,6֌Q%Eis$0bzDd Z7$2ŗdK"zR3qYQ0YƋL/bH@iV"BQ10Iڋv`ðN4!*ފct/CCˉeشh)@Qf34لl}\sXC$4?T,c)i>PkLm{皊D[frEMҥKr9ou_!WV`4 e)F뫥(ZC8bhM:g@ 5hd> Z`H(R*4qϣpe ~!K"جԝTCu脀)^)\;>!4 Dmet2o{2m7`pu]v#-A*FtB!dHi*U)!(&yeJ &X1l0ы5KIN [ 0@ :d})kŏٌJ,I%ZL zkE i2,f',@,sPK4ZW hBadIR;g. 'H ;:+ p&[,Pds$M~pfzefe37sMoݣ`R Q!$Le[APjYBbLu(l& w"KL7NHyG0wOX Ěσm^&W)H"LЁȐE,#&ua`\LhcDb)Ug>%-7bn\Z:^4سbp ^ X~PRZ~ZNBM RBg_WZb1R7-UBPIQ4B#uOru!_&3Jxr(+1k@8W~a4`)LHPHnhXlz1H4NwޖNu gڲa`ޔfQaw>Z`~Y~i{g>B}+ 7h2C#LӮ?OR=1H~‹sX ^`bVt~)J ejW` &Â>a B+.)8^WޤE({މ؍&5/ԒThefO`(cPޤ(<0q]YЖ쭿J|Fz>L&HUYu-<0Nֱ) P2ZM Ft$ f,,4mHԃnwi \ܙOqP[Ӣӳ#C%QԒJL os^MpW4X>+}c9OߵnTKĄHki k nq7;Qs\1Ҭ`keS,'V p^dikvo }j#JYՂUGȖy3)KlL'j 3݊Fœxh;GB-C+kkT{ߚ1lb(LӒ8Ḥ4;4^,2^D]h>鰈x"|R1y{bUweL ?4cEe;ҷ0 y( RicE:))B˕k z^{i' &v\aޔh)[GzzxR4^iÕk z^N4NbR^&i vpRHK` 0TQ=f(Y }ExSfC[{Pw}J6MSY+JޥdFi@@mbe0sQ!fU^J^k0p=G P#[SSWІř`(~EPEe%M4qBQm)YZ3ވ=C/dS` I<ѤDKnv&gaJ 0u9U^>0DT 6lϦVgRX[ J,HP.dR{XWE2dr3;4ʖeИ!ZȊF? ގU I84Z^ --B69!@իTN#aҐv>Ԅ2YҞt GJu_GѐoX4zyR@t%pՓ%e/a>+?% Vx'vz{h(JJy=j-AN{Q,W#ʔ=`[z2 MδBө<\O&j+TO[ޞIV|V&~J:`ki-CХ?BjZ@jTxvVA)(E*w]FbDkTp4F A} ڍHi-曟jBM foIK&JgK'Z7ӡGe#44 VwSп ~V7կWENꇑxr^ [;7gK޻ ЁP%]*f=S=1vRe4\tFXX6@!|mQ7]~,Ғ73'G*'B 2:%٬0RX e.b| Kї(4G /LMa(lTSHwjr&EX~JKU(xiݤe}N9& hGiZo|ieũIP9&$Qe\&H}{㮰 V ʼGطVlv?*g#n2uf7Q7X3K'X{J|1f_ZcQ5}w[X<5 N۫5ۧMN[l`R {6PSӦ8*y.>ֹ<)j&71LӍ&7D8ЄN^-"Tػs͑(NWZLsZfmb+ >MsrJnNHΛ`JΆ^[eR_Y*!*Ox45qioAhAy vo&`U-8# _n,,Xݝhƽ,Lf #u.r rʼ%ރiyE\&<,,Gx g 9}9~L+ Htsw!S)QwCM&))h<]An<p>!GIFt@eFxD!mJ{JPQO12(*VXUXWW_a^>Bfhe`deh#molj tvsnr{|zy*vӀ 0͍҇1ݎ֓4(94 qkn@{ru9rU{YDQ@H1^i^m*j>j)Hb0cGd,(Jsr*ĽS{cmrV:Sr;TRU#uK_زQ/J%$PIDE8T6T Z^/+((b|:.**I1kWi@TeBi=$/STˊE ?`T`Er2rڜFJaywj!q4 сb3ՠF'B{'HTkvh8_Ũ] ؞8&ZWj7KT&i .MovfNa{(TM5_܇"VwzR:P>.ʯ3ˎ{} \KAee9!;TZL,̂{&VSwVx04·[ URm/ݚ~<0YQZоTEtyTXG{r(J{U?+nFZ!£$ {fH(YFRT*]FT Dv@UyvQթlN:Z/{0eQ??* iS)pkz?qQIJgAQ@t",̲sLf+{;H5~)PeG<:)ǫѰ}Quo'GO8v9׽ID$Φ'DGyҲ))$۬T$7x~~a;Z+_r 28B|ᝣvKv@ :xíXhjSwPRrD,'ԻT uPGa< z~ZTfKdfZ!x4ܥCOK w[(e aDFAv.J1 ,J%Te>WXS2ZӬوm(xNqO6Rs6~@8:Q6x"Nֹ.`yC[54jyPjN]vP!Ě燌ƒ1  r#{AQ+M fgP47nW,S*ٝ*, ޳W$Cq )Ҽ@lM6:8Nm'7J3ZYhXs^r2 K|3P}'X1Tg &U}?RLttCj4Y ~PGOjM$e6M EY~,Uᚵܙn4"ɺTI6P_6fy(hp>SYն[!&1H^ĥ ;x Rq +JCF劗C8<)/ ~Ͱ^SY{?xmF% rx2KzRB߿_Ty+׏g$-0) ‰k`"Bu<cۿr OV9 _,?T^wpJ^v*+qIf[w¶e< OK9oSGT1(Z fo#Jy2kR+6lRps5MPaކU}O6R}4pb  蹆gM  |^b^vl`P)^t2m߸hLMB}T\q7_&,%6P笝|gblZ&:*wSy"K=͓%W Un5އ=:5=a[G.! +–y24*ycB <T9EЭ1%+^R>*+8WB=zzc*gp\C%q/ݰ[RI< j t:3N`<%E<=,N#ȣ‚4r+T2+X' PW+r qE7+gLKC`,UW `[x qN_sUk\SQp'hD5X ԡ4+Kp}gXmjpZ1Kv`?Yt,e:z TO?{i*"\SzG=5K[ӛ~/p8 ޘ|Jsi1)Wz^ ]uP P'6Qapרވ5L T.ݎg==H4(JG={*o^=bU]Z[(Nx*̏cH$Y-?4+#Q$=UWgz2)R%+SA7}Trd`*Y}ͯ>{P2+U7£Q*Ԗ aW`oj,"o~m_.^)=bͅy~މ;Ӑ.AZgUvML6`}mKv~Q/+4?z'\j2 e|mNxG0Uf}+Q ,((6jQݎYM_a *nWNyT#Q("YP,ŽRvl@/̆S%Li_IL_~-qU?A*X*,=Hu3o_/1`Fݟu}4QIHoY& 34!*}Ɍ.KMܿ% шm#r4vtTNgd%EvpaŐT0˕qٹGg%@RaiGWI-0o᷶Q#(AQ,]>¢NrtJ AP1v EfLHy2H%qZ^}D?2x^@[:G+%'+`#A«?Do X|ϩMM>yq1{|S*"Y]_JL 7?x~dm5e> *3Z(շpg5t,jkRfH>F~f7Q,xV֩?!f~,'Cpb #)//^% mwJ?ܖ6ϯZ%4ayǖ 1/9[o_:j˩K%JӠdIG<QX6Qa"MVSY}hvPTVֺ/ZC0RIXPayWPP)R% YI@Ӷ#l<%7O,8IRFWTT,/S| 4iNNg^C ug)yTBP#aZܔ/t²H.BERyLM՗9QVB%-)V5P3{0jwhЋ%vl3)$RR T:lq=1՗SRL ȯ~ReXJYPES!84agBE6*!J@T' r:0MMrٔR2"_訰[MGk9dD>DIxrV%,IIBrL M*83W#O+T]_~? OZ[=8{*-;&53*fSgې1~pu;SwCԄ,+"Z0rTVz4z&TaY)h:RZlT!aI3s^btXJ3qE%')Y$T#[pp\7[7AE8=lj 6B>[r)ZW+Yj\9=Wާ"_5KO8F`LI5œ-X<7H^KTJ#GvQɲQKyWϤ)ꨈsI{y++~26lw9)`>נn煑}Rv+%-Xŵ*Ejw(ҜTĜ ݫ"G" ۫҉{Ԭz WM!`jb2SL7BE}{]XMP3ᬼ魋 kdQ'Rj&83Lt*Z'^ĢT:5\tm*+SQUqikN =Y8e|:yPlM7>lDr8iwk6_jD9#p2*+STʐ9c>!MavfE [> ^[";1|)n;'Pm]ә#kR+5EFRyya'EVFň{ԁXȰ--X}a7{Jptq$e8LrsTJrx'+1x}^*cJ/ hPtDE,7J8} U|sy*FGLTMr殺j ƪJi:HϜƨ[XI {4n9Ju xH\9T ȣ5QCCv35r>N1M@UQMր 8Y)T_}I>N u K=B/6GE Jj"u`4-m'X9&?HRgJdz&eY~qu*+b}ȋ]03*ב+aIݍFͯd*InjeŰL$ T:N+:VRjnYݖ2ܚ}UhFVUO{ձlEˆM`ZM m2 i+E& ؾZA{_G'(\t4q%RR:2Ȧ5XƘZf`V IDATvsT$kBlyaޝ諧V#PMswS䚃Pfytt n3^]4&sd"È0N NΤLFCXQkҰuZHPf}|iᩭ%G0l˾`}܆,#1e&>@KkQ R'ÆMes-OMy2 P*>J|;1IJ$I)aYTYqRiPzEc&eX@ M&:}:yR&*JĨćUtNVz]Ag$،nY6d6wLj&ȳ/jߞV"fegJ}HhOƛjx^VJBmAq-3Ov ?*[uVBX.qW;rwt$ E1x,pMPiIQ$B1)b\xL_Yĝ}$߂Ha+mTuTO{'OTSILeSTMyIѢ !#{/7D`qKo4lW뫵ʕkXA>WA.ef\jgb&l)}qYMQ TxD(F!{:FiV˥Y~Z\8fϪohit98ŽPs重'3ј^Uwv'?i^mQx!n7| IH A[TY9t\#NC_uȕTL1*^-*^ᐾa5zV7ánŕ&S$`ݟ4֮r a Pz7Kğ:dt6ߤ=R죒nPġ5ǧ8z|B_{̾T_4-xe[*{Ob+nC kq6Iݩ( yD,aJ؆P9TN޴Vk VV=IufCy*q{Eɼ")-aY)*awl[s*k*ג`"V'9E.=ICǶ6j =r- -|DL^]k3Y[TNh@3ZSWkIe4+Wey(h}TW:_}F6v|R6Gd;x*vRg@͟O_~utCP!|kt>(rGI< Ei)%H"}XC_9TQ}vgބ𛽄ǯjzB$MNe~:ˡrl:^9<#z~+g ʯ^wCP"~ #_Ioދ0~@ 7 gx۷|-~k"q*<'X{{/ewᅡ_[ڲ+ b9Tއ( } R-a~Xءr젺~/R?93&~߫?m,^k{~cg"ШP^N_qljߍo?ӗןh_w/a#z#Տְ5PGwn5Ľ;7 >VNoト׿-|"&͡^@:93{͛7o>7__Aٸ;޼o.Ux+Ce#Ճ ]#瀉^}zxkd|w"߼PZG_9TPa k;k4@_&Nw.|_*4Wq٫/N"Uu/R&jR{X? ZV)pX*:H93};i94Gܝ4Gܝ4Gܝ4Gܝ4Gܝ4Gܝ4GܝյJIENDB`pysiogame-1.30.811/images/fr_lemon.png0000644000175000017500000000644012201770070016524 0ustar tigertigerPNG  IHDRLLIPLTEGID GMHQS PWOS ZW]X!U ] ,S#\b*U3T$^ d^6V&!^1Z#*]2Z)b'`h&c"0c$j9a*?a8c%8e-;f'1j#@e.Pm(z Fq17v0;{*N7[PDHHraNaI~[Qthl^wc{^!xi}ģuĪ͵ٶȾ|ƭ ˨  ,) 8"A8$/K;S3)*.66Zڰ 8CTL&%E%aG=5OVT؉*H5+AmUtAxgb<"w;$#221$OgPXgX?P`aJbRi[-9UylE^fm6F nXX;99m430lmf;:o NqDx \Y[Zأp:̐Uϟm;qklPg >f6mw۾}~z5pƚ8N +QQ6}:gkmk\l<20<[{qcmmkKȶLFƃʊm9h7E/4/FuO@ۺ_zdž ˋF{Aycn t'm޼OlEܷi_F!6.gߞ}8}8==؆->O3\ "A\\8g`NRFFF ##6gN-nCL^F;~ 025< yq@$fy@L a8`֕]O槦&L=Z)(jk ==wٹs66[VVPQ!LlRkrZ=ᱍB;IϚ8NeDl*;:@;QӐ'mk2?Xi oG(XLzNy㣇ϚH*I:2C,-d;s0A H$Jy|Ai{1!/hhUK5F#S<1fp*;$ޣ6)WVֈ]ՀXDfc4߉oA.j@HZy{=~18"ϯQJ[ժ*X+Ǐb426`ҨP{nyyn`E"i[ZU ԋD1dzd#8XZvg꾁NqQMR FҶCZ["Alt8 3ݳTBe_{RW?)H4kZ澦VZOLgazX#`= `BA}_B*4jT톅f桐/t/t:gŋ R T%d, N7 ~d*СA]oMKBjв+ڼ#*mMlBM&AſeE5? z;ZZL֮k ULz1'\ *J݀O7+)h0Z [W'k)S!Ge^;%D"W+XgTZEZ]yv\OLac$*Nj*:|Zg|p*a YYLj-,vd҂`f(c{F_PQUuJUѠK]Wh* ۘ^QQY/\Rf `F^[*Xh*,4KŘ̨(aVEc%LBA.IP҂McŰi0yYYB!Ⲫ.]JNbqaee2Y^RZp<>aLcT&BcDŽc.eff39) V N홂lщ`2L3229+|,dNxJJHR!*) 'M d"Q񣒓G2'.(L8QA }l"Q,2 >\?姄Sؘ6wg'F%<.?|>?%%%Mg٨YPA7F&o2LР>do6ESdICLB;p{y )!McKQd1¸:Қ!/ v-X7l+NVحO@Os5nNG]kcs|4?>kנ Mnѹ11lƃlap |c4S;K:R?|ZgPNs#s(2 wLFp90rB0 _4@(fNfd09Kw6~,K`Al r.XCw&>2x&$2 `2|OZe0dz TF 61z%%)L/4ov <$(Cu(xza71Uɐ"$[eLȯdL&CD/+W򷻃O>m!8p&d<\Yqǝwܑ<] w>-q]qOd O@ē3D<7=}M;]IENDB`pysiogame-1.30.811/images/mouse_77.png0000644000175000017500000000661712201770070016376 0ustar tigertigerPNG  IHDRMM sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx}PTU? "o+( j R4CYMCdZ0e cD8Ԕh(/1( .qPem۶Jdd$ݻiӦVCՒ;… 477ckk q㰲\rssy&;inkk~{{{9}4{~cĉacck'%%%9sVˤIXb)))ӃR>H&LP ?^2u\.TD"!??~ &ԩSYp!gԨQT*RRRTʉ'077Gp9BVV|bw 0V%;;f{.Ν# \?ffO>q!,,,KKKYb= A/^//Cp}6 ڵ1bnwލT*eɒ%@||#bRdϞ=\'''qFCJJ 6lyPf6l@JJJ/,1i KLL ^^^N<ɡCr2{:u_\.cǎ@ܴL\\\ ܼ_BʊuqAun޼I\\BѯL*;FbPz{{ٱc˖-pjxb,,,HOOg̙j͜9Bx*6mӧOg߾}( :znݺ*>,,,sy_K/4?L&oF֯_OEE666z>3ҥKDFFMll!իWή]C4 -"88߈ih)--6+sjW_}ٲe ...bF>sr9k֬MW4hhh`͚5DՒ ɢh2z;wr֮]kROII gϞES+MBBBA')((J;~8^^^&m魥ieeey8tuußަUTTիW)**~Jڵkx{{S^^>lmZss36l~GKWjjjٙaM3f YP%O-O+ r1c8۴@JhZvjzs5 TWW3cƌAΘ1BAGGcEee.B 00 Sxɓq AzprrKKK$ *:::hhh Bx{{P(www찶F*h&nݺSZZJxx]ߴ`>"##qFz]E`ggG^^3g vB*tcѣH$8nCg͛IMMeH$i~YXX0k, r9coooAFF3oooRSSټyi<r ח :;;\T0~:2?}lmm={6`6a C"ɐ崶ݻwuuqww͍{r ۷ILLdĉZ::;;w7pttՕtΜ9ñcQ L{7-[ƬYpttZ[[x"ټ+nѣ>|W_}ƎZf.^ѣ+1=ikk*jkkj1i$||| eaBӵ3yd||| ɉիW2}hݻZi}]QO-5g\"h(!>)P>8}4111jfD"駟69Xx&cbbڄlLqvv=*i/.\]La7߰qFuE5̌$222ĔJFCppڢ刈E7Q7gǎ6TG>|!膋AL!!![B~Pʸt۶m3XjtRyt[Dg7*]:֯_VbP\\Lff&999-t}IJJeA:˗^t-%%%Yp.]{3O !))ɠj5{!33e˖6,^JFF$''#vFԴܾ};wr1Y`8::X_R_q*++:u*֭#QL7555ֆJBRakk˭[tKDGG*ʭF7Az{{ gڵ8qWWW>ScĄRgggLBAACz3 `\|WWWܹ/e iQQQ1n8(--5vH0I͛Ǖ+WprrB&/;~ipoAs>1Y^u{j.cdM6m5 OOOEM4 \^^ܹs9r䈱aҦ-ZsOEEaҦP]]ѣE>i VVV;$M{zz!?0Riƍ'gHL4WWW:;;їmMkjj2О7Z{9cøKCk.&L@~~>Ǐ7v8:LִƘ1cظq#dM;}4$%%fpar9L~ 0E;IENDB`pysiogame-1.30.811/images/tube_b.png0000644000175000017500000001027412201770070016163 0ustar tigertigerPNG  IHDRdftPLTE  !z &$-)0$-.-y!/36*4;/6';C>A:@z9?,A)C1C$EG:A#IJ>FzPL"M1L8LQSCKMOLBJEP-T#XEP3WKRXUWT=Y)\aSVHZ3`?^P\N\&d]^\ bP\8g+iCfWddec_b1l$pGhWd7j0iw*sYkEpjli;thlQtVtAw4{gootv>ustrVu-oujwQ~3[J~[g}|~|7It=/[RbS|5JĂ^O։:TRGa[ӃAߏ_Y8剒_nWݗ[˖@LrcޛYហHg]=@f⥧r⟪cRmիwIPq끺jb𱳰|PEg{Xݐꣿ꫿ţzʑ߸{*9zbKGDH pHYs B(xtIME -gN BIDATh޵{\UpF  Cl#K]]DՍJ+Z1k.b.b.@ Q@tU i5d Ze׹p>|?{ + K"\ywӦME7>~Pgz%rmI;!R+//??B/ dDHȘ¦>?^zeʕoذms))陙8}AdQ ǫw??A<(f#62ؕ6ăjj*b @5A - 0^^^>  ط@ؽ{fffeed@!EOEsy^|U6k m_qÇ$g XV>d{8pȐᡡ'Ϙ1E˖]/@?׮YvٲEQ̘4|={gMŸ2^>=2f"_}k;[g_j_dݻsgmׯ_r?Bnܹ}OU gF DXGѦ/={8\-涶vZHk?/$Q"0NY3BGi!pquug2vs^|Ox?LI29U-CD-;BĝAH@`CcÞ2("ZVJ70iZ// AL)șt:M$:2d)E"eQi8٪ـ=Ha9)R-Cw3X4_゙:吩s~gVdG rH5F. _D3Ap`dG)F(/gȮ`@D2y1am\/ Yjd.6;!\깂=!ҥˀ dmn}xȩjka3 'r'eJD[`S, ڈe wuH'$G Fp)T./HBB^("䒈\mjx )^jHNwm^:nx(׹FrU_CLHWވ׷X˥*ďKTUs #3{l 0xDQ G*ĞZ am iCU y*LkbTQ!dHAhBJ9 |e2WP#G _y_@ڏF%rY@Ʃ hcxɐ k5AHj6W9Z.򈐉jc@tL**]MD2WMHyWT[Q.kD+ *@뎱ZBgtDb1,^{bl (I&T&$Q/ԂFTڋeBONU7ͻMd}x \&@@*5|&&sTQ#iCeK1!f!Z(&%\5bO`t">ϻ,\&tp&!ꩢFZG[qk&Frt&6byzWB\D XHw^݃qNA*HP`4"sHSHn @\˥ph֩ Mp"LHnw\FT2 IMSnt ڲ᧊ F{; rDlQ-'D }7Mr D) |OYN*#Tc7M2!bOLg LMsNȐRiRȃDwSnxBHTZ'T a_MS3/F*j9!#; UpzOL}U xޥL .JÃ}7%#"Ҡ^NHn"ApOJa@c OB҆wS$.V =ii}H0njͤ+W@v.< >>R2s"^]syz9!#) ySH IMSr*WQQ\htawӔ\_, "2Nk'EMwrHm9_"\<yN$&Iu&儂҇W*"IM&/3$҇ ߳&3񀜐f"G nB\9C儂FMH' O":l儂XC*ټPT 2J+#l2/ً֥Q4]U.!8]儊wyL0RÝqv#tTH$rWFOLĩBFi#(HPnӸZŊLMǘ)#uäl7=( r 4AA:Bi:id7m?b"dMS8[?#=4)V@k`d9AA(.^pB2-sr}-\x\IˉBMs˥q\BAb5vӃ)%+x@H|7`-]Pf@|SwlXJ1<;IR\$Cr}}7ZΟ`zrr!i":߳4{MHjn4GvM3k‹˴2UhHMSDDC& [< =zGȑ#G=e^~_58^X)u!KK,5m´YKW$ '0$K'2cCcȀOYO[! Ύ֫'3 8}rFvzANЃt XFA@Fvua8CrBTlڄ'@@ͯoU ɨ}{; t$$g䣂  SHBh"l7T8!qm#,kS+V6:0$tw1@꯶`3l"%&N8IW+~rG}-`F +۠qr@X6 -(`NCõmV\=>I@LCEG+9u"gfÇ'K33:#nTƻGpq>f"z\k*7(B +/$1q~&ڎbPt|pBɢ7ʵ]Q.!|8b( 3<ӥrn<`y0"ˊk$ YM3 ]bgPbPSоe&֮: łXJ3`3:;g'ql%n\9)vo|q4Qzeeq˗qcԷaЕ#W4?#x]U|8|~fv{ZAk?ZoQ@1l(=©Pg`yJ7ӄ!$]$ a0}=zQ8{<3q L~BMŠTR_Y]PvB{Ùczo;^y$T8~qhjk{>S7N_.|ejG+0Uˌ=kG.Yeӫxqgv_"˗2, fBk#H=5 Y󧖹|3J땃йV+%LͤvZj=gj7g=U~'eѠlkf4EȄp-%Kh gsy)6z#OcJWX2ni]̀Uuvc{EZ_\s$7 ZLp˨# ~!/2)hINK3Tv+gBKDa V) ]CL6c߭3tVq{G'wk N_>Jgu(H!40bhȮIs\92Ċܟgc >4:TEas[?PtGτ)jҵ!;sct.b6_Ok}nTG(:b| l:P10zg8C_qߏ0bbߊWF_C&3c`v3K8|~R೘uRX&(cŧhg&RYW_uyϑlّkq,b(aq}0;r߱t6}5TbFby *M¹w^!># j #pڟ^'㴗W .: j3j&8xS Ԋcx x6Ÿ<~vOv?,#eHjz̹^~e͐Bak\"6(P#uvZj0e 6FB<%?+(1 /21%, t W@kg{Eou3WFwGX/ed恔a ؠ-)֚R6JmjрJc=6/Ѳ?0l6*;4FVWQz)43~gG{'*` b'^ Ѻx΂z[{mdZ6#pybNIENDB`pysiogame-1.30.811/images/info_refresh1.png0000644000175000017500000001414112201770070017452 0ustar tigertigerPNG  IHDR?BsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleGo Next Orange! tEXtAuthorRygle݅ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/YQIDATx͛yeW}?{[{6i$f B!} `$!EQ &WSd;HٱlLPRl7AIXB63hҚޗsN_p~Uサm7Int2D4ZE %@" D#($Ifm9 46Ml}l^[bBO@2"<%@X_BԄF4(Y33&i`kq ,w&6TekfHW6EڂL!E$<B8 !(.byli[,α:»HU [y1"oͫ!lzfO[w/HFT6:!@/_RbM-bL!\âuy7kp^X< ǹEmAvnG"B +,hC H$ 2T2'8~~H: fsօWm[^o>CȭܔK iV` $-Vu뜯A&3lX`^?}`nh7)~ueH|7jyӄ_f8;b?n Br1Kx!W 6a+ 8iCvmŽvm-)nMM#Q`$Ȳh JkC/ᤒ$ֲk ;>3F]X"M7h9oB(չ {-{Oxݩ*mv+@IC6P1 G޺sF)wqL~Ԏށs#NMP}4csp+|q0IG_z`Vip-֮u'.6yZ,N<)pwZ/_tf'?խ8wp@>S`=PVOWE|--kBEP.ukYFUh̟:p7=;N3\c xއ0 I3Rmy,jk*&%N KDkZ/%Q0XC`u AZ5Zװ w'uПuvv!uͿ-{k_f_C/p { "^9 )J"T8>6E \ 2vD&A~s,V./K >KX'w{q䃿N_n$@/cJ2 `3h/ Jb dEc+fjc丸Cևݎhڎ݉Ә6F 8l>) oM`fOx?3x+}V8nn;ggΒܽ#y^ *uů6j4KHУ'q:qmw]@Q}wcx#soJ5_p w2ޟr3ߌu\J7j\LDŽؠ/2w#ǝ U#TXN+|~v+ `(! o$qM: #6{J'!rgRǗxk-ցJ-P59C^>{L$ygn4 zھ/48!֟be)-  g$0 ·F !Qrn}=qtUgh) DT8 O7?x)pk-=\L;-/3\Ļq݁xXY%~ߨ톡\NyyKU ]_/vJ?3yݙYAyj~k .aIP BdS f@NL uHy>MolH w.<?a*A2x J$)zIΔ*d. uB*~ Gt_nv #Z#y׿j_p%1iD(+%o]zb: Mhi>sҭo]%@ _?@ϠZA*wuxD]& !hS^\ɍP| gD4 FM*[Lȳ&i27ط@,\0ҼP8Aw$ld?/}'X u=i|Qze`SsS1@;1hW]\G&IQ8s_.DXAeDXeBPBJȰ~ 2%ˈ05&V/K_O=kVձkY^N{+.(ƜWst Tҡ=)UP` *lX]bu!vI w4mP!8} |wjHb0ޅ&{o$gcF;Fj痮YlHC;-v%tY`)G u0L=6ZZcZ5dA( -#A7&ckdm1ƎywPSy :sϼV> @U._M; (FȇFR"/Yd +vCmf'@߂LQ 濝˹rӦiL ׽Fl@l-jo׆Vwȷ䅹oӖ`P l3T&JoסքaH֐]6y@>BOMc[-c564zk[-E2A,^N:!Q= ,?#|ENr<|7gS4\a[<^*K&D:L:[ RQ"-%oEfƆU0hv76M㴚22YR,Lt Ǎ[ڦ(OP,iK5k-$Iz3~k ||Imt,)TmT:ij&\tT*:ORZC;a7ytmu'jAҝ7?'׌)>}/-t\cԞrBJNl3qqrP8~ KI*kNa=l$2O/7_ ܕsLd m|>t&s |)L͂6a^$pV3wQDC]=f3^Gllt&+6ʜB72򡳏R,LMQiJE8J)?M("S1p Q DR_ ^d`+^N]ǖG1Df+eN>T6I‘ l7y> 28ų.NUr#4_2?}!yeW+jthpz~Yu+zPw3 3tLY8ͮ%0&فhޅڃl0AxqS8ta^'9Uɡ*| z~[L+s?E9H, /̟]#`3U!:qu‚<6{'26D3 ֏sG:#AϟٳE!ՁlE lHRV5HF=?4Ȁt2ր1K:}IZè zn3cd"jn{!OZ@"@> [8uy,OG F6эMt!^hi#\V8]-۩+U7{k51>~RS=[[\@e֭dQCϟ 5gX:g2U[НteJEV5;ںid^;/vL"ڶ!3}l~SՂЗѮ]G8k4F[< 9AI6 _HK/+ڷ" /M}3`Y.Cu>hڊL au[*`*E%7֮߮@",hmZ KW<Ŝ򤾎 9~|o3l<@hOvh'r oynmNc/Ha,ILCAJVh%j}BhD6aHJhZUD㦕o>k?PmtɅ'r'3-m YEHe D#UbƊk-&j0 !4Ʉ!*H~ ÿ{/&ףVƁ4Zfؓųz66f `@8V 9N9L{T|VE)aIO.Q+ң$Ʊ5Hk0F0& h7s*hjv[MbIENDB`pysiogame-1.30.811/images/tictactoe_o2.png0000644000175000017500000000221012201770070017271 0ustar tigertigerPNG  IHDRUU+XhPLTE˿4n@AbKGDH pHYs B(xtIME ,ńNIDATX[w0`h)^6*JTҲZ ZWքleڞC2D!\իzU?uEv?F~UUUWUZ?al$&pؚ~KIB&PjL^@^A_B`F`GaHbIgJhKiLjPjQkRlSmTnUoVpYoZp[q[v\w]x^ybzc{d|e}g~hklmnoprsttuuvwxy|{}|ځփׄ܃؅ބ߅ڇ݉ފߌ܏ݐޑߒڔᔢޘߙޚڜ۝ᜭ❮ݟޠߡࢱᣳۥ㥴ާ䦵ߨ᪷⫸㬹䭺殻᰻ⱼ㲽䳾崿ebKGDH pHYs B(xtIME 5oqYIDAThO[mPAA! @ FJf %6Qٺn}YӴEMڦњ*Kl鐶Үif}瞗kc?cߏyιqjz~ei,QUI$b8ɀ=@ mvJt:64̱&]: ʤK6au c pQ˪?g[_ ]ܳuUUEeWE,SղstĽPhGuxǪi n`UpcMu(`}xhm5D-\Q]4r;Kj0,|`L* VcC6E\:`Xc&e&Ȧ4M lЫ2"|.'`1ׯ{w{pg磏?٭[q/ݻ_E.{_޽so'{ ؔ)BLWOo`ӣS3 k7˕+XW*k⥋+\OW:E*c%}Es'O\~iKrU˛/!w)?wnɾl& NVt&̹L^QvR/opWa+K 9Nn3`[FL77b  PzT,^*0H?xO?wjtj+PlL-2M72OoL$goQJ<řҵk!=y9=0K<~Lo~=iYބ,a$ ѥZ6Yn_EhBa2 !_ЏD_ "IrD/`imvOl^]m"DIxtBqp|>nQQ2}~< )&kuBn{׍΃+߫NZCr~hP}GG㶎q3?yp}Tv[<@q*u -?cfx ̉._ݡځ PpM>C^_N@AKn0@}q`$5R6EF{bɜArS:5<@s iR###̙3cz7xB2tnyʍOLL:45kWu2[: ~;; 477w|>ť%82}̣/VX]lj/&zfArohZ ֗pjJG.mJs=8[*W6bm(nm], R'J`|]C{~ybNeOfgIȝzeŞCepߝ,s& !͠Wj/쎔K?ݞ7R2tT{ýj/yR-?Ư+4+)%gg6_~2IENDB`pysiogame-1.30.811/images/flashcard_shapes_72.jpg0000644000175000017500000003136512201770070020525 0ustar tigertigerJFIFYYC   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEC !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEH8  D+ـ"@ L+ـb$D#1m< TR;&)F֛s<7CL@)˫[c@ iz: 5RȖT2U,ٯfb3p^zN%2cs*Vhi+ZTEUp*a6^?6GFN~m Xf W={g2kѱӻJ@ R9S(TJ,ٮ[[*aRS*+NΥJS*+NΥJS/=N~̀"3WC-Vv>2+Ug{&HHN_a Y?!u:_b8T.zۥ3R梪U2-!J:̀s*zg߰ E n_c]aqi$FFf@SC-Q:~LL_K*%RʖTovQDʥeK*e7uۿEZ.ʢU,eL{wRRTJ,& -Nz&C-vB٦ۺR*Ȋe]kvkJqm tK^/("жU:7OUJ?-.tK]z}mįʧT)V/Yup2U!_mt*LNEtbt1RZ.s]̀\ZJĵ6Ar3.;դ*eJLYQ*TSfZz&U,K*YS)^3_%eK*e7uۿFvDU,ewERjWĄ2WeC%vEXu{gWhʆJ{;v֭ruy"YDؽWGlj3dS"Tʧ^T5.J-.tK]7U))NeS]z nДN5).t]oa1Z,J%VtAeIeS͖t:d0FEWvzJ]WmL_K*%RʖTovQDeK*e7uٺMPEK*%RʖTn׳u|TJ,s߾S(isU%vJ\nudO1k!%vT:ؖqluKet шU aNe[*gtԥsRDӧ߶\}BG~i)eA#[M{6kwqsVGؾ\iΕ7|cN_#m%efj^O=ӞXRnmd-Nt|*͢;yC.{AVo^G*c7\%8KyG1cߊ=9vLvz|(hې!1a򔡣nCnC](YڊHh%MIidδGu#g~K4JR[*WFզD1nr2]6'-& gQFTnQ&BU|mRQgJ .3e;y*/<̌s,c3ӿs1߰1cbON#ݶ1*]7YPOt1Xrqx;od9j :v'dьc>XO4cx&{17xOlc1lQB3'~MlfK[X1g~+1cakk1Vc0gm1Yc1g <ьc;qsq C'V1g~2/qsVn] RVR6WF*+YGz3;y͝>cЁ3 هONN2%,4 gitn5q8uuLXcNSȖczuq3&TJ?|,{c|cN_޾;1}Nͤq[+V)'2JM1vyvfv(z>]oQШTt*:a{;3Ga*lo.OGӢU9;SGeP֣);:NʏyԱ`ĭ $# 01!AQP@?ퟱX3+%\.`kJG9ȳ/wP3LC'l:-d,n*]}uwE*J+2%JYTLIRPyt&K%\7&΁Ѓ3bnM̓L3fJvqf: twE(ygoC;jfEɱF婯ޑ'yd: 6Lt#zNmM ST(xC9ygmDX'6c0;͍ 'tS;ەCcp`!:;( hR>ͩ|EJcwE(yCΆ7! Xsb266`^'tRD7?u*͊(ӐYSP3^*ohQEIbuAXXD@N(++XT>[iu+\Kp&7vG4Rl ͘܊! Lg J aαEU~hucP3sbϨ6gtP APU:~D\u,جV pibt,B,B(+Ƹ +Ƹ\6&lB` .,ڸڸ߈\h0v* !012A3PQ@"#B?߽Iӿ)E]LN'Q~&7ԯo\u"_kQ*VBJj7h*Yۖ'elWMn(oE]MMML=w{KJ ^SG2R\\E4֩=Ky鈊2%tw5v~ Ge Z6FzOKш{7fnܑ#qIgRv7dnHܑ#\N9z7$nHG~-ة) B#GRB7НEܫs8E^u%NVyլNE"dTR݊!=RFV|kLN?#n{eNzX|LyYi(;Q@Y4Be%XIeVz#rsswyqBWYW\KK+C4!E7x%7%''wwYjYiY!eƬ$"ዏ{E*O#1W-S OKщ)z/t}e*/)݉_(ҿ*N*B EvbX}=_4!EF+ :^qD]u;"2ቍ|U~GbU/戻'|} -RGU%\5?eJ.!MȌsF$Ee!wWY:p4!E5dTؔ\]HB*UU҄!E)[srR!sW"K{ubQv)RንaB)J~> ^D\cffԍr6mJȫ}=S6mۑFV{S6mHۑ#nF߅Jhbn \Q#GNl"+JB(,S+,"u϶BIpLh'|~".e<\BSXYyTlXB+.w6mC)߅Jjj̩BPy!F:xEPRN:X4N&6Pҍ(ҍ(,2w:X4N&6Q[9tF48)3lDF6PomCm@ځn>kDTb2 2!1AQ0q"3Rar@Pb#?\0aӼن r$!']PV1ouc ]N5P#YJߢ\ÏDt\W8w.^* (?21kו&@"3KXU}{7Yp= =ŗ=;?xzAˇ6΃YSU;[U[OI[oDU;SU[UĜuN?SU;[@t;`>Cb7QDboԨoԨRԼ// ᭸粋ÖŷFnͶDY7/pvr`p23q`:depw43??Ϡ~X4A##:{!a;{ `1v.1?<9lk1g`fhb0Q(0rȨ{Ǡ? #4g'Ip `d-wg|mSrG)wt΃|{x G7fpAT6= r LvѲ238In]9:Fc%QQ;??Met;]mgA:*'3:(3 ##drvy vޓfkl& @d}zO [> ֗Kw2y GuՏoswM+'pw pw pw px q+'pw pw pw px q+'pw pw pw pAn^L@HF*0}+J??ʻz6om@IGYUGR.PPpݱCl%ݧ04Xl4u\56t Eq&rT'K^6y6:IU\X?r`5_VxUYUp%';Xa31yeYUYUhm&jʬ8X1eVUeVUeV[2s]f=U-~>bd,E,sieCK@bG=a~="x]G/Ԡ;[U+p("DQUnJ5 -G%! "VD0B@Pc\PA$E,"/GDG)h A2 BQ'E3NbLZnu–`'0QTbG k5S'->Hb-¦rFX1^)h]7 8{3X0\fPGwۣr\.}Ӏu\V6w@fٙn{vST0XQLTQaXf5{Ɔ0II3i"D"3D*r0ERm! $p8)0dQ͆g7#pW,ZP\ \1(-ߤ=z}$pWO՜M}hr=Mw>亮P|@hG?j,- ;THNs4;Œ8H%a"D|sR`(le9SxXo_ÌĢrělGT:cqݰy\1D\>+ VW_d0$b" !ߴzp{y.p)ځ rY *A&A+# ÷ Ku"D8` "Ub1FA` !߀j($Rn(,zl!E^ɷ)Dpv5F7D8.d`%d. 'uxtOߴzp{y([:J#A[ n:A 4X<Q nܕkqTZ ARPn+uV[BDŧ*.<3_8@cȗ}Q7'uD>JlD f K$H"OH{7@bD"J*`,=:('R[%4H٠en$>v72/9T.9FEĦ![A8)-ұ^c>z/`H"NԎGz Rrq#@9P2h, A>0]k  ew~ Y`Vy0E94tv};,[x2/Y{tyvz!s+ɑ.Qf g89 6 EȰǻC'f@\q <G4ϛKghd{*/ n[/uJ'`@ $@yޠsm 7KD di}@ g(" !1AQaq0@P?M/c_ #?rc x4#\ɰ39.XnL8Wa&V, #Wq31c&ԯ/;67G`ɉFHrdOv6&fff$>O}t\sds*\'#TΏ>D9v(r,G`՟^&u2ZObacE.tffC&z\l=HGUs~ՃE߫v>`ݟ_ |7$Wp_" !Q1Aa0qP@?q~`srr|/yd܃{{G&aBeb L.WwlDDD-0 y"yqóot ĞYe7ݮ`)eI ~!>O)}}cNMS(2rhY츎92d&M|J|/dɮMBH>,Ph#uz47d{"v:>>Xrn:<&Y,?pǤLlɵ"""5"""ilDD^M2ܲXhshi2C֎QNeMFLM/.b3V:%~52Ͱ·77XHwS)Ԉ׈nrb"#WDE|I,4bT=A@K q#1} PU"as0#Gdך6GqH>?xv$DDF 뎘뎈莹7#GTt\tGTuIr}:::#Yl͇._7_K}.3L,fy,ANqɉszw Aއ$#%WJ:nt~ XI.``p5{^Huzn\i B6)::#x1b^Pxcn,Xߞa{,< |ƏߖE/& 8?p>}Ʋ?'=3ij~|tYx?*1!AQa q0P@?^s \^_#8)&?M H{aPD J{\S _/m&ӵ SW4%*@wcXa<{M8Ԡ{z&)uZNeg2ITG %1ulb I91 7Q!1emXgʄJ3.U- qv~k}&*jNI*jJ嚒|ΝsF҈9gOFYGm"=_FF%') [l=C==&Z7t0a_AϻY:Ǯ}޴U<҈yC"Lx%$4#(7bWoIo僤K95mߝySJ[LZ>&D3EpLNO}Wgx$0ApK/GP/%#|r #AWP>UzOϚ>78<\AQ@ܬ՚q'8XQxnT+!ϦLU'd0Wܲ2 EdYcJ 2P34fį$;mD*ܹjHԡ:Kڠ8UWM֛SNN@52{Lc~r{o3?+Z  :X, -f_??Ȳ9-n!Dr *:+1ݹoCeC1$؉"HEd|KGg޳VnN4,S{`kv8Gwk5fF%*,.G @!ږVыGz(w$೭wDwPNf̯pm@,X'$jQw$P(O tR~h ۳WۄAK>1} li 0.%g O3g `0v9Q~*B. X3H#=Ʉn/΢oN}Re& oojE=6[ڑo[jMV6g@0gޅ"ޞԛz{RH&ԫ{P‚ WŘ3BڑoOjM=V[ړocjUd`L7ۈn6Z|;jh ѵV A$\WJ˭ʭ̭ȥ26p0z穋T-T rB OgF26y@ ز,q6![}߭L$v"jR4tc{%WhCoBcxi6ڕoCjEM66Y=. ڟ3B`wXĽʷz-l?O)"U3"Uw=fl\3|d*0c7 佭ㇾ?**+F"TTTTrvۄTTsG#?)0ac8Iށ$dmS"Ɇqc%3IlSmmO:w<|rMؒP`>7Na0WeU1F$IL,,ƥq7D@@PTAPTqxEv%nn*ʢY9/$UUUU_Tݹ(B "Ȇ$DJ.>נjʢYl4 9ؖ%f[qQ<_">`L\:BdAc =f!Fe.Eh%@j$Od;IiDkr`}]JnVfEGo#Mn#Cr%Sl<]pQp8Or1Nt!Iv"QuVu!io*i/M{&eqUW|!R~"U~M"V%xw%[%Q&\4f{Q^D` [!T*W#_d%o~_['a'v(^*X+l#g$j/b%]%fa*u_m*o"{hh+pk$d-h's'arv*k*s"r+z#y?z5ah.o.q'x'}'om2Uo*v {+v,,}~#r.~.@9J{4v1)~)22z6|..>9/N9gAHAz23*3.7/8I:2BJ<4RDPDR7a?NG7[AJ:;;QsC34ZUMb\i9:JDg B(L57LChiw/֣E)'N}#5A 1Xܘ*΄2`5~/_>|5FQ VIGDXf>Ѩk/Fa#{M Xbz}\LWyh<'2Q t~yyUUUy~fFrt1?=lU 8 4yCc GәU W/24Sx'bRɗCa_X F_pԩgϞ:u|u~d:N@-I%cUE M_po!Q C,6!F%)X9Wo8d;VnFNfEz=,4b99%[6mM`z;)l4JD!4TNNQQ'E|Tki3$pD`70$M2`e[EdhDc$ fC}'hF'$>}e!83˜b ʭ[nٲ &1h-_*":V?`1B9sɓǏ?v@\ @L&>T-.@:} ܹsǎ;vp}ܬ <03N `oJ̘b%%`m߹ЙKLC> H2 T'Om$2Գڸb-_|Cmmc]S0kxf vU,ZaaVTDk Wh-.VmٚlSzRb.@l Ql8IZ/G +,⣻7..<>ԟ 7`ā0L"gX'5EEˀ&W:x(N b aN+d1I>ޘX 3 P$x˦+`5V:8XT<"fru+g3.XG\2E58a*Eh~k79S+R(ro]Eb98{eu׉urvq_ \ޞJ$e;y5Ux$0<<ĢCA]O{*ѸЭ ύ/ EL |Xkgs8(a(>Ȏri9ؿi-I.)89@'<ݽ Wl QT>]3F`go?e0%;x}m)#ga;W>w-)SZO>SHg_hIENDB`pysiogame-1.30.811/images/a_yellow_150.png0000644000175000017500000004404312201770070017124 0ustar tigertigerPNG  IHDR,d[sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx}yG}緺]skf$d6m|`6HB6fs:@ e لd@p؀m >)_[IgUU]~4ݿUuu_WU3""$H <6H AFV J ABX $7H+A a%H` ! $uaOr?9Ipwނc_ٮQ18Vax_dC=ٮVyʳF?sBv밃`n m;dIv^Cޏ:#YEaNX56{l"1`fj syd3:Ljo * vUC' `$u`=@0UIp - ߻4u@Y\@:DX#[P{NDVZYQc~?][" gFsu0>sC L/I #_FD]1 XW75]%5և`|]R'Zv1^iT f=Fu=ɵ3a@UBXӅYFuӽ'"!u&5#axԗ1eh@kYTo !iJcq4.ȵE0\ eymLfwB@=u]`)>UWBX ž؍i*l gb 5jo^p-+`&#5 jőZ{dF1T }j bA0w=s9^h.ֺbܣd4Q|(=~G`-0;`,Wv2iߕ6i%?=UL HCpJ 04A%U wQt :{Ztl8%9jR HK Qt7(Pkm]H0U4*Q0cѭhy{r߿yjK8"]Bey] a`:dU ;}2V_ O$P֣[ 0k`O vdN-}~K v 8$݆ڛ?5'X|&Lv2;u"f.*A'3iyȜ tTm خra{]AןxQdXgEMl`͎@OoCMfQlPQPMON + ֤qFuð_冁̆J zs&4]A&-CZ2T#MsbWNXf--Y? +圠9A1Lyj;~%oCk]"vqϝx&ld4-aQyMwF]=Hгb{ TUsRV*XÛJ= XD0 vzGdu?єeMEu˽/}+Zq>b81+٣b7xq:ƘXWQLy=҈ ϝ}9Ztm:8 XyCHi5 ̡Q)yDZ} S@AIWnOQz_1u߇ x~#s5%PIP%j dUjψBMCfW7 0w~\A1&1 9n/X.C @T|TfI$d4a&*[kt f4_ U6\AX[GyLcd0qQyG\knc@{kĝm#y `TnU3op lV@/ZK2/3^n` #bRAQ ``kP8ȸo%`9okWPN,X'BJ{4a!T6 :%%Ȭbkc575|A4 j7b߯5GgO8W| 0A-s3oI1KXv߼ŵRK#V) g'[Ĩc'7ռ o; @3@)ׄ1ΕL1p 6Hvt =Gf0O8A]5ʉ#r/$(<-LmqyC!|5,䃠c>_y(&FDFcq aձEXdר , d^U+P Ty H q,~)a%/y &&3@'z:}ƒ8)"{>˟.8* ̲ m!,*ỷ]\K `.1],$ϐb /eL0o`W&0P` dѱεb04ٕT(/H׫I(tgLcU9N5*o` vgh:N |r+*첈*F,#E~ֺƒ#N߼T+ TO?R!Fj..IA@!Qa!h Ui^6 m){.[WP)n UAuu Ckp.C9ψ8Rs|@,07T|O,c3@9*:iX6R S2_Ʉ}.x_ WEf 75_kdW_'NpK$O\ e.o)c9 6JP))t,K]Ydiz]>ﰋCɵ}J~UږBP kT <+>71#gvzO؊*!(&|VBee5ȓ*DTdv}!,4w*⪌>dV\4#\[U3KHZ ĄI ҅:ţ6:~X;:ltK`N@:x/,i4n+ {˨Xd=]/+I H*J_ \1/˜܅֟k yHC _q@^geo]Gsٸ {7Gu2K 3'n1R~\HU%H8Es՜'Q+0atp巁j*y~'6uA[`"}Ȃ7Phw{BB*;̐zl.4t_gT5phU׫ I>,l3Pu}s@g&|Iiߦv%7rRChUs=Wָ3&,By#:_{ul[B8s{j`}0g.GH 2pյl|bP`Q~S')7c+lLd m΀,z[FKo@y@hX癄RsroW#* dDJQ y}R+fӝ̒&*@Sz~aWsȪg0' r-Ղʋ2ҨX{r`W~zrʟ3Q`Y }-A޶2tiT`W` ܹq1+,D&^L]h v-ySxLv%Nl8K8/Tv;:i8;]ªmAi/@)<[م'"{"7DJ '_ W'5BGBeZJ7pBŧGm28# ._O8݈~{ |  ݧ>ZO}@T"z17@pfh\If_t;@,ӥ4x 1$G"(ޮx;B;A=qhv5'=!ӑ[r&7ή (J"2PW';/W'7C#*t#7Ɵ2p1F9Bv;m kaOm$b`<5.pe A>൚=!SJA 'Av0/!=,>u(Y(|Qqfd[zk6ͶʰG_YEWkIT \"{X<%_%HJ6d*;, kO"SWx8,KH-:UFanPyȹXDٮs/{MwI8 9XSv%O.\LR<{k ]IҮfZFXdQv ӝ-Z @IcTC@9oBdrLFucx\0yV1SsTĦZR2N??IʃU{ދ)ݱ /2vw{ib'j[ fL@Js'5U$ I&(x4ʵ\I+.^Ugl!|A$L`_^} a12.<ީ%.9L8 ߄5],0JO #t>7 B/.brU$_DZ]!\<3!j8Pیwmss_e:=<̭?i6'o{H$A v6w<]co;;/ 7[wyNqy}.!Q',sj7 eA\S4k6NnDYONn5!NbVySRIWZ=xP))hTz$+K:r.PwlW8p KcyG.S{MӜ7| ѓ,5 慜]fqII)Hl'}o݆{L!(/r $L'JsUܭgBޮsvT : ?CK0րiK6M@[Ps}US1oE|SYNțwMZ yCRs@3}+~c`Ꮐ`45i:ȭLM>W{{UX/ʿj.-{9㿼]q&\ ()+_I=yDypQ",Bi1T>-Bk Y=*PH2p|b^:OL~1&M"FSP\O+V5L!Sf$NA S~SƒmXֿ@z`7ͦ<8^NO"(-76ӉAzazи+M{V%C ~$wL&5{[owW0[HƧxNy  ;8jChNQ= `_~hE?~ l@&#wP>γr0ސ!g Gnc8Uy ;@X]9V_ jYEg} Ƃ>^G:, CnW+@ J9OWU[r|\Ʌ%Bc}ޮB7rj. v%pJhb}CV&,G~ݰ"`  {l*rtx/ 7#%WptI+0h=<¥gQp:)g/`ޫa Uj{'o`FCom힎M9w7%s^^O8#cV鸞UPKyoyoIvDž OPӦ"#UeH邇 _!Vvd K["y'pgoM iΩsM90W.\7Y%b#.΍ ode:H74C$"L 4 XR.w 0 H!nT 'w4NZɨu: _ &^'An{wHnp0m-߁CA#l0A P @]4 k`Lt0@*`q>IxqRđ-w|⺝^j{}exyub'QؕpĒaW*#>Ԧv ]hYxT+_=PiWT!5{dlޕ'`N}t2 Œ'XАHpB(޿ Vby$I:92݀_ #3mkۡ-q5kh+OP+n&vU`f9:[9{ IDATiޏq yyC\( -LR&1+ rrĮ-J[t$ڕk7<#+_`W t<+LXVeS]+2K[x6.~֞(8j5 `  @ 'sfYQO;Ӏ H3͝0Ji SL^ĸ4r*=iEÛ U؊=]f%l[p)LK۟DAfdAv @@V?\!H1/ @,]Ke @FV#{ILbcb_ۣ@l[v  ט &Ea#QPȮBM Ƹ5C",3S;Y4lzdO 졭Fw:lo V JjeG+t* p/!/in kKVO`Pl hE8b*3+0VPQ(zXހS]mz!!2"f0"$ONZXG HYtX Hwy{IJ_A96|7m[ 1 v%'2xi;=̘*!4cr#ݱJmx>j '\I]=]L `5Ӏu IFƷ*"Ue="ꑔ+SzVaI7X?m |Ƭ?5%0f8DGZd]YK,0M;R Lw຋ΐ&/𪸻 $4i{BlBN\5H,[zFcf3"Q|V1=@oYԆ`nTq_hZ xS!wl@xfe#0|ši0=x_2yI F%-.Tf Yچ >"HYˎ2 O.,F/:r%"~]F# RML|ײl86wR2@"Lnݧ9#&kp }DZ!5 %FOБ熓DZO^yĺ$5 !.t}yk!ZxzN3~άG>cTXTyYPT8b'1y.1j#nR]ЌN ɉ08a6ȼ /YUmeQ!rQ%9*P;FAVA~RrHHJҏ`o? ?&:ׁp!3+R*C?ӱERG٢>ImONY*қKftn==9]>[: 8Ӱ +ޏ׀i@PPMB\ a9ML+ށヒ ]w`|Dʴ"wHtXH4-B~C?ӓH˓ $F@-T. T :??[P'pFKuؑ= n|{GP{i}'~::mku.Aoj4Ux^柳!}(bPq$ ǵ _HK/)L)UP6)tQF{_^*lޗ?o8^WtKLFvxٜ|1V g r*bjQAA::Amk)BGQҩP9ʌha9O#bG8hF _#ӂV9=|p5ZM9QuelJ*S{W|We>R#9OLrd,cz7HưThYr!Z?NjD~iT ,Bh]KBR(x}B'9޶\טzE[G"t)Z=bXtW|ONcw0gֺ} "="$#8);Dd*e R'HL )+z 8uȄѱ}ΔVɍ(mi:gA_ i=hٖH˽cz0cF~03/̖;G5BvB11@-FO"}捑$H5*TW\~YEN}!"<+ӊxknh[B,vvWh/cN8G1D5䶕d$OpY) *SO:E%R-.Ak ]2w| WQ  H˞ ieNd${TEhӹ|/<,Lr EG#B[` U?(l(ƚx@|>oeQ!IPAzdQ؂* 5@<0]"+#BXоf; r6G`WD%0^| ܉E=\ޞiEG6Qǎ#G U6Qgua.E !J70'Pf#Xu6r} 7d DED2UHC6Q{S#OxXs0M5>S Nϕ!}y@{P24Jd* JM))"KCaq*aVQ-臱|@x$2 DL^ˮCrH:u94NZ*rueH.j(B#V]I'=qt%xW&3Z"1 q|2f%SA=DU\y좷bޟ^Ke5?w>A\ʯ pb"}@CK;슉ro*LCTjEU"9k(jۄ3ӌV|#+TiGx3ZH2ݿmEgO`L<#>漩e"Z _s1}Xr睷GwAaGq$يŵ8#e!um~=|ki뤱#hWO坙-FJ, 囓]BLKk]VfyȿqGHn;,(9vE42}?XbQP8Z|wiY6g>ȉ`Ÿ1%>LH*S3jaޏ"`z2m^ijKc(=#Eu anei ƷVڇSncHhPyo2`<yt> {-soDud F7eRKoK(B.@[ay8ZIk]W+otU:wl@ *0ٌztR b(Dz3-X} VqXw)"X*Sw^w(w<$bSa*Rʮ~(0/ ;}HlfmG`_iq0~:O1!J UXkuc5q2dxaz˯{~O;﹏6#p/wVtARmjX]~̿.u廠gQx۶3 ܚ, }Űv? *o#bW.bLPzҙ10C1>{ x ?Yx74ǰoghEn->d kᘖ>x1,]-,;]# Ơ,tZMX.φBa/wIr̂`9y}a @kk,sg~u8A>۪bpS]1 t+'Rĵ7ܽWU;Zzks K(#ݵo>QzD: Rw:[eU]B9uO0Ѿ-)#F6t >yZu26'ٞl23FKڏzN\Zڍ *ȵh։6F4%$JHk~#,,2209+|/p::d/RcʍbnS",h?f:fuG`W~]yA(o^ [cF qJ^þ>s] U_GTƣ#,SotG`D}y:АEQDe曺sZ ˮ V>}ܩIDAT/~™6uFoB]'T=oTDŧMkW$a9pCO)jybU }0 /k,ʀeQ#2,@=tmna1LX2}`F&8*BXΣ-\&knwH?Ʋ~-mocWyR"zqMZS[Qz&u/? W\kbxoz.1^:n W >\"so wQcMAXA I'PΣ.y\7fB-d]( cbs;_tf\o4]5 a3rh_w3k <h-N07.1Iz-R܎}/|}'"M F.+vTΓ[r`\U0 `ig:k]6fn`zK..z"[Ӭa`gP`7Z{mɩ1,aggM\dA몫ۼo[(>t&ĕar.m?*݊u< i ֣}M^&_Gi(γ$G'h_w-9R!.F^<~&;裩 pt;г5jq7O`4ZZ+4C=׋G~ d?Lɂ7490_|x:!z6<m pF@6쬭UsFu8y^mO ޏ@w졔<7c]L*!,LO}ux߀saYr,忒Oy۱{?eRُ}/݆F ZjzֆWzcjFJKCeeAF;?=)b@2'fz /E˲K!Z'$} t_X0]x׼LKvUCXpʟbAKwvU:HB[" mªt!4]%uM1ZBA^{dOĪA\_4 XF|L_Y܏3ak$*cD9.{7( UjV^b_Ǘ{ԓ7a2WO.Z,Qۀz zݮmKXnA(a{zZ"f&AƇu(Y@KX. HB-6C5,M,몦d :[pV/ӱbA6>M؋RN9Snw c=XaTZkgej<22*,,QQY `.)+lmo9F| u,Xu]g!* w ~劝{l>a@W"!R7r `UrrC*Qu;O6eJY_.RWOD:Vs:9:⯧7-A2!ȖI3lo+pjI߬5E+}%4sؒnK3/=[,slBP-ԪۋVuc_*YLUudfv۹1 A֍%w%%%h`YF/ĕez@9^X/O(BSJٶwJ5Cb=_)&HBz\@Xd4W R V!@,˩?54c_4oaQ ;CĺI~`h9>?4y55z6?@6{7@A7|8BB8}9BH:~:;;GG<<==IHBCJICDJODEEFFGPOGHHHQPIIRQJJKKTXSLXXTMYYSTZYTU[ZUV\`VWWX``XYaaYZbbZ[cc[\b\c]acd^hiijbdjkceklegnlfhpmgiprhkqsokrtutqlvurmwvsnquxwtoyxswtx}~uy~vz}{|~󊋄򐎌򘘓󟝜򭬬èDz𴵶ɵм¿ӿI!bKGDH pHYs B(xtIME 5$z IDAThilTǟYc%a ˑ@ALe XaF0Pv ĞK!( UIچI )$dPVξs[y3y<?st!  F¡`  #O~/M^P,|rB=xȣAφuk=xVO d /QpD^ѝh_L '10>u! >v{`8" :q3mtjDբ3 z>_ 9 C?Է'$,R[I_oEӍs;H{5^u}pc{'!ݦ|[ hkҹ}6{Gߪv:X7fҶa[9cz%}eHKC)Z԰i[$|hJK06mi#`Uo_v"'ԌHT-X>Cf,cw3&ySj/_Qo*\#x_m]Kg@YQJO%Ϥi5_^Q`Fg 3)R5jҴ^ 7%د;7_l@ιHݱlxolB u-]]]7']0ԍ}F+& ;Cڹ+<@e^ILA(WYW v+h|:X \KͮXBy1(l?t u%݇x3`(] `DWi #3%e7t駂,kxuVFn C,.|vn9%Ko <[LYPK!fU P/So*08z5*,Qc^DrȠ&u0zKV21lXL 'ske"Hʩp Ҿ7l\~ de`Xdg 7iY$$W~B' &' !EC&Ks ^} dz܀1Ӗ ~ Lv^M-`7}pԵ#58,f!BQ#8L^O QH:,|hf %9!y5Q8Lv\4/wäUܼ0]i%\[.p0y.u-Az%XfeX 2- yz21f&1,$ R{+Fua7hsnеk'zCleJKIkf1@C__ 4vmewBʦiնs벆Ńi0]P=,q'qG%.;wUdA^X|]Ȍ`&-LJv`J1$c !m:*Fu ,`-+dܐku03Vt M_(ե}a3d}9x#\L&b-,}!ZDzq 5l \iB[LL A0mƜ/ASnȅ+ֲX 1)MV.uu 3_70p2?``f0I!F/=Ȓ>1" K 2z ߆uֹ!ڕ\ZFOgk% y5ʫB8$ ZHki%iĖE"Ax! aK2{v3i4X>I/eŃ|3ʫ ^W jKq0WWBdk! /0Y'nإ̥bII ` uLƄ&#؄Ran0bEYKz fALV} n2do nhk40g2k7yх,k0li4$Q<ȘPL^`]sY<ӯdPk柏(97GOV <p8D!jB <rdY$⚥I+[JGZ2,V5XCf&ϨAJaqUc6PMY|=5:8"KuϐhJ$`Z<-B~pBKM>!L{)j}r=laN >j ۹ /m{T(!|c~/@w|(|]e'8ZvY7;/[C.p5CT̨OZ>ܱ1O\A9\[['ːZ;%4e| өxkR_x6d\ޔ/5o,j:+}3 v=k\V=94/Uɬ}UϚd <ߜfkݖAюG,0 ?$W6W o9OEOc>[n8S"6+8c*N&#VuE2 @Nwٵ:%mUj ܻrqwhI[yeduN5: N@9R5ٱuNiTW'L?kAų51ds:4~ܤ̆kq4OF0yG\U=R_wc j ,=ُlag9p&YyfVkrHyuDwnfW﮾p\,1L=4]ls7dXXk9\cz!'bѐA '6jh:{(WPBXdj<?6J"`IENDB`pysiogame-1.30.811/images/basket.png0000644000175000017500000003320112201770070016167 0ustar tigertigerPNG  IHDRsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxYdys/U]K7-.H3-#@0hdb O60!0fıHS$EErnnVw̬%rƽq#jvU5? 7nTs"AA BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D dA!!B!C BA  "A2D d  ØR=*uӺ/(k}OBq̅[x3er #pG8*( Ch){VE p4=ڳ t"0aA[P& h'v6 jF㼷YAކp333xvG7^{_P)TXdb8(#吻Z00vJE>FzPޫA`0`cKȠ;n^5Zkh)pNP+W)U+ JB^D G8b845\!1a.͙Yƛ?x0 1qvbɞB)Hp"~B\XQ*שVT+M>ARo,,(~AÍ[XZ\D+kkҋxG(ÐhD-kEq1c pZq\ BbJ)Q.5f= " XۥP0>N59!1\YI< RvMu]1S41 FQvKEqPit4pq jJM**zO0ڢѰ9ӢX}"AaufN,8 !|SVq]wj Qq&,a&H* u</yeN)[3AmRfF,?>wKc ֲzsr{G}<ץj1;;KV<և~=yYo1XE$|< -*hc-( 6$#BA|{sGA7{4ffhA %r085@ߟF1Nk A@0\Cj X B=Ztو=42ۦl277G٤P(){!xsw"Y,`F#H#]!h4amuF"gh,7[Wh4133CGݢQ b4t:t:tgN('5 cxEjcꅗhT+233CX|`2x;G'lj"Ii62Z'2Ð[ϱA)Y1x:ٓ4=,\wn) DaX,R*X[0" !ŗܜ{d4"!?XkrquL/%OjhTU<;PH5]gìŋϣTR)J!"g7꾦z.﨨f95~A0 ٸci8έYXX`aaJr(!?sQ+eZ݁_8آ^ߗc q9 D\x,,qIfgg) d|cb{?A>|6p}:v-j6^-޺v#lu jY^^f~~Rt!?3cxG7X~ncE2vck-ۻz *l ny룐Ygk-7wydnnܹm]gYMb9*,QJ{&c^pvF'-ۗi5Thu3A?䍫S>۰34JɌܡm[V_bh:(Kq]❠-QV8M?GpG=cx O4x{* VEwjG᧞8wnD+[ߣo233"Aru.>EubMOZ"pE*UYj9*މ\~@;PUgaa%:wSDO5{~ tyX׮Nh4,--177Gsyu~&x-j[̔ة_C'/R+4)*Nj^P5ǜQJnwD;E?CpO{ֲϭeVb/7|efggY^^j9pI,o<íLQܣTX*~9; EsmU uOF7;|gx+;,XPFewhlPŷ RrJ1p]ؘnN7ZgJ=(|Jɛ잠-S/s\4bn `kgK4u6zu<"}ϝe^%;} (똅xe>YKpyGu}U׈06`պn<>XClaQtԋmjR'(v 7\NA+Q,ji*iVVwY<~̵W:nAZZU^X ^_!o^B)ӏc}kfz vLk+7/>mtGVWc\ t{to\ P<ZJ%,0bo3{O=_QpY^K *iݞ|7Dk-m~˛W.o!67(w8</_5rJZhK:C¶I$ 4ZoYH^aeA9ii7hZAQ 9%WYvY/ll/AuY' i N*Bޗq+_hF5Bg_!~[7=2AeXr)_F]i%d~b4^j|aWgD 뼲+ra m0 W!{_.1W|'gO!;1z]8/o[/7}6?%.D tT .&gqgR+tSeqfs:X" q(8WcS&v?ɧ">"&GvQ̿yiKO2Z&=⭍W{ljPj\I;PNʞO6plֈɤÝַyS2MhOeSyt5F iζhxmע79#~!elq/swl ߶plqvi> @wxx_=g~4Wg97iw66fu .>Z'@VGǑ2?Y=Ƒ@rܻ˗/=`;~)kzA_`wG3)|O.0 ?cܡAS[sI>oP`hWyܐ p7_I4/g8 ph80acQ;-^]^ :B),.7EW'iAba&SA{w9=51NH^ևja_y_(8 OmAɯss2n=7;oIDI"ڛ9^ wfΫl V5tqn7֞K_guK:D'ܮc{jgOPK|&YXXSvkd d{Խh?s}_|_ ?%*Mn _z8pz W$iA:9 T5z H@ l Mr x<l߭y(kvJK #R>,T NɄ0??ӧ) lllf#|'=G?F0W5=>,?|}+LDp`gߏu.34`Û(eNΞdff&KRD}؈ l W5RZ F~ee+A(U:(BcL%*Qmٱ* j5j13ҁ6݃`"<%6FÇ^o)iU`cpcp> ?EXeqq1f>AoqaoLtQ.Q<ڝ/rcb0xnCG \1>jjU6K n{̞s)I*ʑ{$oLE?K0[s\OR)6r{o[;W}ht/îfNoU}h<o}s)<#c}|ZpA}0,mީrv"O \5 /10blcQM^M8~4H_{2X]__<߰|GX3טe9KoPn6Yn~(<`DWX۸̭U]NM("V}l)z1eڵ6AEzs2Kr2?8nM1&Im Q)T䣟ËJѭFIـ/ηYnkZ0͹ɹ^;_n61dj{#ML}awzCeDq=c)q! k-uf@YKchXPe5Zi0z[c}:έ$/u˵3w[93{3n57(r޸~sS^4%lݒYZ3my| :AرtQXX' \27T#;A+t_akxgCPԂYfʋ,Q+8er?|bŐ>xۯ_a&co[y_M|emk5&D0>Y 8 6CivHc)ܲlЛB04JG <`R!J%rm|aE9ID`+h$ bY(<* ]6lpyvDɫ p2)n{P} qu\:>A_4 9~oqK5 Q5^hGqЁv͘>3C\f#bO$Qf}J-Ax(p] X%ڍqG Rm-Zb̉)!L`T"$OO=ZG95t[~UM#XZJn-J.?Cn^UZ›kWz>LE)#E/E^͸Oz兏S;nZκwh"8"DYq=`Ax(ZS((*Tl:|CR64P &R1֠6;Qzrpt\dkx Gk.nPZSvh -~JM=X,'ea[뗹|2kV''~Wz+?"뻛٬@PV0,[C>G a! 8gUݶDƒ'B̯?~;h!N.u`5Q[cY8ISJzqԠŪ$*mXkƃZk" JAdz( ۠1S:Efz9>U(Vv^/}-(ZhtOj$wxzrЌk'@h""Mj(M dnBiK Axh ZF<| XEo\-8J.5I%LJZ%W{O7'Hƃ%},(<5ڍAmnE3ZT 3 2S lG"{{A0hrbCU[[a/Y+A$"Ip`!61:ܬA)TyQJQ(h4we%>AESd)M)Q/bo=_w=wKղKPrdI]A境(tkt"("yNT&0XTJ.a_de-d6 IDATEXCG%"̶#~|ha4 j:)Cr8&6R(wA/(ּynow>CFa< ϶Bnm91['(]L}ORIm!mJc-Ei(o5 'w4IKS,J\Ri0s8J6h@&)LGdԔA)w AoQBRh0v%l:FCVY䀵XcqK Yjp7ŵ<t.DjUߣ6=T"tpL4u:4f8H=*SpX@GPRiFԚ ΧhuyOI.b I"/6:">mX(<lqt0ncqENH>u߿\ WF#>~FXeyr >GwkP)iOBRhTRt*}IΚq1R' T"Vw뫌5l)&|Th zcIi cEtv#c:;!.N[DRfnp[z}6˖r|D0USc:B06NHxDllRC86XG74 w8$Y(90FҍNeXBnԁc<;'B>lCTbtQ~lfsOڃ[$J3LfJƵtq-Acp#BE B @S,,R1wV/FL=zplC(m@p`bCZ=DqERtCœ;wu BJ)!ʥ us-})k (w_G>p[ 45䢂LNF6 qaƝ*= RcUعc"ŨcI`Hv I5ٮ-r ɾkϡ:RAxiCRaVc^K: ?ghHhLٯMKcq=>;I-Ξ:'TL7^*2X$6or&@ iz2["QHliLef$rǴRdJU5>M*d:=hc pa!K>j<Е`ǟ4G}ɏP$,T:"I= =ǃuQ4Raa;5}k=uV_6LKE nݖSDaP:$? ibVU'9XaQwTLݘ01LLdJWQ)Aw|'=J'{&)C4;Iͦ$nfz-(Ax@wQj۔7m`np $8XsE}vL/d!ĸXqpHTZWHdOdv_1 oޑ 0M _<&k5nU޾mD$G(̪\ aA;s#v]jY|8i eRG!%$B`c&+O $R8fa Žgݔ&8'L)C|] B  J9Q75x!jGFATV@z~jfiBC>Ǫdj@RK.onr*}G8:y~OYp(EZTʐO޾) D$_GX.~ '!dF!?s?soHaA!ՠMR񀷹BcIV/lt7I`m<1rux3|d0?(GSG+_T;M^ i!BiX,P9]"Rlg.F8.b{Q2;n0ޣZhSY AIBlѓŏ&kP|Ѩ\q` Յ$?sPfn|m{@ <@eZ4ptp>.Kdbvj<(mrx`*=^| ude,OR}࿛FZG2(w+0 ;ԕ)]9S%fN}Q@ <`+s܊rB8np(x5Ch s0Nr >sC&"NE Be Yd;YpGyÀC"Hs?KA*zJ"B{ҫ:eye1u5}]#RGlbv7ԃ\NG=Iݚ xvﹱ^k6壤GN  LcU3]~?*eZ nؤqԺX,QnY^^lAxoOV=⣅p0g|C)E26b8 A!4Whr9 +M,s \d'+&kߋ>Cs`Byս(m^G:Q,277Gݦje!B(:Bܠnٱ~ _;G [5j6e9&7= T:)TKbz|ŽKڃӇ|Q .ar?$["ͭOBL5n9&JiDC #T*Yw\qw^s oՠ VN[g6;1iMJ{s hrrṆ 6{r靗i|ٽOQjTZ)APgNx7{ÌBct1?]s8^ wfڛlR6?8&w ߋjZ"# 56ϣBMci~ۤҨl6DPV3,!B8:©yl7?-e¼A>n2y|cE}z+4K&۹#;Yt}^`sWf{Y*r e=KV j ~lNA]]ޠv.$˧;?NxAD&d{F jx;l ɋ ݃-r~<3,8 }J"vV+B>mgX/u?.tCl"iQ4d'Hs N;''S-z7NFBepQ')4Lj5b[NwC <.?ʵK~Ou1?9&bFqW7|b)ȎĻHa/z}2h4(J)LҊN!||c.ƴ搿\{dBv7(gE5i&d$}H39R4rsOP,2??T*yAAx(bȩE5b=|YU¨D ޢ,&˓-,:x {BѴX|#A@}LTh4(\)"ᡐ6(Ej:GDaDB{BT r+,FOQ JZ)4M2?:Y47GߧX,"h347uWVk= $b>:cZ*9"'d98Bj .LEN"ᡡN6]]ZX,Kӡ !(  ۳a_a[26߁ ~CwEDYAnpc]OHIJ~6~"Bia1-m!~OۥtvQf1b:*z*l!]G޾^a0GԨx7C8J ڸ,Oq&e*~J6{Y!.Bk-q1hJ^o*z F"lI̾!R* `A&6ylx{IAQy!,>̹ԼY*ͣیGwD 'EFu1DQD  `0`4Q 4;c ^:`Aqa:V)촜.#p" >K[Hj3_݅Am׌1q b8fD>H#TAX936baae @:Rs@ r)B;~'2㞤T+e݅Y.H Zu:%4H !AX$1bT^!UVNJX)Ms,:S.LE0{ ک҈ /f|b4eQB^F!Q1Z"gBe;Y=5^bR'ƍV-Ci3~J?kcL6*"mJ 1X $4"wJ]x?!?3Ag2NuTQX,233ywD rPi/Df}:{{{t:FR&݅ 9NiFAP*~b{ "A8fSi!*#B!'])l΋dIENDB`pysiogame-1.30.811/images/b2.png0000644000175000017500000001137412201770070015230 0ustar tigertigerPNG  IHDRPPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitleballoons-aj%tEXtAuthorAJ Ashton@IDATxidWuj=3m=3^C6K 1  I"! ?X( ("AQ )(H1 (Fmx{LwW{sWU6PݑrZOUz+YcKW\X<.ff[RltpDs[T"= xD p\, [l)cwqR2pN yĢa8,4h}0tw;ŬHwV-"sKE})-q"pN 5Oo`_n~9q( GHr.gg|e2[_x@0B>z64T45SXKS_ņcꁛu{{.<2|p%z$ f;X}JX?N}A,{2ȷ."6fH}j\+ߝ]e)G>J=\p9tph-nDL!V |CGs2O8oFO|/\ރ6Y GjИi2=.\7YHƩѼUŸ1F=/ĻRtEQfkMՁD0 ;A  8 (v gi*[9kXz+gQH$6.L} EބN `ċwvl|ꖿt}L]MGp%i( tQbaA@dҭ?,:lZ P )Ouw=ozgzd.)#S3a~zlq8u?ZMY'cVl{N\M;.n~ʥ3($[?59Ex] (M~bm2ZNJi6ҡI- I#~Ÿ Ytg\CC.ιb w&@TIw&Y+C]gƆ@,\Vw~p#@g9Sr,GAۣ H'' 3tԷ \=*dqL)Fԇo/@ h)MEKC(ʜL%ӹ(݀ "P}~TyA8M7+Eh OZP,(MB,*ٟ*E^7UYf#}/t`qDML1TSBSAùk>IU)"GC7Je`9&Ji˼|O1@,/T)z~ S 0Y Wf ('L BBz̖]Ptsͤ%YaShMr. Bg0,cЌ֡8HB_nyER{@<*F$|j. 3a6(>茻02e2>/,s<BsцXWPt_m*4h9Ƙmg:?xdmWUNUj>,ߝs?M, 5X ،!j]'p C*57h!cM(!(:0&= 5Ýy!ŅspWs^#"ThĦš mh3bpc:A܎J,hT3jÚ35u\u.ߵ#sע^&*#B3$zH6zHmy$6!EMH q rtsov3_u!DB!:B mzHmX5@ hXG8 kѐ PBB} +ߦ\~ul<]_zQ8!1'83\'Eb%P zhc'Rt&9~EtFށUM^xϛw? )C"493qx3)N#;Pو4h]!NlG ĪN;6c۲tw4skP ]!TiYF\aʾP0:(瑹hs^KqKצ^+}Y,beTФqzV4dnm _wlN~kO8uc_wԌ(}.FqetPW%5bI u^6"%+H)l%y~+Z|_tA y=8)zhH*7PIs"^+x?l[ o/w9|уPc!]hC̥giz]u }j3^o߸jlNXyb""WާiAJ##X ΠsS8JWnlߍ9r &6U蕂.5RMAs}&~M_`Gu֫kБkVRs轸]s"hYCBNͻX[ L8(~|s1y:9߸=3zucCv3/~>-pEq+x ,nwp}wq ׷zu:-oS}z]lwv:ٞ:-좭wlOaKo~ oI1T/avlf%VG¥lODKo*TsO>իyRپV_YvlM׿e[0Q}}ỷ=xE4W/O9}# ֶz%?R//{{ ;z5l ʵ (|+9?o"~;a*^64IENDB`pysiogame-1.30.811/images/flashcard_images.jpg0000644000175000017500000175743312201770070020213 0ustar tigertigerJFIFYYC   ")$+*($''-2@7-0=0''8L9=CEHIH+6OUNFT@GHEC !!E.'.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE @ Zf2B$(W1ݵVKz&L 2H2/ԽbF9i{9kLV @92k+%-#^%m-n@ͺ9``i-"@U,1X"`j\[6QϚ 2Qn=y`їƨG~|Kַyv9I%,9ko:7WkZ2T$y/ӯsmiϦP9#YhY6fo:k]$ K({T5gӹ`r3b@.5<49{9=sNZ6'-zNk.e'y}M^ <}|3bgךgT G(`yn-鮊_LК %5Tf :yy}F29}sU_]tzV2v-w,Nf"ekNQͰa4'/42Z1_.ll& FN'W8TV6clmNݞ@j<,si0r8uBedskrr9+clV6am}~N\wݖri`L EioXT4 W-z=:ή=A2$BJg\_O/SU}.$i`d||\j72νffZ,YYljibַMu}~wu=; fTk*jR -55Q+L6Vrk]΀ Sjcds|ܠq7Ϝ-جj-Fz㼾}S;o}^.`9Z# :PJOqn*xq00`Yx}p qC 2f:cLH<:ЯQV0yuY:y: ylb dɒV[pF"k^\~}eӚ\kc{1dloNY*5MT=N}W#ϲ]W'h+ksݷU9RdJM}Uk{o*0`bE7 g;@Tn4MƢ#I,Y\rd`L0`:$5R[6 .0@SD^jwk]|]OO/)ku&YQ5]қ82n]c9uϦW&c2y%n [V7:׬XN;tW5,u9}nҹXvWY'3&NJxujķk.]@#{+cLu[M woRAlڲBI9ޮo^7s] ^< txs $I7j{:=/򜮽0kT`E{^?`"zi$_c9GTvPt9SX 0D0`Hʀ g}bђ'>kQ;EIxx^g3m-XߟM,HY.=ylx}9|Kf\Y y zƽf7)vgUr߀ٍt}' v[kW00DB|iq9eߎٝ72cs=[of7)ukS;FѺs( +:gvyn}(t瘣꥛5,V%@fޱ;6w1l,ؿ8۞urY` M;32h㍽5}/9$d{T/495er&B{\5$H`W$n:DʥpMGl``0drԟ "`"sNw=W?]Ft$.cyM:f K4VD {n܀d#d5j]3\;LwTԚN6wt,5caYMgXcf &6P yޗFٍlF3g3x|>RJI&S1-k\x'Sε5%`8I|ϴX G=H8Gh")YhpNPV<L"j^Wˊj i<;iK5 O4浮&=<չz}iz}OJ<>ϙ;Qj^aowLX7}^KtQ;%"]+fq@t0{`#&?M^>ز}rzRGσH y@G+s4ͤEBdͤȝzy cϞ`0H\qzL:$/J+m-K, ==O7pɤ/Ǣ1zyټ8yvȌȖyԥőfy:ev;qc˴Sv(zk&\5isr56x=`mYͥw g8Ebr-fL_AE0o02Wy|%u)s|7l&us.@~FT^M>n~qϞso` esI-ܞ>#a6O=7떅϶Ʊ-]x%mՄG3a`P9~]sþvu7$<S;ٮw.؞@ r'xsn,*NQxS:FT6 @|1,jg5ߜz$gTۧ~{LL<:_W;& ge)sٲcusbGo= Zs-2Ϛwcm$W HY&Pf,j֓2:Rӵt^-Ӈ? r;:K_{7\nPw{:Z3{ 7=|@ eCsH}3,%V(_y{~ONrN9sy`J`&/Xy:IykZǧz$Vԓ^d(v;H,A2vX-@<~7vNv yP幥4-':[}~DWcK=fh