-,@xŒ ™ЅЙОџюЬџАЃџ‹џis8l†Оџџ<•ЦeТоююђ”АТe Яџџџџџџџџ2Tv˜КмўяЭЋ‰gE#2Tv˜Кмў2Tv˜Кмў2Tv˜КмўяЭЋ‰gE#2eЙмюџџюНŠF#|€ˆˆHwGHGGHwGHGGHGGHDDHDDˆˆwt‡ww‡tw„DG„DD„DD„DD„HDDHDDHDDHDDHDDHDDHDD€ˆˆDD„DD„DD„DD„DD„DD„DD„ˆˆћ wpwwpwwwwwwwwwwwwwwwwwwwwwwwppppppppppppwppppppwwppppppppp№џџџџ№џџџџџџџџџџџџџџџџџџџџџџ№№№№№№№№№№№№џ№№№№№№џџ№№№№№№№№№pwwwpwwwwwwwwwwwwwwwwwwwwwwwppppppppppppwppppppwwpppppppppџ№№№џџџџџџџџџџџџџџџџџџџџџџ№№№№№№№№№№№№џ№№№№№№џџ№№№№№№№№№€ˆˆHDDHDDHDDHDDHDDHDDHDDˆˆDD„DD„DD„DD„DD„DD„DD„€ˆˆHDDHUfHUfHfUHfUHUfHUfˆˆDD„Uf„Uf„fU„fU„Uf„Uf„€€€ррррррррр€€€рр€рр€рр€ааа ааа ааа ааааа аа аа аа0C0D334D3HDDHDDHDDHDDHDDHDDHDD€ˆˆDD„DD„DD„DD„DD„DD„DD„ˆˆHfUHfUHUfHUfHfUHfUHDD€ˆˆfU„fU„Uf„Uf„fU„fU„DD„ˆˆрррррррррррррр€рр€рр€рр€ ааа ааа ааа аа аа аа ,ƒƒ ƒ›І І›І[ІƒCcІ„ † f†C#A f ††Іaccƒ ƒ ƒ ƒƒЃ ƒƒƒЃ ƒ ƒƒƒ Cc c[†[І›Ѓ[ƒƒ #Cgњ‡ C‡PPƒƒЃ ƒƒƒЃ Ѓ ƒ ƒ ƒƒƒ ƒ ƒƒ `/ƒOЃ/ƒŸЃƒŸЃ_ƒЃ_ƒ_Ѓ/ƒ ƒƒƒІ_І?ІІ§‡C‡PPЇЃ@Ѓƒ ƒƒ№ C‡EЇPPЇ @Ї Ї Ї #C C fC † І@–cCƒ†† † † ††ІІІ І І ІcЇЇ#fA f† †І ІІ‡Ї g g ggЇ Ї Ї Ї Ї Ї‡‡ЇЇ Ї Ї Ї Ї ЇЇCЇA‡ЇЇЇЇ Ї Ї ЇЇЧ†† † f†`рр`@`рр р@```€р`р@р@р@рƒƒ ƒ›І †‘Qƒ g‡‡‡Ї‡‡‡‡Ї‡‡‡Ї‡ gg‡g ‡‡g gg‡ ‡ ‡‡Ї Ї GgggGgg gggggg‡ g gg‡ ‡‡g ‡‡ ‡g‡Ї‡ g‡Ї Ї C F g‡‡‡Ї‡‡‡‡Ї‡‡‡Ї‡ gg‡g ‡Aƒc ccƒ ƒ ƒ ƒƒcƒ‡‡‡Ї‡‡‡‡Ї‡‡‡Ї‡ Їg‡g ‡‡g gg‡ ‡ ‡‡Ї ЇC# #C #  # C˜Ю Ю Р?џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDwwwwDDwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDwwwwDDwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDwwwwDDwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDwwwwDDwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDwwwwwwwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDwwwwwwwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDwwwwwwwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDwwwwwwwwwwˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDDDwwwwwwDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDDDwwwwwwDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDDDwwwwwwDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwwwwwDDDDwwwwwwDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDwwDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDwwDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDwwDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDwwDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDwwDDwwDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆDDDDDDDDDDDDDDDDDDDDˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџу6-- title: Klondike -- author: yuki1262 -- desc: My first TIC-80 game. -- script: lua --Sprite ID HEART=256 SPADE=272 DIAMOND=288 CLOVER=304 FRONT=320 BACK=322 MESH=324 SELECTED=326 CURSOR=328 --Key map UP=0 DOWN=1 LEFT=2 RIGHT=3 A=4 B=5 X=6 Y=7 SCR_WIDTH=240 SCR_HEIGHT=136 CARD_WIDTH=16 CLM_WIDTH=CARD_WIDTH+2 EDGE=5 FIELD_WIDTH=CLM_WIDTH*7-2 FIELD_X=(SCR_WIDTH-FIELD_WIDTH)/2 FIELD_HEIGHT=SCR_HEIGHT-(EDGE*2) FIELD_Y=(SCR_HEIGHT-FIELD_HEIGHT)/2 TABLEAU_Y=FIELD_Y+25 STOCK_Y=FIELD_Y+2 --SW FFFF --TTTTTTT STOCK=1 --Yamafuda WASTE_PILE=2 --Mekutta Yamafuda FOUNDATION=4 --Kumifuda(4~7) TABLEAU=8 --Bafuda(8~14) RED=1 BLACK=2 field={} --field[STOCK~TABLEAU][1(back)~#(front)]["suit"or"num"or"isFaceUp"or"color"] current={i=nil,j=nil} --Current cursor(Arrow Cursor) selected={i=nil,j=nil} --Selected cursor(Dotted Line) startSec=nil winFlag=false winSec=nil lastSortFlag=false function dealCard() --Generate cards. for i=STOCK,TABLEAU+6 do field[i]={} end --Cards create to the stock. for s=HEART,CLOVER,16 do local c; if s==HEART or s==DIAMOND then c=RED else c=BLACK end for n=1,13 do table.insert(field[STOCK],{ suit=s, num=n, isFaceUp=false, color=c }) end end --Shuffle stock pile. for i=52,2,-1 do local j = math.random(i) field[STOCK][i],field[STOCK][j]=field[STOCK][j],field[STOCK][i] end --Deal cards to stock to the tableau. for i=0,6 do for j=i,6 do table.insert(field[TABLEAU+j],field[STOCK][#field[STOCK]]) table.remove(field[STOCK]) if j==i then field[TABLEAU+j][#field[TABLEAU+j]]["isFaceUp"]=true end end end --At first, stock kara 1 mai mekutte, waste pile ni oku. table.insert(field[WASTE_PILE],field[STOCK][#field[STOCK]]) table.remove(field[STOCK]) field[WASTE_PILE][#field[WASTE_PILE]]["isFaceUp"]=true end --Mannaka no blue no area no subete wo byouga. function drawField() --Draw a blue play field's background. rect(FIELD_X,FIELD_Y,FIELD_WIDTH,FIELD_HEIGHT,0) --Draw the stock cards. if #field[STOCK] >= 1 then spr(BACK,FIELD_X+CLM_WIDTH*0,STOCK_Y,0,1,0,0,2,2) else spr(MESH,FIELD_X+CLM_WIDTH*0,STOCK_Y,0,1,0,0,2,2) end --Draw the waste pile cards. if #field[WASTE_PILE] >= 1 then spr(FRONT,FIELD_X+CLM_WIDTH*1,STOCK_Y,0,1,0,0,2,2) spr(field[WASTE_PILE][#field[WASTE_PILE]]["suit"], FIELD_X+CLM_WIDTH*1+8,STOCK_Y,0) spr(field[WASTE_PILE][#field[WASTE_PILE]]["suit"]+field[WASTE_PILE][#field[WASTE_PILE]]["num"], FIELD_X+CLM_WIDTH*1,STOCK_Y,0) end --Draw the foundation cards. for i=0,3 do if #field[FOUNDATION+i]==0 then spr(MESH,FIELD_X+CLM_WIDTH*(i+3),STOCK_Y,0,1,0,0,2,2) else spr(FRONT,FIELD_X+CLM_WIDTH*(i+3),STOCK_Y,0,1,0,0,2,2) spr(field[FOUNDATION+i][#field[FOUNDATION+i]]["suit"],FIELD_X+CLM_WIDTH*(i+3)+8,STOCK_Y,0) spr(field[FOUNDATION+i][#field[FOUNDATION+i]]["suit"]+field[FOUNDATION+i][#field[FOUNDATION+i]]["num"],FIELD_X+CLM_WIDTH*(i+3),STOCK_Y,0) end end --Draw the tableau cards and a selected cursor for i=0,6 do for j=1,#field[TABLEAU+i] do if field[TABLEAU+i][j]["isFaceUp"]==true then spr(FRONT,FIELD_X+CLM_WIDTH*i,TABLEAU_Y+(j-1)*6,0,1,0,0,2,2) spr(field[TABLEAU+i][j]["suit"],FIELD_X+CLM_WIDTH*i+8,TABLEAU_Y+(j-1)*6,0) spr(field[TABLEAU+i][j]["suit"]+field[TABLEAU+i][j]["num"],FIELD_X+CLM_WIDTH*i,TABLEAU_Y+(j-1)*6,0) else spr(BACK,FIELD_X+CLM_WIDTH*i,TABLEAU_Y+(j-1)*6,0,1,0,0,2,2) end end end if lastSortFlag==false and winFlag==false then --Draw a selected cursor. if selected["i"]~=nil and selected["j"]~=nil then if selected["i"]>=1 and selected["i"]<=7 then spr(SELECTED,FIELD_X+CLM_WIDTH*(selected["i"]-1),STOCK_Y,0,1,0,0,2,2) --Fukusuu sentaku ni taiou. elseif selected["i"]>=8 and selected["i"]<=14 then for j=selected["j"],#field[selected["i"]] do spr(SELECTED,FIELD_X+CLM_WIDTH*(selected["i"]-8),TABLEAU_Y+(j-1)*6,0,1,0,0,2,2) end end end --Draw a cursor. if current["i"]>=1 and current["i"]<=7 then spr(CURSOR,FIELD_X+CLM_WIDTH*(current["i"]-1),STOCK_Y,0,1,0,0,3,1) elseif current["j"]==0 then spr(CURSOR,FIELD_X+CLM_WIDTH*(current["i"]-8),TABLEAU_Y+6,0,1,0,0,3,1) else spr(CURSOR,FIELD_X+CLM_WIDTH*(current["i"]-8),TABLEAU_Y+(current["j"]-1)*6,0,1,0,0,3,1) end end end function getButton() --Input key to move cursor(loop idou wa shinai). if btnp(UP,30,6) then if current["i"]>=TABLEAU+0 then --Tableau no saijoudan nara, up key de joudan e idou. if current["j"]<=1 then current["i"]=current["i"]-7 --Joudan e idou. current["j"]=#field[current["i"]] --Joudan wa kanarazu ichiban ue wo sentaku. --Soreigai wa, hitotsu ue no card e idou. else current["j"]=current["j"]-1 end end elseif btnp(DOWN,30,6) then --Joudan ni irunara, down key de tableau saijoudan card e idou. if current["i"]<=FOUNDATION+3 then current["i"]=current["i"]+7 current["j"]=1 elseif current["i"]>=TABLEAU+0 then --Ichiban shita de nakereba, retsunai de ikko shita e idou. if current["j"]<#field[current["i"]] then current["j"]=current["j"]+1 end end elseif btnp(LEFT,30,6) then --Joudan wa futsuu ni hidari e idou. if current["i"]>=WASTE_PILE and current["i"]<=FOUNDATION+3 then current["i"]=current["i"]-1 current["j"]=#field[current["i"]] --Tableau wa, dekireba, yoko e suiheiidou. Murinara, yoko no ichiban shita e idou. elseif current["i"]>=TABLEAU+1 and current["i"]<=TABLEAU+6 then current["i"]=current["i"]-1 if #field[current["i"]] < current["j"] then current["j"]=#field[current["i"]] end if current["j"]==0 then current["j"]=1 end end elseif btnp(RIGHT,30,6) then if current["i"]>=STOCK and current["i"]<=FOUNDATION+2 then current["i"]=current["i"]+1 current["j"]=#field[current["i"]] elseif current["i"]>=TABLEAU+0 and current["i"]<=TABLEAU+5 then current["i"]=current["i"]+1 if #field[current["i"]] < current["j"] then current["j"]=#field[current["i"]] end if current["j"]==0 then current["j"]=1 end end --Agari chokuzen no test mode. --[[elseif btnp(B,30,6) then field={} for i=STOCK,TABLEAU+6 do field[i]={} end table.insert(field[WASTE_PILE],{ suit=DIAMOND, num=13, isFaceUp=true, color=RED }) for n=1,10 do table.insert(field[FOUNDATION+0],{ suit=HEART, num=n, isFaceUp=true, color=RED }) end for n=1,11 do table.insert(field[FOUNDATION+1],{ suit=DIAMOND, num=n, isFaceUp=true, color=RED }) end for n=1,13 do table.insert(field[FOUNDATION+2],{ suit=SPADE, num=n, isFaceUp=true, color=BLACK }) end for n=1,10 do table.insert(field[FOUNDATION+3],{ suit=CLOVER, num=n, isFaceUp=true, color=BLACK }) end table.insert(field[TABLEAU+1],{ suit=HEART, num=13, isFaceUp=true, color=RED }) table.insert(field[TABLEAU+1],{ suit=CLOVER, num=12, isFaceUp=true, color=BLACK }) table.insert(field[TABLEAU+1],{ suit=HEART, num=11, isFaceUp=true, color=RED }) table.insert(field[TABLEAU+4],{ suit=HEART, num=12, isFaceUp=true, color=RED }) table.insert(field[TABLEAU+6],{ suit=CLOVER, num=13, isFaceUp=true, color=BLACK }) table.insert(field[TABLEAU+6],{ suit=DIAMOND, num=12, isFaceUp=true, color=RED }) table.insert(field[TABLEAU+6],{ suit=CLOVER, num=11, isFaceUp=true, color=BLOCK })]]-- elseif btnp(A,30,6) then --Misentaku ji no shori. if selected["i"]==nil and selected["i"]==nil then --Stock wo mekuru. if current["i"]==STOCK then if #field[current["i"]]>=1 then table.insert(field[WASTE_PILE],field[STOCK][#field[STOCK]]) table.remove(field[STOCK]) field[WASTE_PILE][#field[WASTE_PILE]]["isFaceUp"]=true else passThroughDeck() --Stock ga kara nara, saibunpai. end --Stock igai de omotemen nara, sentaku suru. elseif #field[current["i"]]>=1 then if field[current["i"]][current["j"]]["isFaceUp"]==true then selected["i"]=current["i"] selected["j"]=current["j"] end end --Sentaku shita card ga aru baai. elseif selected["i"]~=nil and selected["i"]~=nil then --Foundation e no idou ishori. (1 mai zutsu shika idou dekinai.) if current["i"]>=FOUNDATION+0 and current["i"]<=FOUNDATION+3 and selected["j"]==#field[selected["i"]] then --Mada 1 mai mo nainara, Ace nomi idou kanou. if #field[current["i"]]==0 then if field[selected["i"]][selected["j"]]["num"]==1 then moveCard(selected,current) current["j"]=current["j"]+1 end --1 zutsu ookii card wo tsundeiku. else if field[selected["i"]][selected["j"]]["num"] ==field[current["i"]][current["j"]]["num"]+1 and field[selected["i"]][selected["j"]]["suit"] ==field[current["i"]][current["j"]]["suit"] then moveCard(selected,current) current["j"]=current["j"]+1 end end --Tableau e no idou shori. elseif current["i"]>=TABLEAU+0 and current["i"]<=TABLEAU+6 then --Kara no tableau e wa, king nomi idou kanou. if #field[current["i"]]==0 then if field[selected["i"]][selected["j"]]["num"]==13 then moveCard(selected,current) end --Soreigai wa, 1 zutsu chiisai card wo, kuro aka kougo ni tsundeiku. else if field[selected["i"]][selected["j"]]["color"] ~=field[current["i"]][current["j"]]["color"] and field[selected["i"]][selected["j"]]["num"] ==field[current["i"]][current["j"]]["num"]-1 and current["j"]==#field[current["i"]] then moveCard(selected,current) end end end --Sentaku ji ni saido A button wo oshitara, kanarazu sentaku kaijo. selected["i"]=nil selected["j"]=nil end end end --Tableau no uramen no card ga, saizenretsu ni nattara, jidou de omote ni suru. function autoOpenCard() for i=8,14 do if #field[i]>=1 then if field[i][#field[i]]["isFaceUp"]==false then field[i][#field[i]]["isFaceUp"]=true break end end end end --from[i][j] ~ from[i][last] wo, to[i][last] e, idou saseru. --Argument wa cursor format. function moveCard(from,to) while #field[from["i"]] >= from["j"] do table.insert(field[to["i"]],field[from["i"]][from["j"]]) --table.insert(tbl,[pos],value) table.remove(field[from["i"]],from["j"]) --table.remove(tbl,[pos]) end end --Waste pile kara, stock e no, saibunpai shori. function passThroughDeck() while #field[WASTE_PILE]>=1 do table.insert(field[STOCK],field[WASTE_PILE][#field[WASTE_PILE]]) table.remove(field[WASTE_PILE]) field[STOCK][#field[STOCK]]["isFaceUp"]=false end end function drawText() local elapsedSec=nil --Keika jikan local sec=nil local min=nil local hour=nil if winFlag==true then elapsedSec=winSec --Katta jiten de, keisoku teishi. local str="Congratulations!" local strWidth=print(str,0,-6) print(str,(SCR_WIDTH-strWidth)//2,SCR_HEIGHT//2,4,false) else elapsedSec=(time()/1000)-startSec end sec=math.floor(elapsedSec%60) min=math.floor(elapsedSec/60)%60 hour=math.floor(elapsedSec/(60*60)) print("Time",EDGE,SCR_HEIGHT-EDGE-(8*2),4,false) print(string.format("%01d:%02d:%02d",hour,min,sec), EDGE,SCR_HEIGHT-EDGE-(8*1),4,true) end --Stock kara subete Tableau e okuri, katsu, subete no card ga omote nara, --tanchou sagyou nanode, jidou de Foundation ni subete okuru. --Frame goto ni jikkou shite, ittei kankaku de table dake koushin suru. oldTime=nil function autoLastSort() --Tableau ni subete no card ga ari, katsu, subete omote nara, --flag wo tatete, jidou sort shori ni hairu. if lastSortFlag==false then if winFlag==true then return false end if #field[STOCK]>=1 then return false end if #field[WASTE_PILE]>=1 then return false end for i=TABLEAU+0,TABLEAU+6 do for j=1,#field[i] do if field[i][j]["isFaceUp"]==false then return false end end end oldTime=time() lastSortFlag=true end --flag ga tatteireba, --Zenkai kara 250 msec keika surutabi, 1 mai dake idou saseru. local nowTime=time() if lastSortFlag==true and nowTime-oldTime>250 then local from={i=nil,j=nil} local to={i=nil,j=nil} for fnd=FOUNDATION+0,FOUNDATION+3 do --Agari check. if #field[FOUNDATION+0]==13 and #field[FOUNDATION+1]==13 and #field[FOUNDATION+2]==13 and #field[FOUNDATION+3]==13 then winFlag=true --winFlag wo tateru. winSec=(time()/1000)-startSec return false --Sort wa kanryoyu. else for tab=TABLEAU+0,TABLEAU+6 do if #field[tab]>=1 then if #field[fnd]==0 then --Ace no idou. if field[tab][#field[tab]]["num"]==1 then from["i"]=tab from["j"]=#field[tab] to["i"]=fnd to["j"]=0 --hontou wa iranai moveCard(from,to) oldTime=nowTime return true end else if field[tab][#field[tab]]["suit"]==field[fnd][#field[fnd]]["suit"] and field[tab][#field[tab]]["num"]==field[fnd][#field[fnd]]["num"]+1 then from["i"]=tab from["j"]=#field[tab] to["i"]=fnd to["j"]=#field[fnd]+1 moveCard(from,to) oldTime=nowTime return true end end end end end end end return true end --init() wa jimae de tsukuru. function init() dealCard() current["i"]=TABLEAU+0 current["j"]=1 startSec=time()/1000 end init() function TIC() cls(15) --Black color drawField() --[[print(string.format("slc[\"i\"]=%s",tostring(selected["i"])),EDGE,EDGE+(8*0),4,false) print(string.format("slc[\"j\"]=%s",tostring(selected["j"])),EDGE,EDGE+(8*1),4,false) print(string.format("crt[\"i\"]=%s",tostring(current["j"])),EDGE,EDGE+(8*2),4,false) print(string.format("crt[\"j\"]=%s",tostring(current["j"])),EDGE,EDGE+(8*3),4,false) print(string.format("wFlag=%s",tostring(winFlag)),EDGE,EDGE+(8*4),4,false) print(string.format("sFlag=%s",tostring(lastSortFlag)),EDGE,EDGE+(8*5),4,false)]]-- if winFlag==false then lastSortFlag=autoLastSort() if lastSortFlag==false then getButton() autoOpenCard() end end drawText() end