diff --git a/.gitmodules b/.gitmodules index 8996cfa..8c6f712 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "Cores/GBADeltaCore"] path = Cores/GBADeltaCore url = git@github.com:rileytestut/GBADeltaCore.git +[submodule "Cores/GBCDeltaCore"] + path = Cores/GBCDeltaCore + url = git@github.com:rileytestut/GBCDeltaCore.git diff --git a/Artwork/Icon.ai b/Artwork/Icon.ai new file mode 100644 index 0000000..0b4021b --- /dev/null +++ b/Artwork/Icon.ai @@ -0,0 +1,5168 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 115 0 R 247 0 R 366 0 R 513 0 R 657 0 R 807 0 R 944 0 R 1075 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Web + + + Adobe Illustrator CC 2015 (Macintosh) + 2016-12-21T18:09:39-06:00 + 2017-04-11T19:10:37-07:00 + 2017-04-11T19:10:37-07:00 + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8Ai3LPWXbO5Yq7liruWKu5 Yq7liruWKu5Yq7liruWKu5Yq7liruWKq9i3+m2//ABkT/iQyGT6T7lL7Lzyl1L461t/9zV//AMxM 3/Jw56np/wC7j7h9ztY8kFzy5LueKu54q7nirueKu54q7nirueKu54q7niqtYv8A6bb/APGRP+JD IZPpPuUvqr8xm4+Q9fbwsZz/AMIc827N/wAYh/WDrMf1B8z+QtBTzLrbW91cfU9KtIZLvU74kAQw Rjdqt8Iq1Bv8+2d12hrvAx8QFyJoDvLnZMnCENrem3Xl7zfNot0ay2lyqq/TnGxDRyD2dCDk8GsG bDxjqExnYt7T/wA5HPKPLWkRxKXlm1BY40UVZmaJwAAO5Oct7OzEcsif5v6Q4unNEvMPPXle10PS Ee0E31/SGitvMQlDBTJcpzinhr1h9RZIeQ2LL75utF2pLJkIl9Mt4/DofPkfi3QzEndiPLN63u5Y q7liruWKu5Yq7liruWKu5Yq7liruWKu5Yq7liruWKq9i3+m2/wDxkT/iQyGT6T7lL7Qzyp1T401x v9zWof8AMTN/ycOepaf+7j7h9ztI8kFyy20u5Y2ruWNq7ljau5Y2ruWNq7ljau5Y2ruWNq7ljaq9 i3+m2/8AxkT/AIkMhk+k+5BfVP5otx/LrzG3hp9wf+EOeb9n/wB/D+sHWw5h80eVfPP5cWHka/8A L2tR60t5q0yyahd6YloAYoTWGEPPLUpX4m+AbmnTOl1uLPLMJx4TGPK7+Jb52TaV69560vzBY+WQ 6XA8xaVSxubx1QRXFoj/AOjsxDs4lQbMOJr/ADZPBililOvolv7j1SNrfVfn/wAg2fnOxs7W5vrn T2sbgXcFxZsqyCRVKijMGpTlXbOW0mrOAkgA2K3ceMqYNd/843aZeFzd+atbuPUQRSetOknKMNzC NyU1UN8VPHMuPaxjyhAfBl4jwTlnoDsXcsVdyxV3LFXcsVdyxVMNJ0LW9YeRNKsJ75oQDKII2k4h unLiDStMpzanHirjkI33sTIDmrap5U80aVa/W9S0q6s7YMEM00TonJugqRTfK8Wtw5DwxkCfeomD yKU8xmVbJ3LFXcsVdyxV3LFVexb/AE23/wCMqf8AEhkMn0n3IL7Vzyx1b4v11v8Ac3qH/MTN/wAn DnqGD+7j7g7OPJA8stZO5Yq7liruWKs6/K78tX86XF689w9pp9mqgzooYtM5+FBWg2UEn6PHNT2r 2p+WAAFyP3NOXLwp/wDmD+SCeXPLNxrWnX0t6bMq9zC6KtISaM68T+zUE+1cwNF2+cuQQnEAH72E NRZovJElDCoOdIJW5FruWFLuWKu5Yqr2Lf6bb/8AGVP+JDIZPpPuQX2ncW9vcwSW9xEk0EqlJYpF DoynqGU1BGeXAkGw6tKT5J8mHroGnH/o0g/5oy38zl/nS+ZTZcvkjyWrBl0DTQwNQRaQAgj/AGGP 5jJ/Ol8ytlOspQ7FXw9yz1R2juWKu5Yq7liruWKu5Yq+qPye8n/4c8oQGdOOpalS6vKj4l5D93Gf 9ROo8Sc4DtjWePmNfTHYfpLgZp8RZN5n0Cz8waBfaNd/3N7EY+dKlG6o490cBh8swMGY4piY5hrj Kjb4xvba90vVbvSdQT072yleCZe3JDSo9j1B7jPQ9LqRkiCOrsIyt3LMtm7liruWKu5Yqr2Lf6db /wDGVP8AiQyOT6T7kF9tZ5a6x8U683+5zUf+Ymb/AJOHPT8H93H3B2UeSB5Zal3LFXcsVXRJJNKk USl5ZGCRooqWZjQADxJwGQAsrb6//L7ypH5W8qWWlUH1kL6t84/auJKF9+4XZR7AZ5z2hqznzGfT p7nX5J8RtP7m3gubeW2uEEsEyNHLGwqrI4oykeBBzDBINhg+MfO3lq48n+b7/Q5eTW8T+pZSN+3b yfFG1e5p8Le4Od72drPExiXz97n452EsDgioO2bUFstvlhV3LFVewb/Trf8A4yp/xIZDJ9J9yl9u 55c6x2KuxV2KuxV8M8s9Tdm7liruWKu5Yq7lirOfyd8of4m84QCdOem6dS6vaj4W4n93Gf8AXfqP 5Qc1XbGs8HCa+qWw/SWrLOg+rc4FwXYq+d/+cmPJZtr6084WcdI7njaanxHSVR+5kP8ArIOB+S+O dF2JqueM+8ORhl0eNQXPIAMfkc6yGS3KBV+WWpdyxV3LFVewb/Trf/jKn/Ehkcn0n3IL7fzy51r4 k15v9zuo/wDMVN/ycbPTcH93H3B2MeSA5Zal3LFXcsVeqf8AOP8A5P8A0x5nbW7lK2OjUeOo2a6b +7H+wFX9jxzRdvazw8Xhj6p/d+3l82nPOhT6J1vWLHRdIvNWv39OzsYXnnbvxQVoPEnoB45xsIGU hEcy4gFsW/KT8xY/PXlg6jIiQahbzPDe2yGoTctERXejRkb+IOZGs03gzroWU40WKf8AOSHkk6p5 ai8yWkdb7Ra/WOI3e0c/F/yLb4vYcszex9VwZOA8pfeyxSo0+bILggeI7jOyhNzAUSJARUZkA2lv liqvYN/p1t/xlT/iQyOT6T7lL7jzy91rsVdirsVdir4U5Z6k7J3LFXcsVdyxV3LFX1h+TXk3/DXk 6A3CcNS1Kl1eVHxLyH7qM/6idR/MTnA9r6zxsxr6Y7Bwss7Ka/mT5yg8n+TtQ1tyDcRp6djE37dz J8MS07gH4m/yQcwtNhOSYiwiLLDP+cdvzBuPMvlaXTNTnM2saQ9GkkNXlt5STG5J6lTVD7AeOZfa Wm8OfEPpkyyRovRPNXl2y8x+Xr/RL0fuL6IxlqVKP1SQe6OAw+WYWHKccxIdGETRt8Rajp17o+q3 ek36eneWMrwTr25IaVHiD1B8M7vT5hOII5Fzom245+zH5HM2M+9latyy1LuWKq9g3+nW3/GVP+JD IT+k+5S+5M8wda+Htfb/AHO6l/zFTf8AJxs9Lwf3cfcHYR5IDllqXcsVXxJLNKkMSF5ZGCRooqWZ jQADxJwGQAsrb7I/LrylH5U8pWWk0H1oL6184/auJKGTfuF2UewGeea/VHPlM+nT3ODOXEbeSf8A OUfnr0raz8mWcn7y543mqcT0jU/uYj/rOOZHsvjmd2Rp7JmfgzxR6sB/Inzp/hbznBHcScNL1bja XlTRVZj+5lP+o5oT2UnNt2lo/Ew2Pqjv+tsyRsPrq5toLq3ltrhBLBOjRzRMKqyOOLKR4EHOQBIN hxXxL598qXHlDzhqGhyVMET+pZSt+3bSfFE1e5p8Lf5QOdxoNT4uMScyErCSpKVNR07jNiJU2Wrr IGFRlwNptE2Df6fbf8ZU/wCJDIz+kqX3RnmLrnYq7FXYq7FXwfyz1B2LuWKu5Yq7lirPPyZ8m/4n 85QCePnpmm0u72o+FuJ/dxn/AF36j+UHNX2vrPBwmvqlsGvLOg+tM4Nwnyp/zkt56/TXmyLy3Zyc rDQ6/WOJ2e8cfH/yKX4fY8s6LsrT8MeI85fc5GKO1sS/K7zfJ5P832OrVP1Mn0NQQftW8hAfbuV2 ce4za6zSeLiMevT3tko2H2tFLHLEksTB4pFDI6moZWFQQR2OcSRThvnX/nJ3ySba+tPONnH+6uuN pqnEdJVH7mQ/6yDgT/kr450HYuq54z7w34ZdHh6PUZ0wLkK0c9Nj08ctjNNq3LLLSiLBv9Ptv+Mq f8SGRn9JUvujPMXXPhnzA3+57Uv+Yqf/AJONnpWA+iPuDnjkgOeWWl3PG1er/wDOPPkz9M+aW1y6 jrYaLR46jZ7pv7of88xV/Y8fHNH27q/DxcA+qf3ft/W1Zp0KfSOt6xY6Lo95q1+/p2djC887d+KC tB4k9AO5zj4QMpADmXFAt8KeYfMF95m8yahr18f9Iv5mlK1qEXokY9kQBR8s7XSYRCIiOjlxFIeo pTM9m+w/yV88f4r8k20lxJz1TTqWeoVNWZkHwSn/AIyJQk/zcs4ntLS+DlIH0ncOHkjRYv8A85Le RzqvlmLzLZx8r/RK/WeI3ezc/F/yKb4vYcsv7I1PBk4Tyl97LFKjT5jSQEZ10Tbkr1kKmoyYNJtH 6bKGvran+/U2/wBkMnKVxK2+7880cB2KuxV2KuxV8Fcs9Pdg7liruWKu5Y2r63/JXyX/AIZ8mQG4 j4anqdLu9qKMvIfuoz/qJ1H8xOcJ2tq/GzGvpjsHDyyspv8AmV5zg8neTdQ1tyDcRp6VjE37dzJ8 MS07gH4m/wAkHMLTYfEmIsYiy+HRNPdXMt1cO0txO7STSsaszueTMT4knOzwwpygESCKUzMZvqf/ AJx188fpvymdDupOWoaHxiSp3e1b+6P+woU9gF8c5DtjS+Hk4hyl97i5Y0beiea/Llj5k8u3+h3o /wBHvomjLUqUfqkg90cBh8s1uHKccxIdGsGi+G9S02+0fVrzSb9PTvLGZ4J07ckNKjxB6g+Gdzp8 onEEci5kTajyzJZL45uOx6ZKMqW0dp7g31tT/fqf8SGTmfSfckvu7PM3XvhTzC3+5/Uv+Yqf/k42 ekYPoj7g5w5Jfyy1KpbxTXE8dvAhknmdY4o1FWZ2NFUDxJOCUgBZ5K+0vy68nweUfKVlo6UNwq+r fSj9u4kAMhr4D7K/5IGefa7VHPlM+nT3OFOVm3mX/OTWreZLrTbLypomnXl3FdEXepz20EsicEak MJZFZd3Bdh24r45ldlwiJGciB3MsY6vAIfJfnBV/44Wof9Ik/wDzRnTQ1GIfxR+YcgEIG7tbuzuH tryCS2uY6epBMrRutQCKqwBFQa5kRmJCwbCbZ9+Rfnn/AAv54gjuZOGlavxs72poqsx/cyn/AFHN Ceys2a7tXS+LisfVHcfpYZI2H17c20F1bS21xGJbedGjmiYVVkccWUjwIOccCQbDivh78wvKFz5N 84X+hyhjbxt6thK3+7LaQkxNXuQPhb/KBztdDqRlxiTlwlYSDlmfbJEac5XULYj/AH6n/Ehgkdir 78zztwnYq7FXYq7FXwLyz023PdyxtXcsbVn35K+S/wDFPnS3FxHz0zTaXd9UfC3E/u4j/rv1H8oO aztbV+DhNfVLYMMkqD68zhXDfKH/ADk158/TXmyLy1ZyctP0Ov1jidnvHHx/8il+D2PLOh7K0/DH iPOX3N+OLyaEcVzoYCm4KvLJ2llH5Z+dZPJ/nGy1irfU6+hqEa78raQgPt3K7OB4gZh6/TeNiMev T3sJxsPtiCeGeGOeFxJDKoeORTVWVhUMCOxGcORRouI+df8AnKHyMILm086WUdFnK2ercR+2B+4l PzUcCfZfHN92NqueM+8N+KXR4Or1GdKC3ruWStUVpkxW/tu49VNv9kMBlQK2++c86cF8HeYW/wBz +p/8xc//ACcbPR8H0R9wc0ckv5ZYl7B/zjh5K/S/meTzDdR8rDRaehUbPduPg/5Fr8XseOaPtzV8 GPwxzl937WrLKhT6hzkHGdirsVfPf/OUvkg+lZ+c7KPePjZ6rxH7JP7iU/JjwJ91Gb7sbVUTjPvD dil0fPAeozpLtvfZn5I+ev8AFvke2kuJOeq6bSz1CpqzMg/dyn/jIlCT/NyzjO0tN4WUgfSdw4s4 0WN/85L+RTrPlNPMVnHy1DQavNxG72b/AN6P+eZo/sOWXdlangycJ5S+9OOVF8rpJUZ1oLk2idPf /T7b/jKn/EhgnyKC/QLPPnDdirsVdirsVfAPLPTHPdyxV3LFX1/+SXkg+VvJcH1mP09V1Ol3fBhR l5D91Ee/wJ1HZic4btXV+NmNfTHYfrcTJKyz/NY1vPp/yB/KW4uZbqfQzLcTu0k0rXl8WZ3PJmJM /Uk5mx7QzR5S+wfqZ8ZaH5AflIP+lD/093v/AFWyz+VdR/O+wfqXxJPBPz4/Lm08l+YrabSYDDoO px1to+TyCKaIBZY+TlmNahxyPc+Gb3szXHLCpH1BuxzsPNOVRm1tsfVH/ONvnn9NeVH8v3cnLUND osPI7vaP/dn/AJ5mqew45yfbGm4MnGOUvvcfLGjb03zP5esfMfl+/wBDvxW1v4Wic0qVJ3R1r+0j AMPcZrMWQwkJDmGsGi+E9X0m/wBD1m90bUE4XlhM8Ew7Eoacl8VYbg9xncafMJxEhyLlg2h+WZFp RGnt/p9t/wAZU/4kMjPkVL7/AM89cJ8E+Ym/52DU/wDmLn/5ONnouH6I+4OYOSX8ssSyjQPzX/MH yzpY0zQNUFlZB2l9IW1rIS7/AGmLSROxO3c5r9V2fiyy4pCz7ywlEFFn/nIP85a/8pD/ANOdj/1Q zB/krD/N+0/rY+GHf9DB/nN/1MP/AE52P/VDH+SsP837T+tfDDv+hg/zm/6mH/pzsf8Aqhj/ACVh /m/af1r4YQer/nZ+aes6Zc6VqmtC60+8jMVzA1pZgMh91hDA+BBqO2Sx9m4oyBA3HmVEAw1DQZs4 tif+VfPnm3yjNcT+XNQNjJdqqXH7uKVXCElarMki1FTQ0rlGp0sMoHGLpjKIKeT/AJ+fm/cQyQT6 8JYJVKSxtZWJVlYUZSDBuCMwh2XhB5faf1seAMDjqBQ5s4CmaL09v9Ptv+Mqf8SGGfIpfoPnn7hu xV2KuxV2Kvz85Z6U5ruWKsw/Kiy8uXXnSzm8x31vY6TYn63Mbp1RZWjI9OIcutXIJH8oOYPaWScc JEATI7bMZk1s+pz+bX5ZDr5n00f9HEf9c4w6PL/NPycbhLX/ACtz8sf+po03/pJj/rg/K5f5pXhL v+Vuflj/ANTRpv8A0kx/1x/K5f5pXhLv+Vuflj/1NGm/9JMf9cfyuX+aV4Sw382/Mf5Xec/JF9pU fmbTDqEQ+taYxuY9rmIEqtSdvUBKH/WzK0cMuLIJcJrqyiCC+TopKjOtgXItlf5a+dJvJ/nKw1pS fqqt6OoRr+3bSUEgp3K7Ov8AlAZRrdP42Mx69PexkLD65/5W1+WQ6+Z9OHzuE/rnIHR5R/CXH4S+ fP8AnI6XyTq2rWPmby5rFlfXVwotdTt7aVHcmMVhmKqSfsgox9lzd9lHJEGEgQOjbjsPIVeozfAt qJ09v9Ptv+Mqf8SGCfIq/QTPPnDfAnmNv+dh1T/mLn/5OtnoeE+iPuDljkl3LLLS7ljarHAO465G QtVImhocrQ7liruWKu54q7niruWKu5YqiNPb/T7b/jKn/EhkZ8ih+hmcA4rsVdirsVdir89+Wek2 5juWNq0TUUwFULLb9x0zGniRSl6K5X4au9FcfDV3orj4at+iuPhqqIOOWRFKv5ZNKk6BsrlC0NLE AciIKqg0GWhUTp7f6fbf8ZU/4kMEzsVfoRnn7iPhfzB5P84Sa9qTpoeoOjXU7Ky2s5BBkYgghM7v DqcfAPVHkOockEJf/gzzn/1YdR/6RJ/+aMs/M4v50fmE8Qd/gzzn/wBWHUf+kSf/AJox/M4v50fm F4g7/BnnP/qw6j/0iT/80Y/mcX86PzC8QabyT5yb/pQ6jXx+qT/80YDqMR/ij8wthSPkrzmDQ6Dq P/SJP/zRlZ1GP+dH5hFhr/BfnP8A6sOo/wDSJP8A80YPzGP+dH5hbDv8F+c/+rDqP/SJP/zRj+Yx /wA6PzC2Hf4L85/9WHUf+kSf/mjH8xj/AJ0fmFsO/wAF+c/+rDqP/SJP/wA0Y/mMf86PzC2Hf4L8 5/8AVh1H/pEn/wCaMfzGP+dH5hbCvYeTfOK31szaDqIUSoSTaT0A5D/IwS1GOj6h8wth98Zw7jOx V2KuxV2Kvzy5Z6O5juWKu5Yq7liqm69x92QlFCnyyCHcsCu5Yq7liruWKu5Yq7liruWKojT2/wBP tv8AjKn/ABIYJ8ir9Dc4BxXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq/Pb6hqP/LLN /wAA39M9D4x3uXbvqGo/8ss3/AN/THjHetu+oaj/AMss3/AN/THjHetu+oaj/wAss3/AN/THjHet u+oaj/yyzf8AAN/THjHetrH0zUDuLWav/GNv6ZGRieqFI6fqANDay1/1G/plfGO9XfUNQ/5Zpf8A gG/pjxjvW3fUNQ/5Zpf+Ab+mPGO9bd9Q1D/lml/4Bv6Y8Y71t31DUP8Alml/4Bv6Y8Y71t31DUP+ WaX/AIBv6Y8Y71t31DUP+WaX/gG/pjxjvW0Rp9jf/X7b/Rpf71P2G/mHtkZTFHdbfoTnCOK7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn9R/5j9+FXeo/8x+/FXeo/8x+/FXeo /wDMfvxV3qP/ADH78Vd6j/zH78Vd6j/zH78Vd6j/AMx+/FXeo/8AMfvxV3qP/MfvxV3qP/MfvxV3 qP8AzH78Vd6j/wAx+/FXLI/IfEevjiqcYFSWS4cOw5Hqe+FW45JpG4pVj1oDiqz6w/8AMfvxVG6b KzyOCa0GBVLUZ2S5KgkbDFVJmnW1NyWIjB33NadK/KuFVXTZzJcU5VHEn9WBW7uWT666qHZY05sq bsR4AeJxV2lXJkuLiIty4BWVuzI+6sPmMVTPFXYq7FXYq7FXYq7FXYqkVcKurirq4q6uKurirq4q 6uKurirq4q6uKurirq4q6uKtqfiHzxVPMCsZlk/ev/rH9eFCLF3HplgLuUcpJmARO/Gu/wCG+BKD 1h/ql0lzH8VndjmCOzHc0+fXFUfoUqyPIymqlQQfpxVR1VgdTEZYIGC1ZiAAPE1woUry8W31CKRp 4ZNNdRbNEjhmCsN2YfPAlS8vu0OtTWQkEsSKxjcEEcaim49jhVPLzR9OvHL3MPqMaCvJh0+RGBW7 DSNPsC7WkXpmQAP8TNWnT7ROKovFXYq7FXYq7FXYq7FXYqx+uFXVxV1cVdXFXVxV1cVbFT03xVx5 DqCMVarirq4q6uKurirq4q2p+IfPFU/wKxIPCbwiZxHFzPNz2AO+FCJ1V9B1AoW1ER+mpWNFpxB8 emKUvs9QtLnRZtPu5lSWE8rV2Ox6kAH8PkcUK/kqRmubla7cAae9cSlO7/Q4ryczNKy1ABUAEbYF Sx/I1ozErcuoPYKMNqi9I8sw6bdm4SdpCVKcWAA3p4fLAqdYq7FXYq7FXYq7FXYq7FXYq7FWOVwq 6uKurirq4q6uKuriqcabB6cHM/ak3+jtgVVu7cXFu8VeJYfC3gw6HFWNwXRZ2hlHCdCVZfcdcKq9 cVdXFXVxV1cVbU/EPnirIsCsdl8t3jyOwljoxJA+LuflhtFICfyTeM3KKaJa9QeVPo2xtVP/AANq X/LRD/w3/NOKpv5c8v3WlzzSTSI4kUKAlexr3AwJT7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWM1 wq6uKurirq4q6uKoiygM9wqH7I3f5DFU+wK7FWMeZ7IxXCXkeyybOR2cdD9IxVC2d+JKJJtJ2Pjh VF1xV1cVdXFVyn4h88VZJgV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsXrhQ6uKuri rq4q6uKp5pdv6VvzYfHJufl2wJVb+7S0tJLhv2B8I8WOwH34qg/L+pNe2hEhrPEaOfEHdTiqMv7R Lu0kt2/bHwnwYbg/firAZEeKRo3HF0JVh4EYUI+zv+VI5T8X7LHv88VR1cVdXFW0PxD5jFWT4Eux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVilcKHVxV1cVdXFURYW/1i5VD9gfE/yGKsjw JYp5s1H1J1s0PwRfFJ7uRsPoGFUv0TUPqV+kjGkT/BL/AKp7/R1xVneBWK+a9P8ATmW9QfBL8Mns wGx+kYVY/XFCOs7+lI5Tt+y5/jiqYVxVch+NfmMVZVgS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FWI1wodXFXVxV1cVZBpFr6NsHYfHL8R+XbAlW1C8Szs5bh/2B8I8WOwH34q89lleWRp HPJ3JZj4k7nChbXFWaeWdR+tWAic1mt6KfEr+yf4YEpjfWiXdpLbv0cUB8D1B+g4q89mjeGV4pBR 0JVh7jbCqyuKEZaXxjpHIap2PhiqZxsCykGoJFDirLcCXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYqw6uFDq4q6uKorTbX6zdKh/u1+J/kO304qyfAliPm7UhLcLZRn4Ifik93I2H0DCrHq 4odXFUfomo/UdQjlJ/dN8Ev+qe/0dcVegAgio3BwJYn5v0/05kvUHwy/BL/rAbH6RhVjlcUOriqL sb1opFRt4yR9G+KvRMCXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwuuFDq4q6uKsl0 a09C0DsP3kvxH5dhgSj8VSaTynpkkjSO8rO5LMSw3J3PbFVv+D9J/ml/4If0xVjvmDSRpt2qx1Nv ItY2bc1GzA4UJXXFWceVtS+t6eIXNZraiHxK/sn+GBKY39nHeWcts/SQUB8D1B+g4q85mjkhleKQ cXjYqw9xthQsriq6I/vU/wBYfrxV6fgS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWE VwodXFUTp0Mc12iysFiX4nLEAUHbfxxVlP1u0/39H/wQ/rgS763af7+j/wCCH9cVd9btP9/R/wDB D+uKu+t2n+/o/wDgh/XFUt8wQWt/pzoksZmj+OH4hWo7de4xVgVcKEw0LUjYajHKTSJvgm/1T3+j rirP/rdp/v6P/gh/XAliPm+1gFwl7A6sJfhlCkH4gNjt4jChj1cVXRH96n+sP14q9SwJdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirBa4UOrirTqrqVYVU9RiqWXVo0XxLvH+I+eKoauKur irq4q6uKurirq4q6uKurirq4quiP71P9YfrxV6rgS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FWBVwodXFXVxVxIIoemKoC6s6VeIbd18PliqCrirq4q6uKurirq4q6uKurirq4qviP71P9 YfrxV6tgS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXn9ckh1cVdXFXVxV1cVQl1Zh6 vHs/cdjgVLzUGh2I6jCrVcVdXFXVxV1cVdXFXVxVfEf3qf6w/XgV6zgS7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FX/2Q== + + + + proof:pdf + uuid:65E6390686CF11DBA6E2D887CEACB407 + xmp.did:41c7e2df-4b67-40a5-88c9-3869432950d7 + uuid:1ed0ff29-a609-6045-85e0-a5d7e6ae6a96 + + uuid:1abccb90-0c26-4942-b156-fd2eb962e3e1 + xmp.did:58fdc1b8-1448-3a44-9e20-282d8ec1cf95 + uuid:65E6390686CF11DBA6E2D887CEACB407 + proof:pdf + + + + + saved + xmp.iid:41c7e2df-4b67-40a5-88c9-3869432950d7 + 2016-12-21T18:09:39-06:00 + Adobe Illustrator CC 2015 (Macintosh) + / + + + + Web + Document + 1 + True + False + + 100.000000 + 100.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 G=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 G=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 G=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Grays + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 G=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 G=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 G=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 G=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + + + + Web Color Group + 1 + + + + R=63 G=169 B=245 + RGB + PROCESS + 63 + 169 + 245 + + + R=122 G=201 B=67 + RGB + PROCESS + 122 + 201 + 67 + + + R=255 G=147 B=30 + RGB + PROCESS + 255 + 147 + 30 + + + R=255 G=29 B=37 + RGB + PROCESS + 255 + 29 + 37 + + + R=255 G=123 B=172 + RGB + PROCESS + 255 + 123 + 172 + + + R=189 G=204 B=212 + RGB + PROCESS + 189 + 204 + 212 + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1200.0 1200.0]/Type/Page>> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1024.0 1024.0]/Type/Page>> endobj 9 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 180.0 180.0]/Type/Page>> endobj 10 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 120.0 120.0]/Type/Page>> endobj 117 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 1200.0 1200.0]/Type/Page>> endobj 368 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 369 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 200.0 200.0]/Type/Page>> endobj 370 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/TrimBox[0.0 0.0 100.0 100.0]/Type/Page>> endobj 1109 0 obj <>stream +H\j@ EH8i7 %MR/Af2vպ]I PY߉t{d8M%%\ҏ:4`sĎvMzEý/ י~S#+zxϡhH|J32|L?@ +q܄vLr* kEl7[J endstream endobj 1110 0 obj <> endobj 1111 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 100 0 cm +0 0 m +-54.889 0 l +-81.35 22.395 l +-52.685 79.499 l +-45.353 79.499 l +0 37.945 l +h +f +Q + endstream endobj 1113 0 obj <> endobj 1081 0 obj <> endobj 1080 0 obj [/ICCBased 1114 0 R] endobj 1114 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 1101 0 obj <> endobj 1115 0 obj <> endobj 1116 0 obj <> endobj 1075 0 obj <> endobj 1117 0 obj [/View/Design] endobj 1118 0 obj <>>> endobj 1082 0 obj <> endobj 1079 0 obj <> endobj 1119 0 obj <> endobj 1120 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 21.0.0 %%For: (Caroline) () %%Title: (icon.ai) %%CreationDate: 4/11/17 7:10 PM %%Canvassize: 16383 %%BoundingBox: 1363 -2585 4116 1 %%HiResBoundingBox: 1363.00010267595 -2584.00013417984 4115.99999684961 0.000000000001819 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 223 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 3285 -1484 3385 -1384 %AI3_TemplateBox: 625.5 -625.5 625.5 -625.5 %AI3_TileBox: 3047 -1790 3623 -1056 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: 454 82 0.25 1428 847 18 0 0 29 43 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: 454 82 0.25 1428 847 18 0 0 29 43 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %%PageOrigin:225 -925 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 1121 0 obj <>stream +%%BoundingBox: 1363 -2585 4116 1 %%HiResBoundingBox: 1363.00010267595 -2584.00013417984 4115.99999684961 0.000000000001819 %AI7_Thumbnail: 128 120 8 %%BeginData: 18538 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45794F734E794F734E794F734E794F734E794F734E794F734E794F73 %4E794F734E794F734E794F734E794F734E794F734E794F734E794F7379FD %04FFA34F734F794F734F794F734F794F734F794F734F794F734F794F734F %794F734F794F734F794F734F794F734F794F7379FFFFFF79734F734E734F %7379FFFFA34E734F734E4E734E734E734E734E734E734E734E734E734E73 %4E734E734E734E734E734E734E734E734E734E734E734E734E734E734E73 %4E734E734E79FD04FF78734E734E734E734E734E734E734E734E734E734E %734E734E734E734E734E734E734E734E734E734E734E734E734E79FFFFFF %7F48734E794E4F4E79FFFF784878A94E4E734E734F734E734F734E734F73 %4E734F734E734F734E734F734E734F734E734F734E734F734E734F734E73 %4F734E734F734E734F734E7379FD04FF794E734F734E734F734E734F734E %734F734E734F734E734F734E734F734E734F734E734F734E734F734E734F %734E7379FFFFFF784E4879FFA3484F72FFFF7F24A3A878484E4F4E734E4F %4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E73 %4E4F4E734E4F4E734E4F4E734E4F4E734E4F4879FD04FF784F4E734E4F4E %734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E %4F4E734E4F4E734E4F4879FFFFFF7F24487EFFA84E2378FFFF5478A8787E %4E734E794F734E794F734E794F734E794F734E794F734E794F734E794F73 %4E794F734E794F734E794F734E794F734E794F734E794F734E7379FD04FF %7F4E794E734E794E734E794E734E794E734E794E734E794E734E794E734E %794E734E794E734E794E734E794E734E7379FFFFFF784E4EFF23A97E4E4E %FFFF78297E4D54234E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F %4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E73 %4E4F4879FD04FF784F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E %734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4879FFFFFF7E23 %A9FF7E4DFF4D4EFFFF7E784D785378734E734E734E734E734E734E734E73 %4E734E734E734E734E734E734E734E734E734E734E734E734E734E734E73 %4E734E734E734E734E4F72FD04FF7F4E734E734E734E734E734E734E734E %734E734E734E734E734E734E734E734E734E734E734E734E734E734E734E %4F72FFFFFF784E787E7E4D775329FD08FF4E4F4E4E4E4F4E4E4E4F4E4E4E %4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E %4E4E4F4E4E4E4F4E4E4E4F4E79A9FFFFFF784F4E4E4E4F4E4E4E4F4E4E4E %4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E %4E4E4F4879A9FFFF78012301220123014DA8FD07FF734E734E734E734E73 %4E734E734E734E734E734E734E734E734E734E734E734E734E734E734E73 %4E734E734E734E734E734E734E734E7372FD04FF7F4E734E734E734E734E %734E734E734E734E734E734E734E734E734E734E734E734E734E734E734E %734E734E734E4F72FFFFFFA8A97EA97EA97EA2A2FD08FF4E734E4E4E734E %4E4E734E4E4E734E4E4E734E4E4E734E4E4E734E4E4E734E4E4E734E4E4E %734E4E4E734E4E4E734E4E4E734E4E4E734E79FD04FF784F4E4E4E4F4E4E %4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E7978794E4E4E4F4E4E4E4F4E4E4E4F %4E4E4E4F4E4E4E4F4E79FD14FF734E734E734E734E734E734E734E734E73 %4E734E734E734E734E4F4E4F484F4E734E734E734E734E734E734E734E73 %4E734E734E734E7378FD04FF7948734E4F4E734E4F4E734E4F4E734E4F4E %734E4F48A9FFFFFFA94E4E4E734E4F4E734E4F4E734E4F4E734E4F4E4F78 %FD14FFFD1A4E78A9A2A978FD174E4879FD04FF784E484E4E4E484E4E4E48 %4E4E4E484E4E4E484E4878FD05FF78234E484E4E4E484E4E4E484E4E4E48 %4E4E4E4879FD14FF734E734E734E734E734E734E734E734E734E734E734E %734E4F78FD05FF4E4E4E734E734E734E734E734E734E734E734E734E734E %7378FD04FF794E734E734E734E734E734E734E734E734E734E4EA3FD05FF %A84D4E734E734E734E734E734E734E734E734E4F78FD14FF4E4E4E4F4E4E %4E4F4E4E4E4F4E4E4E4F4E4E4E4FFD044E48A9FD05FFA923FD064E4F4E4E %4E4F4E4E4E4F4E4E4E4F4E4E4879FD04FF78FD144EFD07FF4D2347FD0F4E %4879FD14FF734E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4F4879 %FD07FF54234E4E734E4F4E734E4F4E734E4F4E734E4F4E734E4E4EFD04FF %794E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E48A9FD07FFA9234E4E4F4E %4E4E4F4E4E4E4F4E4E4E4F4E4E4EFD14FF484E4E4E484E4E4E484E4E4E48 %4E4E4E484E4E4E484E4E4EA2FD07FF7E23234E484E4E4E484E4E4E484E4E %4E484E4E4E484E4878A9FFFFFF544E4E4E484E4E4E484E4E4E484E4E4E48 %4E4878FD09FF78234E234E4E4E484E4E4E484E4E4E484E4878A9FD13FF73 %4E4F4E734E4F4E734E4F4E734E4F4E734E4F4E734E4E78FD09FF4D4D4D4E %4E4F4E734E4F4E734E4F4E734E4F4E734E4F4EFD04FF794E4E4E734E4E4E %734E4E4E734E4E4E734E4EA2FD09FFA84D29FD044E734E4E4E734E4E4E73 %4E4E4EFD14FF484E4E4E484E4E4E484E4E4E484E4E4E484E4E4E484E48A9 %FD09FFA8234D234E4E4E484E4E4E484E4E4E484E4E4E484E4878FD04FF54 %4E4E4E484E4E4E484E4E4E484E4E4E484E4EFD05FF7EFD05FF4D23234E4D %4E484E4E4E484E4E4E484E4878FD14FF4E4E4F4E4E4E4F4E4E4E4F4E4E4E %4F4E4E4E4F4E4E4879FD0BFF54234E4DFD044E4F4E4E4E4F4E4E4E4FFD05 %4EFD04FF7948FD0F4E24A9FD04FFA829A8FD04FFA9234E23FD0E4EFD14FF %4E4E484E4E4E484E4E4E484E4E4E484E4E4E484E484EA2FD0BFF7E23234E %234E4E4E484E4E4E484E4E4E484E4E4E2478FD04FF544E244E484E244E48 %4E244E484E244E2478FD05FF780178FD05FF54234D234E234E244E484E24 %4E484E2378FD14FF4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E4E4F4E4E78 %FD06FFA8FD06FF4D4D4DFD044E4F4E4E4E4F4E4E4E4FFD054EFD04FF7948 %FD0F4EA2FD05FF234D23FD05FFA84D234E4E4E4DFD0A4EFD14FF4E4E484E %4E4E484E4E4E484E4E4E484E4E4E484E48A9FD05FFA922A9FD05FFA8234D %234E234E484E4E4E484E4E4E484E4E4E2478FD04FF544E244E4E4E244E4E %4E244E4E4E484E4EFD05FF5323232353FD05FF4D23234E234E234E4E4E24 %4E4E4E2378FD14FFFD134E2479FD06FF4D2377FD06FF54234E234E4DFD0E %4EFD04FF7948FD0D4E24A9FD04FFA929224D294EA8FD04FFA9234D234E4D %4E23FD084EFD14FF234E484E234E484E234E484E234E484E234E484EA2FD %05FFA222224DA8FD05FF7E23234D234E234E234E484E234E484E234E2454 %A9FFFFFF4E4E234E234E234E234E234E234E2378FD05FF782229234E2378 %FD05FF53234D234E234D234E244E234E234EA9FD13FFFD134E78FD06FF77 %224D237EFD06FF4D4D294E4E4E4DFD0C4EFD04FF7948FD0D4EA2FD05FF22 %4D234E4D4E23FD05FFA829234E4D4E294E4DFD064EFD14FF244E4E4E244E %4E4E244E4E4E244E4E4E244E24A9FD05FFA92229234D23CBFD05FFA8224D %234E234E234E4E4E244E4E4E244E2454FD04FF544E484E234E484E234E48 %4E234E4EFD05FF5323234D234E232353FD05FF4D23234E234D234E234E23 %4E234EFD14FFFD114E2479FD06FF4D29234D234E78FD06FF54234E234E4D %4E23FD0A4EFD04FF78234E4E4E484E4E4E484E4E4E23A9FD04FFA829224D %294E234E234DA8FD04FFA9234D234E294E234E294E484E4EFD14FF234E23 %4E234E234E234E234E234E234E234EA2FD05FFA222224D234D234DA8FD05 %FF7E23234D234E234E234E234E234E234E2378FD04FF5448234E234E234E %234E234E2354FD05FF770129234D234D234D2378FD05FF53224D234D234D %234D234D2354FD14FFFD114E54FD06FF53224D294E294E237EFD06FF4D4D %234E4D4E294E4DFD084EFD04FF7823FD0B4EA2FD05FF2229234E294E234E %294E23FD05FFA829234E294E234E294E234E4EFD14FF484E234E484E234E %484E234E484E234E23A9FD05FFA92229234D234D234E23CBFD05FFA2224D %234E234D234E234D234E484E2378FD04FF5448234E234E234E234E234E4E %FD05FF53222329234E234D234E232353FD05FF4D23234D234D234D234D23 %54FD14FF4E4E4E484E4E4E484E4E4E484E4E4E2378FD06FF4D29234D234E %4D4E234E78FD06FF53234D234E294E234E294E23FD044EFD04FF78234E23 %4E4E4E234E4E4E23CBFD04FFA82222292323234D234E234E234DA8FD04FF %A9224D234E294E234E294D4DFD14FF234E234E234E234E234E234E234E23 %4EA2FD05FFA2222229234D234E234D234DA8FD05FF7E23234D234E234D23 %4E234D234E234EA9FFFFFF4D4E234E234E234E234E2378FD05FFA84D7853 %785378534D2329234D2378FD05FF532229234D2329234D234EA8FD13FFFD %0F4E54FD06FF53224D294E234E294E234E237EFD06FF4D29234E294E234E %294E234E4D4E4EFD04FF78234E234E4D4E234E4D4EA8FD0DFF5323234E29 %4D23FD05FFA829234E294E234E294D4DFD14FF234E234E234E234E234E23 %4E234E23A9FD05FFA92223224D234D234E234D234D23CBFD05FFA8222923 %4E234D234E234D234D234EFD04FF4E4E234E234E234E234E4EFD0EFFA922 %29234D23234DFD05FF5323234D2329234D234DFD14FF4E234E4E4E234E4E %4E234E4E4E2378FD06FF4D23234D234E294E234E294E234D78FD06FF5323 %4D234E294E234E294E234E4EFD04FF78234E294E234E294E23A9FD0FFF78 %224D234E2329A8FD04FFCB2229234E234D234D4DFD14FF234E234E234E23 %4E234E234E2324A2FD05FF7E2222292323234D2329234D23292329A8FD05 %FF7E232329234D2329234D2329234EFD04FF4E23234E234D234E2378FD10 %FFA8232229234D2354FD05FF77222923292329234EFD14FF4E234E4E4E23 %4E4E4E234E4E4E54FD06FF77224D294D294E4D4E234E294E234E2378FD06 %FF4D29234E294E234E294E234E4DFD04FF78234E294E234E234EA2FD11FF %5323234E234D23A9FD04FFA829234D234D234D4DFD14FF234E234E234E23 %4E234E234E23A9FD06FFA9FFA8FFCBFFA9FFA94D234D234D234D23A9FD05 %FFA82229234D234D234D234D234EFD04FF4E23234E234D234E234D234D22 %2922292229222922292229222922292229234D2323224D2229224D222923 %4D2329234EFD14FF4E294E234E294E234E294E2378FD10FF7E23234D234D %232954FD06FF53234D234E234D234E234D4DFD04FF78234E234E234E234E %232922292229222922292229222922292229224D234D234D232923292229 %224D234D234D23294DFD14FF234E234E234E234E234E2323A2FD11FF2923 %234D23292329A8FD05FF7E232329234D2329234D234DA8FFFFFF4D232329 %234D2329234D232922292223222922232229222322292223222923232329 %232322292223222923232329234DA8FD13FF4E294E234E294E234E294E54 %FD12FFA2224D234D234E2378FD06FF4D29234E234D234E234D4DFD04FF78 %234E234E234E234E234E234E234D234D234D234D234D234D234D234D234D %234D234D234D234D234D234D234D23294DFD14FF234E234E234E234E234E %23A9FD13FF4D224D2329234D23A9FD05FFA82229234D2329234D234DFD04 %FF4D232329234D2329234D2329234D232923292329232923292329232923 %2923292329232923292329232923292329234DFD14FF4E234E294E234E29 %4E237EFD14FF7E23234D234D232953FD06FF54224D234D234D234D4DFD04 %FF78234E234D234E234D234E234D234E2329234D2329234D2329234D2329 %234D2329234D2329234D2329234D232923294DFD14FF2329234E2329234E %23234D7E5378537753775377537753775377537753775377222322292329 %23295378537753772923232923292329234DFD04FF4D2323292323232923 %232329232323292323222922232229222322292223222922232229222322 %29222322292223224DFD14FF4E234E294E234E294E234E23232223222222 %232222222322222223222222232229234D234D234D232322232223222923 %4D234D234D234D4DFD04FF78234E234D234E234D234E234D234E234E234D %2329234D2329234D2329234D2329234D2329234D2329234D232923294DFD %14FF2329234E2329234E2329234E23232229222322292223222922232229 %22232229222923292329232923292229222322292329234D2329234EFD04 %FF4D23232923292329232923292329232923292329222322292323222923 %2322292323222923232229232322292323224DFD14FF4E234E234E234E23 %4E234E234E2329234D2329234D2329234D2329234D2329234D234D234D23 %4D234D2329234D2329234D234D234D23294DFD04FF54FD14232223222322 %23222322232223222322232223222322232223222329FD14FF234D232923 %4D2329234D2329234D232322292323222923232229232322292323222923 %23222923232229232322292323222923232229224DA8FFFFFF7878537853 %785378537853785378537853785378537853785378537853785378537853 %7853785378537853785378537EA9FD13FF4E234E234E234E234E234E234E %234E234E234D234D234D234D234D234D234D234D234D234D234D234D234D %234D234D234D234D234D23294DFD48FF234D2329234D2329234D2329234D %232923292323232923232329232323292323232923292329232923292323 %23292329232923292329234DFD48FF4D234E234D234E234D234E234D234E %234D234D2329234D2329234D2329234D2329234D2329234D2329234D2329 %234D2329234D232923294DFD48FF23232329232323292323232923232329 %232323292323222922232229222322292223222922232229222322292223 %2229222322292223224DFD48FF4D234E234D234E234D234E234D234E234D %234E234D234D2329234D2329234D2329234D2329234D2329234D2329234D %2329234D232923294DFD48FF232923292329232923292329232923292329 %232923292229222322292323222923232229232322292323222923232229 %232322292323224DFD48FF29232323292323232923232329232323292323 %232923232329232322292323222923232229232322292323222923232229 %23232229232329FD48FF294D294D294D294D294D294D294D294D294D294D %294D294D294D294D294D294D294D294D294D294D294D294D294D294D294D %294D294D2953A8FDFCFFFDFCFFFDFCFFFDFCFFFDD7FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FD05FFA8FFA8FFA8FFA8FFA8FFFFFFA8FFA8FD24FFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD07FFA8FFA9FFA8FFA8FFA8FF %A9FFA8FFFFFFA8FFA8FFA8FFA8FFA8FFFFFFA8FFFFFFA8FD22FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFFFFFA8FFA8FFFFA8A8A9A8FFFFA8A8FFA8A8A8FD %22FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD07FFA8FF %A8FFA8FFFFFFA8FFA8FFA8FFFFFFA8FFA8FD04FFA8A8FFFFFFA8AFA8A8A8 %FD22FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05 %FFA8A8A8FFA8FD04FFA8A8FFA8A9A8FFFFFFA8FFFFA8A8FFA8A8A8FD2AFF %A9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FF %A8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FD05FFA8FF %A8FFFFFFA8FFFFA8A8FFA8FFFFFFA8A8A8FFA8A8A8FFA8FD2AFFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFFD05A8FFA8A8 %A8FFA8A8A8A9A8FFFFFFA8AFA8FFFD05A8FD2CFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFFFFFA8FD05FFA8FFA8FFFFA884AFFFFFA8A8A8FF %FFFFFD04A87DA87DA87DA9FD29FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD05FFA8A8A8FFFFFFA8A87DFFFFA87DA8A8FFFFFF %FD09A8FD2AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD %07FFA8FD06FFA8A8FFFFA87EFD36FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FD05FFFD08A87EA8A8A87DA8A8FD36FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD07FFA8FFA8A87DA8A8A884A8 %A8A87EFD36FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FD07FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FF %FD06A87DA87DA87DA87DA8A8FD36FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FD08FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FD07FFA8FFFFFFA8FFA8FFA8FFA8FD36FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A8FD07FFA8A8A8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FD4AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD09FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FD48FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FD0BFFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD4AFFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD0CFFFD04A8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FD48FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FD0BFFFD05A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FD4AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD0DFFFD05 %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA9FD48FFA8A9A8FFA8A9A8FFA8A9 %A8FFA8A9A8FFA8A9A8FFA8FD07FFA8FD07FFFD07A8FFA8A9A8FFA8A9A8FF %A8A9A8FD4AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD07FFA8A8 %A8FD06FFFD06A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD48FFA8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FD06FFA87DA8FD06FFFD04A87DFD04 %A8FFA8A8A8FFA8A8A8FFA8FD4AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FD07FFA8A8A8FD07FFFD07A8FFA8FFA8FFA8FFA8FFA8FFA8FD48FF %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FD07FFA8A884A8A8FD07FF %84A87EA8A8A87DFD04A8FFA8A8A8FFA8FD4AFFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FD07FFFD07A8FD06FFFD0AA8FFA8FFA8FFA8FFA8FD48FFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8FD06FFA87DA8A8A87DA8FD06 %FFFD04A87DA8A8A87DFD04A8A9A8A8A8FD4AFFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FD07FFFD07A8FD07FFFD0BA8FFA8FFA8FFA8FD48FFA8A8A8 %FFA8A8A8FFA8A8A8FFA8A8A8FFA8FD07FFA8A87DA8A8A87DA8A8FD07FF7E %A87DA8A8A87DFD04A8FFA8A8A8FD4AFFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FD07FFFD0BA8FD06FFFD0CA8FFA8FFA8FD48FFFD11A8FD06FFA87DA884 %A87DA884A87DA8FD06FFA8A884A87DA884A87DA87DA8A8AFA8A8FD49FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD07FFFD0BA8FD07FFFD0DA8FFA8FD48 %FFA8AFA8A8A8AFA8A8A8AFA8A8A8AFA8FD07FFA8A87DA8A8A87DA8A8A87D %A8A8FD07FF7DA87DA8A8A87DA8A8A87DA8A8AFFD49FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FD07FFFD0FA8FD06FFFD0EA8FD48FFFD0FA8FD05FFA8A87DA8 %7DA87DA87DA87DA87DA87DA8FD06FFA8A87DA87DA87DA87DA87DA87DA8FD %49FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD07FF7DFD0EA8FD07FFFD0DA8FD48 %FFA8A8A8A9A8A8A8A9A8A8A8A9A8FD07FFA8FFA8FFA8FFA8FFA8A87DA884 %A87DA8A8FD07FF7DA87DA884A87DA884A87DA8FD49FFA8AFA8FFA8AFA8FF %A8AFA8FD11FFFD09A8FD06FFFD0CA8FD48FFFD0DA8FD11FF7DA87DA87DA8 %7DA8FD06FFA8A87DA87DA87DA87DA87DA8FD49FFA8FFA8FFA8FFA8FFA8AF %A8FD13FF7EFD06A8FD07FFFD0BA8FD48FFFD0BA8FD14FFA87DA87EA87DA8 %A8FD07FF7DA87DA87EA87DA87DA8FD48FFA8A8FFA8A8A8FFA8A8A8FD15FF %A8A87EA8A8A884A8A8FD06FFA8A8A884A8A8A884A8A8FD48FFFD0BA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF7DA87DA87DA87DA8A8FFA8 %FFA8FFA8A87DA87DA87DA87DA8FD48FFAFA8FFA8AFA8FFA8AFA8FFA8A884 %A8A8A884A8A8A884A8A8A884A8A8A884FD0BA884FD0EA8FD48FFFD0EA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8FD49FFA8A8A8FFA8A8A8FFA8A8A8FFA8A87DA8 %A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A8 %7DA8A8A87DFD04A8FD48FFFD10A87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD49FFA8A9A8 %FFA8A9A8FFA8A9A8FFA8AFFD04A884A8A8A884A8A8A884A8A8A884A8A8A8 %84A8A8A884A8A8A884A8A8A884A8A8A884FD04A8FD48FFFD12A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA8FD48FFA8A8A9A8A8A8A9A8A8A8A9A8A8A8A9FD06A87DA8A8A87D %A8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8 %FD48FFFD14A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA8FD48FFA8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A87EA8A8A87EA8A8A87EA8A8A87EA8A8A87EA8A8A87EA8A8A8 %7EA8A8A87EA8A8A87EA8A8FD48FFFD16A87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD48FFFD17A87EA8A8 %A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87DFD04A8FD %48FFFD18A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA8FD47FFFF %%EndData endstream endobj 1122 0 obj <>stream +ƌn"ł?3x4EJ3{vHj54ҚvJ*ac\N?q' K( gD%1mLRQbj7l#3d^'i%ÚZUPٿoE;RnK-FaBfN*rʮ*v/}ΖSf,k@uOe ed* e,b`jP ܢFoM_݋.B-F#-۱2(U +p? +eg)aP$SzSYYc'$* bvZ1T(!fzf9Us|Nu;#kv2_ҕciJv:j՞i +e+BLjq,)K}k++PWl _g#Ӹ;ALBY(]D4.:(_jRYAfE$gQ-jϚ gO:sza9?He/w#H J|NQv҈ǔblKP(K"vra e{ d+))G$2'C%](tX, fPv̒EG0c׌kr[ϚR|e3<]ig:Vrc;Q[:^ZRS|>ԧ%DafY̿85vAB-\׉HiCWڰN+"ȄL<$h{ +e%d\`G-\N[? mQOIAVʮg,nr[I)IAfMS=nT<Vwe{bgJ'_=+؎Ss1Z#RMW-{@Z`+ni)90iɱ7O,Bv_+El L,acś؊E, +eWV"cYc^<ͩR-(\a9dٞ5ZQ|VA+۩dX +~ܨ|rlwze%^"5vdQ(C8Sra"pު/W`F,7%2!IǸrklѐŸ3SV[*gVk/]sAX7WF/QZ"IhG'}x'*#/;n*1ia52EmB? eԔAđѨ&F {ke=8iS^4٦$h #mBٵbKd[`]dpD|[VZ V]|\/˵̚+l ԛ+56y;P\ZmuBjl6D,Ay_vً6f+&iuF#'x6 +eWKd:_~T!Hv|!YV~c-dqe$kjYpl,lGt?6؊2TvV h?ԍPU@ugBexBQ=usvBy!2ɑ(!X"+#hrk(UIeq"_e"uK,XNz5['/͌ډ9X›您Z&S9Sz >9uV$({+;|Ů@ҋK+(5.'T"+vD}G-pu$H)g_"4^tKdj9Ye]!i]kG]|HN.}n=3f@;}?,D2sd80Hyߪ3kV(S/i{X-=˚l*؝D։G`Q<3-e$.>o$]?u\Tkؕun+> ݎ-j Ā#,ސج6 +eV(k$eaidCwTߧzzvX.kҬBYů^E]O8v'(~2ʦzDF£80:DBTÔ'U_$wk[l XuXZa}̦C>c㨌Yl@]Io&&Mc7,?_h4Ν1gO vhi9f:z+ +e2_9Gd essPfa%Kdu5tP"à|Hj;;\a6~lV9 +b ]8̕uB_tvstiQqy +m9el +eh6/09 ܋gMVdqqeoYݢ1n +eȑ ',ՔvbX" y~ NT)aMFOGcVT#kv jo3kNjGws6)`;ΩOClE iƵdiZ(C.*3ZaV.ܳBY3]ٛpҒ*jN59X[lYmEρ 9B ߒ3WmUYkc4PVUPOofd 05+F5Iisy3TZGYW&JfoHg⟕z eEnrB6h/PGwd5ͬȟmInm<mqj8uj]']|nAtXVQnPY%EVߎʕݏBk, ZT>al8栝jܨWc=, +[(!YD26a]FIkR߹],b:_VjeLF_z;˄EnTlD3[2ͲToYT(#"@iŶEǕi[(,NV;⇢+,;VS5l::1%]K5l1׈cY,sKdi;+uoU'h+Ï +Tm0j |'PXpzKcUS\OUC#7)~gHhhc7-9/PcdrPeΝew3%섮vbtjfUu}dι, k ŋ{cjxXDVN/,(ZjJL,}ʷV +fb1#y`p?}!VM J^:8L8cʛ\ f420-%hߍv7w1u@\LmՕݿB2*ݎ g`u^ɃRx[NLؑGY82[(77/I|-YqD։aW fp6Pm&0s쇥l:3!=&O ֪˛Ք䥸xX9m`13:!'$㿒8#KY+ŶvHbW]b[D~jպRMJjmJn,$Ԓ,B][\>G&x`]vZh!U,aNc%RWhaȫl|TSQs㬜ou2{,D=df_( Sԇ2fez$f3}_Xmv6D-r87N|QʝozC;$p].*}g_~Aܯpgۗ%7d]s+vTCP.yj(nhQ`3K9vZ.-&?tf;fçaXiqe eԏapkUae;%{wwYIY: +#x7SGiQ"[AUgC +xC;zXֈԑ)915Ad\o` g;t䆵d/Tb#ϪY#ˤ2'{$f,{&/"'AkrjFXRKv~u/叇Iђ* o%wL@z[#-#ْYy s5'[؏fd%:R#PF VWIshRW&{;1WĘ#ֵd@KꉩbdS.ӿd2V|ӿ,tEXK.kDݺ9\uSna.5@+]ճSz^GaˬùXԔ k^P X 7;i! qCSS"k6O>&+.f} r\91&-HϢ`3-wh eMo +eda@=q)w֡դ*i +u/9Y2Dv;}biyca?3lcΞӂݷd*JS+{uX;ܟ5tA6X_ԤX0Ӎfـm,{5-`Nc$nYS`2,tP(KFu $D){Ce?@x8nMƉ@^X-Z?;kY~.?(љ;ҁd\OTMd,KfU9dd3JoV3~c ol8y@퇹Q/v[y,*Ygܥcu. GZO\O!a8R`{0HfɄu&C#c\7/]%SOiVnDш33F{Q^jP(ks&vSPH茴YÔm$ c)y>tdJM<-VZ+l ˍ'?StoP SA97؛\KsAH=V ? Z>uS*oV%cLjn҄ $>i$MF-.w](+{Y.s/d2P#5}ZpDm^c-Qs-ٶߵFU~ZX?,BҀ1 +'عJ5K 8fˉCX*妦rK" `ڝ\Mevs_r0oYKY ew_PVnU(,D7wU_vqA%!P9NLTm,Gf.{e֬e7 hR$mZЕIj,of^< *ïnc=) fs֡U:"],LeuTrΉ.f,Yߠǡ$Y~E H&Uǡcdd"#\Y=wy߻Y{?81ElIS=P;=`ސgBˏsrTt?YyuqP֎1(8C?՜lgb"W&ݚ \%)h:-e~*C]`fY*yareiJ å65)8^r#},5&mֿWTfw3WU(k5NLU5dBfݲѺz>SmpȬ9;pO< ZQƾ(Ƭ/bt?/$(,4$Њ2sz +IZ&[jz TA +K`gBU)Ti܈=Ih208ɞBY /W$)d6w `ý[QX흳-#4rճ[?nw;}h*R +ݩ,XwTTeBP&XPcL 3?1 *Y ;T٪RPnNʻ`,9#1*S6 /Pv30k2p KNK9cST Xdiqp>R$q/#ְY28޵f0}dKf6N1IL@];=@8$؜F=iJnJ=rGN4-KrF?|d5y4FSju㪷bUDڗa,c҇ӨJL?@3Kv[b!Y}ś5Á AUj(ex 8&M=A pEU+ݲΗMՄe)4nӎZEeʓNTKvBNaپo&W9 il_݇d-V'VN@9"%RyQ# dG]HT<_P)CK%cTfdR{:8=,Ǫ*I,'ס)MV:B@yO&o'/_~wB^V+lH+aKvWH <|BjJIm@[,hX4Wbr'݊ Y H3t%;dSE;QC 4L#vFi d3R&d)|GBSv2 zKQ;q T&2òiN(߸miBZ5~fS.R\Α{`ɰ0X_.ru[E~ܒlZj"TjTKq `2*~j'`.+iU%ေ1)Ԟ[*CRt̺<Ē&caxyQ4'BW; +Ο uMP[`PUcVGU5rd}L]Hvv[cbMͨ%^֫a p "&%F[*,ZIF-tVLwaTl;Kԧ=5;Q(c_ZTY;cNłeYB-4ۗƑ{cɎ?-elNJ&aY - Ig,eHr#-5ÑZɄ@B݂$TV/KWe? ߼PWi%Rc[حW0$Ll:Aab(oVF;OS!sķ@ERՒp[x6lj%/k,dG+w(pSeG7bžX [n!J쌊%.r @}LOƔu~L +426g#KVgP'rj¸2ԙ:Ff}DJh-|1?UNzC}nSN|'_&E :XĪdtY4 6Ċ)FTM8jzR"ZX|ME2&rS|rTxwe'.eoƾk(g?(5ffQ,ES8O"t[cZdi8G#5F-J˿nIDc,,d+qȐlC֨hdpȮ%8nU{*p *d*5[TU&ז8哤 Z`Ot˿PvɟYk6,Vp!06W]fjG PF8E V Y?[\sCrXߒ# :KֺXQ@7됑!#jžWJB X!ajj PDi$-!aubj-IFifǤ5sW^1_t,i +eggI hGA¦/vWz'ZsK)I'O +i38r/-3PZmhF]X2'x[Kj:AnoŸI=@{%L$WaN F,aOl]ChwyfΒ9\xr_FɁ6 ҄$/N2cSsD٧PC8⿾jKKVdg3Ȓ) JSbAF8Q,e[gL g@뢋ZZa/ [(EmTK#7bEG+]v`[?[(S%~JS@ vg--PuAلY-r;4uhKC=d>#_@"5C6dK~,x|i8gRs[a>gqyA e*ԶF{RΓLn3l]l]t2_+8٤i5fhG4Q7qCȳ pB,Y %-%۹k C6d^1P,biwZ,PQ#T +$&2bD*Y, BMaJMȽPkl_-ҟ*4Tigbhw\|?vi'P +YZ2Ǖ+|ɫX"gO+*f0Oyӓi!V|JE`!*&vN@l5Gd#NdJZQ ÌY2džl1d$ 5c%-$9cEdrof̢#f=)q "y1_c, eQH(X(Ē| F#Jf.ca$Ȕa@[c={f{Y"Žuz$LX%dX2,Y3cX)Uh+e)c+ Y9<}n&PgK=P?{RHnrdh^e Nˮ<݋im<\ ء1p_5\}-HCՀy!vv؎dd*_HƤ#T_b4𓚂daVmv@`jŧ ۂe*dw7V=4T|b*=(4Ȩ2d璛=/sBN<33fL'61q? Y1È[uF00RvˢŭܨH~(| j[p#'p_*6d^%Â=o"--b4t޲h;$|lňm p-CUF14iR,iY-8sKxX$t6{"Qw70i cK揉V|g>f2e~p?Y: ]G´ۓ / ;n|rJU.}_v3[cMO&y-3K +e_-r@ kٓi11T15{^%Ms82xd K;rOȽd}K--degqa <CQ13l҄X${,_cFQ=bȣ9۪1,Y᝴dI{bs.'sI!k;un"k†5h 5#R + +mDvڊRkPS r;&%u ғs MޮM9%Յݒb{:4L )+|yd8݁/ u`C%ؙG%PC! cPFB!xmd)2]nmCJ#$)-L0i'43&4F%bC"²L8x&m)S3ֺe L?Inr^-rS:ĒS(ۉb8 KV;cv-lR4CҷA;7~gi-;e1M8g#_E]$떝ǒ$Ly[K\12%[߂@/p3KCNS dmXRnF$! ,7ړT094[)8#k-ա8ĒU$pĞNF +eĻ.}F0*2 +0vDq6crB:ӑM; B٨Fޒa&RkT1LCK#Ed%n[zC E2bm!7\"'S8rϐ#ܒ.K+lL‘]ƛ Cv4:馶08r/-9ec/'S.skS[JKv +-8 i5Y;kBl pzDxVϐiP2@c4%C\C[p:* [|;~,Mgd:{Lc|L *6 e;c +L uMG 2B= Պ^0v #bYK.M/!5# +A,VY0tbW/cb730Ƶ\Im,\ý0VZ`:BMt,?K {dݒbrXy~C/sQ-<3S|!}$6NBA /՝$GN qh&N,ZjFrSХ]ʖ +3f7T!,T=͸BƂ$*apd#egPEvs2$TȅTEjtӲ,!( ;QFIƩd-P]:Y15LښUzJ?)ŬSFt%Lٱ4c+d𿁧_LΜ8#s"'ɯVEӗV,?KH.C)A'A'Fh9?T/u0ko6}i8r8,G+ʈS8}y;|2AEZ2Ʋr)s0ftP hoz)f(@>{9I b"MyFTeؒ)4͸~K7c+7Z)-?g?u߉_qbN/]έЊ2lXE,%`PZQ kܭ<GHn#ᨤأ6N_ގ_AWVƒ2P,x~}m0h, CHe:.,1Y;wb"9"S{ p80]F֘ip#'Enet|Fm5.V,ӗȬXhFfwE2.BFW$we͸iMLBV(څт"N-u8ݴ&?qDC/#ȁjԣ~{@gteIWfQFʌYkOVv9!NQ3aC8%2U%cF) N0  LĔrS}fv2 E;{FrS)%ӗ@|qe8^S4 +J/W}C*@Q]_(aiDaɞY;wG=y?걦/˽{i?se8uը-rü|+)dBjƱceuT-v2(4  DLUkDctLyYΙmfulW1W|WN"rt +o#zzF5P8ܴ*AT= #`B,d>LueK4I2I$?2%$s%2"#B%d#5̧܌kAH(iFД {PjM4 8}[8P5@W uы5--j,tHT }OFu-$+,D;CP.le>we N,1XCoV·#h +1e`1lp3,9r5fӉΝ&4ó.|}?En}wFR5vӗR52\T㩧"VƮzf D:01fX2q91GVc!Oe!ZN_Ee+Ưv,j̒f-$Z  ֈT()a 7B,$[QsUv9Khphr.іtLw)-Yjlu/̕|;I3cpތ†K`#w4W'HpB8g$W+c2K5fb:͞QPa#ݨY3-Mwk{XD}tn][LbHe2)t0')/~ʳZSbyR8ȕlspPbJc8 rp,3KrS(cߣKkC]`W7`4]M&ʹ8&*dњ@" Y IʾHsܑETh QԎȯo[Q;1ًw瘑i,XmiY˚9c6L%UTHv]۝\$8rF ;rіILߘ1~6V&0 +3TG7a)[LHP}PbxI Gh%MXZSΰh\ܸ1ko(;m8o2%]D/YlF~MqjrV;|I0MC=vwV2F. +\ҘQ8ghA3hyK\cK49vHfIOa_Y4GAMn|x+?޳ͶBb+ E TtAu190X`*G.#pBìpeTC\&*f_bؠTn*ҘMD2s |jRq÷t0r340g*MGRh?Ӛbach: X±+Ϊ4&ȇ9 \ GaQm%[TV,9ՍS8֋Q C14'G`Y 0AA*1!2OY,`4b"^k1tL͗.7K ]5I `_|9ƬF>0((5 +ROrd:WM̎wc֌,$Vϒl YtL)Z$Z p8$8* +鈃HL:/_!H'a/ô4b"f\s+*Ik|9t̜lM82ZT>To{f,5#‘XT(խdӗ+b$ +Ѫ1{r:QEO:42$ڍH@4GLH5Ĵbφ, o5%1_Zs1\Vlqehhր@@jYMWaɞ9Suj!ft\Ş=iG19Oec'9u)+8ςrkQbrK72eqr,̍6'52_:_jǤ  8pj +"cVAPD#Α8TWe7sƌܗ͚i5thR_@9ΆUsFJGfaVgr30}aM'U?+48PkvLǜWn o %P Դ\G?JNEej;V 2>tCC!˞4Vv9#}@G*,%-0})#fO wT&VLШY;xyl>=6Qߕ`\+H7c +҈/"Rp(,!ÜzWfq v$ʺMF+9BraJ~u0/teEd+a,cf7sD QdGG؄,Yjl֛NW!r3x8X)G)+01/@fUn: sԚݵ CD6\,GaCB;\fq0ZIfg?TnnSɗ@A&\#V"U3U} οM=Ӛ6R͘Xu"R#5G#訄Zjxf,\*$U@ack|J"Q\HqT4Zsr,-9f=":TD"G.#PK ^pP9E iE+9\*T9tG9YPIUqaRjLeؐBc 7Ԛ|Qdh_3_dE$8r/92jfi%(fMBr!TBjHX$28/1,u cԔ,#՛#H=j'l&v n1UcbLc֭X"eqٶJ'x X ALY~g !4,tдf+WˮQGII%A#őE8aN%TNCY\*Ők>QhhTY k*S#4њ#2GGXl:9PH=aӊrN̡:YɲJ 1DUSX$f8Bs;7_5(7ud1ԑ۩=/%5:r"8rp<697'T%,ZIcl5xBC }{ Le.R['\* 3ZsTaXcV31?{PbrԳWYq$WYa05=()9G:6J+\H1l0sUeE(,UAiDޔSJIp$8r$T^J3P*TZ%ڬ }5DHY-4L{8\J$ ],R>#RMqJa!YÁ@B9;k +(K9dHY:ϱ׎#Ia&+Ұ{ j \aMʦ[{e9I[D#AM,52^ һ,3%S;;;[864ٟyޙ)C290e _~"g˞,=Uz|wd|/ߐi3fNq$3da̹/iC5d:_K .{de)\x>2yš^iȘ2aLHLX.-d]*=O@iz9S& 2+/l-=Y2Wz|_9ߒ.ldɢ)>׼;^:6Ynz9LLs)ȨLYGœ! de/:Mj//y2Х-,+?׽=~'r??5=k2iefLlc1C,LYG}En_?6KoNJd7XK/.#[2Yz,y~~w =wzs2~zmٔ11P[qxP `@sy?ЛP/.-=U7o~OgLEMoɴɤRS8LOG~Ad`l: !cg×lyA./,.\ysOo}z[zy`@^g{y#/G2@f(c c” ug0//p/&g;KvcإK +[2Yzmocl; +=gd8YBeYd- п01ܔaX |×~%s/7dy/&?"/G_[ڳe /Ty{z/fd@3o}˞2}^UD&۲}sLsܗ9pO0oȞ~ʗ^ؒL_3~G_`O3b2٘1}웾R_S8&9~a7cLt%oG>7#ɴ)ɜeL 2dˀ1_\ cД|X2)e _H^Xo2]--Ly~oȯ뷞ȼH&3{oOl{La 18MY&%TNJr?@&RX}g2[<?ѿ?̛̚43Bgo'>S'3s>IS8_3 2-S\w~<fcS6)  # ` +_{/cy.=[Ti۔)ȯRj۞6izdɔy< cU21w0e1H  7_ˆ/cz36>ZҴ)'zǧz'3qR&VL6fmY?U2>̘l̤R0 P'0 +~fa&|×ގ=޻f7{qlSӟ~|wG|3O?OH9o/{ey 3aLJnSfcJ,$&plXCVf`3 G^+ _pwv>ܫKOO5[n?tfg?^}slә4=gO *]۲w<1ᗽE q_)O_Fi9pLHs83de _җ/ė<|X//O|W.ld/|x/~ _iӓw?ہ2Ye>]o@Ǽ/~#e L@̕وo@W|y==X//. l7_T?/e_=iIsf2^dz[cCl?M6 lO`#r4dyG_}%۱A^>g>-_??D??#OO2qss͔*|rlˀ1ok^0Δ5eb3C`ޔ/vl7c=]dg1"?iӓ&@l̺Adz[xϘ̛?R\0e_;28LK~ ސ 30ek_7/َ @A\z̕˿WiI93@ɶl˜~^GM~MYg吘V7<_a}Ow~,e<|vW/a-*7O_gdddɔ*O"mYfLvex[?~sgʆ5er9 Y7-/&|c_t23Ue_2)"۲}̘C c eHL`8#Jw#a3_~]ėގey|1og???==o2iz_Ⱦw{[vǘ<~g=নLE)&1أF bQA#EһR E(,(V-ƨQ)v˩3gvgwgwgyI$5} lcx EG^1>%`h2Ə9DAv\ Mwx2 *P/YYrժՐ5kVndF" aCc:i +ݫQwQR1ӣezXb FEǏ{ĄV`o kK7 /PM̛rYN(k>v-C,G2͟e42n]7ۘ/<_LpOe)D&E) #v>h_X/-x qZu}1G]AfehǒFFN6uTQ˗rKx0+'D Wa?!50K=zyr ´ +?Opfl,1٣kg&Uў2)W^1>I$`k'deӶo*@/,e\[ جլ{Y +u ,FF3C?1yR3^z8CP0%KYqsKz/CGh^UQ.H aO? ~ڰAfP3W=%s߽C޷Qm e|b|Fʲ? :~ e c3fe^.x%مhXygyYaˬ|$CEb* W1(1j_b|NLX#ed ^#Y v!\FX6n|_O7"4 #v I2Q1e$K0%Sh/ۼ^<YٴEM` %c3~3D4ܳN_^1>'c,d3lOL,j p+/23P#d_!l@4,ˠabV\t 6(I/zK1+''Fʸ?.Y W^xrL₰ @h$2\)b֮^|)1(<.@߲yc,6x$q%>k4R5n fë֮{Lcȋ B[adX2L Ue[2lcTQ6tPqGB1`+'-Z0bܱK7uA&u=g4/.:FF̆'llcdQ&cxGZ15b|}X0^lܬ_dC ŋˇB| `d4󡐌E 4j(D-5K` I6yM1fI#[&:~U%50ˋ.H Q|jcpReezS$"ɑ n_P^. p 1`aQļQ1(þrl^W_0{ѻ.%m"5~Մ 2h`W,^: #c +m ebR}?Ӗ2z`Oy$< \K,{0d( {'d#W^lv!Z>afͯ"\I._F˴z)J oc0fFʪ d˫q>PzhBAP'ļWXEيeKT/G˴z)7b|L= ,hRfj,V/by%q{s Y`HRN^ņxcQ \m !e1I\1Z˞=x??I+{$#O&_-Cbh7?Nhi^mfE ʸ^4~RsWOђ`9Kz.YY5~xq.#`UejcDQ~ڄI[h6LkWObK0`k, F0$DQ}?/RAFmSpLu-kl 5,HyJ Ed%c2}?hW/"&`s% F cxZ#e(l^._s2&1(hY^TLwb|Ma \đ2u\) 2 ɋE1#EODϣeZ$ +Ƨ)@0g*42C.qS)`T[  a G -.hY^S$*]hHYv\}7f418]eѲWOsJ0`FZYFʪ +/r"QE9Z͖$sWO҉( 7Q50$o)ɠbJtI>Kfs^KLb +FmY1!FM 1(3+fVbpJ`1/75K^/qQ}Rƫx ϊU)U079?(,;5K1RV?@AfI e@؅ }?b֨=I2$K0bS)[wvĘ}? WO/c +FwL!{܂yK FMȠ xcE)PQ&)I,[0tv_)v`/(b2)%[1 I:9 М#v]]b;(^BȾ?gb|J %=95`V]L葲,\PQfŮeb|%}b fXF5KGAE*xSт,`U;~ CGc+/)fWO/b8Y0/d:61.ňK$WO1`z! b~-;WOѓM0LK0t8!Z0BĘEWOG00zl@0t8`B.C#e7/1h9$WO1)p̂/I +fL&KH9 1h+Ƨĉ. +FHX0cd11V/V/+nDK0sT<.e(R&'!`F"k&&R1fVd`) G`6Lr ,gX ُ?12cR S$?`)N-`b|Rs+O0^1>iIl%J0ul'ه$/y+ƧXM0w!j+ƥ`D +؂qd΢+Ƨ Q0E %y & IG̑c?)w8y S&('G̵ 7g)WOS&rb|ғs{&l]0x%1s= +-aǣ }ʙs\<7[X$&ܿ+Ƨ4_0`& S$/J0!#V%It*-bu0IGM`&I,G0q)uIR0,b ,۔x)y %z`"-WOi`)sK0`قy6`rƟQSC0wYi &q,\k2OS`.E\w}̏1^1>eJE07_oe0`‡{$Bsnނq}e`e&`A0MX0Lbb|R3<(GsLW?B#0?bb|rMa(A^&a fMFD27`T۟^1> \PD )N# `++bxZ +’`uly)R0h~x<^TSH0 LơϽb|M3%`YəaqS$.A9 l{3͚,?+'C0c`-E0IWOC0G؂:L+1߻I<LĨF^1>&)ܘ`LY{$9(<}< #/0vL`b|O3#$ +WOBwI*Ec ;G"yQx$Ds%тG'5V'b|Oyl#FCmWORI@09 &onb>?̋`> 3F%37o5WO"I` \|c%5?o^1>Y)1S7uH1{䝴&ĠF51Z1z 3[0n`ܤoz$2 Foܴh8&>+ƧQ0`*:|1'^1>x[00vl'MQѹ^1>$%qc¢ ٦&WOI`0-ۢb@dFc-^zFu5-̄)8%LjIc(|m"+uP. +ȗ:&5Nfle,^z䑲 [~k%D d&`b|M% (\$,_8D nmż/).bsW$4(d +^1>9%neb"a#&4ʨɼb|Hj_paZ$,9"Ɇ_+i6s^/Rp|"ŧb&W^1>y8Yq"paZ)Q32dy+'_0`/&.LDc3b4#FF) ܒ`[0_8cWc +E "o;b@&J2۽b|K +ԋąh|D!fȸ$=xK`qE"IP_F#A2۽b|JZ=#/Yq!11d+'~--{SzHXǼǡɌ@&CYk2)`tE=ċi!Xwl I&Hv+'_03//.H m +f*̴dFFeWOnI`Ē֋ ¨e!hLdX2FFüb|rI9-/j zi!Vބ!Af(̸.2^1>q:ؼp9FzQ -dd,sMMb|b$ٖ,P/Hys3 e(LĈWO@08 raZ^{W_}EQ̀ghY2d$+'^R&//ƅh!V^~DǗb5Cm^1>'e1tT/hYy?6 [FIFnb/C0Ѿ^.@ y 03BmbxdOcUdn^D¼. Qy? 6 0CWOܤJ0Kayg!@ 2Adr"+'FR%}օXw򂸀[gy'nԌF&@ʶy4 &/sˆ O=ԓ)ĆdlHb> ))L[ye# +O< !fLdDY&T DHc_[͋ Ⴔ +?&~zȰd|YxD&M 2B c'{G<(RC02$Ep/_zD'%EdY)\uyd#< 3 J2ldXm6&H-\Q#11ԋQe͚իWVYԀi#dP2,sc1"^1>8J/̆_ c ²jʕ+O 1Ƞd,Sth՟@fz 1Ћe5+ˬXԀk2B2c1WJcnn_+0wxҋa`eٲK>-] YȰd8o#Qww]ټl|{YnY PYdb3 I2@.2ȤK0[A4CH$2$'$b^xgeo 1d,ʼb|I`L4,Y `Y< "4 CL9GQ ƚɆk&/jLXY> `ˠd1C(LZc508C^}YzA\e{G{Ͽ!d0C<"UA-;2Ye ZL4/nR] +vA\̝;Gf\AdP2+W)b6>饗Eoe_(EWb*1L㧂_ڄdZ"9gϚ52k֬ٳ3 Jʲ5SM8\mQ}*ʶxNW7XC9B+3fL1c&2@aL I^|PQb|I`tAF 8O&^}!7q1}ڴ{ʹi 0Ȑd,p\EWOT0㧂 >A t/ -ʔ)'O4iuʔ "H2"@hc(IoJcvfAF / I/g.Sȹn9k\T/^.˄wy8;j@fYs,6Fe;)bȤ\0 +2Z x~/P^Nt72n1c3f; S@2(bVYE^1>f+C20/"/XA5vDe;F5jȑ#ᯣdfIB'Y2^ɞ4 FvrBS#/ P1b8gĈFFdOECˀKg߿Ub|dR*n`D ?/ˈÆ :3taÑ;ƎkD@nc6+J%ł.) +2l`V,{cXhV<Adƌsْr,VٽsgK^jl¥_>}zs 8xȰ#%1̛UkLQ^1>4 +s}\dbgB=&x6dHK^z ӳg^ :|ew21sƟVc( ^1>ѩ +2l`p@x ːA.˭=Dn.&g9S#&er-[1{T`+%K.Ƞ7gthޭ[nݺw)̘KDQfERLbN )^1 FZ*Ȱ5\+tҥsg-tꍒ k¤)f`/G?~-{D&u5R, )wOyO/.;uH + ӳW~18*w/]/ѲAfALib*%i oȸa3e҄AP^z .K۷k׮}:vbdn@U662S+ :~]͙ Ļ1JzA\:o׶͔mn (ˈ1O,ʠ(c"(0C1I}*A0 |)df`3n(Lj]:.7馛Zn}Mm$#6b;ߍm<$2KgR+h˛Y&dXA3fc푖֭[Hi +iss;uab1c6H}`9cb*+i mQ#e^KD# (xC\Zزe-nkVLv(nL̐a#8y(h1WOD*B0fIwU+.^$ +2l`F2 7lq ͛74o 2( G?j Mʸ_.bbRt [0ƿsM ̐ANڵmӺҼYӦM8M6fnl!bn%bE)7{0K]WL:R95K)/=d sC ׻'z!\45jmiyckEL~KLh1fz L,MD,Ǝ9l~}z*x4o4j԰u ƀ Jv@L[{QH*h~-%QbVULuJ!)?:~*o^:3/74k +4Ak9 \4i +`?鸧l!۫IsWL'"J0j|,bAֿo/&/P^k_~z׿kMIbv.O*^oly݌Oy쐩|V ;/͛6pZխ[Sn Hi߱KW EmZ,bt)rT̙^1CT4]:g^@/ ZԹ6zLCd1`Yek;?liV?bҟ +Z4:~.n֥ҊxAZJUWվN4i۾1(#ݫ{bz栘yŤ.ۖ`hEANJ^@/˕W\QVJ@%sUYL+f)^J1u݊WLzJ7,R0˔`+4mZԭԺ.KᯗBdԫ/i(}V̳z[bsI񊩘T`w +Fdnyڄ˥\r1K.1n56ݸ(}\<SI` + +f ݱEǯ +2lohԫ{UW._tх.*&I7rEZ1A&WLYSAᯟ w YKra͚`jּus}-~=Z 26A}4R_d4W]qe/ d.ix}`QF}?ރYtФQVYWL:R2u ؿ\y^Bw`=B梋k@ߢMPQo@ ?O 3)^1iI f9 ,ЪFo0߆^.Iugq׳21ƿyVmq/GJ1.bsWLS5tѕ +:z '\8O;Oh/`bԃeAVb~ST`hS Y[u7:Sy9\N4"vh(_qRL?xT )ST`Ě@ژin־RZ)gu!1m ez#pPڐb"(&sWLSyyhB)GʢǂWֺ y9l˩@K'cW?FSA2D%բ6Fez(X9jƜCcoIH1 t+ReDWLRтe]l)Gpo> z r(w 2`CEPL)TWL*%)C%+yZ3c.dߏmud -b.+&mI`\gE F>Pw\ ^.9rZFm N@1e7m+f[&lO!':QWL9SU{`?_yQ rc8!b //) 'RLMRL5WLS<ϻu[?de? !T!u 2b"_6Q1sWLSs!ji./@˾`FE4ZKڃI deRSbP̑^1iH4oS0s2 ;U>q(vw}8 X9@Q}X̤ob>LB1xŔ5UG0xzdoFFEbVL_'QƊ%Xb)k*\0&EAv! ಷ "Cr(ʨIP1bҞ +&#ntA#e.{AAd18#EOe\Ԋ P'1sWLS#,㧂쐃:yX׿/W@9 h(]Z`M1E(f4b+9C?hs=& 4ӜV.b_)b)w.- fE +], Ѳ$f41X1;bNEUUST 4 d/xXd&*ʎiJ1זJ1* IoJ/ ̽`bΒ-.O? @E8YTLW_/b_/J1)U*V0t  n#e.$/ #L)(fWLRIy!`jCnQيIt'C1bҙ 8i%Z3/01\ t0o)b^1eK qu +()w,Ȑ7DFÊ_)үSTq^!d$1Ӗ2 +bJTh> f_2 ]e1(Kbi^1eHE &)(H^vhb(coYj2)]+$)!]dLbbU9q-5yŤ%-J0"/HIoפ_^D1SbҔ}F#ԚZ02o~#2[1GC1yŔ) |ڙxAR~ad1PL7d{Ŕ2)L2ḪrQ&~At>co ^1ML-@ϸ?IWLzŔ5Lqx^*x2*,TS^1L%&#U L+E.H1rQL`}nWLR.,v! -"fgML +3+&%/J-ďߠ]/pQ&F-b<+8w_՚%}/Xr)^1Oe wW21)KX1 @ST`yJH06/bRR')_eF $Ƙ힨T5Ob uw'Fd*ʼb|"r$afsM*ʼb|I`ߋ2l/?_Xÿov{0˪Y1bR<ki01^1>Ss+ Y-^I b|]0" &̋&F%TVJH\E~/WX0OZC0t8׆y9)ĭB^1>f'/̍Q6G6+LH1npHB1sbʘw`G!w2fLgK0`Jg?3Y}H0[3 9Jl [0W"/+濟b>I] x{Zߘ؂ bs&TQ"#3$/h+J^ 4``nVK: ʤK1{Ť/$\%b ?uSd|S$&Gf# fm@0-\!}*/R+fWL$  f9 +f%,&!]0!^GPrb*5*i`~.o,beJՅ m%BC +L-ᬢ+`nIP0)`NW98`v2;"㋲x!~Q`15RbV2Edy_{LI0?7o[)3u 'NA05KIW'& A MR0?IrAS%`g4h`M0?IOL0 -YLLM 'NbbMU +&-S0K03mO@0?qW|stP0S M]˂9/`v%(3,A_F8"^1;|baL2 +J΂94 |`FY0^1@2>~Ϡ`NQ0_ \`n +9 +&Ӑ`v!c fqS-W'JL-ڦ`zgFZ`*ܖ`~`b<0V\E>i [0,Of|I3%R&&d̂ #GQ#?9D S0-`̧ +K 8qΚ1Y0`:I f; &7`\W' !+"3R|b<0K0GӔ̽()LC c$'!`F@/`#ܾ^1^1: (u f}% &GS`ΆeJ0msE }WWNNo++F w)? 1oxx_S`D*Lٖrxxň&LE +f\[<4^ +++`Le++`!`*`b~ +WW &7`>,`KN0^1^1_΂9%k6n΂* ++(UE`n)O*Q0^1^1y|‚W`'H!Ǫ`bvl$)NZ١`n3I +fyW̎<sL-K0X0weEL+fULނQv̫qוg!i`dVU*JC0ÂRQS`קc +fULM0:2c*_0p_^C*&LLxLh" &)&y Q*xR0QgU`bv<&*+N1 Ôy?R0*O0^1;b +;`bv0G0 ڂٱծ/v YC)$yJ +fGRL3eW3)g`bvC0c`-1R.(& ]`U`bvŤS04x )e1c(&At +r.Vɂ!S4#(& V5([9/WLUWLSqW++ & S SʊIzTaŔVixTexzTYxzTUŔ]0WSec &^1Ud3ĂiS%SSSz|rU^帪^1UP1i̶) +S`V& f"\S*zI`> tTю^/6ٹ+j)&y;9^zRx9 I-+`N<u9v +qLzzT%ŔC0`6N0E&%$|‹`zfa/m*&x-`ײu@0M-'xxDy/ R.? RQ0H *2^̂$`fS7(Hi xxŸn|h +f_ȥ.PsCF P0<`тqWda`?(Q}?e`0t13^ +[(Ɔ`N~ -/ Ƹ+2HE f=\R0'9F ̅`Nf*gVd`RܟWI`t!z!?`-G L+ +(&͂`ld"k -`ꛂ9E &IzҬ +>fI`El`q>8yd +fB fg[IL 1S^1L I@0.~Hv-͖_Vd& 2AKb)`mEm۝v)-3e" cdg^'x)`cVdvDl .ZZ-31I WL"lLmvbQF+ &Lng١*RS03 䢥1SV-FfdF HdF(3+ˆI`nc̔r`WdbFFN`LlpdC˧f$nUd_ϔ‰X)gp/ou"UKla dgʑ(b$ w[~LUdbFZ׉)P$F3 v0c~^1 ƪb<#Z~L򋊌W-A@d&=qz&"ޫ{&RfX*2Z埩[^shUK +5 Drhhr+4H̖^NC|sU hY1FƂN p"BI`gȢO0TEӫeKɘDbF% >Nhr@7nW}YbxdKY#;gEd+2QhahHf##!d7 rQb+j(&&E}`?&Z'0"F"4"bzXpżH"[b"^Wal`xfwn 35f!kDżbJCdV!6*}d* -[J`pdEMvBq2(bzL&^E&fdrղS;GZŐopIHb2Č&N$GAlGF_3+&_0 da ^PZ: Vb = 2CHlqcRc@32;^1N#Lf|e+,l*a&FG"AfoBX cR 0@"WL()W&0fE&#ǑP[~1%;ߏd3oB q"\s}ߪ]bzdM) #`߽? (Va%O `M d BF0ԘdFQb&dU żb>S: `\-c_< +Gydl)d`hL&7;$#Ah6"s'FBc2LbS@b)(e EW* `Z9[T0 +#z.İb1$ 3Hp>< +4~f-(fWL)`6E +Z1W'*gǰLJ-qHfCMN<أ&.FC!dN" N2Y)bOb~_)`q +01WaIJA<$@7j zWɄb$1`al$9VMFP[m+vM18&b#)Lq/OgӐ *[acg~)&I !0 5=\ R1kLF$bV{ +G/` *[:Lj2R$F#C!j?It`Fj'$b)~, %0jH&S7 pg)-Ss_zQMըΊab?djN0{I#11$;b^bż^1K0jR`:=y)ͩ2-zW_U w+5Y*b2W;BF3B&.1*8Y"(`}>"VmUQ +:Wјj`/CȀeٗX;Q̨L2dbbf9T^1R^l %b[cׁj2TLN:Dh>VL95svؒHL3,٫BSj c.ør!wi` ^F b(b1Jd0;AlgĠH#QQLvbvdPLcVLx +&"i Ƽm0`pVӦU A5)2&&AfarTtt-Gf2nɈF+ykbrI*2L`xLF5+2"H2h!jC3]m,J8˲bQLlyũ-^1D0_ 0ofjbps9eLL'Wcdl#r8rAOϨ喛3?bQ%7iVSn|jb40eqS;p/Y޷uME}i5N3 P8̎Â:DUs1^hFF2FMLm*aC1W;*Ⱦ Xg`&u6nz1g!d @C 7G::sf95p#h I&1qsP̙.TWbb'=IL"[cp{?ΕE3R eDCd B!nѮe`Js bF1y(RL;e ^" =neX141_X38]2Ѐj"sl &U၄F0x,?w00sTbzb̢b2'5&>04V~C&j.I18( u٥d pC0<*'8rW4ҌbZ[[*fWL)`^"o q{?ɨ-:@s P bu\|QMFAh 9Y+'dp%"r@@#9GNQ!3A\,bnq*fMsxE*& aK¹2v\})MZ +b*}%J!hp05tNqzuj#n $*3uކtELmoL @ 6`ڄcpjq$XDj9Q9V> e1mLn? | fK`bp!>F5ٲ%R1S'M?nÆ(bnܱCm3 Qs qExDHm\ՉfQ  B2T5@LC1)b,bS K5bf3qcF֣-(BdAj4rkp٩bnK(1#9B8 4EYR%U.,-)`m0`@od?fϜ>u8)[2`%3M p : #٪'˺(e ĆAr EC]9į $bh,YmL֢,Z1ۊ92&bbT1u݊[S~xTĈ9R e!bpV Jˌ 4HM `z8=n$bDRg}b ,x F %PBX.6fEY־_~o*`MŴS1B1?/b '/61 +/~1(L`Y3udeP3c 0͈ p :_D"Wvj&O4c7b!bToeY~_b~b&b[8t|\nt٩_0GPCk1/3hc'b/]xQ2XM jfш p :Ðΐ,#k;$B3:E0H AbTf_jN} I(f(&] 15)bh"/Ff 2f2 ͝rF!<2܌b⮿ ; dZ4Ցeٹ1e-TsC1M1ltHŤG0,b~ l`b֮^0e2!Hh&N@lAv(w2ڑQ +QZ]Sb2+bB0b~ŤZ0alk1TqC>fZ*ˠ,ffhLFlAv"|teX@lAÛpm9\99@lEYߡ],PLX ]D4*T+̂f FPRvi`Q61F%u[fifB> 곩 Mp&dx 8Y,AhD +6I2TIb*;cd߾'y,KbTLB@1ᇕP̰˲*&R̶b(6>c,Hd f4H `@N%x(3gݒ 7f `v~ 3qe.&F1FQy&bb9sB~)1IyE̳Oc#NYahEl!v3dԩɲnRK=ȀenuYk,]2%CrJ7UjcIޟbw*k8 NŤG0!^(X2E t?,e[3 p :l!#!Gw"~CƟVcdQ&z*fTyG)fCH1cb: ԏMVH\mU73- f l$ء5Ff+EcrR2W1mb.ŜFŤR0?"{w#Òu##1javDgU$aD`8mY'+@d i> ӱl먢謁`}Kܱ`VԐ98%X|.X2dn P 7# ,є +oͮ5DFo;1@ە-QE)3b~U\d(Bs1SLP1Ɵ/$ ɌAl"G#bldhhC8bs8Ļ711meS'e?؊99bV%U9R1mq) Բ*& (Lbz eTaeHhat$=%25ר0n1#1oƟ.j+f4*8b)&)PӠ +LdQ&:-deX3FP08fOjEr%Z#Z02$q0:P9]1(1jzܰP!RDK1sPS2<_`ܳe71Al&ّy=X19b oD 1 bEG+qsE3)4)bG1Lhdf$4H b87l^q2|4J4"f8 fhElFQ;b(b*H0QĨL)AlGc1cph6'>j^49}*ʬ2.*)LO1ddFphxb_(7V|8|x ec?o6Q2b g殘"09)`'7Q`X$Z1&1B2d3EF\c@^7eLgЗ=x!~EJm e|J!$}[-b6$bڧR1y +AL$2 QC(r,|bDžGjz4YI̊e=GeȢ /o{BB Ebrݴ\ɊIT0=z->VןY0A`2c #44F'DւY1+W,[ 5(IYkKC1o)5̬Q)SLl%`ZFߋ ܋ll8 &v}MGK"(LzL A+.,pR&~slUbB,\yM0Lj[`:s/ފVL8 !ah MON 3|>LEYv56 WE._;ۛ7ѲصhϺQql(bR` +f݉I߉01Qj6/\ ,y_n-6>@e|G!4ZlPbԋ(˪eE~%YLa)|IL-1B0 -Y"t#tRh`,bhfo Qcc$Q|f<yQCQ[_2LM1[50WE?S1Ϣ`FSLc)޷D7i>Du/h58VeH D 1te٣+w#%R1)bMK1vQ5ezҵ,bL|EB`NЙR0 ‚LYoC/xC_N111HjLpD0=7-lQgq돝 UEMʨ.$tcb\m5Q^_ (拐bNŬyrϢh$+\0u`:tf +fVP0/黐L0Abf$47/6u|!p=6yW$UVVWo|ߵ} fG/=_DŸ-`5og#^ƂA +a.^`ۥh FcKF #Иظ5nÞ1! M_huK(Op(Fk2"c 8,ˢ-^F <0A>C]!ւ=n tzX ݁L!61? HF189Nr3'I Ge\z/q8Z̊ #%k_L< nW/xe2NZbz +A\ ii=Y0wN|̚u F͔@`41hf$DwƯȫФ2^GPnm5_SpEb,b^I>?bLI3eU^J"r&^p(p~Q5 F)AFs{ffl%nyd#h`X8I!͌.A b>F .pR}bU1e%,xjcmW+lDd%V字| *&`w#` ss,ǎ{{txR|Zl^40 +NN MRFQ&gTix?tF[1 1)qT7ѧ,&R1;f ʽngb!O|MT }'ze˪L`˒ᅬ$DLhHeR1Km+޴䓖3&1-ٲ82*ZJ1S'Mwȡ~T<>s0-8u[O ċMLVhrL.^WwU1Zb^\mϸFx1A`>xVm6e]cG GmϢ8,z21֨#E?K"Ln|w)26AboD2?%6QWmiG~.7(j=1ńVڌA(e]i|j%=f!,&jQFs/-wK*N^01[YϺ(s(bq]SWmUil;4_,8J1lPу{9h2]fQ}&P)xw`ݶѺY$^hco ,ZZ3ekX C01D Dqc{SbĠlnu=!P˶ZA9̔bԻbĢHZ3e]&,HJL^b&*"cLlo|Ⱥ`W$Řq7Gh&1_쬖]OO^Ze>Dj͔CLyLp~"[%a1\D%.+EV1({0WZ!ȷoǞ&! I27ژ/ >w=7d9|[x36rxݮlY<ܕ|-% 2]U|Inij;45FMbgjݵ= 52A/z̮6 m,,Hw}߉|"ui|&@fJIG$/0<,G-^4XԢ)F1Gߏ7 2Ps,Dk|[ }E uLll㑌k10r {X'1` +Q'}JZo4jc$1Yn!CQ5ٲBnAE2m.-~4-?m#S0 yZ4B17ٿ)EJڥ^1$^'gC_?m>+v1) q_l\q \lύg\ 6%YGsw-FƫƖ 1#  b39S<w |I. Qf-2qj`«6U+ڕn xꥪ( ;A`x;F5'#> j!8*hKZ*5N筺o1$|/v2 51pwn( =cYbGYoK׻y#~Z-11;@`diw> e",c˿~49~hKZLNyEjt".bb%N>?٬ G'/=+n$cp?"DdY>;*'M֋0LT1n9ǘsxqi%![O_^ZO^$j] 2Nȱ&K1e't #~UQ` nc O"P饘|?^9߳{sc?o02&;NџYб"Vot|R9p%1U6NNe?2%1ŘwReTC*DF>D|ǶgYY^ūbN湦7Poc[K/YIE0:%qd闽&S1k\OSQp\6VR8qj;F4t-9|d1gdFEvd"3fdjI%D Ʊ=oLbhx"/Z)[ +!g\%صI_rE@wb~]3d>ddq*?f32jcFʞ?ip^e+ZX'a }I]˫j?v<>&-!&0?U1zJ +},ʸ1D?/1Y c,_^ԪkF&pq/d,w[=IF@Ż&sW:aScϐ/ RKb'nS1̆}ַ4xVE}+zlb2N3_Y !eMM6W-+r*Fmhqhrn׀>my0f%:\dXqPLu)&8eOF:I;R2̿Wgv)8Z>W슅_zV4$d1֨o /SO K%c|]z!beJ%Ѹnz#~QQ!&x.MVd_'N(L0{ 0SgȄ1>7ho\$3GH6huѴ@H.XXf=8 8\ +2܆"|@EEX#1 ucbYw {U]]]ǏNOY}{}*53J~8YӕBlϊAbm3% c[ndp9tݼ SrS9;Rx/i0%ǸDkC M:Oh]~ +s#b-{?UYE½T{e?'ܻ}C!搬cZbQoQs~Ź;1&8F:;r^Qϙf,:$maiafuGacXM:G!wno?gS> xrNޥ_}3Ǚ&4-0,=#ZX Lc +?s g~~'~5pY 0} oL5z MfD2 {οco?m&]nNp}a !/n :Nُ#{CL%ƆW=n^Vi4?w2̯|K./ &>#L0ß_c6]5amY%Z7eUt.BT5G*gDw}?"6LS~x2W +6CzO^~AjGSՙ+;CIp/m wK /1K 7|'ڜ%|G.30 + 2b0eY$K0.#2~d2 eG*,>VgKZveu@~"FS%2`/~Er-EE ].mKL""M2 /1.042#e2"(/;8c.?+wh?~TS/Tys#źH.Eb7K[>nn1108ò_O??\c%_P`~yX|SY|9,^7/{`fY5ddȺf?~lOv;A-j η%sA +O~B/qg(#sϯaXbm5a3c0pkq }K7 Ŝ $+zO)yQb\L%!]F,gT80/hDB̹|ྴH6z;^j7*$AHd€cajĐI,C6Z=:x4Kb>d3'';t$S ~L/H(s(^^>+}gXs|/gn1,.buCQa`M+G?F|;#h~_c)i!qi>,)Db;")Sb_akseQVÖɐX7MH@4Esꗅc1oÔz=o0Lxc[{q˻|7e;5"3ITB0/P)~-{%&l +senTy@0FT`%_@D,_Š~$\a# K#a)1_;\}?6M_FRy4e#l[ۯО 3A7W$?u;0e3Z&Lq'1LȨe̾ @"^ AX|-b1Ne0~_aݎxm0׼e"`/N򭨗7IZ"g"AzخsdԬHuR3I,1[{mA6J9'Cr2dMZD+V⿔fqY 09 rl%!d)1adQ^d;ugy'BTqF~$ ᰷H?0E7xk9r4px.25QAo uKEb1aBøki{ 7AXEYp7/i+4qq݃2Ǥm6ӿq +[ D !5U?ūagH]b^bP^S1?~\׼O,2eb3l!< 9[x|X,ap_oz!F2$c@ Õ< mloR}BDdyy i}l7\')s._47 ɓ[^pc 'Y ܚX_VZ±xޡacX*Re=>(,er97z~yU|hz&S"s ;oz+$9/:|].nIWZb^~ e.gX4t˭G"#XFAYⱘa^0v߶rlV2.1ꣷ#+E拎q9^@uֳ_ك҃5@D!t %"-3Hfw֏$ 2/)fݮnI+e^w;e6H2Vs̍7!@LC@VOX|C3LT\`YŠaM#jJ(;H ^!^" =5rMUܭK +.s.wRVI,1.1ɹBo[v}SgY8{eLw"ty2@ V<<P jM5u3UCT1J-CXj$Z=hR jH"h4r_^W620cc/勦?]0KZN2#?FpL8e D~(fQR6Xo%{ʼc"#_\O:\+˵ctx@,GD",/7hDBv4 L!۱1OaRKLKb Fh*c6HԸ$sqS }~Z 8PYb,y&}2{B-Ƹ9.1wǂ +yyF`V2ꉬ>(h>vFBv~MCvAoia ,ul~و"v9i HD Q}(,bxKe Ŗ-ʂc"˰aEW/G}P Tȧ@({mA#!۷XSž:Ɛ{єp DKL 2~F;g15ua':PPTHgA3Y[ }e7sK$dPW()X, YiKhzl%W^P!JDZ꾏\1}MTq/SȻcι:ԋ&A.s5IQeH (G +ubΆɿ]Jw\b.^?seXc|˾` fd1V%+ZUy>,PE"wC">|Ȏl|٥3/Ҧ}! bݿCHr$T$nqs8hc ll݉X&wy*A ZSD!fڲ,iRfN%F;%^e91z242(,x=k<34TKMkٶK/ٰn-R;'i +nsrI o¹kT»1P>JJ)@ V`;< l,dĜE[g'.2. +" rQ>ڀ:DЇ34;$@"l{޳[5о.8ߚ.XlwsSJUdtC ~P12Юbٮ݈ F9DfEc1ar>~'r_ {d "񞫅XF>5͝J` -u*TS\HىahrڶNjH2ʢ#sik`>]C-P wYp S31F1a1ew)VKh)$Rz@p'v+r=%rՕwIَшv !BSRHݜ[0%&4 +e~I:F:`S-#ݵOFbP=H(Ef1Gީʩ/QtVJXd-&2{g`}Bݑ;o%T}@S^tTHdvDθF$ k~_)Dc{sJxP|'X&Z\5_ A WHBQ,.O[qKa(ӕX)`b")VuӺueT8`?@LyP"SU@v]Bj} !')шk!$b{C.1q>wqö=y#X34@9DA-rI+7h&c$OI,c30 ]ۀh)2Ж{W *dwJЈ?Z +͹%19漌pb jL bIY lg2\C(K_YafRBg&r"(NXq#'㚽M)hU"g6Ȏk$]xI!7 +X P*bIDIhfPr# E!^Y2s4L:a7ƨc$zebYI8D%!.#KRWSM)m!K6JdW5BNTuMDR 3$7ԺɱV,q5PxZS WKbpäa n1c0VMjf7|VeRw9Vq*Cu>T U!QceyYg0`M4U b{id'jPDCe\5PW^I=ąbiYqLԟ^-PuQFl+2K<%Y.;IJP;X=˽cձSD ^!̠DR%y:24BK:Kކə3cL1eȠbe 5Ur a,. +~Tr c:FDWcdY<LʉTE\vcN}@ N!DRwkN.Ahm!T|CO$}GѳQ9/XSTa + +amY0LA&snnbs2{HDloa+ [r$-ԓ#HhL!ĶTJRH!1*TeHEr8+OlCj+Q%c1WäA(GHr"*d2$PRL􍐂uHk[eOCp1\`Ab_~һ٩vr:'!?qÐAuPYe$shqzHQ*ʒ(g5Ac:ƚ"̹30 ]#!("M +, ?Lc> sQ%hK}jθ !楐τ-)@ c*zxY-a-遂"6* v 뗔Eo$FtO/d2 m#Y)6JPqZSY&pR]4b]ĶP^S3iY=Ǹ́X RGZXk ʒ(b0I(1;ISuX-sZ@r$QRu֯ +0 1 +qME A!DN<-dЎ L+uCr#G/`e, -9ԠI +e.VtJ`qR0<)O$!2 #mp)b] 'J@+=pSʜ"=mA"ޝJ4tbY7LjPr.nJ#8괂:}V+9@+}H7e;Bk)h)hE;,vDL8Q=A* D #b\-%; +G-B0"$G8LTZ$Z)!T"T$"-Rߖ QTgsLDItQkH$T XzǓ(1hF!9޻r+@P('RTj D 5Hh\sHh$r{5՞"1&^81I$aDcqҳ'^}$TG:5d$:`%ĕSc7& > liL!MՏ%SHIhIIDq}$aX:/}ԡXbs'Ɠ⣀h1ԟ endstream endobj 1123 0 obj <>stream +2"L>(lA")!̣K"hQxF6R&O5J,'E x2댙: +rqh@DBKO$h1|8}if%Ds9F[! 5 oXǍ˕CB>Eu y8h?D\K=F\hGS6ibʛ&G^Qa1 [bOb:Pk)c*DHZj\ + ՁAH;u +іԈ2HqeQ.*㢇iM8Q%Eey!$bt5WN!%2yB N!PD|Kur42D1L!2o`(/-@ D(TJJu>(X! j?U>*G&#blptu %_oc5y>D B|II$d!i*,LV9xkaQM69p |H9J2.T"7ED +IIķJTJ< ƊHC%nHZc[&홠VE,b#bۉ`! sQMB-E/&R\7d'g +dY0qyt "!_oW#vC)$H$Rs42,,b4EƱqD#dI+]#F7}@B\^wIԡjd@Y8,'1b,@gqx 1{u@+׭Yo.zʢ@oE:1BR0.d9hD@bDd)E.,2@#͢c +-clbUP+>"B%2\R^RL.裋#FŀrY&xOd1dyrx &I%Hc]]6r4&fC8JG8@ HWQ=$VH,TKFz:]n]kGŠde2l'JcW~Ÿ<  +$/em"$tQ(kFdhRlIz'׌+T.}P ^!Idx飋^KG_#bd1:i|E'i%ƨ(&B2i4x2l_K" x)cY4MRSgcQ%G+#G\ҞI)Og\+ 9}'jѕѧK#Ȣgrٌ3*şwFDCRƨ%3=kHK=,i\ՃtYa$3Ҁ50ˢ2p:/GE,sE3yU1RXy,qfѪIXYQQ Y*~ԵbX$o;d@+`Բ`-46q k1jR%Zj.Zj!՘EA-q1Z\2:`ǘEa-ڨO5+QVZ![vnZ?ј՛mAvj=U9j*ߧթNֻzRmIZmSů#m7T*u [JlZJSs"\3q9ɣ*ԛZhۓCpMIvcN:n?L5犡;L!46RLE=V ]B~@Q ϩ7WiW8v1B"FOʑUiS!yR) ]tLhJ׭uTʃj7wnuP 7HIFMa9kSݪ,.Q26<:%}M)O8ޕ^֪u;4TOwkU":F(z;|SZڪ勞ԩVZb`/~FWVծHZ@I}Q✭9rfc&V:szg7mظcz֭vN.ٙ;LtUN:=A; endstream endobj 1124 0 obj <>stream +%AI12_CompressedDatax\.b~4`yޞ>ۅۃFCUi[*Ry}!wdfI*JB 2yY\o~v0?ݾ_ï^woO>Aӯgݿ׿88{4Ryo7^'?Ň=>~?OWߡ&ڟ|ȿoXߞ6㳛7߼?߼O3x֦EVGc5.8EFO|ydǎvB7/޾yq׷o^y/xF}՛n^=ݽ|u ; suny?c?.kn~K|wFx _ެ?>KY.tW_>W|;l;{/cVWX /% |rX kb6tq7uNNoNW5coWow3~.߿{\B]޼lα>Io6?s^pӳ~w:~uoM^%pv#2 7fNݿ}OnY9_|@}o߾i?\M˷/X\vQY>də Cz'rĦl^OD'Q=}n(4Ajr/}nxwXM°맗U>{dյjc!#Wc6XU=A/_QM}?}_^8ܼ~ͫ9:7c_H{ڶj~P{g׿}k?4h;H>ksP3~/>/_}h?f |D!4/K/CwI|WdN jFW7~6}˷Ͽx~KP?އd7_ 1ŵl(&QF{7(l*wE\vݸ[wAv?щ1l.(wC'enUtms2iܕ/]]4ݠn.2]KKXŜΗ|s>xtpgwgs{w{=X|}#tѺ#t-3c'2H`!0h#nF? s7-V<}ܜY7cݐy#OPe: m)twcwo(%Io&Ӏޜo.7w7w޺[/%ۄQF-ηwg5p(+6# u;`ٰ;lT')'tƾ`SG-]X${`pXt 觜R(!AvM6d]`UneCǘ$. E%6)Li>.Ap 2dPt3zBlF (?[b@./?ƝP&Q4 A"{̑ &6qBPF)E%xo &al qѲ)ٖzc1d)8&Dz{[pwdybr7! dF1r]b1=\J2s y_0)LqJ՜7/R r{ܮ>7$o{L-YAf[9ZF]sSK2d(N*3q(+9ҿNRH#0Hɐm~ +c9~Yܮͪ6ee_UIW%_lΕ%af)_?M2?7rZiUMɫV%XZ¦UqbW,NPvUn(/^m׬v˂V]oLs32C7e +7<۲WP*J2]-\?l< J+Rve۪++)X&x {;ދnQR+}.E9g}P*DWȲ\9ۦ:Ri甦RCn>EeQTq<[y3kDd{8gʰs>愎s8]ݷ8;8O8O|zp۝sYȫcO0ʏT^d*H>)GG.F5R,j+m$ @@TCe[QDIH _ JBnDUDr8D*> > f* Qr* L|HZjV-R5ua"HܦM٪bSҦaˍoܨ"ٮM[YU˹+]_7u,wK%^)juFEP)Q('!FsP9? ;-p=Kܬ+ꉣE/̥TATڰ{7F]p FRq앓\nvh~@푦EuOVthBQkTgEinDs<@c6DACI#!t $! ÚJ7iXkd?{:JѢeUeagpzIlW+6(V %-7bY/h T^RZ/aQ,j= L-ni%c)A#9m1ހgsGN6]) [>E?}RdNy{ˣ;N+gdz׻hE苻::f1z;g[E$ظ>.dPaXHkQf.u\bLo{[Z&qk"fÊmIWCv8x}i؎u'^{U=7Fs 8.8 n{BS:1{wEi:2^ +66 }//P&`_NDnIaDD ?Zq,.-iPضC׭F.n m?t}޹t!^ao?~`so|1VX&zϝ +7r^-ՙ. # V7 &o=rIxɓpa2'vs>fDZDrfP +xvURǢ[e|s^g и]z<1Ek&tȭB*\.3zuV*PYP:* +7Q-< E=8{[١ȳ("NW+A<.B+)֮PBcoJF*Okq_yOwŃFO-FZ=SlwSX9@co +/ڟFl]"hc:Wiv_;|qÿ_VgGg9coֹ߉[51bif5z?W::uBI]ŠWzZ]|QA{)qTX L"g"Yɤ0TXZbT.['MuQ5WU{y ޺^?׋}[w.+RV>#nwXGr^;dyչ +RIhݡlT&PO })ur(͍2.ORETι5>붿֗ͯ{6-FZȌm@1!ML~F1GpQ}: +H?\ xܜwxnV$m#kv +Y$ѤD=RaA:"a` +T'P U.r4NWd +(f@n'B%G# @ +FI~2O Iɉt>C-36G|] k^ifb:hAJ4 +4(ZwEY(ڼP=5,sXq*M3)K 7OW{<6_ZrS S9Bݫ!IV{Hrt3;3;T_wc +\\VxsrReqZ޶*2wCsMviȧ^)l] 辋 `i 0 %*rHP5}!cXjDxRB=ԃ T܊׈:@RރZݺ^Xv(܁zO֪刳BUun+XSîbwWF7D?4Vzp,VNm_W&ѧ~܀ Udhq*~M[~\q{LkuIʭ* Lne~['hqf{ǣk.[/D<[Ҏ5gh;:U/*PWyj6s:Cn1f 8sT]Cxm$JEPX ًgz-Q;IÎ0VVPj,X/u(gVBJԾgO4q.ݵ\q.a)CܭtW2Rֲ簒o7+mٽEYvlа)[?V/CڇoZbfZy)tQunjb.v脺&vh;ĶANl +ۦQ(DH5VCF^X-f(ѓQUE {EU/]3jOOUJ]Fh $Cr.rɍ[OEZ[.HEH~٧FL ax+6py)k'?7sG)9‰ʸPد/.`{˭2YȐφx/č#>z ,T(e`@{V0cUX f9E!vZ'C/!غ<2h_$imj7Ֆ7xt8=,>އ]Pufx.=VƾӿD}< t7,h4@ *ƘH\<G +1@1aNE|'8?@*Rl|f;!Yǭ8?^d߻xD$@EupRӠMBoIls󌬗faZ4FC"4gYTs*,"qKTF\Ԩ 8,(}T-^qH+qm\l,?E6R%h"2̲Rn WJܖ`UՒj~ewD־ Okc; f|i"mi ( 5Q-(^bp)eVbK]u[Ņ '] .tcq)Faa +홊Y醲o!R"L nu~V>Ǣȅ4բ?aTZyMoAZ?kpjKjKhJajˎeJY4aIKmXo[7/dE?h dRB&E Ȕ׉8BY\u@!Ґ5ن~"j'wfzihR;YŹG EպiGiJKY6f舌iSJ3| "tӰC.Iأ4ʏ~~ؕ'HLUv.,qY {.pI݈F,6̊&zI rQE܂gvӐXAľ6c[㰕Xax +ul=c[/1*QE=&>` lm%SYkM^SbZb&y5n+V1k]3jmLZٳk=SW\Z2<MNH.G +#|G +#|p Jb1L9)1;o ]Ri+냄󨌴ӭĭ=KٴT1?CG +675=d8pLv#{FQwS~b~;?;8:tиr/r{}߾OnzӃ6թ,gԖ\gH+ӜUamҖO`BVnlt)Z6w,oC0gҒ &`N^dWP8CɨO١$){DC` +Zƀ WK5nr&,KXJÓ>wwTTblHi)1 H\'}#: 1I'kn$ƑOYE#ħ{|^#g [I'%DWS0qVtͳMyJk|WT}ՄTxng>.OH>8:F0HzH&r~~o^\ @Zc|*Z%ůknѯ*"=NqF+BMKPT2)ߔ KqX*>&qHN#̹Dk4+^q*w w"3OqLkUp-riNSjwq?mOwn@Oq+p{ ۰Ksi b.v5僚;!73^_cU&IJV-_u gzqTt'\0l0*Տ)^N WRc}_XD:xA؊@.xW]%-V r%Ǧ٪&׮b2gB@熒 lI]MlOsyiKUU0P /C;%9zˆm$$Jg..x#=.6U沃d%2g1oVn{܆Ndk]&eWnt 1SV<ļx"`AܽE./^[8cɊQ:uZʮYI]8يEM'%&XQ춒!Qb|h$v2tS[A_n@Z\ ̗<`dvaNJƧgN͒8l#6y&vG+Gr=^~UKxp/ׯA0᤼<ٶa(<_s%;A.kD8 3p NS)z(c'[wKư[u[CǒCĘ!\sI=XCkP?ڰN:mWi*A:I12cOBIcpo'IngvNX[_z1_sv_3C.Z&C h$@m,9: +_A. 7+};\Msr_j]=;Ppb'b#pб(,ˌpaN $rMfWm*nmVm宄ʞXYnxz, +xhCWp¾oQ꡴Xvj8#Q@7 P)؟[O8n~.눹h|2\qXrJ{wV\AbRqLf{jj,R=F7mM6o"- J2KjICrsWfTo ۍz\t/"+2EEbDNXiKH?D4XzEEվM˗Ba0Z93T8?00bW%U"U4|p|#Gl}cV>+rWV0\baɎO̙W|-O"Q'^:|X4a 7ӽ83K93Bĩt\DԮMQ$5r>kZ તLf[aEtܦ,1d6ռ?4W!^"q  +[af%L )$%JA$L"38EzfZiXR9IH(Ue_*[٣X{oEm1`Ց?FÕeOY$aod)kj*"bFKBq&+bY8٤P c5 ջT9Üq{m90ĀdFcK58z/_i*<iE;p1LQbCG'|!qQD#1t]ЇUR;> ]۩ +^c޼G} 0n|w6a=g^^g&6xW5*fEU;lXP4qy +9g 9ōP<ܬߜM~17i;cN‘;VͷvKԃ$[toS-Ij<? +ߜ*elkG.C{jVUkgMPM*ګQ zpu9 +o!]KOfݘyHvWUȐiaIRyh\ݜhu ~y_q7~jΨ5GX2j zM@/40Um90C*'eE'U9:ixRf +B*TY;W٠jN9SSvT’b/"Üc(ʫpŅGsx4;9|GO8|Gq^^no秷/_{8B'?y&We"]xg7_/_?Ż;O;3twO~+;A$0ȒETY;BuXi2 +&Tau9\Y$oр]D3q8b9FFc6 ]>bve%`p 1!N LWbbH*-i hqR>US-]M} +B"+%sL +,!*vłHc<{>C! }SgHP 5R:F{`#jJthIt08;Nx1I9& +S$hҥL,@ݏGlmJ&#v6VA=az#OwK0tl쉯9Jexl Q}MLv HDD +}A7UfieSy{nӑ +`|+b?~ 6Yě#7|06K:ܘ˝!=FY:MW]7rc[ćQh`z0f{4HU +=ĵ +/uLs+FK@ܫ G¤Yjz8x At&}aG&,P"hd̵纍ƐT^%]OBcϲYG:$^%NceOʸqOYp230^|o uق5ZƒiWh*V 9t!|~lb>Y+Vg-&Vу}[ yJp)`CbƜQF-_+tXOC%+򭠣të4igM;bV*oS0?ՙoȯ~`n|go$/߾+FW p-'?=_;IC2) 6.F\1Qnwl7Ma\xS#Iq$3Aq_IHZH* Fzy-sEe"Q +׀J[_÷FW}67$)L>XG&w2$>\MIܪL1QśpZȓ0|+K~pp:d $J3-&zWi+qV`M8eRiܐX'\ X0:l _V] +(ٜd2nܾiЎ + QXv4 ;8‘ +~FE %I%zl|Ɠ:yu$<3(DwIk<\eq&cR='̮pX X5Y#RU#>K%t8P&GP"0=Xpn | dA- +23A(LO:+)'"LӁG:"#>0>P))hԑA3'7={&a10rHL|/£pl h8bE]ip\iW8[!~F[Qش9bd.oHjּ悴H MQJAۺx$XoS1=72gM + ;Aذoau!OM@TVi+഻2>=ρo?Rݵ41]ZoTlQuf\1?dp DJ\HKqciHON"v*h&(G$~tB&(d0HD=xkR!AUIKcЩ@,}ԚlGS 8EF@)hwAK'!S;,-28"VnIM#d'ܣʳ׽賗i@8):d$ 1'aոcNzh)IԶ'}kdL KFD=^XJJN Le[F]#p@k# + LTU$ ֙r`색*M+kur ܃o6"M}N7]7T#ylE +*+l@( l {Mb A4M+pO؉G ; -)^Lש)7ogar;Ce(a];Դ'#(8J~S#-yc7;uکc4'ȭ<؃!REtJƮdQ'M3 1Kc=jE\!ܘ[i,'E[V*^88Ο]Ћ}[,\G,GI#PÑEߨ|'XU X4Gc]G (Pfjj(1VQ{%Ԕ,OHVw,7m4qUTplM8ֈ6x CMʾ)g+VzWs8G![$>|[Y[\&d?ѵo٨cG/0 ѵ&N8ޙL)OJdi4dBti_-펥mѾShZĕpBeV*ީmOj_v,ӧ't89 o=MHDw +ٍi} RЎ4E&i,2J8T/04_Kt$ù>Aym;#%ElJF /GҴHv-ɄOwN $. +4"Fj)y.紤R#;F4ƩWp{_F%0[TEIʍb]h 7 {]CG\{t3\]EUrHnnɊuRH y@"[g@JiE +:zz!unA 0 \]\ W'D'c?Bi/cpDZJ.X&w%=~.[KQѬL5S0uxJ\+g߻`# Y8b:q*4}'S<nL:8ΙĘ鯐)N&99Rk +,xjq9b>Ci=89! \]9iʄbo|:iKl 4wcWNj% mWz/nyݓ핶_'/0jmJN0#ܻ[v-vBwi=wҵh^ia#%@pljy3*P^ؿSbϗtnv{%$81!<F+h$h cj#$>3(X( %m9F:fd@-V3N+ +/$^io,]I]+:SZQM6~,NE VSӢRfn~:}r0%GI ?YVj2(X=(nd *y9₩ph\q$a<(! +Q&壘Y-EYNzͦu"ӓZ'Ex,tD)q5Jihɓ +0Z +7DTZ  +vZꤪr rN?!3|Bu}EM<3HV٫'Rj9751)H[oL@ų#F_( O1M2PlQN^}zKj|3wZ +CIpRiN3ct`:3FTޑn Օ׺/E. T6+~ Dg+8z.YZZV/@f!E\GWkb%XЖ`w4} /&pꧢ>>I"tl?֘Ts*Oi5K;aJbZ+!(W)}EKPK# l1V@eFPv9SF<l}WU_؍h +ϣD)C|4RvT ֓ỏ&Yz3,~$lܯ_6ؽjZ胺i#+4{6B젚#cKo5g y DVppH"IBRĺBqƅYư{ȪKG .%ܤ0-xP+'5jh̎BڎtJ>nvkE\gjpH8 z6]>щKDrFx$бR+\i*P&[" +EQn*^Do.} iH_vZI9C3NI]+ȌvKީi^37]?6cy|[X̂'C mя vdmCvTa9k/,^hapسɄ!t-7dӪCeIPq7SO0{t\`LE6 +r"{M N-:Ģ!jPo9& :I,XE:q~""E1AtdӼ;bg,.oҴh3h5Ii0UfšE"+Zgy/ !:x>-/Z {[sw3yJW%T3NWUEz+n-7Zը-!El'利:GdߎCCz3[]l/:01wta%ZAZU4/ZAJ!cBV1褺WiZTco3%]?dvCydIf~Z[9-xQ^m?qIX̂D'TIׅGZJMq%<@ ԋ}ۊ7mB"* ǝ7j[*Dv7]OA6\G(#8`ה(bj0Hz#A +܀Q,Hg!K(۬ؠ‰Kx  Gњ5ȍN  +ŀ6Ovv+bUә,\M+a0Hle{P9Qֈ.TvӚ0Ug 3Ǡ.eAGEC1yE-21b 1m! s 50@ 2׵PI| 2wӢÁ4j7خfL*J=JHm ./SCނ1Z;Ɍ%Us.GT`rt*eCW.G C$ӽQl9buEScQ8VQ2!1#Fc :p9nV,e,e(uǾ~ps4IV 7G]18skZ3 k74i+ę }B +Mnc}[NHn&!<"  O0bi3PW,PЧVtE9IF;!sͬ +#x1l[hZ+n]`EC坑-7Rΰm5 8tCA<ۂƯFݴsۏ50ْ`86:~rѴV䪢D=!,fb'XQg%CV(^gLgN'`预 20Tk56'ۑbB?N_ٙa-wU8Oڮ5ޏ:6@@ۖ&S'$j(zqA 2Oq1SgB.?4[oL1/0n]uk){y~j)L9w`Hb +0*Ed\5!soD 4@.3b%nrJ{UszV]U m<)F-ר>M !:4iR#e6ݏiXeiig#[%.hb=W/abrQkGhRS9Y'|f[4p4?l+VUcն$5M?ʼӽP짠<-1$[&IE~$_BעyvoZы5KqtCXq$ C[JSfzWӡ)bM5Ǜx *CfPl&]+ZZC-A{&@&$Q,1'bzj ZaubnZьvN<0Fn|=-׫E͢ҧ",\tJ'Z+_A{52V":*G5*Z z*W^ŕb:Qw.0H`P=)I`ME]aU +3c&-wЛJV;߃uA7;)XPc.pJ'g&Iw%}=[K(T6`J y= AxE}PvY*viyN4niyr1WgN0ʊ)TF4D|R {ґh@V&>7*G*/-3<Չ +\ق ɥ+ȣwZ T6B1h +hm3B׵TVw@G7:( +ּG η轝s(AYӀ-Zީ< s]\ڢ4W< .;> +N%]ķϩ{@:Kg~LAǴB_y21O8j>Bߪ0`1wb}}JQ?p؃+[9-<=DVO~|s{'}2h?C>g_>_~zn5yW:_y| Ƃ,{/E=볷{ywN.(ou˿tD[t +7O,5ShDMe_ ix7OsB;\I9~ת{_/ynO>en8>y[?@(D _-*;Gă rTRfP1[ae,Adp#+"pF*x +ZT:УRS9@37Jn, hFQyP]r;s2W'~ފ3.:B^8U+KA-ے4, UT8+: TI +_3qM0 r7p 1zEEFA +|n0bJ(J0wxC"P!RIUʼc"'B]L +9*˸6'J"܍ZzTJhĈ(KrUd+:vK?^AT .*M%u5SA[ 'kZQaVFъoVY4oUy.0!t Y$ šdT\I-1a4@R$C1 )_Ä:M45㘘bXTpqȧ@֯%Fa#0Ff'Mh@B,XqŒvNS*h Oa}ĬcINL5j2JCj|'&ppobCBI +?~OZEURV +cSy0GYen +s򭜂T5̿UfXRe2B} .{@93]Pt#Ś`5; zaMToF0όH8rœDCS& _rRS\$Le0o%+-F fYZэEMTܫ 3ON-F p:q*Ac #&dxlue&] +&#"UqI cJEҐDk$Ws<#Oi ͦǘaҀY F'r &C Nweͥ0S`i"NS9AǬ\nM"⬇Wi -)7|)%E6{̡x4X({’ ю%(w%h;o1 5$"ؑDɓtlC}9A\ɜvtk~84GIKH+ 'ThgV +~ÉSIA.4+ɷl2joˢe:3T<0̨F&v FH~N]b`U8nvr-[2o5ȓo";3vQ\k=V1sԐ`@QTZe +5qeRLIAРV0&ZY1M2% GLܒH5"q0*ĩ ȩ -౤iMnVN:@!x>Aŭ#LQSR*#="d(sOHc\|,6sZ3ɕqpǒzUh!v#,z8)Jsr [1K9(zdąvj>id5NRcy ;jH6WI4'bc-I * ̜%+(+oV QMAT*Z/^@@rc#\swrSvHeҒ;(̤Qhfw H3e\ FBL&71#'G||Qτ1 n8VH*jGx`c^[;3ePyÕoY ;ϝ$cpsHQ "XF)GKlt +BW~[@2:MQg:%׏0ܙׯ%MkS=+qr:]jdH[Iu0Я utUwIi X{3'3%P(*+pQ09{|UQ'+ĥnj +yC'ś85>ws)MX>'||.O9_(g9#)ZFQ2˺80V?Jp񣉸8GB]Ҥ2Q9>tXtE)@*$9<E~*G⒨bbLb̛haE.{x;@ _T2TvCM]AVD.DMڔIT"M2QJfaK5edri-pJ$V=3uU|E + ;2U%Dg&ƴ0'NNcB *¥$GɁ0 +$|-S'we-k%I\@@?r#yLJ,L.>nR[DXH @cz/3o^ڨg;$%*:m&(K\XkL*4?ȑ*x}]I"Q\Xi!Xz3TIǕKKqݢ%2GBh$0zINb%O.'5v+*x?*䫗IYgjحx1FBA'p)D$xL~\CP%=DzxN4jsM$P<9!iuF*tжfdq!ӲEk.f:\Z`u0bʶ./@ôfD`#MNy%dJeHr(.^ `i$sA"'P'd'z3&irēw nThH8I$jNy[8º8^'Qޓm@R}$`|ֈOE |id]RBR+zQ)2PL@(o$Tp0 BqUK2$ajcsc4dgVA[IlNEE0Qm-DVIYI"hetB! 7fZW.ǜ{ܵj8Cn4BLNŌ2DԢʟ5?Wb ^6F(s 1!s@tOF>ZgMJ Ph5,_0_^P@7&./s[s*[&2ֵajqZq&n]Dt88Ek\و!ld- iaW][dW5+cm3\•`C^P:mիb+ycbuz4=ե2Sveeh0#|)gD`@{ =}W s|3@p.<2d.J=:6jy)h Jnm705Qt*se&mԸO݅QuW؏8o'*{eZJUެy̟9fjO P_^'5/ݞu(7ld6@&ʼn(=L* N7"Lbu9%vW0/F e}c]e(WulABJ.ވ4r'&YS~I]6u mCB^ιB贂{s +5", 0j.=>C',|1:&\AGgPHxΏOppBW+ǐ%04rYQE,L+JP5}@0XuGg,/'z|yF:ُ@#2X'm{GGK f&;oԖob]zT)M|0H (f_$pp]2Yȶ[1 +H_Ik̗刯!bv!}Dy8 ٕ,p ='E*oLHqf o iNdĦ&Pz{ '"X:Xݟ[KwiHůS)UaM48smGҁ-~oW[(pPǝ͠ E9x䨦ΆXDsH@̎|9(֖O[C?IeqQ3isO +t|sR +jS{DeOqML(#\2:(˖@xEȫ3{!n ؿ9-~6T= ۈG=WF6еrȝX +Z^n*m& .dS4g_/:Zpy}if#@!i0{^.9Xn;SGgnpTB XKHM 5U8UgU1M5,`s:L$pTkl +yhf^34ah meZ/7ǵud}(ǥB9۱ĈBOcw}c +d6֋WȀH*)(G3- Lw{s +Sm9B!hgmK[I!m%PN *>q8=a%P+Z@:2O!9()j~ߨKX" sqqD <%.mR77 ]SKCUZ"5>"I͑ɵ=;slC՟mCQ%Fn |?XT#6MS[<9EСW@u +Y;W3ֽJg+/6FɔYPV+2bǑDI*WVLzDÔFtcrR9s`=6ݰO@٫H; cl^y^c>ۮ5Ŋ£hbz hev?/"a68<.:V0q6_"R"Si{&< QkG9 Ԛ8grB{rLʳ! /jB]YW[^{t-RL7+l>˂ύɪEI'ɮvdEb|炋c[ϙDC~c.CFaR*5 + N餧(@ʜ10TvRqh1EFX)E^ yS렮*".a|Ұ#010Xh "|iR'K2*fWrTÞ70VS%GpYU,+m207Ḯ,'\LJygәoRU+/=Q +W9 eZ!V9w(@vRo伸9p(ζ+e=D v,܎+r*HkdžU0Du)@݅.ynf24n*x4ecݥ`)gο]%ϘVŻkF=En\[aZ#6 "썣9Uku* ꜅qtMx9J {O;:Sm3_! $ޝ9Aw36*g2V=T0DxX05[h̏8tYyWhq @Ձ`$u8yc"?)"B1gt:c%TMUR^AE)) amidhZ|!%P8%C,3d*Lb>pmGz: Bt:P jAچ_.8.>V')iRUl֋Hpލ;w^ |0djlZ兪B$/H 3GH8-;x3}J:_PA<ÚMQK>9q=6kܮwk8ׯhy5ƈ241ynjҺnyUQE*:PTaC+|szr0f5K!b!R$I,g^Xg~}v6tq 0FQP,I\.2j\:s5g ] bdv*Gl"x֯C!&W4 +:LMNF?Jd]? +8Y 6PD@]+8I10xis,6 p|Ud|:R~> +BˑT W5&m]7^ i6pȻ_i-A"X춽 YbM{@\,13t=6FnLNlqq\q?5vM/?mC%&yod3ja+~̘<2l +_NS"Sw7]X0Hh:E[)pwZ1~/ۿO_(h(УXӼ*?^'0 +t$jCW`1" Ẅ́=Z(p9rJBR:0{We:C;*_Gy +uiGAMiE)@r_`B>,1:PfO:=0s; ݴ(y~Q5b/-\kڗ;D?Di QsۛNbd#5[ f(q#x~A3cMx s'V.:W v{#>7BT:uEmT*~ #"Cdbwc,|\ZB CI*~q15"!#L'Y: ޻WFukMUJ # kk9wƩ⋔;uvz{r07&<$㓢vp; +pIk%s 4\hh]&7x#XABt} 攝SS2`)Dz6B [f]{ڸc#:J+f(d?]yYe+44+t uf$ujbfфo$9(K`6&"Xk6ЗAǧ|bbҹgfg2bAW \ tIqv!ػ47ި8۱=gCJ$Rg32m;P%Mʀ7O\zFѯXu +0>z# +en0Hzu&EȒ +{@l:28 +-&;jKЧZZbAS +p[Jӌ2`%nS(l4s,1|LVS* /T.k s|`qvR8k|%9=(x]B { a}(\yU[fSH/bsLiu9ERg VKljIfmPl7*!4 R +BGQv| e`Y|YӵX +>?i[3 Jf*'}6̭E8gcY}EHP\݉N/ q!۟*+U;;TKw6lH FW3|[H@"5zK"]_lZՋ#G3^qMuX\h8| #RF ĨCxK&9cllOp1ȗ8@ +ܽB1 _*=sYFX1uNg׼.]2 9I~oLY@i +(T:)GvUrKwH@^:R*(Wg +٣ `ǪIV#KyM)49LB1` +ջ}:u&i!5"v}n U (qs.Sf6CfU4

R:ϡ%BT7&R8~eڗn!VE@|d 6q68oq,8PnZmQPm-R6W}K*QA0>pXJy;~`tׅ, [vhɒ ˚%g򸥪mgDv@tZ2TLύnXI`QE5z+R ,j~j~%A*27C4)šT06 ʉj՞I/P_6EVw[Y\8@dwE(!2dQާ]]Df^@9KU04<ﲟ9kq2̪7@ +oQkӣxnlu"yw7_Bg ')@uDflNɽħՠL2T x?7L|' X0%1`nQ,UKp `beϨHr*+onn + NVFQ%aƽWV<s{U9E]pfb*T|N%G.l((UNL~ B]eK$kTU J p-}9}ܖH稡I̼޸zqޕ94V(zD5(Ky֕oYg$)rG9mF +qUT¸1)ˏOt$ +cHL3"h]\5Wߘ ˎYȽ &^(T><.WX,h~32xYkKV6(o s&3v@ _P}(yV;7P#rq6 BmR s7KLC"^82ˋ#YS ::S1YvC=.ncE0iی{`}6\hpYe8ѐ0++nS.y Lþ:1;z?alp,1ިи":8 U@=0bX׆NO׹F#;~UGgilh!G gÜ<4-6.jt:F *FOThWnG^::ZاdM|8l* "\]p?BtuG41E-4( Ż}( +#cKz66o +Oh@HX8cZp@C%'PAR{ܡw8WLqVJ6e}L1 +u`I9RF"(6T"'L,楍ܕvpl,X!w}y +=x\}b3x:s3)vYҝ恘R ]V_/}S;Tv,ȝ"s<w-䙘Yq:Y eJb#) +!Fɋ_P>#(~;UN𼑒ϘY0*l*/k^.௚p`UfmPQEV9v{ĥ}ɍ +F[[U_4B#v]M|0EJ `uh1%IzB=Ñk6gKZ̩vE!۳IKª{Dpb g5u+Y5ͭ6*{эNQ Q9ᛲ~zDksd! +9x5HĴc+[]o^V§߹h*`VPPč]rG(zGESFA; Yh\[O bKAL}^92fvLa3ns8bOqZno>A&F?S}?6YY1K~knwS,N:&MaUj ^t,:'Y 8(Z87=K[ ,=`%i6`*4YOـ틠 4׫Ls;z>Ptm&'mШtAJh [*5YLK SGN30RKȧB?W̺sl ((͎n8a|!Xps=*xz+rhɪp˧*]_d- +¯ 4. spB{bpo,(HoKn{"O MQV>żyJ|+TD4Svy,m$Gy@V@ʞKpT{O:W;f/pN IhX +`@9(t+̟χDq +K(nY=eiOt,ҩY14ZBt*hI#GpkT52 +顯ݘ 'fĴ(E6TR`$؇ B]Zr!6J+K%CJhZ0+v}iy/O ,(9 +ŗy*8-e⡩5#E:OqW6M-I˷z+M4x.G0>,03DW7m}x PYz%.5~t0~1E$<Υ5w ~62}F*lr!,pM` ;=bc3 +/OAs]Id {a]VQQL@slæh02ZAD[<`C}]^mJ}tM[NM2ުQKyүo?/ӿ_/O|???̯x_7/yl[eԨ``u [U i#(.[l I o5 `/n [3# 0ﵘmL4[l̑:F86" 8m(\N:azFۇ'+8"3Kj睡'?|(qd0x:Wq&j^1 U~ҫD=Pqթ =y_oY\4LOkJ&!;W!g#{ar¿J۶R7zo08;sN}n7zХl<߄Ȗo=fކ~vozoSyGч|w XKFxilSV;J}GaN( Gw#myW,owP.~6uu]ݑC;=|s~BZryڴ~6 /Sv #h8;2l7mΟq<H-ANz6Sg?]ԹӡIǸ=U"$^엥9oLѡ6~ka3 /Z}u(ÝH}909ʛy7nqm;ނ4oQH-Y7#H Ha]}WV&%6p.ݹsܟq.њ,(VȘon֟*ymy*3$=ݵ٭VTAqbո8cƨ~ !I??|U{c +)pbAiam +4.|x'{c+5y[7Yu=c`n3kt{X>J鶮Ltͨ|c{O͖&xvf&ABcQSxPs)ܣ= B출nhCPZ,0+Mn;iU4OiQN |67hmKt5v639?=1DbYA+v!a Ϧ0/g@[mD9qMs@3aM88y6a$k.]AmsfH,N$]oV̔su{fܚ Y %nB{*Q:L>2.[Οܜ2L>6,L(mdd,;ru4E̘u6E] +7 d@%Ǹ-Q@q>jXRA,˱}J~So}&kScd2?-\|Ebe:BeFwp/Ro[>MrᬷfOKz; Hx3yZ P- V5)|~(盗0om"wB@lC%'z-$تRko<`q=Ln*:/3/`d;ؕ4YV +a^ξ2چdKat[Ր ^O^VݶG/J&ۚVʛ#/kmi'Szޫi[!bmKyo4q͐ {:c@dh37D6ce䂵c渴0˽=q9VeCn\e1v"y|ٺMU=mD,WF:–]ud*16?}jc˞8q<Lӏ UHە6եA4^׷+-kl3TЧס#ė-"=hm(6u}7Sߖ4X:-tgOω{g*1RY&,h9 fd>=h=I-^a=[A@AP ׷H&k}6g@r?h- @x^K]rag/ZJٖgKV|y2sEoR{Dl?y +:;ǁeO+Z>ےoz⅕ZْDˉ*˷WQ=jL?9 +:QiN-,=/Ǜ=pSY_No6)%i@KtpgDq%=hI[VfEkmUVOVlnyV&$/G?};^ w-: ,r9oِu/Y+Лᬟ6|ɵ8Ofd0V 25uß^^(S8lQ_).~ҰfaO(GvlT\.h\jGij6 /WQ`FՕ$vՕSp;EmWWÒJ)U 86CdzlWWaeIvuAg3@>m]i#vjux+߶64U~ۛ|%]+k6* LnWV sFiʋӄ2zSƜSVk2O$\ߌ^i̠P FI}ƠP"Lmj/y8\Z|^A/{WHTќ+XXg<\UiT9l}kҼ4G_)uެ_S[k6|i;EOB~6z%b.:;^]b$'|P,ߖ|uU *t/WZ1=߼_ݝ| pk4CR4yrQǶS\a+qҌ#NBRo<-_Eg+e|>K8sH>#[Sèpm]]veܴ'(!k'_{ۇӒVGMẪU!<`azZyۣbIBi:ZL>-9u0L-ys=^8nKxΎ dIzq?|l<=u[7cmcSa!QW&~ZFRYnRjrmZW[ЧC8gR%HC dCkx*&ۡ  cvdkZF{cC%֢|D((&e>xRx7gŒ{ Q +&I\2 |xy[Hl#ЮI~BA^݊ϻǧ, (eyeew88:I'sRR)DFȲ~Zr'Wo"E 8uTi@Qg(湠~Oͳike=5EyY,&i+ 7s˼-LDPlsLF +)=<1/ǯ +6v +STeecV4uI*բ=#A._⺳3?<"d r"(N:u3y_%F+ҫu=_﹘n;*1(`Zl/tclzAQ 9zIC($L@7pr]/ihbd `"t4(Kc]*Bĺ,RT6_>S2H9L@hS’ai?PQ*Q*/TLs|ai_R)Uԋ +R{ +*ؔ|;`~ev&eï7LIwV6q: +v>-W*sfTpxD:=aiq'o LGb^e#`&S̯P}bF6)rbޅ1{<\1jHAFخʳ>>{bD #ߞIoTsi Sz53M+=nSLyB)¨)&y: +(9l;m:9F^-I2d:rl +fUgɾ +OCI4Mmev>RH,Hp-3ߢz֐Y,)Aѡ+gYxA_}+ i'5 ȩܱ*L5qCQWĽ-[ù ediӞ!X˕B|z0r`j]^l5Dr =>$֛"wɷtmE=ND +v$ƞ.= _)aY%/"7_D~82` "zJHx=sz¢b#:~[8FX'] +mdxfoB߲m W?ٮ| +ac(DfŔò&aۑ1~FkΘT]>[m@^yxZӛvv"Ler + +koRӉKMC=ۉh我 U@H#%0nB٠TYHzSdz::|khULf5lO;/] v(YV@{N / ׷I9OA▴_悗vQxٗ sK +27{ E+ngϏM>]@7}2-j7@w愉&ůO@K˻Txsq,VTx^7s@FXj~ z :'`؍?__@ YZƅI'+h!w{~ZFUZu`NեvZ}1ʼnr!g_%N9,le7o@#Xrݡ4o'@/ߧ9׏/( \s$ zYPO=V6:, ++hH<7+@ +UfC wYҀ2Dw]oV&xdc[ +5QN}l7'@sE>+:vdͺSs7@DS 0w޵vv֋BP&oRn@n󿨀 +) +QUemYГ +yR2xZ" hs-5\Q&Дo @>WF0+{'|)D377=SD O5ԬO?(Z_k15W\GWڶZ|f!mGá4~Xv sP0'?Tfޙ'f[߅xmH_3õ__9 l?䍢JiO? f5=Yk,6 M +~SU n}OS?H`z3cͷTԡ6+^߫ƳC`xC_Ǜ$ #\[ego| +8OjRޮ~C` +YO gf~z`sXFL'j?x9?`SڛVnJo/?@̭LO 9iGc/3?xҍφ#,=~-wn{?PVua&O~ biE~9~+!ƛH  Pm.J(eR]2*G9; B? pKO?{(Aϫ +9^6pO?yBPkޜU뛶L03|X/^5Л|3ǜF~Z}}Y~C1}?O%5XЫ/?zRm?b>ro~TF ~-/$vUOVK%lG?IDHXߜ̭F.]x9)IJO?˟PAb|;)ܳe4CVj>vը| ??l.yWT~7W͢Qӽ/mGVļ꣸E˙6;CG͇o0Ry|P{Ϗ ˞lnڳ`*T /=_>-+yA>s '4 G8ow<&=L`%ܦx} Z^x OB$kAt~Adȷb=X f)I=^SK\v4efWzs#rf 먪[a4M])@Á8pƛ`&tE\R>, +᳷Ns@,zUGm'gAiUӈ8rU=U8$Ⲋ"789.c8>s,)fR/|`m_)[sO7VexHzcs4қU1`m%n?͛7`ۼmЭܞm|Ӫ 8,ŜmFVGl? yUۇ/|jժ%Qw{ڮQ3քs:yOo-ն4vRK~iZ]Px zE v:)l>M44tB ~ +9 Uu59IuP]hI5_.H k2X!u͐@w[U w)cwyYOoGW>Gl~IȤ|HK ͺhnˢ /s?bQEd4y޾D-GaHpr8x&&{)70mH?ې1L.pm-(=ΟN۷еw5A +%ge{e+9aYՐUx%A}̆Ф|[ߞ;XV;wau,uS/fyBOGfx?sz!bS}yH?XT~CA9m{!N=KN=cJX\o(ηv{cqvq:ʣIŒf߀CHe/ߚ*'3v5DߏR~p94Ɵ4_ّңm5bو]Z`,j]@ 7`}z`]q/^mN5sߔv2#Pto:*֟s,!V͉/~t !ύQf1nu["ϛƪU༌IG84PQ B+tX%x=Z4VCq0dZђmMSִs:A"T\eY5̶ׁt8h7Ky:IX4wݙab9J'_Wyvn;mh G3*Y0WT:C +_+@Yu@̓N +{7=}R8M Ť@:W|=?`u.᪜vꒄWxT;ㆩR7B%B uFA5D:PCg'u`P?/p- *zزp8R k8T8Łuhj}o, o5=zU_H)zN&RjHզ/Ѽt9i6I#abWB-ۥ!ѨkÆ#Kj;Ѓn14#-@g|ǥ"I!V:mpdN)ދ+꼩pUaTx U>\R/8TA,E`jahZWp)b*2*5x>7 Ck 5ή_X^N'U'ƫoLϧZ ,B`pO"?:Kz+ +PSܾ*=]8p-07^1Cx-e;-[Ct{>; \٩r`t8qLYgL$"R`qBEpĝTWYsVsΥ εg^1x#|Lk5A0r#f`svheYlRPo脞wwGt~udy:h}D9o%7hqj8Orރ*>;~@?깅5XfՋ.<_kW!9%sCj!~,n04&?.4w%R?@! =UV-!iNY9qemI;7p{ ;&QY=?J*+Ys i1"< @aK`H%dD$՝g`]}3,``;w+(s{- L;D >GU2$JGlfhds-}@0,uټ}mY0":$kKֻӲ!!\ SQ _<ғ9jN5=HNv oV{# `%@Ǽ^V{ 9I+A|u˚CH AX(y޴@&NsЀ"I=1DNM`zglb.5sF;^ȌG/ӎuoR#uу[K|my("~)f0 ).w5TM5GIb?G}ulғG| W8y24@uhWZZ eS/!Ĺ~tqʕkX' Yi!k,Ғ3:zX'u >S׽;b.jev޳SxΝAgtÐѮ/:⋮lC劶N]ozazT#j.wW1U.Z`xVäOfN{41C*~G:՟za!6'Jece>T|V5ei8E)\:sb8l̼cKP2p6 _M|P/CS2Gy)|B6D)tSφDl((%L')@1|džc"/S[YVJrf]H=W^CBo m0k\;5 + -ՠkK fpeЂXF{ɫ,LҩL@:R!-!p ;Bq_J$ȣϗl{2HY5 _g|p +I_R:ŚɆlDi[e"gv擙sM2;&~Ry3;rdPc$<ƶ0ۂe)]ȣRVe +P1/"΢iŅ]׾KnlDY+Ba>$].LvkrƷR%RZZq{ޓ~5us?tdAqp='M_c : 骚2+5 LGMIki\5c9M4(F06G'sڮb3~`Ŕ3PŠTsMdȋl!;}MB&`k{8H+JbO_&9أzT`2h7d[Ŵ %lg憜\N3bLQwPh,FijкM;G+38Dtnu -zp#e4rhέ q\ ʸx朳WCL!FRt񽆲@]XNf@܁)l0צ.;|7yPlC\L*B1[TfY~K\eANҕCc5MN~%DU{ h͔F | {>H -cA4gڞî 25n);N5 +.f:lqǶê7t;_M7~fDSM%=Ѿ𔏣t̡Ѳ*s b:{;MQ;!^e:l!dV=3dowՄQlHY^4fnPv\7 5FHb\Q'/1\ZzYN6 W|#¥0g #hR`vPi 㡭@lXY-ۗ=C%#SBFQM/].97a x2 BlUw/}nR0 +9i;a+$S(0`W7IZ R|߈UvJ?0esK?"[,%u=M=_^ -m(S$æ\@$"e;wR4#ZOr_)S-3~zG7`6hCƒ27~zn7XsxB@s} bϯSzyqլ)`.dv)#d9\<7F3#n $퐃3w3<9R 3,?5OGI"Tw,mr!$BV= c rs7ٲ>h#P#@?mù*[zc&0^R48v)ǹk"f-=^ rxrJ װaYÐM'8rVgӚ(ƚ(arXHu2 #r{a] ;OlE͐ –|Jɩ/P,"11P٨^„BKJg?)aѲ| ܩi)^82Gv!&/?|6((<(q.c/.uKښ;|n|K_o ɴor '؋-jzWuP[ \EYYLSVWp-;eOn:nuꁒl*A,]Z81J2K0|)t55Z|S8loKI'orJ! {TIΞk::8M2G¤ht}ywlcVq Gv2h>_bi]nDŽ5F^1IMeVՉ): JGȖq~{ RSdQ\Dר_u(c]zqpo&BBC"^dԃKJ 3 =H|Ty_TaDku]w9zUOeDDӺԾt-w8/n0Xx)o56T^>ڼ<H `@Y +0R\Ai}Ws9*Um>=R]vP]U0{ +sT GLFtyY[ΖEJ+MM +Hm')umZ͇y!U!F'v-EpRVfgF 'eBp +9JDjjݞg)ÞV% 5#uAj|@%Rk.#ZǣGur1RR籷mrIi}9m3zX@m_NISK;sA5ÚVt3Ebv%V IcGRz V>]0(&h;nM+eBҤ !c@.( c>{Dl9s@꒩+N$`$IC"Dn>D!Fp,̢D=bԕR~<9loE c2ɂ!Qf8c5?zzy棆?6sވT=ϫT%*n",]d h$lb5k^]l5]R#[ y P `N">ɵJm&u12I쉃BK?]Zp$v0' nTbs +ܲt}T5E>#hx4TCm8DuXX+A~&"X$zArR "I ΀[%z 3k B,)D<"D77}8U<ּm.eऋj3;SDD`;ak5Әvwxc/pC)Hҍ! tTBycy)t(vKY }Gd%;^\7~(?#ėh(l/]j&ӒHyﲂ>?#Y+#dK+/rx ,^kM/̍n% س4xfi,ђx$')YG*4- 2~&3`E~y[j!_W/9}聎+)5hNj6lq8\t F}kpf9 F=0 3":AM"||0[ +P{,J#m FbW:G,Do[\?A?jnmA덲l1X~հySldz$Pǡw6{Evj8ďWD?8/=\EH̀L2f8ȅ0^R]Z:K#(NwmO+w x'v'&}B{I:SB!_<cmhkN:8Ps,krcY$Sf2 V"@~r(.l##?cF1,d}ϣiBz*;jPf$TsԗNoJ pY)JV\z/{ذ R~IT^J8D44!Rz)jbC%817V9OR:W"ކn0 ZFD }òHͧ瞨CЋ sR6A‚ϼAǘǸ$k0!Y2M͆b{_-eוƁB # +c:+ݷ0ā| sMe +-΂)m!wݪp +meԆ%=M),*YKj%f6"#X $qur>JvXNp(Ospߠ9 crR!SHܤQt)sUHy@uw鋈-ٌGi"$w%?4D{CoãZCd?%O@>"g +byc}nvh=~,1"hя~R\C0E Q0SŶ|i goW+e={!7uNKbҪU Yj[B $@O˶A9n|wssS`^{7P2,F<$7iiʖ1`YXR$*Sss +<ւL\l_^]]]A)#:Z!Y@|Rfv0FiAXgco-Z +KGUKDioɊЂ,bu d|Ћ9eY"Ƥ$+ +T-Bd]S\ tչ0 RZV@cc[͍I7ì%^_"XFro;R^/a3yL6p&-ӆKG\R[X>V>u% " $*aI쉎(jR^6q&y*!xT{'}D3G/3(J +%t,T-J {]w)-0]xjsh5rq2!YI4]tfrZxp%*V *CȸKoIcR cpC=E#X^)Y =5,uWH1ڂ0|V:|9$0%"yq#z L#m$T,;@DyK59ZJ" ccV呒h8iSd>Ee\*_McYAYpwPϐ{JF m X9!!J9Ep&YqܵO{S3 +m=E4Tkr`)a(0 W4Dѭ?9hZL5%!޻ 8Nѫy9rKF٣a&!FD,5/d /iJםꕭ#QS +/Z'&V8~P򪁪b/!@HLIS3,K0;omW${~uc2ЛKL˴2A(E vWY4w|cv}֎"#f9j譮"t*Koi"%܈iZQ h1zDwHh'Rڰq ?ȢǒVFI'R\S2Ur}d6/_3ܕEMbͺk-D`N?QXW_6MGRefhaH9ƕΰ>]{5+YCVj&yܫN=Ytu4-!ҽBQ6 +i4]BF@=H%>\ULߦ|$i5aw.5{x}Upf]]RWUЃ- 0M#O 5p5`S"o8!<=RD;(ns 3aFLR5\a Uk6ͭ<.ܰi> {ew Jȇ +0XeqT>f{G|;@5W.<\˨:(p1 TJa1.tIȷ{ݬ-x_zzJ:_K$qB^HAvu/ 5A|-jwV`A/7|0]dr\QKro<?nޚYGUl~N~]rQj?Mu˅c@Ix+7h^1@ވ,l4y_a9K! +K٫v5x|C2Yw'ǭCG01$@t +@dh2ze|0K* [l\cKS +-j +>< =]8kƽ膕JYcD.},N\2Ua͓e Ag@vɷTz!(vX9)T7Tx.'/^Z$`N(;\d0؆c{ADbAݫ;&'B#mHe(Xg@A!t'q("f܅3`r^E]=䒣$Q׾|^p1t +]RԃEi |]5ep0I܆Zuv:wxhO5d&kh'#f䎬U/9qʟr.TO{WMYjI DuZLSa$U3G+4+ HǞl˞ei)9ƍ4ĀZ7V!(ޢ +2рyVi60o4kYe݁VR'ZJ^Q/ꇘKOe:;pMEͻpѥR7FpYC Lr5yz~D8Q[RT,Qh;;D!܈s]VgNM-!ꠇ +o$zJ>K "<?i"eOyG*wv3OuZpʂ覆8:Z|Ά^LĚ)!M=`̡2Q,,HыL(IXK*{G01Hi$u(D6}\dH?zQ(AڏˡmvT)q{)0z\ݼnDy??[{hm"rʀIA=&.w瑻bq>D u%z)Qql8,i=\W!S,Xxb؂l=+`xKq˿WeOk:ѝ8~aő2'P +}hsC/~sne!T:" +-AA N,zfQ #KL>}:u|U7x͙ ت>"bġl +WVcUOLL4ƾSDlDZhHt/!?}\CH6EufV _BߩAeX>$_@3S?vz>ae1U*ڝ;ERA +iC!bρ b L[21JcYJ'ItqgJ#5e'K!UPL. @iAMQyv[}NRoS}q`-t&~LŊ[+>q^h{rq?bʙQU_ʗMqnh2OH,ŅEnN(kTbJv`c,+WUbrYm2^;l:9J9F=*{%Q]K[UZ72\ 8 mJC>.dt,jB782.Rw;[;I?+QKhWO=.fJ T!R^\ڛ-BjIUeNĭ-` :H^3R$("h^pjWNS/5a{yp$ɧLѿAJ!UީhGOH:A5j˛}uz PqA :#PKWB{v@Hie^CGxb tt/mWyyY¸6 +cV"q|\_kLBZ=2W&9n" +$zfр>rhoXѹke./2rcuk EaK`دz&'zu1s )S^ ا]VeIXRO$< b>nj N.͆X_v|@ zܱ'1wE=+FS~ (u‰@xHFBe"P%7b,-2a9sM"rYӲw {DӰY] ^J޶fyWaE$IWÃ#":vi_^Sxd~ś.{;b!1n$VRBgVF'IBIfQrhKv嵄I 4v +J pRCV4c4btjl#zIwq/#Z3i ܅8 k>ģȡT:h7b0VFrj5@1H\䨌`5Sܐ)xs.X2ي7e2oPسW,5CL~K+ߞzSmppW$g"mZxz׹ KˊB"lҟXP3z JU ewE<\Vt}Z,cnw՛hUR\@rE=r*N=bf*l>|B/ RA,ͲY{1Yu 90YA\šbob(jI h1k/6ĐBiJC@Z_b+b8{PC`Wz'QL=Fwr/Cs$c4VrvwD꩗(q޷s&.+D|RINw !S˝uZ\1@y!M2 xط2h^w:Be [= +WIYMXy$Urs$yn\̾cR5_PM zՋא)LCb\uM,P{'LT])&}g?2,9Ұ)50"M-TMMmzyo{y>d&vCh6mĢ6Ȟq'3$;`&iz>cΉʱLũ{j WqA+A=$ԨKkzD=^w"vnGXh\Ж82Q1wRkZy.K9G:Xq˂;m! X´/Shp^˞^jfx5@!kU6= xT5R/ z\Ws5B5s">|+er!SWOXˀe +^vMLCUl%׬Rp#a+6K*IQ\* mߧ6_ӮQÞgKȬ>0SB;CPNBc`T:X6&5d¸Ɨ=uGVf{%W=AUrfHp5XdGnu{ Y:u=$~ay8`'~nDU=˝Etl{hd/Yzj"H j h*؞Z +GwDș]MbkTilg{\1T'w ܽ>Wٌ}P+d=\)d_de,ʗz92} `?CaaoCrv7O~uA_fI;lrpٽ$)-X ޑbuP듄q*mbwKktԠoy1ŁQ z)YWpon H1J4W>(ނizh@XY4y,#޻PbcҲMyBOwA]ƢɒոG>E 6#:Auu44yowwփY{$TLjz+'@EXbe\0wJ=">YU(KDj*H)H?[ :C5WW) ~%z Hַꡙg gs~G[EHS_ʫCM>\l +ٚ_Ϩ0,>ɉz]ep>8#U+~3l4$d%L2z g.óv8WT0A ' +c /R4W,q:ۖU ^%Rp_Kd%m@#3z'r"#-H`,ۈ).;2!Ow<%A+F1ӫjs +9^$G _cWT%rL*񜡨@}E3!?8LbpXV<66mPgu`fii.aD%Rk5Oݹpt1 +^;"3iX~۰~Cdߑoҍ{zaHepeZS&ռJD[8-یΜAOE7=X&޵v$P.qb{؃DmtQ7Bv;ʴP;PVp< x endstream endobj 1125 0 obj <>stream +6<^EkVBDZ*5C*qx9U!e'PE#{H\%'& CR12c ׃@5%ŸsRyw]D /1c1#rC Cq%UI}<…)ء+h-E -b<ji{Cߔz,UM +~z7o|V_k0:Q篺 6ͦY`j~<pNGt`%zSk!  +mP ջp{u"qvvҔ!tM7==gyEy2ٯ|X!)z)VBYVC} ~Y =+;jM0d{(=Fxl' 2À{?#K C/٦GbS]MkOv3'|4$k.K/w}DE縼U4Lǣ(!zu!d1PfD"d !5đpܣ +7~G`gQ4J~˃[2uoFfYbP>oF%(kW~Ļ}X Qζy!Ҭyemq[RoTBu=-U,U\ˮ˶v/p r2mF}mZդ&UESRTP€ɐ30.")%~p>g 6 @rJ] @ R+,$Nw +vm%,UE]z|zBIQy܉շ7rIrqхp~-`H0f&I.jIgAg>e,@p+ȸ%Rʪi^s=b-=4{.4QެnCB{+8cՁ=P+`+#@BXGz,eh4 pSX0әxIUdHKUj;!Yw 9]Mx W=@.#ǝdZ0'ЫKrrArRÎ0~r`tse˵8ny{1WCS.y"%pjo /!4x?Tx`nr2]A_[w{>1z%{EΞCBDjzKzQC@[ʯoD a/sx/ 5kޘwixuPOz ~s"8hLI^ȭ6ߍP-Α{ ?R4^jx@<ߡIN%x[">Q]Cخ$_ǃǧ +R iCH|~L~A t]6E![ÂI_ !s5j|}00fL+nUug{ 捴՝o ZQs8ewm'wLJޓ٧ri_Hw ?ÕpHxh> D0}2iPwS| t/8>Nkv M &!q9.wJY>и@Urɸ4!Q\"pSiU9P?MP"f;4PKUWmE;LEOtmn?O#IYa9)/''*1lXx "$*:\${I6U,IQ4a/Gl\6h0Jn?5_)<)!w?2$W toWWЯKy)UX> Gn|} XZJp*5g +l>eIMD,$(3WIRF߄e8Ae5c|i=74IIB3? bu|%) WFy>P}>vFgqv(=ǔm;AY!S7`7}IǠzB| v0ym΄yR݂Л ×2`)ܡo}D g\hXk[])0k4u' K.TCD3a8 bi_>mVi T,v5=Z\fn{9 >A wLS& ^HJ/ʱLj> |ϞW^#b*JGlf,Kӌf g{w(vh. %Ș&ʛBևJDίC$moz;/DGoi. _"U솽RK19]vPKUt-x(gGDR=c o,Ju$Ӽ$UC'υ(RVRT|AġܫucBC+UQJi'_7T 'ЎIkV fM5((k.GңÑ +c ErY!' rZXPV%5,`'6=n0~<Z({L^{IƝ@|% ppa}7(PȵH mMiA= +xzʓY;s 8ye*\0#`!Ǵ8!B@V:B1Nt=0: H Jq0)V7R`> I"EYQ!T1*}, }ng?e6l37 ;/K9Apj?19-iP={L0+|HQwPwљUł I8}ߤs/C-n)EJ(h,dtNM St`95M0˗r+ +9n4X|G s0sMR5"$T!V桨4Jh`+<@ G "yaAy2LS1'ÁiU+ʬٺ PZ`'QzTuMI"MX"?"-,KPfn`A`=CG1ĔClɍ")u!XU%G&"q8aZ :BisKrqXh 3)ziK+헓:P%_ZPLg)YVY^PFNHTS5.r#*dNt>Q`SԢN,Beb, +(tcG@> M/JYq;x9fD5) Me羪[na=QE5_UOXxfhbݨ;ۜ,Äp!!/M@3PHEl90GڅK:l۫4A0EމB0`1k!]_v@-;S[yL2YS#XZ)ܣA,u+8PpQBKycyLAĀeyyn)G{RIr1q,U;?*AУQ$s,_$E:G̈́m}B/=s-|{VIN: *NT-fJ zhR2h{h^iO?5~DpydJSf G*WB|7sMLU T:?$ {w ~xR/E% MKr۹b {ui\:$rN"BV=Lj\ +OjǾ8þm+J&iU [I;J|nE^̫D+B CR 됫i"0B[G=KV-%K( +`:6"d2l.:OD%n\=G4qXNx|Dv\aq%C&g@&gޡ ,= veYO!!@qap T\q&r-rD*W;Xҷ`X=zxMqIzIMP#.%ke˵07+$p ;xvwLq =Q^Bzr8hBkX n-@Tc*ëDJCjQ\"U綆=t<:n@H85J +'ȸ< #!ǛS/.zSA\ȃ pE0]juMWP(2~}ktKI=:q>h#X=3Tسr>% (KIJÍ6O\(&BZaE @3mM,IG)=bW FKؔ )nn%%Aqr[K]>1M_cFdʹ*ExuVBbA^57!r1 ""N7ӻ.s)<%Jk{5PH rp+pUsD5zr  +RuyT@Ř?B\_hK~fڼ225=m[US995w産j<#Z4haρ_*=D_/řl I9Hev@k!^G>eOw)sXTb?$v񾖐k"pa=4|dՁ(A M>*@vTȩz NH{>'`y@Bd1-B"(|pOD TO:/LceV!ýzdم45N] .~pTky6\s@Bf!|j'A)➮(AႨc@z5}il%]bP]ԅ]4FEq1>J[lcɬXͧ+">0h S?P0l:$) v,R C#-AUbGTL=/B% l-vIXʣt71 L{3t;dž,-F˖ CvxTw"7(Iw ;g}!qW_R5Z R^BB i3?hȰmx5bH"弽}Q*h_=C!$`dn.,2 +oL n?!KdƁ/Yw2^(= hlgW'/%ߠ2-Z5Z^HrOxDWʯ5E"C%N.#ǐ1xVbKW2Yl%sB^"uiv+p(h)dh_Zr+f9B2\t{Ml$YajB)-gotL +p n4ѻ,s ;y/ l-Pk3 g 76:T9g h8 ~qMj>=:G1Vz#窱J2ai/>=x-AObַj;/(N)/JyNO#&&v=w`n- ȜM\z{ZߕJZHkTЗ* [W@Jiy)\E)m`סJ 5+(5&xmtE*@uET4F(n4eKj>hG*lBw9n3Zm,cS@2;2rm1DI:Cv_5wXX^(b}ifD,bgc諰_ʲ.u˧=<ˌSB۶9ecՆdߤgG {Nv71@[Q3ŞӼQT.p›D4<e]`Q Bv,e$f:2޷ Pۀ.:Zx!T&U'!Hf`bP_FBY+Tg\R1c.aYB$wȁM _,ͨTi=;ǹ]k=eOxXT] =E' 0t!O5'E}ht'NK2#6&4r3őR D[I͡(TY'ui^0 5T %a%(C$ +jzf=vD@Ak]3Oj ]|tko>Aڽkp0n3!sxWs%3 0%D⦔LcGܭфLg=qL9SGPD|6,ؼ +( rM̸+ɭ|tH Tkrޟa2BϮMWlIig|u. )+YРK{'-$NJϫ&U']s+%Fu ~gV0R":Zyu/X_4qU1E +c[Ԭ'(0te_| %iO&2W p$>;,Ha=W Z8J;3\`\3+B +|@:l܏#(an㝋R$bٛn +@mK"7Áɹr̓I]ss<.y-w"{]NS +ؿ\/.s^ ռfu&i3U(7U)7u;fnz 0gF]c 9`04j@r`@YFSF{IϓmH&*1RT bHz.by9pizaQyZLdO!ui  o}pXj> sPWUc(m;~rrSn~Z֮Ll!Tr.- N'z˺#!!\A5v8-k:[>oy8)]ii_I-Z~D :펈vP/l$Y{B9% Q~CtPu3EP)!rE1v/ 00ev$%(2g|U/,_!_+fbfZ2⠄!W3݃Lfhi6r ](PR {08zl aJ^S4G&~@Vm%}.!p^IʰA[xO%%=#5_lD=\4^FbbO(3;Vr\rJc_$}aQȱ3yCP5ﶟsSh ̎L7!!QCz)yyAxZs bX"$Q"BmroiuSZ|UuU|2z"O9cp4 \'CuYī0EJ`wY|ul'lѵ֡_ȳUˑ@9Ů=&.3R2ϹC0j`$ d|G0,da)p⥗bD6m6*t)kaw +){>b T!>/ƅ% "շXCi˃@؛Wً>%mH9W~ĻLLM6=]+(~+5 ق~ow˨{KޭC,HP]x {e¡\d:tkhr;)2,a3RY#Q\3lb?'=oiD-5ͽD%!f4e4& dpXhAM8:.}#ˆX6kR(HӁtFRu,A_@ #_\Ë3\8;5>p[n aG-Yޛ$NQ`?uuϿj؎Zoyh2t^.tܫ.#}8;ń⬪d{Gs2 2Z,Ji~:OD P_l"o`h Žzeu4vL%_fg \df6/b^@B .j'p0|Kݺ yL5,/*ǜ72SWXqvr'O+_R¤]0yHWj+e+@s,c1e"R5xIk/ +|ʺ\,ݮN{O]A<};&T}M>5LSSpKo; ﴹlr +[6v2vY496WF$zx4R|~mc +LNGd!L3`έo%9e ʁ`+ߠeRyvp^<ě11E+¦Md:,*)xƱ]%*0ij 2qN3dD?SԵ LB_2AdiTtKSpC"bwd3ܐ3GNdN>!W Nj"}4\Qbر(8◩,G2#,xﷵC"Ca_qeD~IKm91*<`R„O^ǡ@/S6;6xO2{Q/?*A͊1t7v3t +֥x^yO5fjY-op!0rs `}HY-8XY]y29"zw"LED mfyY_ +;0ZDXqG$7bc CιHbYiBb}$(SU.lAv +w+Bu +DKT^n˒/Ghy{D^ O/:*łK`8v  q^<~6'b2fALXx為Vۣǩ04}Q@G-,3!:3i-W(\yaS"~\Ey2D_!{{ aH37f5lUٖ܁?^Teɦ\AZ"TjAWXHG2m%KPP ?JZװY,;lQHXПߠRt&L$8g՗]IФL1elVvF(M1@IgWU0_tSck>C-6v#g&7e2}oa4*mbMMY닱GL>i ġiz,&uq ;Tx Tj^)ѭ^1-6'NG@_ p$w&w?AFcqI h^rΓ @3,Y:IкrC,sX3z*!(xS4AxՆ{Rrjrhǹ._(`L\6)DX(L=RR*s}0*p>)NQ}Г'O'oH#=Z3,fT2u#>;E +X]18>%@}u9ibK%j^{sa v &ݷPf`-p@/֪̒2o_J/)[,LTW +hdK%Ihrj#xIk)gmӟ`|vS#~ 8CGf*XJi-Hc4{fMM3L|zĴ3M7a.+n]盌c"ZA^[+ @rdA`JPt ץ3Ѥ؆eC5xf!}+Jpyj}n$sf@( R]S=Mrt>~MB2f ?j_iZ-*ߗt?dC`C6CۯA= +704OUX $:-r +m 9_Pi3T@kJC@e/F"X+J0bt)1X͒%G:>/$(' Uɂ1\dLĔ!<DM"BvQl8PK eToCܢPs%D`*yAV s'sNP2} I`W^$^A(+EE +\?Rc_5[h8߰!m|V<}d{Pnj)liX#dfQdC2CWPր{sY?eXp0&Q. tUzirCv ng$%@]Y%$C,sTCXMzW`cgn?.cq uwb!{y~e-#<5(b݄]F ߸z4oAa ʿ5w~  +YtEݵʱLb:(Ѭ&ɡ,eVA7:#.O )}3!iE;J5-Q)<'2meN4Q0amg|٘,+2AeUT'gyPO!ު\z,dH{dst .7ygF1 8_=b#*Mͷ(f'Ȅ()^r<ŝ0+h0S\^oDsH` |1"F)Шkܶګ^o2u8ԢX&Lzd6MA?F2TTϋ]dXÉTͨy<ɳNbĊNmOVj=-vkO %*:tA4Kr!ų:!0f!\;XY'pg簈D&V<|nV/•Ϋ\Xd:t:[O8=@iɆ}Vp'SCRFXk[xPB݁6ҤNrʖ+kW*`b\#>rB"_{;5x!z=r9#:ňX2Bʵ~2YPlD!_1W*V_) dl^g\p!K+ȃ:'$烟B;gkyJ"1 ` <7 EW6 +`1 %%A"B(Τip@S+muȄ% 2~yfغXxr7݊.'?~?_wͯ~o~_~=o?~rjN~??_/7EQ߳_~ou?s'65~wE?c~czӿyw??/_{=~t_~_;{>oy??~__/d\K]z_?_߼k~Kv_P|p~K3@CWg}N3${] v7rU7R3fCQbhH4 g$:>بG Zԯ Qû{^_}!$2v{ns5~Fd|xr&#s 0ssg}ԁr#X}{`-|܈XQ$˓[^%?X0TFv(;T7V<++%? 0DH<q<ڢ'5HUFR_~U%x,@i$Ab2-< |x@u@\F3<~i\sz_So,Po)Wz?\tPZ|ts :}g'9Q ׫OŅlDr'NiDR䟣釓57xG΀f)2zoh.Լ]}On zG9qEH#F#zne˟'+h~#-Wo %id@U<(FwY4;N!hD(֍EAW.B*9X俍rK J+dύ-W?"u yy~q4֑O c[<\!E7+G4;/mH;μ#vc m#>kXn,?]e>_gGV^SOτl ~'&!̾XD#hlÅHn\(m4fCqa4A 4׌pR=Tb|99h2Gl?3UDsM& '8sŁ+h( _7`+nvnf3m4ϧ}2S|S10%ԛ|)Ϸ7*yR.~Q6vn d4\G@Zq}+_.7_ח x \@>o/ ir4x#~m4dNI½.sgNex/Thg{0b!Z7K<cx4|4Xܗ[EnDorvP9jzij_'3иG[R9V6n_?.׻95]E +ĥG{/"fq^l'YzNWl w}&?6qE'UXX亠AV?_bxTw;ST~+7+eyzI#3iYW~\^qg\299\g٤'.Ez }Ts9vX)⅗xj-}d={s1.4βoh7p<-^Rqޟ6y +M9g?'Q3?lU5 *v/=N{t"{naP~y׻ajhUv)fH| hFKyhўwev7HcVuz%ps[&5|K [i:R>9ueґ+KkC=r'yW.7YJ%ќ䗰bݏhn%'x6H>界 @peRNDDKkϾ,"U^n޻LcF8Az٫O!W;Cd'VNp愓)96뙬3Qϙ$;' +*gfqFOp z"JU\2s΁r7ex^::5^6\+3vFio5fx"H 7c:O_Ğj34YE@Z㙝#72_;|u'@*4eԔg}j=o Tbdc0C9<jSDw:3k'8;2'5l{8(ANbҤ'8d: #vnmU$FA9x& '3x kgək&H|bԑ}%˶Cꫩl~hnޗ?ya :('+JqyrN^<i_=hS8ZgZV6z`92rc/l 0}u :k6Apu;XY ̃g!d~ͭ^gecW'Nl\Oq9nDs4ŴKpOL_QZO:;y:TȚkVό +m4scb(I˷_QI42ٱ9D mx[4{ރLxub 0v |rriY͈(ųxœh>L]*_'cH~HRw W8ku9POh#gz +9,sQwwe;8Fe~oL_t-n񬰯yLeՁgMzwQ{yZWͿ?Ɍ1igjhC{;~LYBk1V?lEor/mv73FI)̕'(<^.ڹ:5z,v`~6sZ7Y!ZGR8"N'>?.^ܜKT!)FZ7'S <}tTΕd$"D)೾)O'B=5ӅF`RϧMp'?/k}קEĀ#0v2uP~Q++7(`9>ާ[wy>(K/Ů2y2Tf;)>n3+2Gߖ:eؾW#El~ex}r#k76ѳ%3!) !:Wɾq$Pcjܸ'}3-N"1ecY5sc8c-j{<"w 6K63x'j9|Q/89:m=/_]'THԓqbCɦg<9+rrmdVpOwmϜTJE^n^F! + +s.L=L +'h9Jɍ|7^f1 +Y|(\r$bT`6WfadߣnI_)γ}Ō3HPx)^I>{qjNɔS+l37p~9~&g"l<3Fy! ngP8N*AQ =<3Y-Y% +w%q0'O9O`]ș׍O +s;AOTKy?9Fcz7'O툪,dN(<V7?Q:grTGE˷ѼZN X*2[5 ؚ0/iϜ'xsoyap9( +d@Kap{fsfȁ3R%-' \@Q>~it!wD/26g~7zx$n~}gk.{ S\`foRw_@c$u\)!9:gZ޾+ש r^cr>j Q?U4WNS4}qPz&yO٢:eF%O*!\ǻ{i+]*$vS_ +uDz~LUB߇2% uf֚}OI ܕx5<ޣ`vYO3Sm/ >ćz}3UϻњCe†;wuūDN̆ˉ̓#~]}9^տzzrLEF]n__߭Lqz*XDIHe H>ŢIk_UF4ŞIq:"Wc@X,k\W{jcZ^%W& ꙪG}q%t0e2w·*-3 E=բ>6DEeZF͠!p5yuw~r'/F=[t9ԙ7+:jyg|s&=/lpq9}(g5WR͚+Y6GdW8ܨio<'|d_WN#VXu%~5t-8T^[k9v3:EbhF,V۽1+* V>rݹ^_/+s@\okDK>s+-[wV^2)#+Q }I}(۝|G=<}ZDnochyԾp<-dF,?I l+g[ވ| &܏:q +aqb92=Li%Vy7I>uesO|QA?*ͫ1>rV~ ʡȅ7XG_{q}+=PD\j`^g򈀚Ƴ%k[ Vd㇪&LOky?e4D2_@ufc}_=t}e!ٕ<9%>ywH`VD'Xj峪QekA}Cj g.NcLʒω>TO03c~$,!vsޑݞ#+HC9fh,{)l0I#133333;03fXҌwizfZt, +LE@dЫ_M^ 7*%i j?d al(d{A fn5i&FFN-H&-x>2Vsy0M_ FHӨŔl*8Xh.A]05 XBf$|Q\$L*^mN>NthVAb)?R78C6[G4Tԍ 2 +C0p8L4N8DPWi&oYRq,k2T ͵R1jFGMԍR#&<~T4|3C{]@4lmg sR*F4Q;m}KP t 4Tc- f"iTa5T}U7iW\Z$@0TkN&6P0% #4&Ƣ!UGQL>}G  Jrj<z .&3E +|].;a͵BJQ7 +Ras.M~'U;? +g*̂v_\k.2̅&lexW)GjwĨe1`Sw`*[\L݃#7 8ZҬgsubZhI&I&3(MElh" +LgX EfS7 +,Sm40rWH,cγ٠i66ԑ@$@L5_.Uf$dC̨ \(,}%D6n&/3&Ho] @2#q;z'b"]8Wh$57p"PL 2My08qCLkA]RAbQ.BqBvB_f"&(J^j0X&[, +sLLbAe}ޜAӬ%!2Df*FJ ŠTi8_S1PIT]M}3E(%4*zZR2%T吙9j(t]8b~3뫖TB5H:FSq/23q"\c]SiP-6h44_Ehd(f6Ң}t>PvLaW`2M+Sm4Ph kB,x` Br8hDmԛ൱e FMPFTܙi(T7I$ DIL!H{#^BP]BL;&R+PP ,ȴ +SSKާ#NmQ+$iBb)njP:Ԛ;5C3ܪ= T1NXzp҈T4}{fMehK-kFܠiֺ4iGQ䣚 o(fB|L РQB !,E8FLKOʂXJF&F񍄯KEUpRD|8yklB _P^\އ/5w-=铂҅)Tft֔~ (_)&&b1Uĵxo)e&##b8B\,ˎkW(l)a=h+9"4M}&]X :55 /~a<-.~YjhqL{oߏA X4\(G݊UeQ +&r3055LUDui*V*]sAa +PN_Js§D'k&rm3md̤BLA)j;kՍBH ^qSn,rm!zb3&Tx2BXZLV!i2#͌LĚ3r Eb=1CqӧY 2}jWIBfb S403YR6ҭZ#Pt*UtfLT2`j,_4o_4kyv۶xʺԶEOЎBVO +0 +7ykePDT1VC݈C+\PQZȋfjm:\k(y,qf_Ax73 `0 fn.x^P4a.4;\Y}: +Ľ@qEktXK8a4J,xq:M}|31Wf$a^3 V?dM{\eo&d AM a+RY k566ˍśI}©p/>D vJcq_n +m!͂}E֖Ŵ[lscyS0}ly9opYPPtWj4MԜZKrba_TN~ o2f8PW|P + &B (Ġ!8xĝϢfؗP7 + D[rᯋ#h+hr"}*F};smОZnyHFch Z<-hBXM,(,75U$H /N!cUMNhio(lH36w|v5^~B9 cMZJzSO}Ѭ2uVH':mõ¡0Ѧt4؛|,aM]5 +%!]-&b baHsS0`MO +ȟ/ IJtFjX *Y>N5σCPz#~w#C +G@xP#C,oh_XPG2S|) ;-_F]x,?xw//տWqDo5 vؒU!+7 MXw)܌7lEdk/haf E52#%5_6k~UA_H n)YrdFR֩fKCM֎6Zn=#YFb(:'\b(\b+\8[q:[J~dZI寳IᩳƂZn-nd%-tltމ-#I6ZnX:Az +6az-yԇdu觍Ěv!](@ 5ִ{?%?0̛FǕOCP!!\`'n(3K'TOb?S%ӹ≜WPbe&^Q\\$.!`'gc^'1FOs%Y>`6q Igf2G~1CsD[©PS:fO=9xOg܃*'%-Q:x{p5@t 'Ҟу8 +;[}?[fs?)?7b0?>oNywPm҉ 9 Oe>ck>#ӆSAh ^4th8~qCȲLL$.3&<{ : +IlD&3*({$ܟOy##S Vd +IJa6¥DеQyXlr:T`(kG]dZKF4tP(;eձftUAuVZJHs(w[=#]sCx︡lpH"lTx'q/z6p,S7Oh2b+&c<磫&YcA~hA{h.34YA|l9[t\Mkh$;O +d >BT9*s7ȼ]D$0> l=a+}H@}RKع뒎>7uϸT@, )|t$&(i8Ap.|20 x &  gÐl#&Yy!o`s.n_?hťuKdzi# \|t6 S}k*g:l";Ojˣ@@Šg@8MmWMeBRF>у)AlDh>~:>Ȇa¼^z>8Nb8Yft g*O4AzJa,o*"o<ڟpO{E 3Y氙[gF y`RGa9cє{#dR:StD&.T5džqs#|yQ>u6]4tցH :M +r' <#RH_HJ'r\Ld<23 J=}q!ycGc2fŧlkKmEGϚ\o&&y:W@Ub^>YL|>*2&|ƖNb"~H䡔W`C\6v*U<)'Mqʆfg%Th.Ad\CPLLgT@0+5 6WOA!Ylܠ(}}m=5lf.쭧]oXSN:sd=n5P![dӧbBDza$9#(x?ߔlH#a0֟卶TpuJ>sMSrH:`{N.yF Fp <t#5Ć2x"Dd6j2P5Ѵk@#l Z8Jmͥ EULRゆ\ږL后2r-e t`Ot,{: a= ńJǃ I\Fl6m,> RlglX>^?LPt(< CDx&${4%.e 6gB&w| Yz̐MnF}O<squSo*"&~*0dCr>bFL>c0U9XKkh/u8?A:0}: VH4)AX"]K%U:sUyc]}q ATlH~;  $]9{@E%7-h>먐 e^cb&RYhԯas>>M27M? -G:Hz5i7,M9v=I.'x\F,ЗWƁw.4kKc :2 X 㫦`yF2= -XKuTD$6`,ov0|TD.\x>8e$5l0(l ]u,I`Ka|R\R0oX.zVX7\ +U͟s9al |LlBxF Gd#Y{9SEǖP5 +'OЙpm< dKlN#&KOs;fQH@5t?O@0:t &c&Y>=/q1 +@ِѠ7q[P0G@>2h!} ,&#"Gz4T>^ ʢx cϐwb ^[n t`&b9Uxr YqQFφe}3ӑ5̣EWwpKӞlDx6"6b ȒKȂ vK @FB+'4g43RQ: B:{*c,*a +d%e8~?>lA#3H_90?BssG}3SQ/hSId_=@vxے 4M@ni4>{ [{_]K>J ZX>Ӷ|aMAܒC?W߭ioĿ!9@SS%ed/}sd0t(1LYTtrTLD*|Y< +/K}"a5LoE!ro`}:DUjY{ l*}(g좿gKkohgo%?w&h,s +sAzS>3' +qf;/]w#q\Vi珹-X0~lxhЧ4;&h8'=|CI$|qfG[)W!/ p!<iKdžvE<tO , bχCr0m~OO䯇A`{xs嶬?¦z }zVY]KI)7.&t=z >>׍`MFs8-m,7G_z,`T; fN+?2Q:NgMs(.dR17Z>7f?v(Ṁct%SUE|"3aBGPqaMa6HIM߸|(–c^DxOD%㰮E6 ٷ#lXf҅0[dг>*>+Z_~GobMl};KrG20i?==k];^[^zЕNE80Aph: g$1a3# !\MbL2 +JA$ u,Z }º5%0 +p}ψ O7{u?6t +?ƌH0q5Lxx1HJīX3<td9?7}6<=6@Wɢ 2֡>P1co ==lO?`dVOuUR4.=#9#dirǓݿo JnJؒYڂ/UNl-Ypt!>lƭ Ma`=I#i07][QvddblvzCTK?.wFOg3wz# <[3 J eR)k/˕;?Y{>nR[FF(y$e( L`0Ȧ~!$P3lx +qCX_Ѕ{i3;pk:g\*p,Kh(R#46H/M1Bߥ , Ȧ |s/ /QI.2QңʦK5M-S! dIm1u^Nu~M4t~C]NNd./f-`bwr1Tj3v0W:|$Mcqx:00`a?{Y!Y#\TH£{琅'3Y3)w&r")Ud5&p!t/f_=2HޑqxX/k [4|=zk2: #< ɀqb:t"Qvl{hNkE0vH:  , vF<:`sMqH|LgW9dWX72' g#C-5|}p,x6-1dtByͱho7cp>59gr-HT_S/rL'$"|OhאvI 3ʋT9_pif}N94Ȧsm3ɚ fdfS^G6%D\͝lly1@(КGzk0^ȮQ%vU`J3Ʒ`Έ 2e˳Vش>ZyThLψDk;r0[!`%6NG< &b2`P'j0$A5-$K~0/ q%:a4:bh߂ؿ|.<ٿoaRuX/q54 'v [fpS0_w@|w>eh doˤoioVRm/)/9fh̝wA8%]#kM|0G lh.؟;9Kb:m6<#C><t(Tё%dY)Yx|1O¥UMX3ٍu!QK{5سaE:>[!J.b US>NV"lz{ c*8z!v ~ķLLL؃^ 㚦˙~W ph٦3^ j;}wV[jE-S0Y٪z/y8&`!UqIN5ZJ\ +t~OdSң&-bS @0WqalȊX>v́ }vΦN/: ԡU~[ `&_Hy%Q:DClvFw5 Ñny?o37 ;s#~gZ#/ x)>J8?9 wća.,V!RQl8/`.!=mM +~ +U.CF|'9''~n? t;B6Q#9r Ӂ;o1M5˝op#L #eӫedӋdF6rS:8ağ`rXL{ 9<1p 32&c6Bd+ @|0p??g8Ek]绵d՗%+N~#%_;aUlo@  +/eta_ r#)`3& ƅ*>nl}R:d+%,%$e>$-!8#" dzBBET}naaq\GtӇbA:B`=E1[X/_'t c)L: +'H7nj>`"&@0]r؈n{hD<6PTHg4d[nǷ=>$[_Q1#ۧ:vV֜CﴔnN3[d'PSSKgn˧~8 XC +Gs'UM~hDb$΋(GՁŇ s f >bLd5u;mZ<* iù]m)YrdZk%㡀;{KzCƁ˖@տ?G! dt O#. 5XKqȶa{DX\+w<[G\KZ2d60N~w`o4^32Fo'rOc& 5llDž _r.RZgyz9SrNJh2; 9gHpi 3Y:nHdve4^EW1@uC <߽O*;eLᮅLI)g=H\ufon$n.3Yrb7ll6uleï TdɅXGG6wL9!#\tݝeyȊ ^򐷇d8m6v~Gu<]aȼ Ȉ dphe@pA:YS@e5oEA҂uYRx&0{kuȖ\3 CU2i`~UeT1#.c\. 9GY|%ӡ4S@!=3؇5 +81[kf~~GB~|ږYg9@GϣvtndNuRIg~ 'lW񭝛, @Pmkɲ˦Lbt& +ܣ&F?Ǣ9Ej]h%Ys.2]2,INgҏGk} Qms%N1g+R?F| Tnn\ISrPE Ns*|:i +oee)r5l!%`+yYkZVZ6w%.8K4#; G:lYpf10 +L\ĺ8~x%Ȼƒ6H,ĆEy'f +g|@.+fK±#-d܃ !&0 1J\19Ta>'~Alp);fM@q1hSG5p) tD6DU; +[78 .p.*g<6hCе0U#ם_?V@jB 5~A8 t5jR)oc,>:7eKT_]K _q\(CKO(j˙mw`W$#SԽ uTN?+[8 +ܳ<-ͧv'W1jM][Y6YEnW_lzmMn}HX+T. +0E2y;];OQyө;&` ]6LLd ͨ֞tΎ9L\*e *DL8@. Y>9Xbf 倣-]d\u p'8>3iO=2U>҉tEO{[ ѹ{ 7@es>ĩ !Q@h9YaOsd=^z# +Z>l*c>R'3nk"ϖ䡐c9*X{K0)X's|_5Uy'N^&5)qTʖ*k]ȈqA.Ob4䒶|Fdb@DYw̄|#09Rv9}v2"^ŴȤk㲌Y3Mp@kQ U9>8H?1qu! 1?5}c+l mm1Z>DP0Ofc [{y@g}yo9BbTZCDŽ% !m3_bHX>{ga飰 Cf#&ts4#uq)[|xڟX3h\AuU6Y +~Nr̥ 5tmp6#+0%[R?^ P*et:yYGYwӜ;khm@msswͅXWDs ۰EP ]8_ duNs&(os%kXL޹ltd6(g4Y:|Eh qboÊ!10mNLB{QwO (GSys}dk >cO`kD%&REʛrX J`=ul\ ;p,`<[= R3F1(6?3 XLݒ5CD|}@LQ:6>.`1+ఈ .8^b0 .:cBV_4K$h\粹"= '/'}E71-ObBwqjt=#n~KVḕop>h<قKF1!Lɪ r!eil lG6{]YvD]6e?7jG<&^*jz+[D+. j}]z,wKU4fd^$ҐnZpnnthaV_^ +2U1^I3li }dY9't TǛT˻T7YwkZz/V+UV~iПD۳ՠ[eWbl9vǾT/o1IEXBV\3U>_At ۺc;-GƇ3]YwKk2!v01Jۖ*j|m u{y }7wǕ:bviGV{(C]Qt݈(bzdfRK?Xީ$ެS?Y\̞4l^|{_+;_|TK0dcRws&[YC^4dSeO-M=XcZ=N˦`C1nf_/VluFi">L6]zxU#' +/݁9y#l[Ӂ}v>v=C̙.ga Q+Eeg6Pr/]}}Hr+[c=;\ dܱ<[hr˫ d*dr L3Mmjmj\C4w/G нbʖKmoVnnFݟ6{?YRޫoxM?o/7{;{J0#=#9rK1e/"s\m< xݸmW|}wTԶTult9)lW>"|Cy; OWlֵv SXSCoUg,=$ &}lY1?,j +tO62v3 :Jێ+jߛl.ثTW~eg_pݧdݯǫNoyT}{̫v;pWTW+|xi:F~$|LMHYS8l +&l5 b- w۞=s߃?[GV'ޫOs%]ɧĮ_,>mw?U*"3T_+/k|σ;/8+ +lq-KxP}`0n'`ewk%G^?^O!o?#  bX#\ +U6J x+ؙPBݿUuOҶoUoMmmNX7_lzwӋͲϬ1Vv-49zur[*j:ÿ[)H)ZzlWY̏_ePޥpnx<(iHWSr3 +wVۿVƽy?!EGх>Y +eˇe.? 7T{0߿q%~$8ZW܍ho@Xk=~~ܹ 򇗛3<_.G:κ՗9gTw6'z\٧Tn-d_ue2z2]QwQٝ|)(n˫#U܏*j[Ke%C%D}SbǧƞzbwVM?աGvwu>Uʓhc#_w3G6*|>qnߎfKPutxuz';^q~wp/{|;N~Ξğ`R3Ow? _SXùBE^6G?\`6m:|)6]Sӭ>R>?T\ 9/NV:æmSOͰqNB.:lܮϹC_|_tOCpז-=vCۺCh~b\ہn+~c +iGks*A_/xb#eʰLv\O(=|˵ +JɭCOwWp{r^}9ܻmWT֟?l*e6w+NJvyqZwKǏ37RοK]}᭸X)N&+OOQ$8<^޻m}ok-[X0tK7]omͷn'vf%w4ջ:X|I>\'Nv5z<^XYJjϖܡ'XdY@^6Ju^m<vm|S DSbۧ'vo$7n18(BQzu"kK'>*7ݞs}uVF3Ґy )&Vk_ < rx,QQSʒGImw::cKvݎ+E[q+"ZvẙU)߼I!N}pO>>/ N>rkSW=kz6lkȿM^+R3k,[^ɬ~$dNTPDSW_Pן#εv[Q۟o`v+toӳOwl*NS4NZiۭcJ/ZpndQ; /ND%oĖH,ϿUW˔o{׆8_m#oY̶OVT/m/I$sE;y8~<VMӳloQ_؞s%{K}-΂܇A=[^^r~}վW+#VK7 ‹ +/~{Qt~DɻѥкkXfbE㭤;UXeϳֻ9x] ~5oԻލo﮽ͅwdwC[̭A`sNT{[n%.(Ql}U[_ozCoxA;Uד.G)XңLbeByW$9S;;v(nos}jNoNV2e*-z:n=Y?J>@umvΥ[~߻~SM9ǧohm0vScۗ/Uu%WKpyoA_mx˭˯X6~u7wS*9n^nCykKtD߻x}[m7#wr] gQ;GZGީu!5HgVUB˫CU!= 9:K꽞WQNx˼BVUO;jBz&U=ȩc~&^M5~˽hzS]]n7;sZ&!WrRYڍRR;KRo"tFvܕzl_mʽ^)=t1bDIJ˶\It~l%`_oTWvjLqYD~>KySǧu{m v}b룸aEEzU^Нv3N.Cl-deb +Fu]e-'1[a!~|tPd2d2Vϼ5z??Q\lFŮRK.dWT˪hRVt>2a߮j,WKܞFFV]-ג*#Py+pm׿=>+r;,o'‹> /,̍Y\,b 7^2]2^2E2FLY+X:.Zg*I˯IQS$%U$tKF|&g 2p`bɌ)RɼyK%2+?Ɋ;ƻ忂KN̥_\)블RuRlɥ%oD[p+FZuƝ;u Ҫ9M*^Ur-re&FwWuv>|ZP,Z~m:rcXlpݡ,~iQ`2wL%addddd0@ +1'9@Dn-־XwYةk?N]ݻ^{#ޟ.d߾a>&ݯӸrݟJWS{)|JَeH/]H8v5k1%[&#}\vb|K.\-iTQ~;'$_O#~d{=W]앭La7\D?/WJ6,\4W_g]mcWGΚn ).( їtѿ~PPփUtqPoڰyCcVjo3eէrgU*^^}!b˅SK*?}>c'CksՄ/݈.ɼ[K"aaQ%mADŀ9(&rnd"$gd$f0s@1gggL0잷bfw6}SP/秼hv9/Sj6{WExsJF?Lп|o0@#Ԍ!V7ߍAcfÐk=37> +9F+=~eŢ˗rv]-l}ۘײk[=YS|{K+ϯr1U_#ߞC8c|_Z5Һ?[ ş7Ybc1n5oKT_ޭ}q>@SꃖMΟDZ,Ї-W65A?=_tr.7'.5>vV"|_ #EH);G #ChW&OGsSѪ{36ز\y Eͧ.5X#s^orƭjm,kiλd7̭,j$lp?/,q+9`Q}%h(2uY1N0<G7<HO[U4iMAvy4ZܣXp~:;ϫW(oy'MA^c2Acsԫx}f^?~V;մ?o }w +ԚVc?&~g&WF_!]ouiV2F/D3E# sdi/>Ipu3O\,~r^#܇mvng7׌gMۯ4| V+2;=hw@t~Smo$i(Dc;4i pLAj+w V~?Oo8Stlq -W/o}kFn-.5v].nȾSF69{P5}PƟTFjc +4J IOD&ZS()PFc1NMgch6]؍|'od5<Zi~{[j_[ /``m295\ƙ: |=23^L #\d _.@f̜Дa>p`+z-DE<=P{og f7nǾ痊w|y=n^9]fmidAee4wp/Sےh-21A h-sBSm1߭#P 9-?ۗZ\~VN˹-Wx ss .mn%}_$vDG~4ך~4CUr# )"Fnh$/4~:Ԡ/  +_ɩ;SH+O\kYӶE 8l%XƇWr\imlYYEfvI,&zA]Bc" ][da4Y]QKdF3r2N؉"4 I~6OҌV<4pJ'>=\pjN>PƥǷ\խmaV[9!&UP,_(=zy0fj̴-Td?Ŷy232da@&H6 +4y^,]k,`|CX bgZ_W9m0|^N׫ǙWsp.QVPX9uzlfn5p sk!Qa2џ۶Y, I4naZ&9gh׆fhA)[:fy{#5r֢+uuWon9M'j0{ۛ;-Z.^mNVvUXn1j?o7L5̑$ܦqx< 6xdc!;yn!KUhd +,FV)hK:YmD2ܡ(Ǔ {a JUk8G{/^ka OZ.j+s+<}8<',T YlSod> OrGD<C>1p,V {OD<\vRiX ev|s7P6%5xD6K~}-8П'8I^b Xl?ck-V q#?Y3h(d떏ʺм5湮 aŠ_9_zDg:^R|n;{]m>yI:Kp |YZu%rt`خaߦCC$=~25Ybo?n))EhlM/GӜ\*4iAvkXXZ8jgB}8G}a_} [oFc۷7n}7^v@/]?MǀȜ=gA^jYd99Ě' wtzv̺g7? v{;AA,%0!!XCcۭw>6K[O en,D5EņMl| YC$r)UԞ_d Ն -RrgWܵ1)?ٍ{B΍?U}3z"yc3fϓe\SQwGUB{!k]ǟ ?b൱hZlOH +8Sz}iZ:k/x])`(:/w^(;5M_gdEl3&j :IeŴ=Y_uiiMziƾ+$ ;5zR ~m"4^*tFXXWA%LW8[/R?S`}S<|Z|6v8 /eK'Cv}$e..vwgʶ_,iwNPLZW=bTWn ^+VyRP}_R-K+MIjԇmdhL4'H?3a׷5FA|wZ^AE$AC3CͷVrJqa%Z㐻=Z.?Z˜zI/-*F|ɞl&4Mdn|wBb3fڳDj\s/ gM}- N72^٫tnkvk9EpO=>-0?^۩?eV/q몀V+%OUnnwZ< s2֍\{>A]Yo*Jޤ]7}YU%Sh52!ˣݞ +,wJ.l^Ij_bYtQL\>h +9!hR+D +vՍERS6j\LUeMg7.}wO5:p[@ S:ڙi{95W;g+R6: |v,'_t_d^ QaWhGQPQk{2}FϜ,uK(–8i-USgU3!g'K1H1 Y;ZQ='QǾP?xHvY%+*lEVgwɶWd{W& ./K|v_G{]?'8Yw)k\mx o/lDloEKfsAC8"$i`-)|mHY4ev9_Ϧ5u=\NuXɔfr[-& ʳwbBn)|,jL8"LyNT]|/v=_Ɣl3U_$!.:%p:i䖰[#(^GŒT'+y"7G?&7l5r^2t='bl]XBP.y2Z4v#}740d;9GUJ'm6ҷ3GgB?pOE/nGʏ=U*> +vf^u|{>&I]ʁzrYң?\c/B07?"-h^-Bb%WjHGJ{D^qX:̢= +g揤"UASg@mv<8r|]#?B,ٌ.9A*D_/$[Ժln潓C6GvCiu@|юKZDzQ?rQN Qnxc逖ęLdp5%ːT[r3j@KORfZTݙy/g+9fu +ҪS%ZTM1V Ͽyh5GѲ`sjlH*TQ"gȓt[x ҁo\LNXw"zA}]KNũ(24Dt8LMd,Y_cMai8@~>"C,Qh Yi<>EW\jLQQ:\h&Z |suF +ug+dgH;B䲰9^%qIOQ,tY'jGgͤ*N>*k>_x/)-hhdd?eZ>!ruuE^6{p۟A"-Fx YZ1h}mZ?U$P|a ̕yTBS{ +癿r.[g嶌M,~C#%΍Ԅѭ5k,芝6oS¤!:g+-~kAZw8,KK̯SCR5أy勝j_l7 شVq]*஁Jd* baY@?;A)sJl95;]vc9ϦTq$ +VA5Oם˔ LL|:?s1Gjaː5DuIP&]B=ԓk?kGٝlQ[_ Lb(z]!KdHhle9[ˠ@屻a'J١x£5odn.bm|&BsPONsiRhYAxiώ,3h"`MCS':--$]霞qAi+|ЊːrO<.%_J#"T]s˄|}:!CW JE՛r'g躪Ri##u\22MG3m\ZOAgo3vOzb8_xC+W鞧NgN}?8'1OgaIw?qd7ٰc3e?z(d~yǃҔ:#*ޘ~Jn5xNV~x*n!-=2YϵC+}p<%g{puQht21)#@3Kl7ٺCs/=|Jh.!C/fEןn=9n;7鮯Wsy-S`mlF9I6wوTl Zc :PnKQ#@kuQ%] uҠǕW~1N(3WtX||"ރ3M|%4v hmXÚc'^*_p]-9mWQQ5XHew[,Ʉ6J!ˠ~A;Rs-$Vڸd=V Q#=x#_qI壹MA+읈Zo +X5RASmX= $|u@h\LQ}"ix>:0M'-\mf]7f_g^ܨP=ZϦqǞ2McܵcZ\z߯>~ 7_dLl^/Fu"Kn6Xmndi5_W966tA2 ҈d-QjZXh%]6DK7OzgөƳ SdkއTg"I +>|3}E(p_sG1ˏnm +~uj@Dq> uc5|1WsҞoW*OO-$F+f-E^8'M'7X.Ib4mО +kzѕhEVpK@CM1&*h|ХM%" sGxL!аg*qLY|6$@[,Ґ8Mo2@jChi\zl,u)nFc CZK0֪n+yD~SZ `b?+db>Zj mfC1BE"̹Sp޾t=;\Dngs >Ş6"-pߐhC֟_sTr|9yEYFXjMX; uDfh{xIE)qY}z.9M$J<@J$'1\4Ms)x]$rhe14EST\bAm7 9M | sb3 %fK|"WV~K^_ +sMT&Δ-ѓmV\G0`^5jm6a uY3K %A8>_RcZ~›)l'tҁ%>x[ͣ:0R%zRYl3@,6Zgvq)y AyKj._:S`ڟ,vҎM6K87/Ww#t }(@[Z6%f:n;3o˩Wc* P_` ҽ/\d悝!OO郔jSN0Uw@)Q-o%P<\f"@mtj3km8 ʼZKEQ$(+C2kf},$FpKOoA7ևgNDd6Dѥ]i +v‣}kiMʃ0OaDZ9]$^>=‘zzztY,DyZ)W= AG31kEbc3K\Wʞ޻{>\yAen8yхl g}M{؆)9 DO/tǓl{[:)A3%OvzӞ> Lmң댩JjM VsZV,_?,wc::/F8KXDjBQ{֞06T6-p-Clե|n8Б璊 zgvwu^w"[Z&c)h2ko2*GN:t N]z."N+0q*Zd9vÒh>ruuY.F&W?t73vg5#jYÕ +k"u.cô?_|tU\z-zt=';ѭ7=<6{U y>|WbfnTU\d߆  W|4zq.X3Jؤn.֨"ǟOt$ǝTc`~|Ui܆ +#yBhyf`'[{N՜h!8~ggQ8.;J8(hwZ΂8V0VKMVsh2c24PUV 07]|K/1+?pl-ot$,u%qsTLf?Eވ-n/'oKkq +w |Gu_[N!z AsqT=s&YyjpdG\fyvbc9+X>y +/7oqh9eB!~pU+ *S")o_ h.7aga}C@|lW޲.;kM44Yز2.FCF2P)M<}o +H) n̨:cJ pה1Aq9Tol4Ƞ糹#/3ޮb4i6@D|t;?Tʍ>&̖qΒ);K'vl;/EbavV1aMR)Ng{m]d9.acexlkޣV1O &9q9:\x+[]/݁{@Gcԥl3l41Dj`WNq tuȴ?]}ѝj~<<4\ŮG"j n]ZcXut6t~1K7h1rʞG"so1'u"zD{:m"^ ÒxܤV|s?*vVp|go ~gg1zͅJC4X-ZfUxlZiLx؏5QTZM37ѽn:hqg ixƗ^]`f8~[RJbdd)H&!3 gй>84ka?n^N'Ut>z:+v#XRBbLRF / "6UwvX`g?Y#UY5gT؟ە:03Mck-}e&_Qzd|ל]pߟm0x yeڰ&![q|5.,Sv\p ,3SYe{&,M1;߹}ߊ@Gر#Ǿ/wN'j+(pu?5a=_@`k..X/5#?_KPfTO:m +~t-l龩a{ + g~՝[y`g^I.PY2C DY^ߕ*Lc + ȇ%haZ8?݅m2_;P#k5kZŵX |Wyj*|m7>TM'3]CN[#ys蹃AgUvxet^PZE`&l}wd=]/4h'޵',o3jDYl-nvEE: + znR?Y,YG0QsK!v|v+$SYo l~wAk5(:L T3,KuwMQk)#| #-fA7^Zu>]C*(Rb7C5|HB<Hӧ#GH"S`} kjEVK[{gN)v@ N j, u G󍗗AU\瑱 lL⋦ma|r=o<~Op]t"?'FtQD~}(}g})zۍ%R0[ fO5ݥ]I5_7UQr1|~)=#UWou :]wvYGg8{RLfDjfb}"̑jpEr#'$V%krڰXoTEt2ܔ}GLX2k q> mFau i2e< s; 5&d߆ +ٺ\}%yYp?0 ذTC &/94mk"bl!X<դΥb J$ TeZ`}q(_6 'Y|InSQg*pyְk87[y7MYa x\`y\.1πaC)c`_c|c20{` pgonRl=0́yc>V -6ZD|B\] w~3u)#>bLKӊH8NYnM aN[L58K LW+i=, 7ڍG#gٲ8>y"'$O8e"3Gy3vsO`Ұn +" ^3T{̰숭j1+|.1/a%`_{vy5'tpcx-ؓk)bkI%LČT61&bi_cNb23|b XC{3  hܔ%g?|~31'֕>دq'҃Kb`~ <lr9/0ȀWsp#[ 68G!|wxo8C=UtdzU{+p,\%[͡:)vߓ'Wr1{kl-WZ`}oRBrO';x [-}@XÙ1rG@_%_7 +MӒ)k@.*9 fl~'vOU7X{e 7Vq >=-֪Qk/+aM^'kxm9Z[RKvPdMӑo1`IZCciM*Kǣ\lCς1s.}xSt=v}<҄/6}]F)IM؇-Gf{~W& "1`_<40q͝8-eCo99<>M7x tD[ Z JW\W~\ zt&2EC }78= ؃ɼ>6Ot|:>Oǧt|:>Oǧt|:>Oǧt|:>Oǧt|:>Oǧ:-.58)؀48/ ^ho05pSbkThRT|\pb~i܅v$1ֶÿiZ_DŽϰ f|)/Wkk[v3[:y-߆:ÀSX +aqpm0k5~z N_/X/og-Wηߗ̱_d5/Yxg=iu wl;a05<9*4ŏf sȥ&'_/hz~BhݚRk;| +egM>`Tr06,Ybozzz1y1O&f"LJ`5P5?Q]%G$5jmEdi"2%aZb:u7'ZysȟVWSE{)yhk%4|]b]Qx$BHIC4e#$A>o{(gHj/,A\:Qw_ ;\ (1mP;Ktcʬ0zU7Pߩ,l+P_IӔC5hd,٬><<&%Y6]G'OENiMH>b*Prc8aBxji%U}#*`iA"!sڠ-8Dhp[>ڠMG&M3u4Y 5)B}4n|"\Q60C=jQjL-j m/5U uk@)\FD)J^k:Pb&UkLS&2wd2Nt`}lA b#rM!yF~|ߡ5h.HHu]gQ@X#V pBC!|2Ry ښnUA'*֥Jue!Z.=TQ0jA=6( t=DeӴQ\#6H_ƫ!@~@4ɚ2AHVS7̮17QQce[MY-y]֠L4GVf +㇋IѡR)s5'U;;\\(vRw?q:|`zj]21UOZn +Da}!hP0@te( &4NLF貉Pju|R<"Kh6ZB "ʔe֬/Rۃ>Ɇ y*%FP,7K^ux2ьctaC] Am K7#u106]V㥥| +䲇'uR% <H-sP[3..SԮ+'rJGskSFF"bNK.@Ȯ;zc$ odM !q_&iR!ת߇f4Mx +jbJ@_ٰPĖ胦| +S `"Ո.3n@su&\dTt.Y:Bp6W?N)_['S$hH؎k)RQ&V+b3i:P۪J2Bv"]f- 48.am~ z?2ce$|cH?e6ÑIVyim/ԟ(K*_ܼghC옦̄\}b6LqE\q_#ƌ2jaI=3Ԫ BuCo.++LIF\sYDg <Ԣ;*\SY}6ެ{"m\!oЉ +Zbp +%G6']ZP;:0EW@JI#?_&ѡZ2e:c:fYZ :q:m\dHG wM#׸MqADEIXFbSTEš`ڂ-Rl2m-6"Aԁy~Ժ*6/7jƀ5m P6 j!x,A-)Cn>ufmuóI oݹEPhP7 n zPʮZ\}ywPcqӎ),=Uao\)>I =h/6$>= +}F]#6ZЁp!:`yC@9\S*5`6QkٶW +@\!!BIpNӸ  +$w [9Yd{޽{١תYs1j T;ZpHi= +ERtL  u [S:V㱮t&so +& _A<X;˄wc9#XKYS4'Mׁ#įu7]5*@y1=3Fu΅c-0tϝPr%T˝&tf0^*lg3~1Ě,ل)`'kɢ ~Ӱ QE1 !rtb"$%8E +t+ sb}_}bлFqy,k >3~3hZ1w6hF +9ф*>b (@4\4P.G4)˜=6.M8_ mW1pX;><86G4pጾc(AvchQ(іFtOHNzt,/:SCГuxn!76Gk阒LuX80o%>yg"k7}Æ̞ h` yR^h FΚ{癱.N?˓_ZqF G}lŐ 0GAS ˠb8M^:,'GAL+oЬ.4? BS.<+Vuo2K!<_~y"# ΛB̀"98?|aHP/MZX2jg`QlBqďSYiy4Twe%zg=';= gϫ Ah XBlpj8̜Ewi4?Ɂ_Z"EDȩaw{BDc.cxUaqqJ4q|z/2b,Zn B_WؓrƈEC>"Xcs>y+A|@c1>d%LU80al"3 A9&o%Ia+̙XrZ0)~PIP{C8@ /A8]t Ԣ11&%jv6?x5C|9p5hB5nM-P`Dh@YT_@Ƙ2Ρq˒&g0g'}Pe!΁jmaɞ ^p,!qt{M3f r\7 85a1B+a~AmMY$wr?Cr8ia5p\M"ٌ ]E4F|H'z8&S(Sׅ CrǀO}XɃ&$֠E<=04ʸ"pwX wy)d&\KښXb6rFhxכuT 3N!ob>=ĥ."VE/)|i=Kgb= Be*MxEƾΆKPk3<0 +|ﶱaYcAǜ)A44qLV2lB VMP +'C^@xx+a|BUlLTVm}> =_Gqs +z ޏ5_ xC'Rs=yZL :зKDn$p:ЈM#:ckUdˀw' : /84y{id! 8T| @z>SwkHxI.xLPλOºE[>!lğR 8քy;*{Cp'j6hB_볆^ +֨~/BI̡|@G25󀯟v'H+8J]Ȍ]t񗋾S\ / +G C?]l0^P'؀Ut{&j; E},&z2AX̅qTJSy TjwSI{Xi6r +k9t Z"Zp.Z|Yf~J.Qf4>xzu:I^>R63<@cX r``IB!~o21 o/C\)0Fا7]&/7 +?7AoH-|kBb|akp2;kw;b= +!61AIw +7Jk<6Cpts!SnAF9MPbM,i鞲4]' +~%`ΟZ~!b aMH׸y%; ߐ4c&JՐآmLuL `iQQX3mȅQ&I 7[񻻌 +5 zS{,(A\tE4:JTA/:#SK%'LWGFu@+V&*kb|kc"mɿqqF:` ױW%'b]Noa =Dn^ZAAk(&& endstream endobj 1126 0 obj <>stream +jYhWC"=2 {k3 oa0_ǁ=^_Cqb⚾P=u3g-;{g-|;8Qu9K>^"HTf +n5Lf?1q C[ #Dg凴TG9 &  +#Wπ~A5B+DnB׃1_ YxC<ȡ("-{Р}J.\47% ĊUG%(#L210Sܳ=2u/F$$A1=Ah}"xL%.i&L! yLkUIjp}95@:`*蘁U+{X7g)X3-LR{c"&`y({IPfºpp%6hr~QVZj3O` k=_úf+Q(yL-M j5A4k Ca +x;ޠppD(C^Zn("@?-IRDŽ?xL CbxL67җ` u#qO[XyB4NO; r(|@+ 0F0 fl9s)N/ lky?_'> g|&KN9p۰D<&A׏K1!& E)Xϱ-q1S,k1a0zH'feB]X["N=O%0g%x u zʬdL6N*uX3%BLbm;U6kn)"hԢR߫2b=Z@r +xl^ gNNaK# xôiyʁ6u~L>4 $س8 +oa(KZ\X;ļ5^=,!{o{C@V웽 tXZɡ^rR})tƐn9CFR|{"Am Up +Z}g~)p*yj8 c"ZMVE(11}Hc@Ca7ā؍f ;b48NM<ޫdJ +ҩJڀޓ+]a֮` Ewj+cya4N nzTZ +TTBQ9CB_א@X> ܏:0"Ф;u}{ +V1Q`;V-WT3_>xz<PLu8/_}:j}ZhNmm0}qa,A{LhӄEGFKkܟ_-cmcBVyLXMSrš0tl.6hp'__ysN(E׭eLJ~J6: +}iEDŽ9tVa Z`z`ͳˡ\/xhiIkWKGla%Oz]x|dOc19MuBUM4" x=p'\ =,~FgFb>`#Zdki2[D޻mt{9\@6MLæwha3?=&l~zL-7ׂF|` šbǘ9b ȥQk3&spX\xf,\F!&qMQ;xQ@Ny'-d~f_¹6LY]a,H^ldk3.~GY<71`nmaVݯI^iRa/g-5(Qq1yLMEAD͵bZ&Zt*ځ|cE'$V)ejtJ +/鈂v#lKɄ]TxzrR:jKRt:}_\ƔfTv2 ^oń@|0ݮ#[c&"mi방ـ3nĘ3Bq +A8͗h~C/ +֋ )~ \(Vue 3~ & B7 f?zWa|Ș-L 1!=#g%uc$ýw]{쎲q4w{Mk<6>Sq\0xgGw^)N_={WסBXa5n)J TQ^gTZuORUa|'?|'/KCZxA|!kZ*&M:p&^= +ziPGެ:-~X}8*:Z&Ik_&\8V5wmbRc!΋N9@ORKQgbG\ kG (mfUb׌&%bs$?4FhxǛ a8w2_s3.k7$4{S$Ћ>&BMϸN(`M0dV~Ƀæol|XP0_xB[ >tZ:vɍldVBEأ"Gǜ`cB y&?tmSGK<\^ D"c ~j+{ `e.eJEU¤tz?}|rO^*>L<Ǡb][P}i}/=G:Hq=]+pLqѢ\[=!=/i&j:1z-;l=7V)8"aaHT Z"xI롽j^!>*p<0;x.e ]x7:#` +`mzWA䑬Q'Ϗ{dP=^u!gc^M:Om%e03jz63:Sa!Q}ʝ3M{ہ|}ylxa {W\b +>aykwY:tMn kɴd|66j7B?cc"hy?gr ){MD#cʀ_\w}%a"[K>=ex q.^8@sq <7`8%nhEx=O9 k~;\aF㽭Nsaue + xxvRo!pLki x=^|BSDb}y_{ +T0]P`8_k,A! + ]c kְV( /=\Bfr/^ˇg.Oy<`b4z?tXL] _=, xP?1n>3ɴfe\ʜv=#+v!l:V v!@oBLR +&O>OW;j +l? ndVB+Yt%g2| ܗFs87rX+~ v@n؆_>7~YX_u^i~:p3ݣO!842?JBO֮a |n/:$^/v3WύKӱ74o"+p#~.~c{ ?cca/ +&LJԛ%iyƒGlG/9)tt6 gxXŰ7{zCxE6ņ{5 j*~ϰ)ZZZ h1Gx$/¼? N,[kC+cK䟷,܊1+0E8¨^ bx{%{t_( xё75߁KpOք`z^)1~BJ)K<߂׭N{O4X]4&&h[`dzTӸ֡蛅jӂo^kf~F2s9s.I-aM-!lէ3{Pq܇<Tb.TBuTď7C[uu19"{p|5R ;i̅;zUOz}9}>!^B{!"t=וX  ] +u1i&3m"}:@]OfB'|PeʤwhSvݪ1DŽ^q 1F_diz bS_rܨ0Tj +>6 忤feX +rWz]G=GQ}ڋ@K=(f_}8*:(N;%kd]cO>Lݔ|U (kU9zwɻS;UjA j+Q/>=b6_EbS6]Iy#si k&ol$*w{L8_mi-¬}6G +z}ă!>ܓo#t6vKHWy(_=(9.*nl<+*ܮ55+?ye3{52:?mZOW{KR5;=cAV>C+5|[UMnHoi,BF&}Xl*|Qw\$/|ID 8WB?c:قL#Li׊yUa7/Sm%n/w g;tܾsftDyfFn!3;YmG %O-[V}SOpo2 CLCۤ$B4oᬌk9 ӎy{Ej=xi\p)W׬1w5AnXţuLռ5[t/?3*?w+/Na$4[}\֤`R{[Bav*Wz5ѨαZn9\ǏՐ,fN~v}*   >g|jg0}m-i21G;oʨ]E}!Gߏ5)>;΋~Z1-ؗYi*MVΒG>R̓nƴ8XT xrRXvN\Te+.v2.,,i7e_vZЯ^4x<).(=#*:rQFN^%ƱoC gD7xKC%}ա&_A_)n{o+OSW ~cF?01Ot s׀ }J] 5Z yQn%ɭ<,h"_mnrڌy.bOYeE)cGzc_eAXW*i5.ne +v 5oϗ|}Uٞ_L>zH=m-7r;_NJnJO? Ѥ{^m2i}U9ZV ~=;\LB̿4 bp(p7H8&K]DxȬZR(nwFk# +z)cl8]*&?{x)}'ŏ;'CJGV?Hڪ-:xo[!hmtu5y%d;O ?aC1N0moGzWC]eš24 2j6f пCY?1n +JZڐ-)c_*Eۂ<:ה-Gf(W?Ԙ_ Dmh +bC6ve{tpͽ*\GZ+iY'k {w[5E/NT*?~Ǐ,^GYc,-YG>$ueG?M8,^Y$|_m2Xy)1ѫ.(ɳ.(1-ֻ.(UZC׷7'uk Kihtάvf:EܨtDS/ , +]j>A$']y6`&~xBJi1n ^o1~l r.-9g[$[\M:r3YYO4._Yo9CAZ+w +ߵ]8Xv煌iwbJ; |LlޯU5m|vܡQ'Z77IckB"#3+\#lʚ.UۅVڇڄV؄+lKK"ʜ"3ܢbbL_ +j̻K?sx̃^aAՏLWu.u^6 Zٮ0ѧ0zs4ܴJʴv9#''$%>PRڐ-YWu={<9}'HhȘOjGiQmxaMث&7k~mX~mj\4Rdn +wwU`SAA'0 /]ʩ + EyEoZΚ{6uG +6g}jfaa BT_~1yVHSڊ6KڼĆm_4ǽBAsuSrʉIE(GG6ɕ5\cc<Z%lg۱;A quՎSrbاβ;2Ϩ9QfoIMeAAIQiFTQsCZ|u̿?ڣ",ֵ:,63&" j7qǏ\[^)sBVt7j`E-g|?ɦ۩A9A59Vm73,r +;AEyL'xQ^y!&<)Hϝ714]$r1TX_YP}!9lCJlÛRP qKᯇmbν[Ukʤ0uSԳBӠt8GxQ/zJ +/#p)+VϤ2hXRzǦrnkJWKߞ6لn ahF:YMGHD,@'4b6z(WMطOHh4%;w)s9,[ +dJK iks7+V([ }3{H_/}nM1͗BZ/9Osn ڶ*S^+[p;cꗪ#+#\D(),F0@#c1 HL'g){MU.=?8O425*4 z{E=ߌ\;*Sz퍇ŨB/٣bgLj+Q(Kq.t(,qH-wEUzǵ\⺭¾&w.DgJ75lmةF,[D^P7;#uUA#s1;%Db41A ǟ#uɣaϟgƣ~k$I?7}2a~EͭyH_JcDI ~Q.G xFwz^*+p|-]\ޖ9DVƳ_;_?]lyՂjpŰfݜYQNE(U،CxÈMQærO3SVk"{W+19uXhz-6;3%"GT;(c"^9{Vǚ}xUsw.b((MM!qC"Z\" ~Ni.4~Di:;~1 _ݿ^0 c7{3\\6CR;v~tT><֚#TkS'y +aY0o|d0V׭zz7wTno]_vgW|E.q߹D(p~=U[T;?[eXLH_tp, +'2Ȥ2OWZUtU ;uk3&sr8"q$z}{Cp>ǡ:ILX˒j&izENfFjL.^WjW}=G +甸FV Pk>umbr_T/7kz=+XtƢIxeԡ$Z0y#r%75p뽰Uҷ8O7F'Fף1l(rMh~\P[k4OB7YBLgoP3&Ls ۏksLG'OTn&,+T.Ddr>so$=z{bgnyQ)^R(xWG.]Z}CPga?_^> I̐GLiIsPOL4|11Q~1ejbb+:)P\+¢EM^hΐTF &rkaR 9mZ"ez߹i3'_Ɔ/~^<\%̉wm'gl#n!OXOL:n-1P~OAX$[~ܠ;ft+d0fw{E%#+[j;+2\{kSZʜwNʃp}S`G(S+&QʏK3/'ZML>~#1s~br4\l-T]=Sp悞α/=.-5[BEsB7o\cs*@;gtW~GH\nbnGȑ~A)pi@TS^s)9!m3~juܞ%ױ9t?gSfSCBjsNBi3ƯF׶Pŧ*I}bFSbV+b>'b~'VPI'rC\m{/],L|&(ajtmJeP++v9tW8ŶW:q>_5k{oRMW$G.@4tT'&7PC4v֡$m$!kK\ʶZ*{)!1j%9R2 r'6G!NYK,\CmѰNx.h~QF,]C8ׇvՈwp(Qqtps}NrnzwԶ.RS[.u t6=6圆A3gf͝ V~yS7SݴP'%c$ӚTWsE§\LϚ<,EQ7s&,/MyƚXE@l6I> x4Ν4iD#9R3lQw cs k =3H̫01n,usj藫dPpŔn Þ&_l މEf ]fl~&rf̘5 q̆]{]cQ^$?ԛ'>Tȑku^{ȩS;7F]'i mn3dɝꂔn &F:[MteEg~զ +  CoGhU˜QLRw{<@5;q O {: cnpS7cŸ)wf!4Όsql8'ft:ґWc_y7~S_w Je.n7=?Sr)e>o4g~aKv3&dq%i[k)ȭWKQmJXjFl>>L5VQF5W3=ai]Q0 +(0uaiu ~ ~OI]&ͤͣϥOL8EKkzelHfr|7S[Pyz ٫ogg7~<:)~RsܤͼuIi8ƚwmPU .Țb^soջHb%bh]ހPu)1ԗTo.Ư9:j7(&ß54T -}euBXBX;={ML8^7ByKƖm!w1>w [ͳltN!do.:񵻩'k9CMK h'Un1 gaaxۯcoսm(vjsڿr"ANO}t9DIH}s+y嵵4+m# őY >"/b|pc[/cK[*v +PdNglgSvɭ{h+JK,U6rEʼnϽ]" yS)E[*a;{v?Ҳ|ܰ3&8.zp|*\5Kဎ IPۡL۱[ُa r f< gҍ)!98΢1WLn9\T%g4+Ü#-N$mC+8Q9MGyMbqnA6_oOͤ ÞOỺƷ~0NkI>^ɏxMרOR +a~'gMOI/aeeBPL/_#$lS#t M-BefBs!/i9 M}Bu>BK]PPb.ov~{b3ϫ+l=|.qdݩ:*^ĻY@y^Q/-@^;8Oq~yN/Ϻ%(yfB=a62wgaJf;?Ԍ}U6+[o1UqFѽ.+ \d 3)ضM1v 3æ +Sٺضd9gVB;h8Zz~@xޫ + ;-f{(߷!8ww'XHB#.ݍ(Q K#4Mnkmm[_9gj8qoiJU=\֚ȯ\B~4)q3Mjg} +W? P{=܇?(x]V{Swﻅ? '^En}bTLv~QaY;}e^&xީ]MWsko ʴZ[\[>r~GWo -Yk{}w/@xAw=|و{rX? ^̅>Od<=lg*Cz,Y U}MonܥK z'.u6koY> .InL5Řy>|A`3} Gzםޚ9&h&iL͞{5{lxy>3DZ'|eų +1[9>{ fG _W3Wkŗ\Ve1[U}{Hu#Jo^7A,?=ځ|>K; sf'cKp_<U4gW\[%U9ҋs0W;a0FX}o/vA7zF't9?~v r\{0/3"wMS&f'qGKhߙv˽G _ ^.|-0ŏpIW?#_?}j> ,4O~sfAQ ϰEdX[r!:c4;ܱa ظ*!.NjX!ǦتeČ +Ob-h%ȧ¥Ҷ|Zan5Ru'{ 7? VA÷Ks TxaxPseX7]%^\Sߥ=Jڂ%߳ jmأqr@ 6Ü6f݂嚹Ny4Mlg+J啘3\j}ݿb9 R51ҒH,6N__+|Cs+˥]tg^7r;8 +BBXp[+'['[Ł_ZH(͝^OHo~aNC|rva,| f yھۊϧfU y7t3 ?]iةKiutԬ]Jif㼕hݫq?{6{IoAs`怇7(BAhCkZ"diB̉w R| WhvsqvBݯ|5AP7j| 0`/ȓ80Si$uw=ʟ'w/ŌI^RH3y9S)ij;~gxkPzz6_qanܥK?rÕ_ 1G8l H"+m+. +:{sWq'/+f + c +>:ϖ H\}4\r}1[⟿ڃ`SO~ӷ|Vd_ŘMwA隤Kl/쟮]SFlsnﻡKBOG 6'{k=_osYٶlf.oѩAV[2ma `PKp$U\MSհa6lnK1m1I|.q\3'=sU> ku#jm7WAYra}t#Owsż\%v?K;ѥ4Rvt|>s}jWWo4Ԁ ֗NdGg 1'͏!RFA3Mra;7v9xi'nn>Џ;iBFTraX|fyb⤘24u2X=rYbnҒLofEvS"3n<5 +ZxQ;i9iIշWqEc`3oI]Ӱ^tGw77n{^l/,;t +o@c C|IÚ;4KR/xe~)~ss?.ŝgk)NL૙}9h3ǡHڡh .nzo͟ŠF{ɬگ9)kqRyhSJEصtRpuQ٣uIڠ 0;[&R}jT{ uI}=JZ,V>Z{-‰7< I_  #?/-_~(*c>wӤkO\!dv g9Y\yrNMkvlܩGWz~-}1.w<}IGwꯁ F, cH(9z2)xxuk # +c/Mt̯_\mƵ<و -:0 (VWƗ9ӄBgY}!2_!d5;Kǜ\>rL>Ğg1\\pCƘi Nos{&jYFl&h c"|^ Z蝐PEbY @{lI?s}kf3 yc[%炻jd`Cs`brlsh#R3%_^ٷMsOpAVrQLCHɷ B\.4SxfZ̀4]KhɈ=4TgrE|RJ;jb ঞ zw/"?u'= +v+o ~QVzᑈ|ͷWY |wj#JFql[Ijh:Q܌/s,ˋ@N21֘=c#-!LӶH)c匊 eZrمЫc1դ58ZwfTrt fĂOZ]t1p . m2ĔN>J|b&B sZc}! _@9l@@+kCV:Yk&98|t dr9BRx!,sN$" Z9yn DqBWI[O=XBN?wHڐMշ\~!C W!  !BBXgAfl^IoFj3Yu_KR '> П~)D+f:b%: UB?zùeÙ\2.,nşSʟ˯̧>YfdpA_YՃ ˴vsjS1\[9(Kb4|tF8i)'0K.'&6 <h).-']fCHJrrY%ZCNlx\sn) M|1jB8;?"=؃ ;9 :ŧot0B3UHotKIV`eHɍ؄a]J̸4kb GJ,?aڿ(OֻZxj.fZDLW|~V@+.m GR' kZv~Itmw:W~_lv)/# -lpE= 픲ujtSFt37Мu̗-O{s߻'Q#Dq6~J9fEZXH٣ٸ`f }3Br;>ё[fjmݩ7f;gK׈յZQÇD[Q6hIՎĦeBP<&9TK,`yWn>.#\מ! >Jm&ΡT=:b `'B^ +9>ݘb;15~F/Aqz[0oE+'*~ \Vhگ,*zBKSz3N~+CiALv_N}!*<_"?+WgW̆\Pə]H}-yB_p%óaίCM}[lj5#tSv脢'B׹\C7B{@Q3I +:buZwu{U~?HP> fpy9s{UbGO_qJ/Χq٩owW![V>FB8.| j]?V#6!k!a4P9'g@,BXxƏ7?PZ"w|1TC`|'jCl i&-nb׾{Í~ -nwWAޤwoa+?eVFM|'@sz$߁;r+{<7Ц7C^p>r.( +u%JJĸ,;4(8vy !lK'ŘW;3v>sW+-CB@3q+X\R#'s%zu +6Wc4L+/$6 73_otRDb6qZ7;Kv_>Ar%;XĶI̵K?ϰ,rdlkhs=-ډȧžYxORX5 +|yCrϫax~N 6#~ # cHR:>J}ܠ(t>bs pEPGwԡ'>b7xhH}Ś˄G/\d c놾'>8ox`Hp5Hī:8ZfvZseJص}Ϊ;wqjЌ5d;;K*Ӳ4IĻI-[6:S6I<+urde Y,g)MZjtf|5wЬy4Fgؘ0F;JͲ3g#O<R2j|}3IN CRSmggM;J_BFg*w O/PY<#[veM%bf87d1_^dG]<ñ盞;հo1jjx]<;zSk3ϵ7;o404J~,}X5zQRR#bLZљr×ʙ=S3uBVhXHXbWZfRM6}K=`ˀswY:I5 dgF1ۨާe%>icOQBFɡ&>unT5enxO vmw7CI[U3?DmQ9vaRu~ 1Jf  z▒k;7:"'EP ϳUrpnX}o!on !X.(֒XN,fR|~[{t,[%nYάv ,Q7;2z? Ř\;QNڅz9|e&208CJE-|cx>Ւ9&fr7_vfU g[~a0~ygȂ 6=N딣 LK@?{^^C̽tW +5C~NՀ-1![f:(hzk51Yl, :rb"_`͇=f.5] fW;\p~Ć+6ɢX@nrSש}=xjNY򑲱=bm/%4olYO]`g-̇T22G-kzw; }>/YE&v|b#b!uق|X8yk\>wYlw6KM7K'D\[$7 S{rσ}|Ͻ|]WgxOj)Bh\{n)zG<"m?ŵNƢZ2򉏶 Ojxcj_fkHt/d2ꝑ eٶ`Ѐa1x4kPF,[CNtPy]3ܐK`ƄL抰W/csl1ÈlIx)S)G^Z(t z"JI0EuE=J~t0iΥ J&!j"1ٽA*7j4ıA^T"kOxs2;n/ = 7}`c_&q*1yC]4 ]Ku[Atj·QCӭ,SۜJS~gqYkvVql$;XW~oLՂPW,//[nd6YjzrYUZAlRf owQw*={[p{jtn2-o|.'n]88tOj7\Ԝ^}y|urG+Pzw3F ,&uA ["ظ^ 7YnF> +1>pї`(g0#'{-o.V8DL+sL9s`,zQbXX[J+Ś-pxKp^XH|}8kmcLwy&|p .8#55喴Z{~x\m3ѻ{0BJȷ3mC VJJD~m ~#J;}uvjBbyr>Y/,B%40p.i1؎bRչ%ȥdj(t=!ֻ7Vz^D_ALWv Bsb[b͹E"YݲVbBX(o=^Gߺmb{kb8멞F_G:9+~/v/q' O\Sio:0u/b,~k3腃S$iMLTgޘarZE#av=cL 8;u|)Gns\ǔ;e4+j ps 'fֱ8yEτXRu?8\>;[cJ +vX}6jB;q +mlk`xb?>eiD)O0G'|giKu;zzXt+>]f$밶:?W&AX_#k eIqrb,CvZ14?vs)_}}|>ν[aqVkO}Cҩ、ᗞ|BX5C{7z{0́7k+c}1{]I I5!qoxPbxlL`BU+֬sY rYdIC.> a1웺.l eˢi! W_e;{gne_7_aŚիֻl\vӊuk6ntƷׯ]v (|?~÷c7,Z" +\\CMbxT_wOa?Et_7$9<(d"z+.\_6\VnXU< G^??6cz*W\_OOYVhf\k9CYd+_5|fƛ46ƛ{#{~}5@56׆ l%>!VZ! dtAQڀTKO?zm?:;OO +3<@?'i֐21WOd1m&F1J2Qvyі#U1^`=8uFM0T0 ɓL[H҈eUmKO%"FDI$I4 ~#HSGˡG1I$H!$Zbh)A#oB K! ֐r 8 d͇% $,KBBU0ɇDGnfNR+N/6(n&%YAZ>{|l߃P\τI(sR84[i*$:z'!,o!R\>9dMx&;9L8>O!^s#! fP3_m R9zT4^k0>S-A욲澽5/^b˅ZA>1җ: Ƨ#- #Wjjm+>b Y.aχX!V|PRm$ȼR +Cqg9:NͶcrD1&gs*Tzf7ɭaQ1IEctv/=q"gߖ́bli$ѐ9KJ*'EQFxQVRV4)W1߿˃֛!R+YHv/-9#̽ehBc,H2&$ 3_Ψ*ZQK@Ǘ 6HF},Kɍ!Y + +vQ=h5&;#F+vz5B2?kDةu UjtfQTczQtkJYhT gǖ>4M3'/代rl CR30&gOR +b}C~_xK#uπ}BB ¨d!`W}4H8EfxAF/3%X ?$;: +߬C-1BHkY[6ac|@F}0"EcM=Wb( 7YH^(5s(sc3a\@%9H^`>BLDP4RbD Fղ[mɑ>ܖi89RhX2F}S3OL1]y,?I!Zui|Z~v|!RXbhmuB?2 +jFDHx9~"d@H RY;[EC!%b~#5^`ΐtgZXRuy6]q,a Iv|8FNxQra\ X>0̆ґg5 k #Nr\iһGJ(5OZbصͰŨTk!Ʊwd}~`L:hĂBD-eDKP5d 3ȩ_0Y 0Ar\7t d7OS*ccj%ĔtB"} J/P&AtZȠ!$-oBL .cFR)TshL>w3,簜0e:3aؿϦ4;#Shov$zgdJ*&WL #fQ`,>k(TZ{Z]cd2úBr3>I&!wG-4jŅEMXyyd!1D I#E1SdHCr$i|9̾&CVL('$F驹`8$r =9d fI2K,"G AA#l1L -yd K5oaW2x6PjnjFZo U7V-on$ikKh|1Ah,}{dT:)G ?i78+WWb4]lCFfeI,~fj,_#Keyxw|lSk =Kv*߰HL85fqM  1yv?%)(ܯq +|ɍ9`IX@KN_2!%v(#V8΂4G 4lTM#_I_)URf -G!yBRe tM'yb|c)>yȾb K)%^[c1ݿѸxh*p#UGJqkym$ ~[Hm y6:%BS++d>KfZ}T'Uw?)\/j~$1kK K[I8eNa1|[& $vL5($Ț-cu0`lc͑j2#ߡ@jGI@vb ɵ3jHʡ+6:m>_wsda{\CWC  fװ5#『u躯*|zI QZ)!搷pBLfRqy b3$`ʱ$O|?C!0Ғ [R<8R1 O-d .7%Y7!Iו !)\7$I2RxhH20-byZ@"pO96~MCu~R$LoIT3 ܄Iuj+p K5 猁ߤz8=VKAc + ƨ?Ռ gL9 +f95 ;mHa%!#, U6N$_b%6 ϓꮭIx,I5]'x@:ʏ|I$W:5)==5.Nk)P[Q+/wg<9AR#dw i@*|4~@kbX!&k I>>dq}]fXYIz)\̳ߖOA32!C2i'Zi>ph~k 3d߇3 ɴt$uHsJ LJ[cXc>}KNVYR8_ldȑQwX=9*HQ4]O2G@j\H0g^yq :`5Q茄1o±ec`ڐHA +{qzJe'c^,ߐ +f(5[AiɇBT:BPgQ>C-옅<=C5ِ`U̮Bry\>J~&?V* +_MxO7Iuw@P,X 5 +X"O7JZ&#?3GCv\hb3lI5M4G/O,u<%w=#w| +d!+mQt$+@)w})WJV?נԛufWXS`u?IGFdhm2G)Afu dѷCb3(5$ A$%5Rn-U_F0daqk}̥98%8g4lC GJWfvߙ0Y`@rqH$p,w?ȝ_w Yaj9FkEXOP~GOE_R2z}I襰|!Boܐb*njMrC,e~jr_}Ck@hp.ɓ$Q5B>bFꗔ_SJA6gL䦏]_䞜3 Tum.MbLE9}*盝wIZG>ż$`(m]ۥ6J ^ɭ,_\dH> mG Ws{=ϷXdp( +zqMῖ\*a"vok F.,WU2ZMzr812x)iB +9儳: +NX ތ& ]vmΐ&@2Y e`OP{e~ +/JR[X(Hq6e~GBͷV g;\yjvk$;Zd9HKtc[{S*C2galH'z^$:ߒ^GFm3v^Lus& c@_Sun jz2Db{+jq<Ho6),ya6+#V\^(8 wİڻl9 4Ւ,C 3+Y̆t^" +)nBcisZ,,vA<IQ~: (٭nz9]S넖dk>:Öd4믯R\ԂY iE䠐c~ DMw׊573mVT!P@B^_/K}%T + CTcA}QNNz=B{K}yT/{rE$o>!!F=)#_sЏΏ7"]`F Qj$1?Y7 H%.kp#y}3k&$Uzሡb({*GȎA ~x5WJrGO/:n L/*r"\ ."&r(dGpsW1 } !"k4$et+-0δ]jzo?$<.vE^cGC wl +/HHJ !jL/T !Zr G՞GL@t#2h=Q=uTzvTueׇrgHajhV!'?I~RYX]nd IC}N?O{3 *YI\;U/gbkpmh!|sG*!~N$3m;b +lHЬ&Yw.TX"Gj"<Ȅ/ VYTy} p#Q&Wnc >P7͒0ȁi<ԝUd-Dz|)@bDأY=Iхy4,ؚ$Y@#c`߷/j @TbmJ`Lhb+7•krvi]|͝zV"!\wcT>ZvB_24z3;mR] 9ɣRP3> +P@~ptd!dSi<2 , Ժ&є5DJ,_fR!־E('VHSX3aS8K !dđFB<ܣ=r2[&FB草d3CfLD~$H"8B:01(,c`MY ;Gv[?T*]BB{ߟT:q/֩o'_P$Ӱ*F&@uyp.@)j!fs?z_|7Awf TkՅ l/fALҲ_YD:BpN XDNr.$9rlMHwȁK'H QC'g65'}+34 +Jb,;>,7+m#N oO݀<2 ‰kLr&>jQ QIjiocŘ|yy<S:0~&BBu"U]}@Ḧ́`3[xzkXs` D%Z!$D +"5"Zsw'zot;gPyv՜'%={䊾Rxf1Ma?pkTB·/Be&s QZ/CSCSGbYO +Mrsѥvq>j>7GPB|9zX:xk'j/بp8Zb4>sMlpbkhg9 u?.NH`3?i#!G q~$zq嚆iB: +6-gЈ,Ք$E3` zr=.v́* y'/Rk4|NAy f.<L+O/F{v"!!!C~Ï >% 8gp5Qd !?ۦ ~|CY,-nS+/,<t{+mr=RϽ=Bϗp{?\x o ˮ.jo/#Ub '3 Qn}% ͓Zm:B#dpF݀z=> ĝMJȷˏ ^BͭBz$!ޑKr.(O 0cvDdy[/sdы~V兆++%)9R95P:#}3`z.kptc5jIA3Gن+qÔtϠ;@Ǟ}b*qa@"7d,;ފ> ︸P?={K>t#z@8Jg{woދ`:^coy&B8HC#b9&2ꝱ/ʵڔ٧<7+}L3#.V5ZZ>&$r >d> I(q!SIRU}ꓞ3X;M'֮}8LtΠss x}H~K}&C{B@`/5:ziFR?okxaϮX ±wWi] }ZG8sԅޗ{`,{Zw՘l;#I tX)jNr;2aqQr嵥BK6QbKA~|_4zsl&VG\ G ɳ ckUjJWG圎iIЋyԺIc*g{ ?kEHH/cCAlz  kZ,>`6;7(G/-VJR{Уci_<_i_s'm_lV.옍LK.EV99S~@y ˅w#fJF#{_bhN~^bXwW`pGIbB?s@&\>PjD_s{= vLx&UYHsӎ;ٍkY!D]HdˑG)5#ۦ^yZyf @8"g?T?N:S4g qFg z.3gk`ήL +d$+T?[l{kbp|!D0uʮ|?Syi1rw=w7B*Ȅ 8pC%tqvk|Я^rɕt,e#YͰˇfu[둿>*jJݙ''7.8Ӱ=?1,>:ζtO-j>B|=ݨ"X.?"l9o:B{ڏ7DYPixHrt^:[K-?ꍚK ]RsY+gQCZ{ث'tؿDg|/C}!2K{ay,ϐRƓ" {ͰѺ~:{ :jq~b,`ő=;pk;glUFLKwϊj. z<\σgc c~# ve{Q|4˽=腊Ń~Br\sw5y=۔V[b³w|yac\~bi=N(/:o(#Lgb-[ZgraS"?X#r#c71gs Ac@;\Tj58>13 UZ!4Xo]㜨Q\Kjb赥S4V^[.5}rVa鍓]YJy,^_ {] /ݳxP`u$bLhPpSO{BwDϸgO,=_Z}Rΰϯ4ݵ@ k +~oc~bGY>rZ`& bveC^lÞPj/\Koa|mdǮj+Yuy+% o-(0g_m!zU1Vpq7.8*6|VH=$fvNJzݭ <B =O`P<\dK*g稹p?@tL2|pUG^E9GYb{]\Rx>kPpz|o-wsz>w& u/?}҅?[ =W#*&|տk1:} :ʮl.koz1z| 콧UZ?IxcNƜƨ+GПQYs|ףm@Pr{iϞb߯owc_{Sc7VCo^ؙZq~ RcS*=;_hR8n|syA`o=u<;]Zs_v_mFcx'H!Z"LJϳ/Ky8ʏ"_jU\Mڑ(n?4\{\p1' ~Z ($5O|YWJ.[l1aF/w?^G-tփ`KB/a0J;+d'i !֨O6 RrMJ8b{XV?Mgfq%=Y?o3PC/koԲO (P6I,  +ZZ5-R+u9?{=yY;F33ɬ5%" >\&;?y$5UF![ɨx6"h9!ydoV`%'ӚɌvm{q#n$ӺE:Lͯ5´n]aͨV4MY.vg~6P*A :wkB2<6ykĔ*ꦨNReF-Wԩ=\$bl+/5 +zG= +u_>3'{tM~ x###lEvl֧+e +r{m$yVڨg#GeA֮Y`Y԰냚1m"o؀o5o4~dG$Գ!(G1zAlcA7.x"=찤v>.Zcj/ž|&Gn*TuUչ.s4ZvR\P'!:LȜAۨ(0qGˏbAрѥ/QnNukq-L+" Jt.;gaမhH"#vBa(`Q up !-ȈB2Q廄=¬D/?yd7!n5;\4 F`_N_~7Xy=[pIoKy_hqs]G櫥xUaAXrAbgGE$X~j~>AQ?f,dA?đ\k[ܩ1 A&գC![ګG䊊ͅ/_ ~7}OG$wݧgC0%xcE>F!ލ!+NCvx6ofW_x' A]uES$v# +D}I^/A=[PZ)2ޫ%bKA-yZ}\p$7zMw 6 n WC uËzxأ~9,!PeTuYYY{1*"(6/|0_pC@m&[: F*bDcځH⭟ɖދ!< ck\Ts/y)hݰ{Z^]N&]2Fz؝oFWI(U8m0}@ӉY+u1*xg^\*zxB|](1erkCzN#`G `N[vm?q/1K"L4V&!?H5:|VEʕȊ Kxv<>h=ȇ2 +h3LB4:t ߌRl95Qu6jOc׃Gc8_$hs6,Uu t ˻ΊK\ĕo/ +:΋_5979Pzm7}-ko+OJNCgfz?/*q;?tOiSt%P_)] w\ ]\yUaUb˯bG|&k (N~8C7XD-x\nG#y٫GjIQLrʬނ|-|`)Um)擢']v=VXw(ze+u65xKXPju#h$Wц Qgmљx=lNUt:ZL8};š#+|KjcSRtxHrlП Ml<7jH]1D .%ɒ=#M%!6{_']-Xi ^\kq&f l兞z_wI;ߖm0լ<5N.k3~zSh\,y]{"?CM6R\lf0lmӻHRf)cq^q~ bh6Eqvݷ#uPWd m~ &}7xN6Q[)}tIP}Wrr,NWJK>?ɲdmy~㷣d7'†*7Ӣ_WvprFPcFߏw^e&%6^IkH=בj?Q6Z+\;T+zaٶc]Ïcx ?rEu8?'z,݁rW2w:ł0щ]oӻ xBn<UYmSdЂ&?| nWZ{:~xry*L1l*ֱ-55),Ϳ),5G),L4w)Fe\npKs37rMp|hEp\h - cAr|BU]YUAP7;Lۂyc }G~kyiŽ Dʿ?찺c9&/i]vV.εe]/A7$Ysv2~DPVsƼM]$'qǺ吏ovmB["bcxK679GU9E_.ultkpk\++bTy^ +9f%6X?b=Ȼx!Q ###{AUx=\H}4E>D=h:){{m&8&J]%K+O I%Mu:^չjͮ-lt-mulH82P2LaN;a?y<𨏕]IL^Vp%=LKF±\d]3x-R-L,x5~FXWŝi<ՑrCAЋ8g =W_]ȡ_#w⭆IM{cG Gz|Zb̚/_FoX!O\ҔiXLk~C}dQm~xR_s&} -2Fôp&Mh+ӯy[}>Ӥǵܧ?Eꃎuz4e\N^+&ԅ +ZڼWasx5L4ԋu[%~{:$A\&(I/JtH inI=ѝH AYc; Ѿ;7ɱC&Kl6>uo&ڊUJ35_hPNkpR~6$1W +V4*4־jmXrdԟjHdӮ ٿ!vV QOZ]Eqau(ZF~u4zN#uP6?''{5 }`n u!i:غ 09'3urNſxyVEf\LIp8(>_64NCAf1G d0/J +J|(ˮχyCBM y7X] +gmw8P?Zv2 s0,*`><'[B` rד*?H3`WT9`|0Wq)X8a5X,_[vq/&y=m-xL?GrUO&6VځKsWsV6Sd0L1RR`Re)8l~E } b6"R8"hzB>NT>0.뭿;?)qK{JT\+XMWLIGLfo|\m`RGc%᳡'z3bXǵѻߨmۯ֬^ +6nZ t,N1>Kª%K 0 LPdJ] +.|ߙ[= qx_xOlw˽KW\ M >a|qLH|cpSTBW~?:dv ڡ2跍Ji@T }_oLkпD=0 q`̍`.kX?; + }h#x Yn\[r|㠏yY_.|Pl;؂2/< xwNP귶`϶#b:bٿo8d N 0/Dϧ6͂ r5&Ǵ-h&7 O:Q(;( |kיQ&snO|&]GX?U3nȗ>~Z[+Xq/MqﴋAe f}CmG9WY`pا~N?v=_*8o&>)J_O»W }"˂>QUA 5ºCz+6?>ޭxgE-wW`=6q9 >zթ`.,Pk-u[h]sRP=К2TW+.>^lKΗ+ck`3uJmY Ia~!Ҹ5~Ѽ}n_*vczfI>?=Og['2oΌ``;JM٦^ԙ+j͌k,M(NhcR7+#{hOJ|SJh651=U[_wo6MsLD`>XvR]|mmZo_N{e@7o}RfT{=/=(( zơ÷6<wiBԺNama?iLlt2ϔ f+,qR>iK*0]q%̜̝֫yG(iPCo=a"ń8ǪPї'گJ{ +}e #נ%Ҏ `oU|%zW@t*JMVvy*{=`.0kV0ky-=.,>_ +T{} UTx5{W(5F[;!b~[gB~r?}98FsIk[MbfI|-<`r]K`?_l 7lc 6Vmj2RU>OjyR7xٛRJZđFWh{jcg +I L1C:M3{TL0g<`*0ozu`MpU`am ך+D`{0.T?S^YNf}i B9>-p㺫<ќinqK_ kh&Ъ ml+`3ey@YVHp^97Ka |o p:452],i~@aWdyѧ_J-EiKz(|jeUn1q^iIؗvw- +#Wls⟱'ʌU/ gn7MzZ(n +z?n{p'lDqK]ՓvtL2eGلN|LolݢWwʧ5zF-4߸}!1,]0wNd`` OC|]}W8ɭXsKyf̐_ +`h@77N;G/R{ ǧޥYGC@hv9 +[!`$Nn CUuh$~]}_hs1GK-\d׾Y/#8'|(~?oT?L[PO?[Ē vgNRT]0K{h=4 `,^6{Nպ.`7l?6v`Fv.ظ[vcr{=b$ͬ/׭ iS!ӶVs%޷o?\:iJ?׍n;Mh&uN}hz`*^'huVb~ݏcT__}djmHe˗RUm0 SeJ`nj)خg``HUS6S^cgzcֺY .?ڝYtl4;-6J[Mis c'ن3. yմ5+syiSwxͤ#weڲҏMeqLi}\~M߂ODOtϧN^SOip7`{7g Z^4n+mm1N4ZwKS4+VV+nEk(t_{;i]v;mOGp}k|lVgر]Lje1 ].)zH` G^sQ5 q;,m*< Xׂ`Yn?3ŒB;>6F4ƌ+hN m]Mjb9MÉmAoGڙM7c7'h)7iYx4F+aQ/6b/we"quEP> *mLCB>h'-_U4?ki` ,[o='n+\3/֪Exo9kZlq=fdm9*8UDZ?Xa\J +NwΥ\!`Y:+rn0v!|Ui+(^S/Ҏ*'t^-GxKf)Øq 죂4<^N׮Ս> k]7_ۘ1 fUm,sJme^;s2eC>ZZ`xf7L4ٻt5}Y6sJTᙝQ02LrB$!w""yKIR;?uys)M΀ev21ZYO. k^Iz|F᯴G[KXt'l׿ұ6?qU`T]Lca $wnrNΓq˶p/OC۱]pOlLK/gdUr ɻJɋ ic][ˍMAf)NerΌu`z-t=^`&`}yҔq?-4&wCk)Pq)V> ЇX\g|p]=n>Fؾ`˓'^m~i>'fZExm'u=+ŐwW~|e,jnFŠ?tx!V<vg}/l'5͊$7b+7*vnVVCs4E^[%`57`eFDnI }X\w[E\$ϵ9yLC3qbdg5d 煿\fU(ǍEͅɐZ@a5"<_b!O&-%ln祼݉'>Oy >E=+HExިi1Z7f^c:h_;xy_l+/ +Tx.*`=е[@ëdN;m8Hȯ^74izx&2= +1`*?z?cɀ))htw,5 3{vo +s瘹6M b]XDpravUNJOEF{0k^M" t3G-q~!lW7c/jt4k/2}/~._iGNҘAB u%3InH \T:OQs 3 k=Ab!O` EV +֎ʶV,9Ff@GIhSDF7K&qxsqrך n}~K] 9,*ܕiK2^?g*-~V}DM,.j݇i=ɬ1tͧoܬXGxEߌMKL`NC[zi 8n&w&-+|@#,c #!8G 鋁P߸E#8%5 8J,θN3\i៷ F/D{nc"^g-Gb~Gu|攠;:uqq9``\LQE+7c)q杜Z7&Ume_UsRmZ7iH`\W\0ʺvpUSffr6r=ւC[wc8p; h/b鉝Ty7k +7 BpG`17 (ٔG-y%hrohao{ͅOa?s7ir>h 봠wMiiՅԖ=ċA]هf:&T5Yv8-Ϻ6ô=]Z*/(rc5`>;iyâ3qIKEc,QZ}vb_T#=h儴qvy)s)j+~wqs˷)s}焾\;'녝Z@c>0Zˡ}wVLVNUg,`+3e-hOMY`:)E._HqEE0, 2g&4AwQ OG xXJ,yuHw.vL{]|4^ m 1q?旻wo"?.K]u6`#νL ={>Fᶞل'13-,&v3ڷBAk3SL|0~"#Ë6`iMfyaxwYĽڧh?ȏ}?Z]M<ƾz~9`:D"p ?gT6XXнU|iVn~j<'XlYغhkkcև dž0d@_ 9cuJ؃ȿ=ڈX$n%ql7vmt +| 0e􊙇# jƁńTK]Ok?3?Q6T x ^<gw`H:,V}@%x86t;N94(Ƌ; +y1}U3GtyBZ^|y'k9TuHTŃrcYFu2sBoEk⏇ aII~6/U􊝋E3`.? uGvSL)V9Vv Wឩx/_HT`=wCx"/>Ó3̏ 841S~)DaYUN3(Ex-d͸>Q޲ŨYTHkwEƫ8Iz%c:a=x~זKlDdh-9;6w>|ĨuI#` fo)f-dIɔg4_xxGXΨ?ujvG"[ 1{Oɰz.O>:) "ĝCqnvwɀWȜ*x(P%7C#y"8,*hm}M0:H u.xu9{9bSR~K`_Ρ.B};>gv^kuRivɵVb CSQ϶#}2k%=ʰa%eq?x){O: `(kQz:"wPǢ \%!hEKgA\#~.;Ch/.~#oQ|)DF&gbw|~PJc2Eu5f@|cq/8:z(HW X'yPvDp0~ Do i ؼ/b!+O_Fx/ |a }&CD"`ް>rI8F*f +NNOLa FH7'gXݭ8obF(9=H_ !]^̈́Ctp!n D-bVNP͵K_oG : 5xМA 3 +ϜB&/By vm@ ZdH (bh`'=&bi'15,9MrT,Fq"NzOFXOH8\ʳuT3 i'bb!+nqFdH}}RAV W Bn`X)w`q/1"W{D70{ol8gQXaCe0< +8vBT l]!VN#=f>A){xYpLX 7OO1FzSsFl+7i<eo ͒vqɈtKCts^~q*VĥCL%LzQ0% +8׾' +V = +sʘg[I(S[+PEu5"bcg/OE@| IO3}'9+ oE6I@>'Xt#XB08MZt ('邋A*ˈڅtP[ts um9b!"6 q 냟r 0ZHO5wQ8g|0?ucJ~J^)a[h/oJBHȑ.Q !=dpǠ3{FCgm<35?&p6|3rGpJH)s^&Hw80G[#·$QNX1TеnWCDj>QN<0"mBHOtoyϜnJ6dheovX.xa)(<q\ s ˎ)N10>/$΄MGkUkT#}k5;(UKsiC +mB1K:Ïg᳈kD&<|V@|Ȱ 7zPwi]ULAdsJ.@h_=Ҁqg/2:e0 ݢ`L9qUBBL(6O㊂3gg\LZHQ2tPbxUE[Daw6!.Ҭ"NC:R~ 7o9Et ׍5dV3JX8»Bɓc;$TaMDJ"'+! 1D6%Î9c3gqa~bcbS +b|V0z3~HtEu b#.Ho8{e:q!F0N[$t{-ÓB뜱juE9]Rt;K<9sωdz9],,MrO3 iS[ausֱL6m]8H@h*<):NpR2`S{V6:i)DZ8;E+Wn$f"NSAGA1z-bf|) ŐKޏ4ipnN-~O> +f g!)F i2K,RF))Åy%)!\rPZSh k⃑ ȴr5<0Vb^< a{G//C:␂u'6p>=i|y`raD;H yCFLn`XL7Vv㞓08p<W +{ On=(ڃXqHG ZKCl"=F=u>陱ßoR:zvcqF1^si! +fQ~Kq oLxg/brɸ݂ڂnCqV<+Zop.o&-{EFm'35UZ609mk`[NMCxZ!2gĈ2Ah%L? ᙿd1Fsu&-4i:'Ž!-w#Ǘ#Xr$m앐F(F|2M 9 Qv1~+~>S1~)0&<2 >_C8g-5rb2`lsH857 DĥlO*y-x-x/B5n SrLj&m!7 6U„7(YAˊL]Ŭ_[ؒѽ63~5Ra!xg}!3O,,ew9 S'}_Y(Eg?WS4IW쑶X|!Z1P% ZFs[g\g +b4% +eUꌖi׸Hظ0KMF正n7qk$/O!!`?YYU5k&Xfōjʌv5XCoGATzO,an_F{87M/Zb=W +WSxVNJA%BeBK7֠\1<"p=Cd[<2!?1H;$"ҖS'qy&4N8azOaWrV +i@8@:HgFd4VmcinfOzNC*+Y+bq $ˎwf 9NS\ İoaڡ'o]kQtH,!7|[3YB!:2Ƙ\vVhۜ󜊴)mxK%Jnwh3v 8CBZ;"p1|6ʧKoxNl#}yqR KGOHk9FiF> ob .եDjy w? ;ݧ+.갲*y%&nc ΃%c2V sm+"ֱ(hV(d.DDLǰtm}nͅY}.ahgK;+ig{'a!bƊ]aS;<0 `m>)kyR _f +b-hǐ*3x01k"cv>bz37قqf.@zufnQEW +bR_7Qen0g:?Y`%g8Hq 1kh~ʼn?ׁ]q)H;JtmOEdnZvpHi~3!f5o fd6K2Hg1uSVp7ڹ;ߢڋ.!iHCS䞲P蝽8&?vq\x,ظX!ދ\k|n}q0rډ"z:0S䕸HS +뉬6mKy0A2Hm:vZֈPLd$ÅV'׉b;B.FZ܌>g|w"?S.Qg.`R O>X"C?^$}Gqg0zF- i q^]{Jr W&DfTjIkdt埵 0ڿYWcV-'3vVz A| +gk,W^2S;v'Q|8X;Csc」ʺ9@rUXH%3EAsΊ"ATtscoxQEQuk5{ i{0` \exTO=F6шoEbW.|{RTDpnS>` ʒk-bu g{h*1xd m<$v_,ڣ Z@=k^r1l5 EƄ@z@'>KXRp15b #3Uk)uUE@y96E܉98s` +8챧9||EЛvJΒa\Dq5b H!#hM oկQ)BXd y}BteMLE;MN.hZF~T;˿jgC;KsQrCvW7զYJ'C;+G;Kg,?va--%ہyR4&rW Yc@={KG-FT Ttb}@SKOb@EEWҶ(ry WyW_֖"c 9m`DΘj +~#PGDAE rsfBdf9"8cP;ZW-Kr'ja}c GO?igyꧢYK;bˬ4pZ?soEddTߚ٣){T!P.{Pmт_^{'#rwJ׳w~T_Y + xZ ˔ %}R%v K,vE 笝{|mW=0Or},jg(T0tb2:Pa[[,ԗ9@b˦HHaici|+3/,V J=h an -O-縰Dᵈ"OW)/[zA :|e\U5wh ߫-HA5èֽ*XO/ ˡrS.\sgj,l4;)o cjUtV6'|YRCCʃm}yϘArV !X +qLT5$Q]ډ|p8pY|q΂VY>c*5vVDv}z [Zo%1_?bM<[,)F*jGL.s|Kum#z*3/_-5W("rb')\oE[H90 5 ipmT^_JHEs㳅;? +97V'Y1 +^wo|$AA|+w%Kﭵ(o0Z2~ +|]FlU20Bz4kP FuN+A 9R2BTD:SIKG@0ClIL:4 T5LxL>2˽51b"49-|qЬ}.7P $II5 +$n xEqz:~tSFMC:XRiTqMkx ^23ը j|A 8%b 'I;˺maS eˑ|{ t&|$y?"K9wjK'oװ B:v~ty|%Yh*i Ն&vO>X6N9%\yxY8@^R{.%KM >0:uYwCTՍle9IAXk >b +}SiΜy蛩krd azeLfA9cnbX;>Ǹ.6%H>\ԠZ؊Iз%Itv"h@S9\(YZ[by\Y#FsAJ^Q}hGkФ*5ԶK&_Z5+y&"L)rP+CKW_tLU&cz FZh'{.#8zj2Fb_cQؘoj@uOQF5͡yK0ŬIf`!|;X\Ek`}ʹ9rIfK>C)N JQGׄW_^">3:EMWPMWϋ.iT7M#dsseO}@7q@ݺ{N}eP9+m]ҁ,qu1ix_cXb%/=Ԯ^ Jצl"Y[7m@-:Evms3MDT5amse`Zw=s3PC$0>jb sSF&f]\M쏜st9{"8t,~8)B-pB%x󑜉p/ml`Ƙh&wq߁]}Qۆ4gbx#ϳ,^Aْ*'aŢw.rgoH09wF8WSx,]h:S=aW *tnQN>꼢fBp(8vA8sXw{N'EA-b.,8 +)=uR=1BuɽcҵR&V=2DM6Fw*^F Ov6g 'c+tA_#{  )ƥ#s&8f>t"IԳIfpY#aKOTc]:f{(;܈ܐ4P?2vSC :=37'u9_/Ǘr|9_/Ǘr|9_/Ǘr|9_/Ǘr|9_/Ǘr|Lf+nΔ՛Xͬ1ҙb1ou;\<}V]XoW{:;'ͭmg_s[ЛbrzM_y| g=/F|҅mGm7||o]Z?3e +=? + .]mi3ˬ_kl6dCs ^CaJZNclXglmpo4p{z6<4ׯ6fV~ټgNF*M#}YڔٴrvmS+w-KXcTc[_m3 x+B+sd},{Z7U0g֯L1&:~KSACa$-Jߤ cR| 4RbhM;qTFSeD4ѠSգo8-mM9: h\Sr Ut'|%c( +^m}Ulu@Il}{YZҐ֚ Zik㡍fI4D󶞽An&:B + +{OJr1)AAk.0jp p"_ +H% )&kSAi)J4o#WOϸ)x^ T=ۑBO`C*]@H˻d cwJ54E~&-4Ѝ pR ~4Qk Ʀv&fV&2)s4]ΔpBaAc%#ף& 0ha-__[ f5bd*G-z3h 綧 575C4Z\;Rr.e&'LU;6m^ aK 0<@dntyC(]^C,asDt]l%)z*C@Ҡܕ4ē'~wOᰫWcEn厓ԗg+5<ջ%(Jx1%![(QzzPz'%6dvm+FaZjSKg@4sơY>H GɏBǢLN!8gm 1dDl_aڋMlcgP(U\pnahP\hO.mp۔B&PB +ߣA!`=+X{M;=8b"H"Pk@D9LZ<;KdKƍ69kcy&UGn`X2ߔ;{ Z2^r05 ȀQjQ2]d[kU dq~ lurAFÔנЌۇ3Wzj3@j)t/8 iDr|dD[/1l6R8Lr  9C7YFoo4 d  ӟ~qCމ#TIIwf-$&N4V!Fo2Beܾ% @@iH&>L4h-+ɷ/a3]CєK4^5MK+z(7◕;K;b!:sx/J1OM=ne)kRTdw4.Loq RUOBH84F芉"5FKIALԟ +PhG^a1AX +R3BEF$3` ] ؕcFr*Glq1ܢbd{֞2&%ToY9j)l]zXƘr6_o!{ ·),Č/ڰN9q0s(L"%Cܑ< md䒳 rK^ $R #$' =#7Ds fK)t`[O2+8o,(hh*z*m'&%Y[9EJ<2I?H+vH8;wmڐFఽn%OHP54 P7MpbKhE$?Ԏȑs=fꂬ +ׄ[1lLyy.J\4 bt4rhj (C#l1j2HѵS%A$@>kA Ƨ 5t(֕{7hB>ZRȭmu1obwsN΁Ǡ e-va/%M4eS 먈Gܮh, f]cT;2M>:Y/MdNZׁ\땫|3q4IC[!'ׂuJJMq<6ԥ>қ CQ{ =~vZXd)G採͍$~a )9L q>麔l+r3~8%v"E'4/4BHRd$=~|*>6sIr-HY~Ͱۥ _X!O3r)gaFbD\ߛ.f$I=&ؓ3A:LwcL h.ÅSӳ@捆`v8\pWx(K@ M0'y@Fy@L LJ + !qGpj$V >J$ߠ䄮c5Ϳ|јHW^`DiggI}@d|p5H쀭HN5| [at!Ab0?pi$2 ǣqa9-S ]ڤNp CCPOg78XN0$Pd&h3|ʾD\wܢ&B`CA8bk4΁KDτ̆Z9ic-&p9%%%y:dT7$Ǎ cw +ŭ?:Z^=WV_/͋-'" fz2% ӱ꫋k yarOmp@9 x ߤpPj($D. Jn?%g v)+\` jr 9IAW(wHkÎ +{{k&i' d:r0%=?ʸzTRה w{''Dr ֙u!Am~}(& + Smq@C}4^Gp5D(쎨kh5&d.Hą G3s{Nm,[iN!ySP!Ō AO.K}@:n +'y)iL-SZfmvm{:H墧HANy(ދ1cQ$^/hԁ ;H*ld]^B @^ `=13}"b`#36WQV̀ЎM==3HaC>/2=jI$ޢ +), + d< p?ȳ?D,>5 z0R}i\8^ +/䗢! LCrl$EITiWP3)Et7b|4V}kZE5T2η| k"BGKle||@hC/ټ{em?RX{0Bܩ\Nr*eP԰D,=d$C^JI@ƉqJ=CL81O97˾THƠ04Į0)9㮾"rN?ԍMbHu{[덜dU W2)ܓ/& Bz$!u75y~g&/lĕQVjvi3 cy p;#QR)Aqd?+}0U]HN˂l8c?A9BhM5}3h=)2 PB- ` q~9{~%~P 4<8 BB['Q5JT>D 936!ˮr +$f?H;\ +~e_ b'ē竸o1\+!LGW~Lp$1ϋ +=q5[򽢤^}c%q}Dis!$J R: K>?[so;Jԟꦍ|C8IpjS,126Z!œG`/'_?EIsx endstream endobj 1127 0 obj <>stream +v~b+GS rn*r`ro moQ#E5!el|=`5VH|]3{8lS@؅B}n>xJQz#|VXoN؞: qK Qϱ6%;\ /䲔dܯ"JTpK:?o)AWO F)C SH3 I'f'*o/Ү㒀aC$;XLT\ +.4=ybjע+ɽ~#C$ hJJA +'< ~,iXh-DP1G v:I\2Iʻ˾FI )1 D6e?1z:0ST4Éy [!|1DO ++@I <@p)".l>Bm$W #DG?|} :E|ڱoB 8s'_| }FvbZ9Q +Gu+C-;GL28HH37D.jeڇ&¡v9Wrr*v@ vZ +Sԕćan ^| +#b%'{OϐrƉ4_O:lq4_G dצr+EE(]~0wJH +K ePҾsPΎ|W0 ~)c'5WJw{yu L{*XO1 lCsn-JVrwNtf^S=JRZpT͹giXM$rz +X;h¿JazG$5Xǀ ˕[jcmG$]w'^@ %HIQ1Gԍ@Gl +e ٥b%zHEr?! v\HE1 #bGrO֨ܙWu"[?{l4׳yjB[`N.K$z GSy`2;A#ZŖXf\Y@^у_ͻ/ƛkXjӯvڸW3?u IgW~Ne[\^ + H)|sfajhQuTJrj!|Fm^yKڥ\%m)`Me`X%B7{ALdν]i#)>\DVMR?bK˅kTezO!"ELY,|n ,k W*k̄u|Υ \#}KvI5a ȿfG.(Tk+jmn[Lb[P6rLj~]mK$/RB"\ex8I,2/͢8x{[t{q-_V- +3y}!nDwG*/z"|.T6l̀&o*0XއDDd>{ir/Gy,}{&ߊ-ڧʣ:6,ַh>L8kL9K SbA8|&Z֋ ^Gc.T= C_bBڵEt? y/,؅Kk`ϑ*2eLe҉yуiJ;@;c{`Wi ;5a,h^/Гg*+fO3:t0 Nɧk1.6ۨ;A`t/[uʪ#a}yɵo8%շ$t=Y##Ar6t]HnJpU!t5. EVLY؞:"\T7y8ͣ%ENb=bbb+H>VGHJɒҦ|yzƚ  اO}%Wr==tA }oX%mdo,}5!a-9:ji$G(^qSn1z5zi.S2 +5/uC/)xs-]Au[pH;kQ+=b1"s%zaHNRV}5!_*05J^1Ji[P?+&igQ B I'( 5lMuuMTE7qdL:P?"H͠V$c!ĕTI#aD>@=B`Xr3c#o?B +̑`/ =KkfQbe@"jOr^a%sjh3꙼&z8DMSO͡u +/ *e@N G{Ńlݥu*am5 +U"JrS` "hGy g]v{dH s0XZ=@뗨b/i]kҵ|԰wg1C֚aiS!ӱY> +_],f_<79Ax\'\Z({Q}Vȋ///ui27_6ŹIc +YF-eu^4;,+nY.Hv{%QS5{xP*#1k)0QI~5o1jd),>WQVd . .{N8H#-vxx͒?S[H3_YO+ٓ/y'2ʽ-rfY͓ȕ \RQ:?%VLJ;Է+g^JqHνosEUDڌsl*ɟF5=Q''Q(+of˻֚ZVnY?}nY{?ww/-?):~~`Pj<yT˗۞^*R>j"QbU(=S]nt*U[,Nwz:'+}/U'[PiDjա&[T7يgyBՋN3Dx顣R߶O,cϽS 7z^9rߨoy3kSG'[;{^w;w'ō*j!Ɋ]>Nnt?܊=Z~,/}: ?LN[ZyZ扱t=[upc2e0?emVVˏ|4>+N<3~P\zbbr}5>5T\|/q'_qMoDű22X^owz /ۣ-͔>:Z?㮾U 1?w42iR_Np)UfZ f.3v) nRO6?F_ dg߳Y-{ԼbͪNfG۾ö޽ayힿtYy]kRFi,s|.v,D^5dýdW§T'j1y^Qk=|ˮjugY{".r?ݹle5W_ny~Lp={;JXv֥Hv&_ 1/⭇ҵ6O ;˭ҥ]yH7<ϳ0z<f}ٹnSѪWToWmqێ8-}޿YvƟOvNIS.<|6q<P~G/ >|jozu;b'<^`rA-ַWZwxB-neټ`{GE₝ ru'[9{"Ldܝ'\/Y˯۸WB1&6/LOeqՃE&5Jkfst/o+j(Hj+hI-QVlx ')§IOlNeoo++t|7Lfrok?K'8~jv{+We@cN}rG2eS}GE=7JX4և+d5Y#˪'O9L}wa}Ķ_](TOD[|V\0$arqisX~reg],wwaer3[sCԵ-Af6$$MNj~,H;7{+VgVwa*~lK02֥cogR=%.K/$u?97:61ԽWw.ǦR:{{ATn}E<ޢ4xZ^MpxzlǧNj+*f4EgU7? ̺'mWfZ|ҚՓ|3 T{.}jHg߿~zzw/M|h~gUX4w-Iwtyy!Gvmׅmؿ:ۙ 2hsCߌ>W|o_{~9 wMa9rJsTw &f^-{/J'mU{e-Waz;Y]xCV~Z]&~jٶSAb埭-C˭V מ8U߼2ٞ7pg߈B{[W[i%on_x-m]49~9ECFw֔*M_< +sxq0=(qb~PL<4f!t~R]H#َf;gѪ1.ҽ>VA憺.ubNBCBnDCz~hsz~I]d^RCb1unsnm?܏/̿[y;2'Q6ƸGrnB ou_6uvi;\֜7A^'^[;"WcuAPVeChіۭ>A]Gwv0}.fu)Ԡ{շ#s=f{>.uU^L:VnKS>oKVvhwj +SiMl* i*k/:p#",g_WkȴkDΎG -Ok򸿾a_ڈlȴ:`gG~~GE§ū/~7{mmt؇[G{\ߛRb*$WG'eWeٽ؟Ž{?~]dK="ّ)Go/ :q3,0asBԕw"sm_v&kBcb;ugkMо+#y&.QboC6wve`g['ZSۣK'5%!Z}6W޸]k%5?2Ka.]_3g*fRcfpy?,>^˨l ͹L6O|?gc"3k3.3e1ÙC|?W̼0kֈf)@s*\k,3u8f,3j Kw*7|.3qbfƌwfM\M3ld/᥸m#uȼ2oe^8w'(!<7>:?)8)Vt!:;1ywcs9ݛ}&,-#;qT2 +mis7[50A=?|KOu{4u3Yo3q$FOw23c`(f5<\̔2Ck ?޽nW߻}-]L߼J>D]R׳$b +oEgW\T&~1FTΙ`ջ³?V_z#$ݠ9ٍ;_Էۓ_ei%k#AXb-3m3{tf=#;iM a1}>6Ӌ&ץEi0EH?yUo}n fBNp,$ulxu;17bs*oDe}ZxC\ :BP!ٷ2㚒 +_^ ?=)lWgnޕJm Gfǹ!gIc3VzۑԹ/Zd!շ"kgyvPFdcJQS `ogίvzZ-ޙ-!-WjfGH_]\-MkA,nk?_Oo$~tfV%<@LUϚR;/d9tnyw +&17cs0'D\B ֺu춼Mv;nFvP2B\;?3>SÚսI龿׽Ԣ 9F枻sZx!^{rxkaiway) 9Ս$jR*1kÕXm9oRf`jYgӤ_)k}뙇{<ח@3=;j3;'fU? :vXVJ]Bsgu6a2{eǓ~-ٹO޻Y ?n>ߞP|!N3~{ߋ<|HOwBfr'f! Ⱥ}l;{6UoQ;tk-n^tFh#2o /mRr?(ʭ\b9goݎ1Э\RɌN?~Ǵ7ח^`aoɘv1bmgz0b|ΡKQߺVtzxY}]HɅa'of݈R5deޘM:)BmP~}i 9kiL5>?ohfxf.'%1~3\{ +3df$fhhM̊̕mWW_ǿLpĄІ\c}K)Ujc_YF| 0n[o;ڽӧ#+n ϧ~dFk JGKH!8J{"3t3cȌ?Ʉ3ɜ3ل5v=3̸i3 .SgխyS)n}F`H5=_'`w ɾy;8\z˯[;jNZ!?ٗz^3S429:3f1ޅȂW#ꮇvyZ? ,n\Ln%1?gXU׺=JUAT;vAXkͺ +D:{/l ņ]cXc&c)&FN%9w>swo}˘mcԑa1q8 y2c?d:GRv9=B.ff_ 3/ѢM/OZyC }L̃^hQd,fQ;ܗ {^)z0'7H-Qq_lT϶ ?3CGƈTHd^ْ9gg4n4cMpypaZN#6w\@ӝd3|N( TLۙ\'3;҆ ]qS?u#+Ά7|\)ɽs;i3$ݼQ/?/l}qx~_8h=n7{D*;#t 9HĶHld,f9a=e\1g3J%9g.33haf2\T|YdkjEko/w>re+%[Q3lUӚ*ʧ.VՏwtorck!G$˘2 g]Ϗ&9ڦ-=910 b 1x +coG<=q͌ό[V̌ ja1ӣVݷX~D?ލ /W&x~ˑo_*gW}V՝ƿk4o筻mtu\،kvd h0h&+'bpbhQS/aV(3z1s̜cFY-;~[*}k6TH.Mlt;;WAw~Eq׷ ^7Ú >,'3Σܙ1ξ<W`1̕L2\鸔1|9ƌ+c&9$Rfᜲ[g7>5_|F?jioW^~~|tUM6nJeﵫ^.۪kC_ R_\5\yY]uWl3!9Ͳ3C8ƌ xhfW635?Yq"rt@̛ˌ2f43KLpOef33Vf4~m}p_WG^ᆵyz)mߜhIxҺ[Ɩ-ݷn6|;F쀔LXIZUoJ}ܾjrgP^-–7?`˛ŝ>-jczRQ-|cfr'2c#Cf0c3ӽSI\31Vpxz's6|j6Ⓛ3,`2ڧkZ/>pA+n[<~CzO='z{?ԫ^O>+,8}$w.i3+4HɟT#WH./viH ~}ɇ1=Irff[LcFfn#׍V\ ~/= vLu-3O`Qe%7u9ly2IpmwwٷiY=H +V5L_ ~u4"^^ܪ:lŧzֈ<(qfnC<:ߎ߰KCTm$ 󌜧8fĈƕ`q̒EׇX?7BVs%nkUIv?k~˼+k~G +yYRSH3荦W~[Ƞ/<~]`[G[hG<"L5r¹Wy_{wXiÚ(Wft%s1 LnzqށB\~kV>/v39[6Uzlsݍ-˰Gl~->LRz{旻şZxZg>w!ɠٞn|]#5MCS.Kބp{Qu0ma5m#Toyeby|cNo)o#l }\kN:+vܟÿVTnl6x~qa^uֵIg ;߮o +N=ž\~{^vS/^_˜AF#1ό a\r~ O2e>|JN8\{ O>ϋ`G7U߿ 6lq%6M7WZl=pM'|\)>~V >6Wf³c9{7_UFkUx`tғ‹xͧ73Y:'knٯ¹+?׻ZbÆČi3U"q{AлO x!Z#'q27 Y,X4 JN3 >GzqʳOZwF:M^ NdAA_ϑ7 7/UGfnUVoD9It9폖~ ]~z/Sv*iEpvM@˥y4Ft?҄lDڰDWPWg<MSU>r7Ђ{g3O~b/]#\{\{ixꍆwg|/b`<_`>h+s}+UW +wl \Л*u'J'H+ؽ߬b[?=4?m%[ѵ=0'3x0ɇzO?;=OX{^%=}hXUhx(`E(#qy]m-NO +P0c3Ǎ`1y8ҕa[S_z?l.v':Ќ6KVKh0~9DLW_{*to2d#nWfQLgWAgm}< {q6`_xBB,yO e'}-lt3y83gF̈́'G,>?y򟼈ܾ]| +)SUwbֆm3;XFh."ڋaBSeD*6Մ{) =yJȕ7b맳ugz.~_)bYn:fç`ƺ1› 7s:}Y +y ~ ^mӶn\$o92Nsʍ&yøbN0wp$Xkx.](HR6P 3F(_lhrGUR*׷Jw:q}o y4u!(^<}l~,c_ޡ^/8.2eZ93I=@Id{O O?qVEmvɵ̨R5Ut9?`'VZ)xweVx2G{(;lKhv0Id|߃G7OM7(;>Q/bb1P`u'r=_-PCK^:ݓ[]U5B~s.{FMO6>ڠM>ijD߯IB߬dጷfA`ios[_ggUiۆZa Ѩ`[{vR,?Y>e.ҝ DEfDنmu~|3CS_*?z+\qbka_/^/~pgb\no Uv?Z|=_tySz/q- +8 y}_ZW>> ??^]l:Tlld,2Yɂ.2TH-C:"Q_#Xrm]c(gAH* Uu_|9%[Uj/|*7Uѱʼ8g/>/>HyJeE||zIzBEK +LgyrW>KY˧BT?t $x,Z\Q% ^Iɹ'nbsRǠ']I. +h!nhhny3]OV`αusiٜM6ƓS~qc[1Sړ=T_.zzbϧ4ő{)z^,fNQ5?Uy૿_K}x02nGs7=Qfbk m"c`O5Ճ2n۴yUZ4Rwt%(eEYu 蛌 mYH8}/Ž}Z}+GU6{b(Un7flIuݿi=/i!4 F߶;zGc*`?:T$ +Ł_<{Xi%;^0(spI܄ M""De,/v'o&#\Ɔ߸c!`f[,'24?+oz,v=BwV[z3_mP;^r'S qL io3_KKU~f}4ڱŭC5GG˚Oeez<#a 4PelQmv_Č` %uLQǒULrePVgDuqR VGśp\KwKZj-XgX{7@{v3ty*Ӟln\呱k YbS/5Ǟiudz[aq`_N3Ϟ]#cCUIU zs5&ְ{X*WHV8oe 3a3j49 +ElrMipD1eԥd|bƦZhC +))\QmC5bsĈ$c)! \s?M0[6ˮQ>X~ !U7D*hp{xh^v4{͡o_{M,;2|ϕ?1Yv.7LɊ[o b(3\^wE:Ó 0Kx0}@E,Uf&Lg\qV̴#e$@~RsLiן.~,jd)4XAgLYH.k!n9=dKO+۾2[%4T]OZOW> ԲZv銞sٕTIf|񉪽ooWּ7^,EϷ]l +cNL˸,5YjĬ!~"3>^2O#T6`¿GE.UFRmOVq=OfK,}OoaB^u8X*Z3 ;OvO .5J.G^K^D*[Qq4y++GȥC?U<<˘MnV7]4ە9jdJ{EJ`k~k9tP12z͎EڰkHInv;TOp?.9^YgC{ +[ٔ+X{r2, j8Ǿ }+gw;^Bj$W*Bsٸ`6H?'[ 1gGnu@p$v/0I^1OĥXs l|@#.v~$hO})|]$]~;]jsUޟD񗿌P]YLk*J;6W*,0UL 4dHCii9Wuߕ+mr?t"fb +&H1JM*Ԗɥ\r"&ie؉g.^=0$&L-Fjct=cKz++pTVnĸΘx- ` /$G2̏=g3%B/ٞˤ̊brT݉k97Sh8;L>OoV%#F;8hmpyMvBVIx#ez0G E)K2e(g%[PΆ'џ Cؘ`5J:}NM>%[A&YE#0_P~v%2qݑ `Sc !n{?Ú[tyƐQ1 ЗZ}%j0vBB' ;z6_ A8R'qz+-LLjX* twI- @B͞Q04B >w՚LSU\@t(2u'#L@İ&RQ'X@ |B>Ja/2BN`ʅ%#P~Ru}RѩDv˅TSdޚو>>}>-Qb#_ʣ c-xk>L־l]؋+Ds䮀|160CEjՎO]=-S}8QrY:u!Kj0hL 6Pf/ ~3"Mlveeŕ[0F;nMm{O|'6.Jl륹7 +OJ\HN,!6Xe\O:8Zh ?vl"3,27HMSdp'XaKġ~Ӷ13I52⼠ +Tsp"xu$3vEQo!Xˡ/@`rq..3:\j*4ֈ mcJՎ mv2ua@|#e D @  +[A!Lgk )g 19J\b:^*nr&9tX|3ɥ8C#"L!|LG9E"Xbqn_n|z6emzo:4;ݧ9pOdlȖKs1GU!K> =KBjxp\0$>ɧZ5B*mihBsE 2Qj|I#'4!ձT[ +3iK"L\!Dhn|S^oeV|/y|Tŭ;1cW tgW 8EL_:e$IL/26'o .&ի$&L)1|xJl,bJRQ]tl:2ZO6'gjL UBl)8uB'CS77,Ԥ nkp7 =_x 73fo#5#BahZB7T>َOPE@+Ch1Kn6ZB]*kE(O'噍`k\LyH>QMW?[JVmkⳚmAI$ʓ:g˩Rm/͞{rλ^ss`y99Bag{=Wm:5ASFhG/0'OqHE#|Wy$0|\,XhFg&2<̢ Owp9 aF\f 8>~8`RMA#@\f}lS(y` ]w;waEĆQIy#(jQB3 btrؼXoBӕBˡ} ]?h;oP_N(Du>w<]Зjyz1b =֜4 'gݷ5{C՝_xrm.ft|:XwbA{Udu7RWr~_<Ūqu .ӝB'4y  +RkhhgH^v\sA$etS; yYKa hW[9JpxTs[p^NW͎{^!wԭ7ݨwJ.op톓3,3M6-4Mߗ/ݎ]{nzi|}/QSv=YAj9`Ѭ-fInE_H = %lTFd~luɁ1TD +`ؿf]O]c_MͩiUbA0f#n@ +Z $.M'i#m\oSj:_Ssv8긇8JBX&|epn=7_y7vJYT+jۤYAjS.m(a{jgiv>]Eq`"yF܍CO˺F;1EfbTk{A Bofx; 1Xrn'bso0+ḤyΏ'w/ɧW/k< 'uCLRl?^L9|{`b?M5_ΡbKhGi-}>(fB;Ke3.w^&!a΢? +vR7+?AC)5]yméb;XjK6;':܂wx=__n'0aBլ!B:oD릞;srT;K)j T?`1Qc<$D">irjc̴fRt@hhqS}ꢖᚒNBR=ջ Vv?OyLl>tdV6} {oV +ц' }3;rRc5E7B*z`j8ITˉL#ygsk)jg!ުlaR^ʠdfU֯#~h1.cP)2s z@ڲYfG]A#;T{>$s=^urX0fr͗i;/{TίzT vݑ 、v,I<uSW +12)0PfbjGg)5 4E3+KJIV0&0g 1*v:rmS}xl`cOjVwbŹЛvVJ!R"C;8%G~צj2g[Ɩ[AQL6"Lԉ$~Bdw4FΡk~{~c]Y-nghTH]<>r*>|mwPM#,r[7W +7[f8䓺~Iڽt{9۾pYT#%~jgB;sQd(vjSGOvVYv_-5$oG N{C9 d~}=;5F,i]* T;9>A~qr- T,6}4-W|lhsZ _5HMU0 Rn(akНf#ISQo +*b}U m!6&G͆}KJ%uZFnoz.~@H6SS;+t3:4Cxn&zRfm+5l<0-k\HZշxޖavm1+ q4eM2Lm qB۞|\Ѐka؟Ck8/9`cߣ4jv 60?$V7֭3'HqDRKkgT;ri꾧؃ja$Xrх1Y&ll?ktMiKۜņSJur%acD[,l9=_yT7EPC,S4E j><[й[Ϲ +ݰFCK4ivT9jJ;nܿQy +UB\R2TD"vLz;/ VڄjkԷڼagso,vv#^M&C7V, 5OלOY +zV-rN|Uޯ%myzy!b]o%1_[DsMق|vnHλkT=jWi9;_vi!յ=!"R@ïoy]“뺹Akɩг4NlwLbMCs.m>qc?Z@HEk 'ImחK[.F$S1.X 2Ś&:lsm;qg!ݟ˩Ln=rCrRmZFX7 5hFuN͵#݅O*tTg,zL:SY{eRRlr0uձ¶닱& oo8h Ả~lHhV>^PN@fdlJM$n >ձA^T,kOk#$v4ih=h _CU ++QS긳*:TEr|!Zi?8IGhO161.= +@kAP(6.^t%6Hl@sfU7A᪈ݓC.@}tI-}g;?ys1ុ o2xt25ѧ&G$Zv0JR;i +;Xs ~]xucO5sf{n!Orja] -l\%T!$7T2Js ?y>u ROPZI>KVؿD5~:#Д}Zo-\Og +MZ>b[hjS{#> + MY6zɤ pϊjb vQ}zxPkKv:cbnI Xc z\emv-#{Zb% &̦#|=PP&^B5{@uO:>]&\nDi[ќd/Pl ,a˹'l'qic|I#RgW yJgzOw|v˙>YG=T'BjB}^ULA8o?APh@sRE>"y(?{τ=O}azK͗b. ~ z]VbC^h<{x_cXb%/=]JMEEQI&ؓp kM~Mļàs½1>zq/iՌ1gm3d$rFuj5"19oϨ里>>Yn=BB:: +ڇ#NeT`K]m8"CXqz;ű?Gn}l'4wc#MTڵF%[pB^3$JoUotzlBKOG5j*v9mb#0^g$bvەyE͠)$dOᰇtXi *TCKb.COM_7NαV[3l:Fu>R3z2dѨMP#OVجcFm䚩:Ga/oAƏL\f%XwB[6-**j|LԴUiIa΋ɯf͘3y"*,yR3ɓe1ʈj!0]yR@XvTjȬ!8Or=+Kj gu3u3-X493̟39 IV[VVV'MvxYQV)+6>jq?WF㺐'vfʈ +32O\_my 'o Ϟ,Or(.v7{W+Ǘg<=@ TFC<pCfa(6U +_(T QEpTEM&rMYԇ . Hb3UL]mZkl&TˢrL!L,If*2%d  +)}T1S'N>Z5P^kK֦O` \`AQ9Jts:Va|d 1,F`E 7S7 A' nŤRz [b\:%AOUB RN8rI9ݣх5#M@U^g#3uJ/*pR# ӫbvS<0Xhb\dIipJB  Gvӝ4B81dD6merE\ÀDWOIj&J>*JuA)oP0=W0,ѕ4gcUY&v@.1*#P/ :GJJoְlS)~iPa K3%7"|Ј!Ƽ6٘2լ)&Yӫ6F\EΗ|CuV`mI3(:;)*#gqܶPHQmfEƳxHlGL2C7u~Ah|HN.%Je`Z1--[k 0\HhBqEBj%:)u[GWJ+VGQ:PdI굦 r.b\Lbڃ:FFtkkMUb/%ZIstD.ڡbO;-aєx壅Rͥ` )|JRKƂ:N#ʞ(P%|seSa--Wd]$x%F;M#Ą2 eG||f+d#G2͘%00Hb~]De9a gu H~ +y'TY|%(s@l+Ɣ)F )}+twU4 #!.{zMJl?d^SjjM$[hЅ˩#cW1-]d|̩*JɪӤؠR2ZqAbL"K(ЛTE 1*$."D6āfU#.*]2,DQ|llac\h |1E;w$*,u څ:D?U 7Tc&Ĝ M1PI #4q9#S72*7C7z :`[RO2hyI+ ݧ3vIqmu :GkzǑ 4!ͺc4N/fKN6[d b@W&wP Cơ P(q6]2bKEG!?F krAs9a.#U]{|m8XCJ)9ݦB +-EЩ[\kڪ}N'倹&)xJkӳ7;`'嚣KTkAl`ÒD`:15\) ĒdY>$X 1Q 4>jM_JǴr+8pm/!t. _ ewPn&[o T{fEB3)UڹZm&`x}Po-SOsMODW8vƠ9J9d/ɸE&op]qU;Bj#ЏhT Åj`]ۂxH.8"ݧda#KNjt⚐A)$-yJ)QԚj 1fS0AS7 dRaqlt*2Řƃ5lSnA0Tn >܂ M7^W'HCcpT!F7RZ,Q5 `JH[NyZPC`;- ~p0v睥Tr(iJ55Po7_'6\#۰&Xs@J)ߤpaPH-m$L$[j̑jr٢Z +SV 6ɑLA2qZIrKPA" %Uf5,vO|v?o8LR+Q*Qy®o|σ(R]!ٵeVPgמy|'5T)P[XJYgͭ@M6PvyAAL%Ը/ +G_+ o̓18RGLiBZ ".|6([a%]PҐx']qhߠz}& ]CrCAuU6Rh[)1y, 59MDłFG/q:?_FU27 z&%?TQod>܃Jz}pqhR\%b-mP$Bo`Ynn \bw+HObR.F:1Ykss]\"cqcg\PzB4A0q*L' TA]!a&k?.?XFoj UR T20edjL'n*K❽ /P3!e]:+8SD~2=й7$91glb<Ɗ1o䐷Kv(p:Ӈ3![O xr0l&Os!kt!>uydpM8Tf|iR[<xzdjiqd{OTlFG=V(G4DzX0p+29Ä(0eӇkKH>g4Pe1@. aegpLh1m`ƯOu &\J;t;GI`ەyd2F<&5t^N19wyWsa8Q IVڞ6i`A/O2&:^uM .v:p5T]gDyg0HQs )`⪶ U۹d11i+A& +i0 &{(h(a+&va$,u7AKYO! `-! 'IlY$Lj}. "-x{t+{\T09QMn=0=ȩ0Vi)d 1#aEvԄdRFA +/<3!pgnM1TÞfH.vg8?L% iCmJL?]U2rp\d?`^[2jLot%s%7;>587{9D:`#j lm<{f2 03ׄtUPa.bNk1̽]戝T N.c:L03&JajHzRԡ@AJSS_ *!1RL5'56Ǯתlx.Gm( +ǝmu9Ε:E*n:(B%ygό/Nۏ{_]L&AAd.'iI2Mķ(6]Wv3Q8^ŭ0ΑPb}Mx 0:`*t$T 'a{=\!D,!|ݟu +u!>aP@d"^2ȭCp5K WizkpQfAB:t щj A`Ll8_ @ s)1Ax~.P $'lG!J#N)?& AHb4 >10q __e:sl$J]ZHWl2zvB/(BK=sP";6l Nv#PƼJ&P:aeuQLP!S<wI3jM0j4[Ȕ5+8LhSRJ]RT`!&A^9ta8L,l@ma@#h*w=\C^Nc}vd?vy#tm +` +-QO5oP],a. +HN08X=a2*g&:pC<S2y}>s>Lh7Aph̍depf/ 0rmT~3I-1vLK"Eˏ3pۈD,6րď!C&&RDl +9a)tPR0|`2$p6#ŜrnsoRP!c⊶9@~&sRQA1j`u,Wnסf>J7%S@š@CVK'`1%c1S@ z% O=~y ?b,@S԰v@2̃j#䓠gp72p"1HS1e$>W|ϘآTZ[YҰp.M06%j"Յ? T7@XL $>"N:Kr3P;$&a8; rX@ɳ˙`b*u.-$N0|v8:?%DZbKg[?5[%!LN !D-gPHДT2vQJA@o +{P=:ۀqDۍs}slDq#ȿ~c>^cJ*ԡ$i0֐|q]pN3cWJPQ=|v86PtJ:~L M ¼G ~Cw0h}sn꩐k y3a L1XG7 ;AL7¤J/dgZf.>S@  ua @}?L&jz 2Чwp9n`M&u cCGC^I +/%~`G$ѯrd-Rp&LH=D'TL.Q`65̟B I+"(B(b{2!W5AʘT%ޅ0LtV.`3q'x__ ~pNp%ǭElR.JܧyiybLF6( S/AJ)/&x +rW Ꝁ &:?\v8P'LeBo(SG=GwtxO1A:Ș;Dꡀ;J54 !%AyP'/QҰviRAcɽM&?p)*Tbv.UAf/a2qs%Lӗ4rkB|h=XSf5SP6%C#)s6|+C04fqHFs +'A5|3a.L3E=^^o4_iЇU)kcdqb..*6F/C$S%C/5ATuI2^J:w1c>xDRFob^~J 7W\I|DZLxc8ze`{lǗirIŚLR:/䞙PͅT\V:85{1{!t9Q>$}m!`:͡xsQ۸ruZjRHݣ.,fL8!tc|0`:iqc}i"!"ВDn8~B2'ʒ3rg-aUW?.> :I/[r.YZJ7ZvX*LŇ)դR#@@s6۠P078\zh()ƃJ:l)QDxobyIbg55ICUP| 1|%I(aJ s\r'I P3PCE;*ڥkAߏN gK}].Ia}!5!PՁZ*ptȥA<Irxa^AV&J:A D?')~LQg40e@Eq%8ꡇ .;K%n!d2Ԏ z~p\ee29PKؠF +>(IO##$gB16_x?jo6 x:MqA^78 䢠|IqR;dꍰTF.}yolػM"S& ~"-Ң +Lb*|g#cQӅmcH _ h_I]=~6(mE9HQFY @ ʻa/5Џxk|lG~W J_ƽWƗkKw1TcRj0v5h}A" wm Q}A}($y\=]S"t>q&flZsmQot>iɴ}ȵ@/ c>Eq,%Ic'J_aF@ T!`gzHT? y +/@ U2<0;Gz}WzQu*AmrЫ uKT!}58P 8$aGC5dB9p7\fI-^3V(U(s =УBe[ goN E>Y?PzWYEɠ,qMXK6J*b[|cc>z"DzdS%xYBG@EXC&uX#IA \u})>p]s:s8Pq,e2`ΰ\Ȥ|W೸ 9PGN .R . `]Pq uOmI܇=fNz[F ܇> Sǀj7$Pa,휡"(\ClLbq1/;Hp1QR$x/F +K7ᗽ@8k,P!Y#^{ 5kcB y~$/5S{I-rXa8QPGZ3hD)PrOG_=^/ x@>1f6(5Pow*v6h2Y+s]/ۦ? B_(` y(`_82 ִh҄\(~e6疪}VJ6^!yi|6_67C(ǽ l~7/ P_:/4 _dv6OM-^I)BλŒ 3*m43ԁs#>x2QqMuu *v Q?<zQ &2;4Soy|0䖄f!gLsI + +P9'br2%, +BcCo.Qzم})\5 |:TJ&t#>}+5􉚹%#?(~`N, j+A Kꝳ W%pMHeA^K~{^.vbPEP#u1&ZRC훺&uG{$& 3:d|[ *gP]46:PS%jD/4{5e:ip c%ӂ(y^BbznQZ{1}.E ۠&BVl71靻mڛ*_,UPGx=%W# ~@AaZ W><@б!$ށzKJN:S .#o1'v8k䖝CPF'Fx 8<C +n#ɳ*JSgCQuI쟍qs^Wne}Pj=:fn }e0_}3s?arz9'}*.:O!>i/{UsRMʦupQﶚ]LX ?j7 +w3P{tj.^S~,I),5L|&`!ct|6H :rΉ=gSzĖP7 KiTc@ 4aUL\U?V--lB:(mof7Wvʌ n_3%ɮ7tP:j*n ɞVTZeUQLz(Y AQYWK|Y[F3M;EaoW'/$6+kvrU |p%V5RӺh9cg3 \ +1M+ERc"Iԅ{B̟1׫)&15kLZ?Do2oL7+L ئOLYI.;yiAۊy'aJkȟT5[i)Ob+d 5٤]l},gեWMͯВmϓ]9-}8j/R(xB#{՘kep\v{ںGfEZ+Mgi[EiVweRw;_M;}ܝV!6I$/ +<(7gS[EIۨ |ͱW]1WڵizPgmɯVeb6JNnPǥ`Р5 *޵Sտڣ0n7?ҷ?zn:9G$}^ZS+>h=h2wcj(jD=pݜzU,.n>#-.`Y'٫lF.6.$w=W0>_|;e\r6}k\B`QES3A}jfyoJOHvқYf3-ZˈS$F\zhYq.b +UhH/KnIR>2ɝ/͂o?L𔠁?,㼴O~rnb|tcz v ;r#JW/#o 0o/ ;"NVSyu8󐴰VNL~"螗 OJUʩ/Z-kByNf7EGWnMFȯT,n3Q)ɤjq` im:&4\EQѝ _D̓^MIqn!iyÉZry-O7٢Γѯ^~,ؒ˲^ ̝.ٯK%l>kcRiNwc36MqFa~oM,sÔf(H[X7Qw>r7[(:UH==r&>] g}qiOtG$(fMg fCuF>eklOL0vӀAMrK!>@J\Bp6M9G/bـ˅7P^~f}0W QT0Ib<[qHƬe7nEvUGd$VSUtOcpR{u1&T^2KSQ U͒$O_'KΛsqj ;ޘYRr1@7giOC;߇Id >Lu9|?ODwR)}'K叚_ug}ySuQIaϲrYQyEE3'$oOHsOq/۬{/j=旟>4cAtZh tA~IK$PS(騿,i,e? f!,Ü*JT qSEUǃ()emL]ZEW>$^(9!.'Sg&_aiv‚}"SO;8e$E1惒Gԝԃ>/JZVvAR],o(lQzÝߏ2JW%m*WY3z̹'Jgη{_Dnw1%Lm|ꘈSч3#r.wQ/G~7It5jwW|.&IUo-[r,}=*R\`'*natz<+k7P 1ive۫-ԧlzoV[qHK֛J}zyMUܵ٭& HKfE>`:> zv&dfs"n'"enudl%-6mrx:(c+x!sn'UeRޯV=ʛ+ڞh}k]"ns^.\^2>Df5a˚ψ`;jaO?T_0U8rIFf{?Ԍry}A6G'FŕV]s +?ݘoq?J,X_Wwob5gEX< +V8`rwMciv3}:b˸u]N}s51D׈d-z\\:*}eQbWYqq(םUT'q;ۊ$ Ӻ#u'do*I62FSzoa?o}mt1+TW6LUz3 &U8H[mұ-wgtF|6u]` ۏE'1~>(Mk0a>HWJO׽>r;foC-4ՇE{V{:ݮͭ*?PPa_f\TeX^iX.- .*S^_}.%ʬUDzqUIc^@M>H_h&}Ւ^mg{qqYYwɓk.~* b\ş[EalSoBJWuD"мmkU@oӍW?ux|uN6MQw+ +m묃^[sklrmV\.%"%"5³7J)/-^5$Ҝ={7̋ + +,Z C%oO24MifHeMYi>/Xʪ=||*Ò- Ĺ͇ k7~fwK g4L0.07Ҽ0T6pogvmCD|\stT[DY@`۝X8Zj!p)}eɅNO #9Ej +|l6x++.ZJ%묥l^v]V\P[ϴw9慂zKb <#S #k±}%$]N8_d74~}vr`__։iVّ\][uP:\/BoT::ޭZPg\NKIдGsON潏*B}/G_(&G|`_^%n/0Ο~3JcTAuvauv %~-߄ {=W7s. +ۅRiZeRݼU@oG+TjUcF9 ҺxVߖhV'ԗ"nvHw 󍼈hqwYGYȁ;{%N}qCdG4m0/A˔USl4)IhTK@f,@;wJ􂂎Uq6-f1Sxh`<|!RU^,QCLN˦~o5Ţ?o⷟O |!mCH^]w Şї}]zF"{bTK{Qmgz].GU5m:P,U7ޝ'٤7t;U^֗պߠߢUP]pWYNTkƠQh4FkJ MF*SI*hFS|zSXtGᖌp/Moގ14:Zyv2z +^pWk-n" >_VwػMgqَ#Hݻy ~Qk򔷖[6= =ؔq*:ں:"+eMF=e7 +#JC }߳2h9;obd&kTyϦ[5B+ϣ.:3E q/#nv|85qSwN/\"߼t|+̥,(*+ҿRDz]a7B#_3گxU-[5lVTEA^is ++;y 8|9{p7^u & f*BF) +ڵ6_VKwđp'#+  +<ؒzZ1{muֵvBq>hج`|ZWϟ {(3#Ǒ;Q|kAk͇іChW:y}MNFLx]rxUk|q o\;U8Dz3qKD\g~?/[&CSL"g ۷߽FCpqĉќE"DZ'=eWwRs[/<"_v~WT\,%:'9<)#̡44.2p"v ++-Z^ǀ7T$Y_tП?: +O4 MQ iI3q& Y *CF,GӦFK՜іh)_JCTЄJqx!0hhҰh҈hh.4g1~Nh-8h8Yao/cK{O/Ƽu.w.}WZ.)?}1#LXJ&ijďxE3>͜)O]+@3hYLyB4} REʋXB?muh_%18-o.?w,"= H0~X{7No + {6Pn uN<`8# (LCG.F'B3@ VТMV:f.si4m!6FSЌV "61Zx~e݋'J=s}Wc|EQ}eQUv}UEqI~yLW{hD1N@SNG3G-@G/EJWb߼MhmHi64y6Hy]u-BU1A=_W5_s 0ѕy.Qx*[c̵V;T8&^H|[숹Wf5}2mx6Qa:>W𙛬8o6p& ^׶MSۤR=t@ |.-' +V̯a ϟO t/=^xm;F<1!!!>:SPfyjR:icp;3e4b1xF~s=9u=BF wX.h3ffi٢bA(Zm٫yc~q/@D?.W %HREW۱|0Zqc(!s-r +I}T9hڨyhҨ97kR4u2 + +Ys9zh-գvj>8^/sW.xmEN!OC?T}mK,O(r 5yvg?˗ `xF6trMV )[EJi&A}4Oke,)Fh|=4C)FJ-̙(n*?]_Qo4 +|Bb.F` +cilqU 5k.$t;%9@.)L77c,^ F 4]u4}&jh4?m>3|֔oC3g@ԑ\c4k=k$@ZגkGny-njZXά偧됐aN_F1~"մ?]PT0Iiq]mA%Gzih& XhFK`͝r)؄11AsVKBShZD* j!?CW4筌\WƛGk2"=ZRtYt;W&5'ǵ %CbxD(GA_N2 ce|!pcWs<5O>=gklbjE6}KXM6;|ޥ4r%y O)OqOcÀ'ksijwEBۇ9%Tw4k:>c#`DV +h1mY9Wxuo:x*C6x8zW Z^6f#~j~ ~T,~N5_ˋ ZxA/UFfuebTe̘ ]ÝiȮ7/"c[3[Kgק(a<h<|׆lw.ëiFW]7?})pŻ}f7,6 ,XLD\yZFԿipY09S-XgE)wG[n~^`,ę_^i#wwX3/ {OnM^-cݎ>]xv!b?_#ͪ'ROďd+iXo?)mD W1ν6}5dw-IM?^>tgE_k *q +.s st=F%qo!O V}pndvXAc&9JcRՙWk$vicN99}ftg]߰kM1K.?lS,-F7zm-LQ_F}uTQ O MjyKQog1.9n&wf'wr~-a?TMUq諟w39aT*r**sTN*+)`Q+~n%bC6~oV9 EK_Ygq1ϮJ8Ee4~,4q̣79K*C/v?i[y2߾# +نRؾz7QOQ>old|` 5vk3Ϡw{pM&+ =փMmu퇮X!lH&vUQE%WxDifѵoZTF&}壖=t=y]?gh6njDh3=HŸ]强G^n?e˛a-5q͕f} u5!wK9lHnN۝As1.zW{eW7~%5 yVc*.u.j씢Q#dNwNme}3?'ϯ:'L*:~iuDS᣷Bs'1ZiCxEצC6& 嚵_yLJ -no}/B63=Q~ǤnF'.OJ&LG[6#V"7ywsТܵTf6sG( ry$$NYEo3˨aol̋ <ϫ[fѾ. 1WthM< r%觥h atx9^lRś}Ct nM!2#2WsnKBqdv +#8g2&גH{FDE算9HyV>0 +dʼnmZm6Z&CSzc+:H +NQ_Gcj{x E7OUt sC4g >`I3`\ǩ28z>fձ$&;LLضMRΜDuОc'GZ:Lkq<'fz場^/zj|/LҷI.Kh }^.mS, +-<55I8\]Wf٭@=&H*P-ט¨5輵¸tunM~ G?k˱sXY>ٓCfe.}͊ +dg +Bd㳗FeLѾbKO[)4e +4C6FN]z]YmW+M[ղNq#}Ȳ5mu.t0n+sπ$m^bҩjkwelpy^H^x}i! wjdyBtqE=]ylsFgl熲F M}Ӄ_3)|oi9dWB{u4k9ETJlx^Qab3E^Sܓ~.]=Wh8?_i 1{¤̙͌"gMyp~ Z'2G}:s}~#z弥sfHKI inVC;7oEv#k-F::A]tiPt-FcY4JٍB)y-Yf`QЧ/l&2KYr<{e˞d5{^=&e(uү=wէ~l/<\&f`eX1U+Ǩf{_gP;u11!#yEZ}&-C:H}z}׀ضj!1$rKESvc][_]\Gjŝ«5ESi+?R? +P"' ]C]x͐g]lyfk %IYugIRz;?4M}U3)^m֧jtfle xcӲL }ǕNLҾmsziu&&l㦈M0m\m_ :g`$N<_EguJUIܝFF|^dR!V0α39)CLB,өK +jRym7Uǩk4ՄWdt1\AIqn;E2gEUH xQF#l̀g}'KE);ش0B~B&Ԥ/f0X<]Ny,p}m6Y|f0r^u^Uy!_vs^mIDpםQQ YWY[bE$‡:h|llQiHpvPS˓} +gB;ܡQ}2'F , V)={q"ь:h3<>X| Zg"]'eR1ʴDajJ5dN*15, b4sWA\oeª62~UK0NX"E]Q.|%}y40_XmSD[v#CA Wy#'c&v?_9'Α].?XEo7Z"6?>X #V~x0EZ=K\Cfr1Iowʶb,_S^x.w^i: +)q@?YIljiݻY6,l6e5`oWml^>Qc-sc6Ս1̹?<>8Osh+aA;)?L/ +sO:8:>qN6ƃS韽J($5d7>әZd#^%5l>_!U瀀B7W.L.}Bu+~c"QFu'ͤ|o/-[-Hbr\D# njb\q*uZk.k`vƱ c=S1h1ڭgL,+C&A/6ZY,m@ )ת\r.:QfvS'G1>k Fe]+c=fbW$952qveLe|Ԣ23atLfbϕy¸w[ݦ'-{7\,+^nܽ4g7oG@Sʌ `Cd;!Nl,km[NDdr d Sfh)tmii)C w|~{(ÑqlA,i}Z{Z{kgB]5[Dg߹$˦]zu l57}ec8qgGMy0_a}CS2\|D=s5>G +Տ~=a% ?#_;[{׃Ňm?[Bov3Kyxswx_<ի|M j}o\22'cʼn%['ގ ϝ&bN=+&`=X|). +m}sO$_KgzF}iԪS0wdh+W6yI`w~xwfu{. +޽sRxӫW!F`#B+:O^@9up9, (_ WHoHv}{ +/}lU'cy,c*'sҘo/[S#ۿ tn8v2k_U^s^?~~cW x՘c srX/^CC/C+}:;FÓ_|+=8C`\sAgF!O}sGb0s16p7_D]V3/Rn;+|ߑ+07exÑ@煗29}b}K xՃ9ۏ]]s`Oqe{riZw`>N>6OJ`3"|t[O|#|7^~_#~=O7'Os?|5,nwo f $\ +\/_w†o^հs]e߆Fn~jcLsrgݏ9W pkE^؇ya }Y=n=Jm2/Ĉ` +ʻ\wzXgz&W=vGK:;s;ώt?=pצ!yd>?J?ނy<\JXE2!>"6 +-x&p /5>]cO|#`hP^r3 ?)s|0 0 #LfO]vʕ{;2!PhsWէ.oD0s7ܹ줆%kN ¥0o 5 Zf4HeȆ/<(رn"b`a~`r_ s懒@`!gN\2!ʟܕK;vudɑ]GRvﳄ)̿Ήl{l_$G>K(}0u6*QG& ,XS~d= ;Rn#Xв'&FL 8א=n=0}$<;S.5mu»& ~)E>rbbz8Ub.d<ZWqvpʓ}%(WzxW~3M =ɭ%-r= +D؋7,ޏ~(78GH<F~4>>y5 -nLF)u|'ߵ:& !>srci_- ]"=N +>51oSƗ?4y0SO]x_E9'|kiA|{/N/CY|1 ԅTx:o9=,F|m3Jk`F_4·wF_m( +a&,7sWl<{be"Mc8/ 966Q'0o|=Z˗<sf6qs#V +vfps `Kb[^B0ι["?{聏f2p?VB~Y` ?9|^ӮI)ӰSƜ]YEض3g| +lsݩG;zNP&̭ S]&_-R٬J˹p\]" c.o^uzsx)0Onhêߞ:ؖBOL f^ydk=%p7 CG.m0'jG<'ص匆 |WD:v౿Σ+) +%7Z4?̿z+NEOo<򾌹G ci(ܟ)=. 9x~~DqN4mMoB,hώI .\G3`~#ͱ[׆{O?x;>̇0"eotK0ț\{U}Wؔ&&aJ::ycq b>CѺ=}ߋ1>\¥ M ,us{jCq7,ae'hbc.n<$#kCeDĨ=}0кCش0Q#ԄYG>x;7< v׺3K)_k ~:I6z'ma{Y'=tנn@DKnм4} Q7W3!|8Lj&\ܘo8k埼? ˊ9G s=zJ̥C1gя"i irDZ_G~s#~铺Cߺ.tC9e7XJ9`g\O0Xp >|aC'!ga^TX1A/rEof:q1m:z9}\oCWM}YC_p1O(DHxep75?̈́՘_tMy1oCTƎ~X|`tofBE#oT`Ɨ$ܫ-ߘ=yc >߳xSxk)~ؕ/ju"ϚKg;;}Dq1H"f Т5(1b`o2M:mgEW c?5OʇNq}|]ga;e.o[)ڽ.1Ў +ĺ@Ĝ{6iG9PV?q ŵ07`żbّ]?cO<oykM+qۛ^j"S أ=|ljO? Ҙ{nme jZ.n|׷GxfP.n)f99Hk`[K؋g`_k= ՁmZM@K_< rˋנ9ȎxkQ8|ˇ?G}67[ףN=u1#o>ty} ?cHr|(~ׄXvÙ?|s<#ޑa/n p 7'gu>Y!X ; lZBjhl%쬘 ;FVҰ6Vadה#6aS^#bg{vV͌|&c 0ktt˰MEkN 'V{?9l=,P8oA_: x¼_} k?w"3?n|󖖟`mֆv2ↈK9;޼>E'O\q]oagmY vwc>q1m\ 랎JmXv epP#ܫy k9cN!|bgQR;+ꔦ{\дcQ;=pV0Wn8s7]MnH{%,ZuZ{]9q|0Vo9#W7. fw]oz^|5 14c<}qtݑ-? c w}rspGܬjwk@ /^yW +ڹ/w 1>ZDax&a/tvl퓗4.۩᜿k?D_݃2s^;f֭ 5M1Fkb킦a}iScb)Vژ95>9ҶшMkv_[%?CzOx ?wo;=}Պ\Km^|xc;sP'⛅}X6)ɵRk&xr×?ߒ>`ͤ5:aUGb,68#+OB2Bd,vVwNi_.= .u8m Թ럼~{tvDZVL[PyCay̷n/~|lӁ+06a?nU;üψLXzuٿ͎K-EXƣvb Bgp3'"V"`<#ehY]m^!&vtFhY%#-jԗи6>}9⠣_Nئlye + v˓1=)@_wGyZg%;!. "vqO5scKן՜xGrC9b4FZ;O +'D;`D.ɑGB DP9=M޻]w״1*"5 |@ +ss>HvǺ//zi7.Y;4~)Gs `使 ;_ڿ;+ ;k:aXz|x`n¦yjDdZag5ڱvғ!-c`͋k{#$ָl !#q @8ĥBp7vb hډO>1 ?m^Áf E'C_SjF'9YP/5-{$#֋1 ĝsw|Zī@lym(C{;\ b۞XdWºA}r\e"=; [}ek; szNYuS;eotwXvY8l;m^i]|jή'|kW>v>cWP.{+ lG~lu07D|0+7PB xexrK=ƶ~z%=ȣm:7Ԓ:Εvqn@, /ag ;"o3FmO_|?; K9@JJEއ/޽/]=q#vesxV 8M{9'n;rh'`|KpNнDΩ{ }CWE}WG6򄖬<Johnk'ٿŎIfn_8.rI[@q# C];|ʃ{9u~8 \ | X{ЖuqKiupv1 ~Ox_rocn}}!h\f%4oK!Ӣ"75Lh8T;b@(5 bg,3uh}<mEWAxEA#oM2h-:ԯn>o~]G D\6p7,ҵL> 9 |OB> 6<-zGxWsY)TBg=sa E vVo=?Rpx+k\B&}lA{8wN{#]NXN~G ?Cpmq%5 cS߯ͬo < u=ug8qœ'D|:i^(v6S$Xkl?)OT[/ 4-=1_~|bw{Ɩָlۤ_V7uaܽ<^z`cbah0A6ᜮ:q } FdsW3&gZW_Wkh W x︷<Ժ}_&ϧcL$wtb \%sy'"N=|0o<6hh EzB {w Tt/?ӈX4*qbC} f qkp:lYowőoh7PEmI `㇖=Ң[t,N`_668|0cRХ8D_FEhdcjxfcS† 6ĝ9oa ʟ?{쁷tng홑W>ٝmz՟5=#ی(z%ЗÓ[xњS_|=?]<_ӝ`SG<c! WTl[q2W1.>8{E;|%[%$7/DAL9z|YE& 3෧v|:J>x׉{ͯ^C(׋TO]8kg";/ab Ŗm|q2P7;7Gٖ4^7*pS_c cבά+$WZ]\O?.h|w賿 `a` pdB~qc_k1o#uS|!'.B cڿ"~3=8֤^~>b O7l6Zq{:W37KS1{h3F3 L,XF¶5n>vMtgaAb[ޘ5<j_}Zq,~_q>ٴ1/okhn5bozJQQϾ#v!}Uh!D`o +< y@\%\kz"p' ks  ֗7].Ɔ}P=v؁9h1gW=vf#lȖW[z&44vV́p:#`F'}"+{[lh{7{N 9οֲx{*c_s.9tx)?ď|5Zu*c{Nd‡3$>ENXCyUE,mG۟u8&:P TsPז3˶YtԾ)>PeҵnЎF];I1Xq*mĘED:V|"+ يm:r%y'C7ڑ޽:sX$ZtJxә꽄Cqn1F{s tYyŘ ء8#>G8Wqvce 0?A @|pXG {'E:OCP8ɗo9J&B|3gi7jĢ#2ܧ[mI]so^G灷twED 8F٢j\RZ^AsW8ܕ޹.'=Gṗ~1al-꜀8妆oiA؟懏a^ .Zv>du`*GLo9M[ܗr_}/ܗr_}/ܗr_}/ܗr_}/ܗr_}/u_'hCO+6xW6)_P>yZe&;3ْM;t 1^NLOS)ڕSI.JvO%zҡ53==Sj=L3,6OL2P ~.+d( +Yy/'rɼeNSH־ Y@'[C*Y\,(\L O QZ\;2ɎlcQEFJ?/_W3;BN3?LQL ҭ #~ .oOuOЬLraw6х{]Ѳ8j$:w3mnG d{:0z;-@Ar/\OukW.Žx;]V+=>X9'E1./j%[_=UmLu.7NJ•p׌8+w&ZUVh[UzinqF .v92;hԤ +fa+1;;\*5 ۝Y؝'uȞqQ)?DWwʹ:5.q:Ҿl22ꢫSf9䜲^ے/-3{'oEoӜj}0KwgZs2_JvHv 2>sFmLdt1CVQ(ժ>qitZ96it.Nҋ㶌A괢ic@0:m1suJfI LR=[@O,acn>l %~Gſt2rֆz;-Ջ/JM2_pęMP(=M2v̦^џGZx%ᜣRYf&:SD{#;?Yzk1}ds>::>2./XJ=U9ޱ- 'qخdT_ai*K@U㓧 bT{tGO~ObǞy=P,<6yLSz䷙S=yg +#sS$?ڵCG"<8-O: +o2vnGR%SByqnˤ۝3C_ / Uj9$ȩwdkk2\ZfQpWKKw{يgHJiPc3E経c39*H)'|}ȱzn=7Srf',3GcM3د(3cp*@1wp9G3WLȕ;828TT_I);|3-csJE Q)+ !ԕ%ingn׎mØIY9y&i.,*1:2H1|'BzW9oWY9fo~s[IY 曫ފ]%pnk7xs\6ִ}ۨ13?,;%KN&UDw';Yhv}m%F$D.i.!EGaqH)њhKv + j?9ՙggVb䟌tsDyGҝNL㔟RJIQZjnnAviagp/33π< Qq[ +NdS,ĔY/y_* Wb"WC܍*0mF&t8݃(aPs KO/8".dxi>PĹX2j9#3#· ,aKDZP+h<.nOd[tc`)-!u??vgw]w?w13 +2==&wsv=ƌ9ew5ݕNwK|q{TzS>SE{E Wufb#oY8Vݙ6 [%zOj%vCpn(Bp.\!&spXI$:fuvrQzd:$Zg3Hg$r1MKA,[_njW$ۻA'qEf&uaܔ}* ,35Sp&(خr9ky'WC*8 + ^p釥 +H7.5q)c>-Ţn`q9̌q9}s`h h=C17Sܾ2Xڹ"LttCSC )O8.*M193R93R9)csEzd.l]B%pf*%PU\jw-l52[ܭnV!ct0fZUm-CFާ1q27qAqc8A4Qbq K\)vnkJdqfdRWGzagX:gdvWJ_\'ȝ +Vt:7EF)h",8dqSe#ϓe+W8GVM{?JSGi:>PJ9#nMufa+1;; Ujl[Ԃt~C;t.*i_6m$dg% TO0lHF7v_tEtE1:P6|N+c/Rfd[&xØM]7 }EHJ4lJ%НY؝R "/CnBCx: dLgМQ'И1xJ7[Cȕ/ȿ^_:?Jl)L) ta:zz:v \/Ľ@ǙJ ǿ\7@Ǔu]7u]7uD"It d\`:ݺ(wq]?1 vRXPA+ nсq3l|ɵy3l +cM [/L[htg%^@8+ۓr%֯2 B/IUS2f@,)UX_ ط (9hXTy%oX `%^Sf㙎=% -:AݦFe ѐ1+,u6.{q&δ[B%x)uTBn^qڟD +wc+l}׏8SG3q1f&i)dK8e }}ö[_p8 +k~ !hLŢn]Ԭ'x:nƓOWk= Av[~Aq-nT=wK٦^::fĹX2Z9# 3嘑A3Žb3N+.3If' +@)U4œz endstream endobj 1128 0 obj <>stream +%]BGBa꜑"_B"_B U_žzɥvWPw-tB.d[F]Nvްhc>XM4{NFoRz>]Hwqy (b_P@Ѯ\/Jg;bTc<iQFQQPRbpf{R Y0O#h(RMQ3v\njO0^L tO+ 9Tv).seMҶܺc.ԖNf!R,yǤDfNsqnR_zJ+{;Jr)ƺʭDG[(T!4d]m.g)v#nqъhV$69 :WJAH6fcCha(V+LV +I"R; +JStR}a:U>3;4A%Rx*_h~Hw[oWReVUUVeYUQ%Q;䅯",/sAQQ8^TeH,0qP:/;2h#iŦ՗W0^A8EpW^^J^VeˊXE$bASz%Va%OuEc90ʢ +E90~D?^FzVTBmeW*zN4 +4( 1^UU@@멀j*^xl) +m%hj/jxF|R${׈ +gql +YgU6$˖;D\]n!R+rT%"0þQ1(4GegDQ0N%;ACعzx*.P$IA8lIV +/hpDF$ GU<F'JDx!$k0-.FEă,X$cX*Oe`YXк^*hVqX10l\YN@Ih 9FhI3 JJ 1U A_lXeck:.E)PV^IP`qBELs8(`RB{aR6 +GPtPN1bhr9)r3e',ܗC]!uh +KkPTҲKĦ&7+CR^Pl(krs +L#¨Xo%|56yH 2pe:*E]Gnߛ|X4gbM#Da#ZMJEط^6_,ޘ|=9.fQwiSMd:uf@m>z'(QAIK N7>OiG@N/҃4'l`3YPsU:ʽs[=r#`}8eUl9ľ}kA3y׏$MgQ9haq٧xO~8 +m*"kG38i"PQsY4Ƹ'}+a5FyC5Mw)7n +Gck9[ 0ϳPߠEXAYK".q9|lB[-f8TUZ*r, +G~ +l&!fTj)Z߁.gQ&ޚLRV S  hDFdO`/`҄5$RTZ|תU ]UU~ h w흠s +crEޘFS5ߍ1* Mk#h!b:6&[,\.mR_g8k]ȶ˗]Sc.qY>3dSϴ:X>%ILaBiʩr"+<47EWrY+{qh:k盧lEjEʪ=zF-\+py;0wVŋo5>(+le*zJ޶oԶ627I5yGzD$ +jg{9rMjrnM=->0<0Yͻlbv2ji)ʂ3"p < +])7EAfa62*'0૛3WrDy ̕E (xӡ2YP`i*L+'I:'*hphM;:$&o/01 @ꎱ8\QѩV*En7ŀ&S'f X8ġO?G/BSxgZ6 ~ -4Pʪ. +zW ;~4.9IFMqxs/TBfRԘ5&$?<,JX eQE^>\Y}p Wbk]-i,0Za'3D3/&jm0{a^|E~m,rڐȘo598r`1a{+@E\?gzH<̵68ӇgpNOwuu&oކalYGVYC{GǖH#IQol^za֋zPdu$7U9Ve+dERxذ]9Z# , uh`jOY|kq3z*;1thҏ;ɆocwjtW˃*}+uRVӟuCfU7߇x̢,1~,cZdĂtgkzـKVYNk4Q\ĽJNPQjLJ胍ЉB8^\ T܋jVdFMYDn"Yu4̪۩5f =f5sި0vKȪ4:|ZUU^ΚZÅ@! #Ii^~0 VL-$h3.SLKVa9N2AjNJ#\f`¨R2n[6΢ ;+ +x oHՎKXG})|n}(0-XVTcdJy`4LnDFY7P'qfՌ ^Z5u<]HMF1B/_DWe<11,,[QL} ޓD4 lo)x0R'X$@k̂}m_4$6B nҬWX0)^Y^8Y耼p"!$/L+D<)A'92Ϫ<# OF3+)DEg"/YTKE/ ~ 䁓I KGYV,i(J*˩*ZE^f$-JA;YQ%VQs&^E'rU/s AJ%dƈ,πe OЃ(8N8 +Bߡ5lRX2"'f#Xҥl蜥~QDǻ'3PJvv&9G$;$Z5bF*3trs7ar'_hǻfh9%&yOhm ӈgox Ň L<WĽgAapryhie_46 X*Pj-JkAf+VxP ͨlM9tfeBs;&2YC.4Z-^дju0(ioc׳*6$R-]<; ʳlDaeh/FU[6e_i϶\Ͳ&7݅\jy<#i}d#hÁ#g ,`gTE`&UTvgM%W$,3ρ]ؕ,M6[׬]dʬggwzP8cB`\8 _*bMh:@>& 46]a4  +=DjjGcxc^Plu*yY zU&iɨ>ե5`]y"i[M;VAcrP݇4Uϫ IҴ1 Ɋ^5*)JN1`*)vvU/Unhfshz?ꕛe6FKm=lcXΓwAbs$hiL +~ "oHsD(zEEib+)zUmC&ɒD,R0ooLLf̒zv! Jl,Vl_!7DM^["u"Z"l`ɼסl%;-/!J.St[}m:4}lu'T2o {C@Kv^Vd+D +KtBLmu(,}In)ҋZ ߂!6ad6L/b,o+CٌKzKM\m욿QC^U%7kzQo` d->ֿ%:Sy96tXޖN.r7vVc'xoѤ\í%oo!m\!(5D7X\ " $CZiyG6bG6k +ٌBlF%:F`+*db d9F͸P6,{7GCpCZle+fH(˜lnX-Շ`V66GCٴ9ƕ͢UCؼC^[vedb֖^uH[ kj[\r|K/t 0B M0fK| n%YiY6eYVeXvYt7Pr,|#2N,|3ͲA,|CͲJ,|S-_>K"2У>}k?p'$/< :[Հ95QΠ +BhO.ʫj6r80 +_&Y؆T JB4>՘ҾY_rЫ.7nWSnkZzAlQXAT*Ү飅QaM:M@u!iXw."*HNŰbSW Lհ a0OZ3غфȚ&wj! Ճ#Rx`Dw"q}$&b+NgFC:րգ5d#4456k_(CD AK,orws=КtA/=aN +s.vw{M{TJmq"P + V\b;8'wj9rmdtdI!bPL?U(OeA[۬Cf16g`bmÐ_b7U(u`jgZVEge`0/xgXre?\CFdRcR0t6 +:/,DE +%i&xkK0xUOݣJ}KF5ZTnGEyTB. |5b@*zyp)hq:~hԉ,d|9ӿZռت{no5KF5kgen₀ QyNKM~1iA2j}InIn}uG?ΚkV|7`13k޴W{u*u]ӻCƂ>B_ͫ+WxՠT&l =CC`qyE4bUuv@B"UK1R_+r}-"0G)ziF).z + + +ڡUhS C*K4B d]J qr U PXֺAh)7b^c֬7G-LLiIfZRfyޅǜz@),&d't'+K&6 О].x00 CRW`x3?18&-h4T$iV8g\<.hEHukXLo :T]UR<_H[ɇdx;,XQۭpp+4|d㸋/< mPu^Ðd1G<3^1ʢ(|RȗgZ;N^L + +VL(| Z0tNv"/GxNÚ. 5 +eL/T#48WƦ +!A R2) +79F<@qh*6ӧ3] x/dAKec+2C`jTQvVˆK%G +UÅfy>j(sy݋;bo Ni1^]-օzvroGc,чb= 4Ea#)3*:`o :1hm m\n,n* g#!AǩD"!TAsNE<ϐɨx*SK0'(ZN\V2`۾WS"- +/@Ŏh,c/C9Փy:`TQ`Hs,M>"ԣeRP" Wг! =K%Or)2bkI=*c^A-Iπ]Mqt (֟5#/0*g*%q  Y&e;Ǽ&eY7`faAK02-. p =O >FP,kYAi68B =-#j22xCѳĜ,,8z~o+h$ISXG::><WUG;aZ#*'h3.NSOu<3`P⑬W;a~=@ð&!R8Y;b}^lC,FR4!(YM0& 2-Pd:Gw\YT zBqFuRxLZMR +' TD1)sR(A<e? +y & ZǪj[ߵƆ`]'axL=(OJIB'.'Z UMh|q z3a +c(_yiK3dn*Ǔg4Ϣg̽0EpF.RE(O1kB&ξq];jmYQY[IhOb 牜f@W{Fԯz,t$Y5S~Y7I8VX蘰}2Zդ +Ed"8[ d=Oh|mD ]NP;' Eb22Dh!h`àЫ0ً OAaY1EU1cTh|5h|כd֛mr{ 2R>mDK7~yJwY?~6Gmiem[[W";:zT797 >4mC]|Sr*Ԁ(=`١().mf&:S5vhqJm 5w4;xN_yU4xrxxF*56# փ`iL[oM/^ d߆BN]i0Ȍ4 S$+^0gv&x23.igcNP;%a+Q竩Jugr]ά +cPPLR;-Smrkh%#*OgY;㠆mLHdcpU*@] j9-~ Ή^Y ]ů +{kpL*wSUx) +?*\<n&hG;x*de@Gd=Lõ*ԡ1es亻殟4 +KDcY(m򺳱g#D /3y3 q +VtpUJrDݐ+z<]K^ :7$2[{ +WWR]ꮒ$@($&Ju'< x(l'8VgVYJ-+]GVJi1瀅1RIq~y58B{Qeys\xD*(Ra99VYAKi1sPM-Z\p>?o!Ov,Sd"$^ˆTA4"q]z<=;6'ćpBcEz" + +09a0MJ@9ɘlnN=)rBR*2`h"&ɡ`pzp `ً_ #atAx"0@%Rz#27/d+Mu!i:p0aju[&tTKb[sNT=3=8=#G2Tekɻr 忕 ԅ\Hf\ H$) G/@L(H+"`"DBMba)Jx*ܬ)ѱBmکJZI_ƶM8I>xߋ +b ?W`qWӠxt + ),"PE".I}?:P1މ_*R Ŏ?H5g\Ӣ0*Ӷ_oVV*by=4 _A3)ȎNbK5'qISAU8 }( 2mE[;axa(pD rht% a~+zkJ_u^-..072{uOſ6W]V)ly34kXkg7۾djc2_r?kZ $G05[FE Il k3*7݉1ׅZŎx͚@>x8e}FB0   EŔ`"L"0JK I*2V.1 `0)ٳ>l2б gt8FI` D4*6uTĽSdĐ J C߿]m #0 Dm$!0C4#i +S*P`w t1P9(ɚF(8(!eixD =CyHCodқ+؇"d0 $μdБS2Z`G&aLTiV:Rp$ 4EP}d)0(&;Yg@-9& +nAf)- ah,@)pDN9P D yY}8# OX& +Wf""&)n"u@%ƁAI&+@-"$EwpBA7wԧBj 2*@Asv@{:jA4o+ejFhn0O\R(-L"z6 02`"!hmP8Rc8:T/㤴 pv*!)NtsT  !wPw@ߴlb)4$0PAVq0Ld.( ?ZVJce ((kPVj +:Iy;Od`;؆#VeKx@$\% I*}/(/[BYP +i\Ɛ(`X$`rtOxR\I>GKP"Ly +'B$" A'ꦰL+ x-;R0M@ d@W|bMm#OfPIȣ15R$oOSf +$H-F] 4vdo0hP>Ts$&E0y#X성V:-D"k0@aAaAD & "6W1"04i XX96(,>2A`0<ҟէ?/ 01L +TJ3Pİ.h"Jx`ɫqAd"V b`60 0>0V2*'CfoA^#@Jv> +*puE((PK eRL`xU€Ճy2$Y! +TvX) #b_@0FIY0f] -RqBװP[;׸dZp(ЀAas6Lc+?e%eL 0EX,\l6lR4o'Cn|[l +&( 4j 7^bzq pZ!V^m^54c` +('0p>\c+J1V*Fi. M0[,0;d!pl5u)O*QfӮpsɆDQ*t+i}韺67x}kƽLJrc t7AZ-l3. +Yj~mQgꛭЦ*ug%)kW: +ΟT.dMl핆)aBat5@EBECfAVxز_8+Hp,B{K" +/ ZZ' LARk-9ȋ "# H0NGl1^D@=@FVb.Z/,P̈8'#0Hޠ)8>./Ȱg @P#GyT n@Ղr\ +XnŒ/dfO/OXn\V8Ƈ dCcBbp FQP,!?%6%@'AƇY@r0 nEPf 7mX(J"l4VӀ`*aCYa?va|T0"P\$7^PS@h 8(O=f@tml, sa"AGC-[$UB8XL !Jpy\Ppt HC/?kSur税+n=0`u.~(K `o.W%sS-*bZArߞQ)q kAﰶ[aՑB1a{!ҪJXG]m +~8lQ%hXԪOK<׀zd7`,΢F{f([w[Ąhq11!o=PDʸ jbu#;8|݃(PT >-zis F]Qx2yD?E[zyq?tߨC%Jz㱳X.3[91÷<a:dчl$'n}%&HMLFF_wU=aVGM>"h$atAO3Jph =o3t3ۿ6f6b8cBL0"Ȫ+mh"؋DiidZu\IjcQd_8?G]#()Fo~9xkg'<Ԧ;'7`l,w +emo8,}.djD6jbKq|okC^Nx^XL6c(S}7Yv).'ȘD`H@:}hCfq$(atAoso.W3%CVZ1#&.I8InrQ,RqHGQ7'W5{W#2:Y/>Ԫ6l-/`lï7#CcYb!av+׫|$7hJ=^}WseovfjWxmuWa+eEdGA]vPج: {^!򒗙;8ĥxX)#bs8̃" +(b3f‘;+rٓ2}0j#TDdҗR/9#h+VRHSk1@^2t< +U U#JYoQF.Թ8Wt83+ +2l)keП;,Ǧlw+>? lrv"3yeYlƂmKJ$oTw{7`pwh .ko l wRd}nk~\Wn#I~'7'ێ8q UB<2>[-B8HJ_st^JZ6R{}*u6dMITp@ZPSn-%ugi,tgфREs,/]Iűls K 1܎}/Q^or1pgqYv8(v٠٣I.7Kvrw Brq ̈2Q48\0i7lQ%]2&=7 6b m$-{n1EC׽d.T]}I*lbj_`t@J5p߲Eu K-y R9շa9 c@M IjxN8ΤNlb=掔hg;hw3q՛(u0i0k`]a1,'3lBum \0ureot/;ϽbE ʰ葘us Apm6iW= +Ą'.֜jCTVRw~&[؏oiW ʙ/.qk1c@Xtȸ+>K$kWqjٗ-~3 7~T#]g0A|?Sa +Y(_ҷMK\6 +bPzF&pv=Vn$e7af(xUĺND^wR⁎@z*l?T㫔O<~J5+Q,vӅMtr=OH70:`@iLSs<ߞ[')AZZvˎQ9#56~8VyhwSoY jxx ew!Fira`(x(xG3`:óPrqC>zwq7K54zהl$ +X|^>R\$ G,l\LY0PkǓl,`A%csR:#Kg~g= PC,^LwYIfUdƘ!3jTL9<%+L}'t!]<ׄ(uB*;#;FpxG!);6F/O L09al8ʜD1W`P'x\=9I-R fey%Sf'Irza-X `!m{^?MW2FL{Gy7 Uͤk1WmeuԻSW{%2/-r U_83:~WLV?({2;]يKd(ɞgN*~}fKqӕIcbzy"]r4d3fd;\"zZ:Цbgܱnt̜lFօpV̛xjC̼-8,{] 2ϧ_ 3\|/> Q?Q?*xr޽UhԳ-[N@ .&{)1K ɢoqfF܆-Hd:(R[G)*ͯTZ~If1T:v[;kX>|܉—1l9Gv~.m3uk]T*FľҳE+C #gfm:Kqc^@/iLӀ[ܮ|VɠU ?6 EjQ_SGSs;v;ې}p30wNzvp1 sCa$JC?o>xwYF}awWJ?Ԓ2>H +ZF ~$^Q2SΞ:f1ݹ-/ ‹kw %ɠ{yˍ;ǕJٲD1obaĝ Hj/L֛-]_+ fdwc"=uh[Dyn}c|kD}sBý>v_G޶ dtw>׶bEBAu՗2[{:>m߄CWf5ө#9綶+>Se3,ƺxoj^XH@;'k畵!a ]Yt>z37y3($2P (`b^۟F v '_<*=4l0Kb?De +޾O5>y(A8RgA 6հdJŭ'mp*"{$|xA7n.7(uw-7c@GRsg|2}a]x׆oX|B,;0\±IdpgC0 䓣viL*.2b`8o1tkI]b)=>APfW((/Ì a(ZfMT[)~hS*["퀲ޡ=%Yj9B֜D6~|Hъ~M5A#cN2QzZq_!N9>%16AuvAr8iIw{,'AȎ|]*=/Rq<_2~R㩪= 1Kv&U71b$TzKf=sݼ 后o|VJ^f|R(oP0=o1p] ֆT}߲efKGg >/`Sr<;Mowb)q>A +1pw j/Ls@*CkmJrr%.AfZS΍Ɠ93 +`(_^VW}h0Q㪥g^YxzyZd><6_1X[,B2k'mD <=:RhoHz]Ґ봕j?vX=[Ғ{#.2M~mˌppElRJń_7A¸&X46ԣmZ=a_ȁI2}(<$t:;sWˢU̾tpA;cAo:Z_VoKсLRjMP+Nk %_J2+\(KYKjVA]׳m/PnVYp*DJ*@#u +M6ۙ=:zҨF亿 t Y7[rM1Z0x}! #=aζF7͗XTL&цV l,@-z[>D*Xr;[ oٛ9U' hNI`!b*퀫63 5.Jٸdw86BˠC^G |Cˏ X,5dpg{U:ju7캸@F|bj4\4o mE/9]jop)3Tz0.ˉ{.lxKez8SR20&+TL,6a*AzV_ԌNuvj_v̮'j\őnFfbh+׋@t9#"%5Zqg0i-1! ЭC}xlP7?xuVT5'1V ,bAȨV ,[7bNʑH,;]w9Ú l7[T-n*1U[u:mV =''^k +Xjlw޹+dOm%XZ +n^b?ԀթCv #pqhHQ*<Ь:X l@݂2@Cp/Pt˟r75- jOҲ2!&kMGY[* 7L]VJ :FbuO77md ֓jr+oϻqV[_&+k2fQ2_X\?D%E\џMB7/0 䠀cd _vgW,?c4ݠ?lK/?Sz_fu*\7gټ쾔P#s`se& |i>3X?џWǁt#LS|f+Zs&a_gw)}w~o-X󹴋\;sݫ+f; #bSӘ +z_-_: +&PBL޴FS7\RgV۝F^3JI,hJv"=%|L5v;3ܮΦ+|Iٵ _&,o)ͮ3&Miiz7O?&W44ZpxGYe+ɍsFM65Y<{ -^ ۣD丙*|&9m>Z&[z&h7ڃ0m^c]L!ĐkS8YM|}4}b)nk3DT5ݴ#SrAM+kʼZ>M9ʔ$M՛X]YLe.eX?M7nf M(VG}MOKOG0{3}5SUoO+Ӱ3ij#nMiYL?inͦbgg-mG;sC뗙tbf/wdXtfN;ǜG9`.g滷۪گm5󖚙͟ ӧ;X2Oen^E?,b ܌-Im6B~[6m ;WlhIֿ_,Rr 4n=,lq-ҩu֖1|S eQό-te Q_U8}\%+U&KگnnMU'jyVfw|VSlZmOwVf%; khr[m k6Z)ǝKZ'lcOBϯu5m~'`O6ms$帰 +VVy.lM'n{y(tmbW"v^gn۴vd}C͞./bѷ7ı04yϞawxcO +HEGsѰ9:=GsDȱMN{zs3K8o>6>g'q|Ӿi;sh,tY?njq޳?uK_ \e|ysM'ﯮtTxݚ1t{3wvw:sa8>-i/{WOnx^=/:wmyќzքD)o-φKo+F{W{wNV|![wKWWn9ھS~J\z-AfwFB j]H]eJ;yY(&tX\Zt]XI' ,v +d(Kf֢?En*ͨrzr +آ sglcA/:zkLDG(0ą5f܁5c j<_mjtO]`͘L|WwD<.&roBa6OfOƸ!&A>OL+AMzb6}[*vv.gҁK"vK5IEAIZCn|\=Q!͛M n +x4 k<[B>7f.omh_K:\ƽu'|Ž7ϙxw;^uUJA:)׉x/ϗ +~b5Yn&q~j7'{^u"IOڞl8d>]LyrQ=jS8m~#y"t^{ kw3).il̰[hev,SdKU/J#%&t=Rk7nu)x! {Rx*s}KDʙlm=}slT4ˉb.>2Ha]rRb`q{i$ʎh l]J_Xnz8IS3ㄪ|c{73ߧBvr?~V}| y5Xjś]s}0wP8և;;5~C3VS?Q׻s4pY:v}tZk9H>ۅ=v?>4ޗ,Uc¸?}Ϣd>{Oc3P}eu\odyI]Ѝknߪu׮n߶.Ɔ|-N?}zĺ?o:/,۟ް~ $=)86l#Mcax6]'7gl},zƛ{ӈm֟)f^uf׹yGybnT;"EN-z~"0tKnzEU˪Z-ݦ҅'Dオt1:H}^Qj6k V!r^KTޮ}E F>s>?@4.#I~).o_lw"ŸoZ]?wWFߨC<}ܦHa;!Rx=469۸Lu'`ҿDL} E&O)kǟ|Дq>6ԦN7կapM/<$CJ~25nʳ/%ˑM"|{/VnBd_|< ;NZ=C~ԗJzx O}Kko)4 `czg){œ57uc? 3p<>6ulZeh(g݆ ':p =J޹m6 47j@?ch+Z@?B/55Y +6n,2Ї=ͼc + B@Ey'"O*@~芩;f; +"XkTJ Q<*-xbv٪ұIvsU}^S{y@q* #*jު?l֖ +ʁnRy E4&}V] :VWibٽ0J@ <uM P‚["жeSN9b5ɯuTO1<1>H(=0FZގqQi:?OK ՟hLiԶZ~>5ܙ s}1U%1wDٹJ!1SP%%Vȧʂ>zUx3;%3i J썻 {M|+Ԓ=zt`ﵘ'ќ~SȾk^B~h mKs,Z,^D^k% ѣ*P Y.y߃}~S +V %K"Og-@MN1@JZl=P,/%@cdϔ@ObIb_(`}T +s1Bsֿ +P0 V:PdSHI +=߼嫯Ғz$\єv;NZbck//P)sc2H)Co"B -x%<9+#hVs 5t{v -9 Y&c YͿsX# OͶ4=Z,f܋8a$Y+q)E`YseH=hȉTJ )<\̅YUGt{ղ~A3b >nVZ?D4 +CQEHV|Z K`.ʹי!b_MA c)+3920&O@L.E\gZ@aկlQv򦋢AW<0W~],)LkVWL&PјCN@ٳxLkV[}bϽe % !wNLJ܆>~9$1$#FfcR=vpdA/纺w&㻎]^ոBWet6'p2HȂdYA삊?ºIb}K; cPcLcIXKQ$=+L"zX;YQ@~t`,Z-6 oōa;%P'M Ӈr./8YMW&2Tue.O۠ӵEͧ'ݱbZwQy>Q;qj#4ϡ:%NN+0bS駾P2hdVѭ Wnot~"`&=b|4*UɆ"qu;0l J% Ef[4r{|:aǼ-([6@*ȶ(ݭfxȮ_3ѾoF[0a wQչVvy!QJT`+e%büȍi5+ +FS-_ěz'O gH ?OG3T|r>{#+`. "+0d_,md,N_EV;}'M'#$O%WQǕh.8%yHV9pUԂ?mj~jT p( D5\dNvR E~hӌ殁υU1è@ D;^lFFIH" RShJcbcZ)M<-:OTƞDovq[%Kpj˪uQ:W0+idVZt^=c'MHU= dn"- ۲EF#,ڬomΑ\T^3<{|l,P.bTS ~ShaI ސiK4AR ]XŐj_[JOh{އu;DCJ4%h&XJ~~/P/D⭗>- ]0-8bVJ*_NA2k0gHF +vEF mι7u 38HCZ\8 ǐK;#I.@[?&׆o?~;ګVˀyx|Ƶ~6Ņqm1wOe~yjþUSЅk1ԏ}oTA?ŽP3@?R^Mٰm@jBߗӫ #½І<, +Jv##sϐj [{F7Pr7t66-*@gS(1bI2\~ ټBb 1O#t}Df+aP&)WKݍL-a(y½ȥT DrV,wMwI !s1%Uby>c-tvny"$ݍx2J"ZK[ܙ "+dCR^,rlQ,$rud_ƅ5ߦroj+d7\C]ANWNNZ-xz v݅<5ttՂ'iWЁ9zKlqqu` +fI.8Q:N "]4i,B4$K'[?:>iShCL͚w/hİiҕR~2Lcƅt0Y1s,4BǘL7IYw9q2_ml务=tW-'@a_l{x?tsJ+zw Z![aJdQ'.5i9 >: p<*9}'1sA;Ra󻈭H+^gg)YH .ҧ8sd`YEBC/ !P n. c ;Q+3Zs^ߙؽ$yEܹᎧS2TQ%y~jN"|p;G%v=TZuz8T éM;NжNS~)-Qٹr"nox4jkrhNzA7X ܏vօ~~Qc/[yg: N:>yuȆ 19 'Ns&saK)5XkD7ZRZ{6DȘBHJ.oalgjۮj'Qhĥ +G;SZvjEY*RI!*+RIoEE*iuB*R;恁ms}*RgHm"t 3P&]01В$j*jl±sUb*;,J+;;W)[{,S+^ +U8)+~)1pbmq'#XDxӀ5N^IuR=&XTShH"fD^tg"9s+KmF&i}La"9ty}{6yM4{ɓgR3r%,M6`ڌ>gCZbT(T4\wvmi]jTعу +А򸚽hTmo +}C,}ԀvjtCTVfBQ^ 3WϪ@q +;"!UsCLnPZ|@8}|>-wvU/DŽIu价)YAq ̼0-?vn!G.8N8d(8<0S%I),5G;P_cUc >g5,Օ稦!KJ{SS9nU;w5sU)&NKV)旳VXJgSJuj:>lӵ it*;s5R-+tJrtJt8[M^3rj:/zj:SgTMB{j:~/4vXMghHV:#nRZX'WdhYWb]WgOv!I߰P$+7cq +! @L{=3*Sg 00(7A #R({DJoXwqӾ\;{F5w*eI/;q§'s͝F~_):h蚻 Ci(NȅQW N z: 1P*7ʪ)LͩpD!>)|p1Jet=/3RSVVM;<* :vޕԞ1EUPٹjsPeO#wC|t79_C{t~<'FvOd2PW>C`aP=5x* tf@IӠ0.)*%ҷQ9 Qb(kT{{XВS{Ze +79eH;3t 7S4V÷=>sB=39A)| TL~^)UJJ1Ȇz7 w7Cs wZpYx:JzAGMy'ߔΆNQ w'jГcֶ# k^ѻ~~s>{ZE)ud̃8 ksᎫoGoDs5l2!oq 6Y^nIŢǦ(b\pgnAsm(Lb,tV=¯T\OG1qP4E^J?={5O2 WT,qM?MfE;6ܺ׸ʳ6N:; +: 0J'ߔgGЍtgH=G`GwΎDJ&W9F"=T0y>M +o5$OSSBՂ&o᚟Sz͝j+:=lU}*ĥioZ7}xUt^tcjex@ :Ba,\,?ݛZiF=\!YJc16{T+ ]ɶkV^-&{U+8 YSWcQrEEzTCUpKZV]@ &\ hMڭwS(~Rɳ.qTT+h;ٍ2kfbludʐzh5[̌{c 6Zjm: F#Ibb&&w7J;.J̭Wv=<3ۃJTR6 ORct!I2>d't\%GXz,LQ3Ę=b[w?}γoVך :S<`|ٳM\#55{rdY$-UtTWbud#JR[𬸼,eZqڐ队vg9eQɝzqQ m~AYhu[X^CgD E&>GqӨNޔԔk\:(),ү7\ʹЩbJ9U +u lE!~1=k}jy˜1$y06PI ۙ}Rhԙrr@CjuaF=~䓪'Z(ө~l o^ +(>F> +h G> +PXT}ӮFs8+o\'d/xKpgO\ʇOhn/SR>Ś_w+u/哝75( ۙPOV3Trl({ {S;PiGviwP +i+OV?#l(eQV?SO﷕\V*TvqWwDI Gw|))#{%^?mEwf^?Uig׏RO?^i{Q.O~{-9.|v~yv)4Zv2G׽O망p}qজv1Ui{j[yox~enQE>p{Qڶ_}O;Vpa=Ͻ~jY1tĽ~͊r{"8^?q~wZ E & ½~~6 w܉:P  [&bhHZ^?m3[^?[s^~{^pʹRX1bl{~nSc}hWir~ڷ"n)ŘL_T^x~CowhoS=^7[r5䐉DEQ)q(JDR4"%}sw:TKƪj}y^b?Zu\!++ +1Gq`Gu|W>Ͽ VXYעmnX~W׎~ =<׏ޟSb->;#X:>U߂l>UK#>اvF{ϋv!,^xA>3(Fcsm^_ƫ=*k.so|'v~ξ~q̩[sC'yu=7ʼn3GO};?jRӍ _j\<ƕ3W}Ҹz|GV7~rqO_zc+5o>y|qn<|e#_h|w\k~o^݉KWՍS\u@sCnW|p`sC<Ϟ?ՅN}qQpׁC}{ڕ?eo?]۞_]:Ӌ=G_,Qx7=y[YݑowWoя,6>9ո77O{Ws_xxi{5ͷ>N'=K6>>KV{+'ܿlǮ~s{v/GGjs|n;}intip0:뽣/oypܱ.tr }tc&px9ZMυ'ʥCtS޽A\:Ϳu<|yZpo_ۥOٟ-,6N-py6ٵNtel ]9f3=뻟`}7wKϔh,\#g?xhُ3.w/'#P{_ }$<;;m3f=\нܱ8[j,m罥7/~u}'e|4\9N+nzG'[N_y{}<8GkB~Vm|yv45k:ܠvXbcӇ}uV^,_57|s}FoUia6 (h,=O+}?U>h,^\<}8hqis\Ae}o^8oۯ/;^ꥃ߬5>xt%?VWۍ}Lg)k^9NܜvpAy(|wwK{}񹹟yw>7ͧ{oG_Ey'9XݏofӲ;ώ>/ͅ˜?[™K?w^w>yyoCӱG{9L)H8Y&N}|M{rxl>Ug^}yaS-熷=)xb{n\Z_ {ݣ +w|w^;X-ju[O>M7?7?R_6y*HiKW^]`Zٛ{ž|-u.^*9x󢊣g'w6%7mS\l<=\np3 }^Ƴ+ ۷o|JUtuzg|Hcpۏ/b~;=Bޛ}=#pgžwhtnK'F+'N7c''||r฼]p?/<]ӱs7ؙz/ݟ4Pk^ȋó`{;/ G]^QqϽN|'.]wy>6Z8v3wm-_sG^9 ++3wo}ﳮ]ŮnsxZow ū/7c<{/z]cgrn4Hý[{+kGz=~'<ߠ}uhf ^WH<u`cQKwo.:wrz\pŭfջ{z5=z ~ҫ`ׁû5ޝ>U+w_n6mwyGO|̶o ~Wo~C*_W^x2wՅ<'/xّ}|H»ݺ?{B s81:یË89vX-CVl5V=w}Pzq⧠p={#|*|Nڱ|LΗ9ЯFtV'Rǫ~j? _{?v}kˋ^>}ug_=ooϽzg/>{ӛg/_^_9ɫv]nd lL?5_̹7.>ˏq oݰҮ@&k^7Ǻ ASo<ڿųO4{׫N,6~_6dׁxS.}'xye7^r~?+aN8 n/~y{٧{O/=7O?ߜ^z+/O]|os8ߊ!vna8Ct~[l X2pnڑÏ?,ӗs-u߀c okᄼɗ?8RGO,T~ }rw}ѯz.~ ^z:|4/*?9Qor!}5.]8Yͫ+o!W?:w:ny݃;Genѩ>|qfapY7oz^u_-ѫP~MۯށKByAo~|@_wT{ +mZ]v/ZotNsnw^5y?,w-o&Ņᄒs _z}/+gOvyreCZ(49z$\:qUs7g~:/پK~˕OHC/Ϭhgs7ڠ׿uO>l9$=/_ŧ^Qzw{7 Iks+^E~" +gPUlx.~"RשAEVѻaQ0$htDn<-Rwgo y2ut©ܕ1n YfKW<);Y grsJU +^؝W|<~mU]o3~+7ϱ;w߮Uaлs3sg;?S*w7'zW+{Ȳw{k}ʿoݬbϡɫx8;E+?lOGvJ?-So|mu&'{w{O-yp_ϹO??7?{[;}8bДv$ny`1{G=~ʞcWo_r0B3!yy4tُRFy kGTHBl|| ;8_KAZgYó{8|Fϼ։rc;57ϰ_3Zb]bD.g,OFs1],#eׁ,#]eet%r9tћ%#Y:!o??:I[!z3pVó Wʉ)/ ,ޝy_<)uׁ޾[`g?ʣ{zFk뻛+++ݩW:+{qnu§ߞ۟^|vN}ʭvx/yf>i5F,s>^l쾺_j67rVח7V7W֗zSV֖Wwkqiuih,6k++F+FťPhm}iicyҫK*d|_=GO:Q{]n7Y[l..-/m/Vl,>.[rvEn[R7uiee}QwuR͕rs'ݸ38}>?_Ϝvu J{~^7cwCYkյ\:\.OX_߇ 7߾yO_=~vϞ(d߇߾~͋Go}{cjkvWWwŇg?~ٛnՅYlBacݷywv^v^sceq? wtsP(s(%k7K1YfsjKyu+*Ž K-4V/QoZ{xoh^j+nZxu6V7R_J(t*48EV kK)W67tW斸\_鞌X[\[Nf7JͰjtu6 Zޣ3c6F]7:a֗!Z=ܺoPZ]\2 +] + ΐJc[H.^( &.-,7z_MaUU}z \+ +N_]ֽ1[ֶ U>-m>еxsA_)D_F5ݕu]pXsMWTZ]m6m=l-n\fVwmȍVZsqy5Jm\,./ u4y͕Ս|Fcqyemq#wGogY]EF}k"KkKK 87-,77 |s5,o\nvkZ7a}y)]?Ns]\\mo4w6P3[^ "絼ۖ7 `\Y{Uo^!tj1 ̯Uy ~zMGo>{+_0/sq¹g'Ͼxfkћ2ݚzmwHAw/uKXu@}tbw3?V]/mVcew'[`11Z`>` 6L;P)w&@5! 0Ne-F֊`TخLڎ+3C V;Xڽ Fmvkg6n#5jqdz6ZtIPXC'|@"#qQIWt|+HOR.: [tGt8WOy愩g5V4c +8zr Fƪ\3@ +t[Np|n\d< &LQ8 \hW.) +߻ yX9%[kJ9rjSyG`0aa\<[vi.][+i'KnV/LQLᑓ(ϥG= +J\,XiS2z.)UX&/9 Y޷e+7)za1vԟGxl3]+ +c1LIQ)-?:U +s-#)rh%zj/ϣg3v clڲ)̉Le%9Q}DMvԟ+3PSl91U'$0W)(#|Lц s,[NQeLǮS,z|\C+HglFf\O}[Nt ٱ3?ԓSɥ)zOLaؖNUaάY - LdGq #$fצH-:şJ\~F s-{Ce=REzx.g}X+C]L8\:*0l9ɱ9sČ:&19RY<| s3g. G+1[d!18Kui)ϕtF e3DXl +nZ}O Vk0wFEb:"ڟc^Hg3v C:sl˥Se?FVWǩ-")~,}g03Q*:^Ne"O숱hykhDWse\MgSšI\r"d;#H m\c YnwtF]Z1>[ŏiz sc|lZVʨavlWe.ɥz+>T!,)5jhڟ@~.a-aJ3j sLKmTeGknzQl̉yu̥HS(4s(ϕ9;Ü@>Q*̱xY0mYZ! nGi׎]*ҾB . KR sve1a-dǐ(CM"S?s<׈y2*sȻfLlJ2fmbFL!c-T'664jQ-rLW) VAwl$3gLqf`bȜ"<^#1L[vTYK)ƴEq@lP)ZEsc9|1y;sabΜ2 /&b0c49\;)4y2Bڢc +'>;LMSl01Bg~23 4B۲Pedk=l Mh6tE 33<1ؙodyRo4ά/4f̵9Ŗ*@'Xq^SfӨЂŸ}y#70gl\Hf +J9ŖŠ `#SKP0jFӢIC +?h_ y˺FJ<*sk7qԈS̥!3  oky>99;ҡΕU={Ft:si3L/ [*sO憬ݘh ,4E|I tL#<Әg!ϱY?7g rRÙ6̱Hf20gRjrL'W3ZC 3Н"|liriaѴ o! 6o>+5̙? eAΓz`F=gkp9ڙ 'dcMar̖c%YXP޿1RfPa=];30 .4$ sk0tԴeaWV!A8 'vƛ[Ț 6E,:,Rh?Ryu:c6Rw9\m3[g) CfR/&!^2Gbp[U969GuSl4-b#\Z[47aAsK ۠1-6fCtxPO9rOЎ93c,fg~LV5f/dAIy=Y8-]hNx|-\BZ"|!PYu.5gڍ9c!g3kcΜld61;l–I}*ĒrQ60j>DVh*v3mCw6b M7s,0gh3FK\ϙ@s0]F[]o+ǧsa +-sU&6+Lrrs7jB0Y359Sc6b3ɜs rF 1ng3ExPscɐra–jO&ۨfñ`|\%\Hc2Z 0d."ES3FV܊<(-u`9=};1!9`:2Ө 1a2ye~ Ku[l̳ѣ5VqF(LkגCf-Fiy4bi‍XcAf hg;sLDg6fBff/ #m*Sl;3(|ʜB s'2#l̟CYΡf RP6gq?g t2P&$Μ$gKe.S.rI!( eN*ƃhgĢf.Yq A>[fC2hY.bF<;9`9P 0T9$t 9sќpPb'dnQݲ 3kCZRYoEDC斅;$2ip1+thjy4cd3x23SC50aF5WL濊4Ɋc3gnADȬ}9& vq]*<1jBزۊXgܢtJ "GChϙGt5ټ<:œ6|`& әeb03|` wTs35$oGxٷeKKSS򬍚qGjiȓZBbgaa +O"<9j p@:㈚) i6o?pL]3څkǶبDa&16V2_h:xI̙rgnX8 YdΤ\jz^YfnU\6 +aցVelEtmS9&eNMWe&Ȗ36X#+rj97.=Tk{um gR)j_wiL˙3i'/X/lYcBT_]8vl:x͗*5g}- ]H[;91`29 gܱ.lE-̭}v +ڱg16lSS""y.u=D|gtN/zԀpaH"SAtݏ굁)7C AQWΐ涺 0SƜOs4vg ,oG6 1n+6Ǵ\KnAu;jx3_iȐ`{05Fύ rn @ 2|&Qsx̺ ^pˬTX1R)y.W[aE5flX5m5צNwXlN)%!X&֯۽ ġJ7'|` Hktu%`5󇛘wiCC0T.Ex8e8řEDfÞ;Eƌ;H欧et*bcQsl)S;ju̜EW:At'Nš:pPJ3ң!gg4Sٷ1/38]*gZ-rfs)kO3Log3Ш ;TCbF~rƆj?L&j6oԜUѶ4O0SLgcy=$Cf sVg:y2_&VX*f,֫wWhnLsY|3M_Vq396TC<%@HdTQ3i0Qsǽ{FVK9 әURZ&X)}A.UK̊C DS-AF͙zI2g!BgAΝ%BmJ7EM x_%19UVwdw)6RfV%6fB,uˍ4+f|zmѺ)p +iVkA>rP ~m`^@͢qD7 ~Rz%`P'CEx9SbR^J 6_*h|?Lj*J7xm|trE%Y/ +ͧa?щl D L2jqvLݥ4qYQxkg65{cgpW3[j Aߝ`c^of9LsjIG̙fP >T8dQsVJ@p=<son|[>$+(>+Bh Lm՚&i&.9EɓittP :c,?9ft3yIʕvΐf1*f!rB,c,K&+s%|b)Zt3+gSۑ1!iEϊ3Wk!|l-Ls}A@oLF XGi<$W\`үćgU܌2Ls C<2>uwLyiVTLbzr]i hb 8d*kLNSA~tb7EqN_#zI; XWngj _:p`LBY39L[6iѱ@ηW4&1-C5]5kYߌš@L&jSz9J]V73Hvq=:VJ'Hz 9&tEr2y:Efw c=蕚,Fpv6m`*@*>%ƹp3O8@QyӹؕF͡x ;^x3”dP٘r噛YyJۑd8&ϙum⵩:XSbتłǔj]52{n`ft)O?)  lW*EDLΜ57] HLŇg]b~Ar⊫fR'mmHss֙cQ6; C5hF"?t3nF$0WGM bF5ҢGSy"m*b\E@O.F _VoW%) l#s'> NfQsnԬnČd1̓\@#'jg鵴X3LfJ36 |qs +_0ʹRqP0YX\')[ε335f#$MSdBcoFR%<}5V)uWd׎ XD3vP\ܸ6 ;8d +{ӹ09݅t5xJ6Tmx?3G?JGͱ7 k7j$qm!f,%*$68$+&*7+] 9kU捌c](܌. h=35n:QsK=*s%2< 3{an:c¬]]ۦ9=elY̴ՉSE a+_{ +O?Iy6g`g2v&\&Z4*9yI򬝍sfn1xBZG2WAV23f{DG^BiU/nl1!p@%$j֏7 7Qa:9hgBMyg&fy xcKeJ14,7ONޢ0UYlxWϙ72-'D棴[^Mhx:[cEiܴMALjkv)|9184ec72+kl4{.f̽N8@3mQ|L4Ϝ)Un-+JrW5SLLL?hfIs:o-^6gՑgŀZ 3_n, oF׉?Dq̖Df)>DDM0╀ڄh-wK3vp;ftO?A 5?glټ"g0OOT\?p.͟3@[l`LKZ(*2/U36sC Lf"jobZSmJ&<&)TGGşukYW +ZPJYќiO2Wj(fNftPpe +.G]K OOs6Q.1뉕,[؀:*+-nZX3X YOeDr:ܼ0$5-O=Co̓̈́KZIu,. ֙ Iqrn<ō5#f.̱Dzh8A3p9tFAl$sx?ߤn:'E %l cS Z3X:1j':.oҾ92Tjvصtd+xi"gh0jEf(m5;7I3\g1cvgvI\g25cfY5[pyn``|ϙ[q)8_[5gε$QsjF\ȵG|.i\Jl*k$E.Z[[5΍%E3g3y戉z< s(bcΔ316gmv ɜ8ۘi ?jxroT;T{)0sE|L_l)|cz!O~Ί>lʠ?ܢE_9C58;);GiW֣m=߄0k^I db&^Qq`>(¬f.)W BMDX[.`>n;=pkG8ssF L9s(s9&joB'2O 0% + gB,c%4))kȊzl&\=ֳ0ɶh~EADVg,p?;̴EAwK9'j/ XC2-kzW aV]u$r; HUQ~#y;>lC3v';^8Zf4jVGͤX‹fb2kԪf:MSB8XDt/^mf.VfZN9ܥ9r:2gLsԜO95Y<labH7^:!lRX̉bl߾:fk ,dQn I(*:(tEbώ C}@fl5s/ RA*ŽԖu+RRc4WŧJnT^eu YtgxS3eqWS39A "5y}3LLC6ؘ}9vgʪZs]LJX̌ 6Vo_ya8ө5nP5jq|tVf"4e!Ϧ+EQ^46-T_Lc ƚAkfu_b93_El + |qbDza`2Qs㔨5٣[Ňu n"'Fvf$ƥ++)L[.,[uU|6IE-y7g`2Qs{pf!H{=iyTK=J[$z +7C6t{L۔NgN%bf [$KHrvWK=n yD^S&"pv S5/ "jX5jŀ"-khjz8l:$&Օk8E 9z"fAS I|YQ833Ug%j9zb笨b#%jΐtg (,i,>N Mab%c”d@d8s8bʣQ35ni- InIfk{􋕖&^-z1r9.*DD~Lt2CSׅۨ̅M҉TՙX-8:p6b%39Q3.5 Iuңfn1;iS1~)j]0'֩{nO ł3pagFܦJf{ +OuXKƺ H=5++AzY۲f!pv2CF{֣f('j6G Y +v_R%V,M5o$eY?9=p`{pY4g`A\;j0QPMņYT[%aNiaX/k@(]zL7sg]sJ,bgQlTDaGAB:<9 ?|O?A D;!j6$;K}Y ]5;j6Nڨ3Zəu>pvz +9:MjLg`{v5 9ji\J=gN_Nh:Һg`;yQ|U)TxْDܕ6V0ofȜ+u:(aN 3vC yf&pΜX#U= +ɐ8 3pO~yJ,5ęc#pN]8p93U jQs*198sRfOM8o VQ _Øg:遳59s!p橊b ;sb Ugp3M>p"Z6jg$j50a;-jNv +:^?S70D#QQ8[%8>E $29YW;+QsPJ38Sz3m8eDͦ<;jm&"q)@kjkα^O,p9ؖ*jiU5VqHY/30CL[g.j.5ي}aN7g΢da755 ֯e4lR9E8_;s(!CΘ$#p1Ej&gF,o]K̚|ԜX7R/%8gz\8`;Eͤ܈Y WR'p<9%>h30_jM)~\C/]o i0sekى/q5?Oal*0ZgT6:Q3t%ǏfgL2j35g[) 35/F209:Y˭c*IIG~mN ]5Č7ݜk/)tg~Ru=ܥ?BٍiHfӟz2&f5OFK}xsJG&.pRl` Qs=#t`,#Sl*DnQ9FԜi󸭻tB'8)M3 h- vh@";tK "Fs'naԬ<|Ԝ%hqhΉhaKę6?, ?|p|Ԝ'5 5BJ9h>jj{bŪsEUehL m8tH3-T+imōdԬ+6;8s6;;SJ+D6)}?oy_G198FjVԜ1eJԈ}ʔz1*]QiR ~'8ӛyVB 8T4GmFV+jn n~utG) ΐ9WfsJJΥҧ +?b-hV30"f:j&[EzFXUΟzM'bNq|3?EQf**5gE[2#EML&jN1΀J+0[w.b'}OΦ'j' OcgoG͖D[5SS &iZ| Nd^ j9Y=cz3O8 j6Dď[5bܦjk3U3qz٨z_tZj8U;$ŝ8+VA X율9E]7BH:5w1HH?a\N|6؉΢拱xO6g`L2jο:kGpIDZ^gL +͒IJF;_uDYtI⸗zf^8^.>8og`6D☍tGͥ#$١j偳2Gesx pJΨ9xL̿$j&p,73+ +ו/ٖ«ۣ0#pÇQsM=YKNi"HM2˛5wL8p֧d35ՕFYB;=QsͱDʂz1Yw2QY̏0ЄMTfsb H#N`ec)3 3`-I"K,[e̔Dy?j'9H1n["͝$o !0~s]5 X$E:E 1N[,:0g59bmL-vEdcy1ǚJز"jgNRbK0Y~86pֵgiΧԎK?1j)3ZȆo gbu|F喕T3:*5l=#3s8ÜTb{GO7{̊cRmj39EMtUNz$?XGC崹teumF mPiDH36V9&"DUT0M&V\9hVeU᭛CL I6x"m +ݪ9V-JXɖKk-SZsVU +&Y3#ȰnaN3gS fj{dLڨ;suECP o/5grzR_L̂yGͦsƄʘP ߦصӒ_?M9R80AlZңf=WEM>jv2jc숽 ^`z.\^Y8_DzcBQXJSIMD۬3&:kJyhyDݘsl85s}#YWg#q1G2Dkदbzy)_O}+/soB!p065o˨9tgIY\Q' sᑘs5[LAVyDΊ&zJ:7MO8iY\ҁ3L-pYl-wH\;4'8bYͪ՚onY,vt⛳HԶɢE}3ɰfXIZʜ9Xwm$7;{EM77P/ec=~eM_є"vF ` A\5jnО⨹4-+5:sJ,p<)̱FAz朲Ef+=~{x?W{ 8]rl~L {\/ЄPmSy)NXgJK^JqfX +!96ka6{"\~cKf~Oʜ~ pF @D|-[~kzKk +slRb˙Ket{~cj8#p0Vvf[i"zEDiN1MU?|3g#d;EYĬi|Z[D`̨YיZ>6V;|٥kAv -jv|fDT5 fM\t&ˇ"IE{hUʟNz8E8*5s0 wSf=j6+sf,*c'd xu4<tKb +c酥73gQ jށQH"d*nV3\nce,gֵXWEtsoKVQY8E8<̀O\ﶌckqƙnṭk0 +~Nm+m*kUYQP08Ü`AԼfu˘MrTԙu(?D:Dg^{Su.ᱝVIY8E8$)žu1S 35v&֐^qfv$p6\EB>/8(OV蹎V=~3*ٻ3g j.$^J\ɠ[K4܊|r3k ͓ \LuJUbK~QiJ1Eԕbd]VE)9qҶ"eS#R>(Li2s9G~K>86QdxR空1S -M"Lem XhUe{-^ 0g03!jFԜFl]Z`GF1Qp}XSdEn\^]/Y|OphMY*֪(_Ga0e jF|ڜKlfxQ1g՚RmM 4ۦf!6dA >j451ҵ9JmLլ-8;Y Blo +ojlbÔ +8 j6c=kZ3M%Un\ .̔3v1Zͦj{{ )1+1~_20k"p895؝)f Ivf屴gh-sWnb\K#$)['Jm䝩Xmos)R?mf-,b~g6jQY Rs'h;tfcBxt(WWBn`l8#FzI U[%v6g3l;;/jNoUQ)SYǙpgEt;*gvZRQg%utGF̥Ļ<g0M j֚j̯,\tuScy,7d^X83-HTSqj9uƶ"+-z4`bIN7 k8_Ga0q5w5WlU.r,^9]NQ3߽By2c.OxvxI~tt]O3g5sC0 YooYY8z)3k vff6~M# +)%< YbST\άPSXzY <4{A:F s 9aV:hv.ئPe!#a27Uu fEa{eu$Yp~rg=ӻK:m1ۏi=)3<"RD?И qpxbQ!+^<~9?eUl'XQ+jˡt3Kp,ڐ0s0O'5r!;6`Y)cș 3 +FגAafWiGJ9CC >stream + E>Kj.rV4Xj^22Ķoӕrak[ƫ-'x9ZF أ\-27ΌYB @1']V芢:|(bwm-[|lnN"n%8 IC\ $LYbX !gnKl6\gpÅfvO5[;`΢q3ܥٺSv#YA@Hj%52„3^纽w]6#3%iKjgrȜNJݙOG΋%8KpAx $5crQ$ I)=kI!<&~Qyy*9lU\l#yF̜CB궜0Iϰ{YZgjmS΢q͓9ύgACR,yJd:gRԖeF0%P3H]m"Yc=D&7{:Kp,YhHjfvYnfM)$ p}= %}8.N?lKnp;N54~мClX=[Zcǭ 3,4b AI͒GjJm"re$u2Vִb.:8bl"32^H%VQс؞EӰc]떄$8KpA8%$5crQ$ q"jܦྃ 'fv"rFc;ih' |٪0܍B _|,qH#gQ˸pk[ l崴"A>gId6Q8_ +㞶?g0F GܵM&]X2:4UśpNx0CnjuTf ;6ύƮ(Q BR3F!E`"lCF"j&L7,;ifDZ NßDlՓq3wZؾZ[\M<^\ 0Qk4$8 |$5;l*$.(5 ( RMt}Р8pr-3sf,9Hg &ڋLp%νEs;&x0ꢢaqdvܪTgla7A> +1 (i[HӳR%u;LU +ʊ<;ly'2i]7׍g> +1lca0}dwj 3mG-s/g01"A> UvvᘯYX_E%vM9wRM2ED2N3;cz}/l[?q32(n zrw ؀zhO۠nlfN.3cHpAHj2H71c4>dQ \mq24Rb7bL=#F Eg;,Cfrvv̷l@IƱv6yne,I쨲ψ !)eE2~ӚK1"v7qf۝)u =ȳp!ĩB:/ޖ=Ж.pa,; + A&ۙ}f.3cHANI͎ayô% kI!ﻃ8AՑ7. +;83VZk蛲vc9[av, GFrCuvji-La +m#E$8 |$5ϒe뛆f nVDΌsva4 +c5a.ņ X!S1koܢ KW˖S|p~} ΂ f!C.!, +cf9NTZUP76W*hv#-(..}!M3r~'r4/ˆT$'xeyظumM AEAf!5.77u)!vUd3|6d;8*v*i5͍F 0,+&Y BIL°l04!'1?a5T"d3sdg$lKnp_.njfnU ٣2_St,,@R3ψ |͂* +&"69Mg>Ri׾_u¯QVۍ3{S{.wFy? 4;mW ڰ03ˆcy>H3e6YgA1. (WӳR%u2EPey ; ynsADt XNMf36[z/=dvc<#`NtX6Lwcٺf:v֏ ým.$YYYRsYt-fIv ~g 95СRS~E9k ~yk74!ɮO\摁{ZT4H3e699uQFӸ({A^1"g $+ݤRYJey궹EoD3ը+'lșy \Fqgxl3snOl皱3zV;UAnƱ~4B ;pG\ptvoۥ&Y! wi@U9l?M9sH0f :1_fhƮTy9c $^jtu{~$ ?{3 h˵e꺜}t3Kp,f!C.!)_h +7g\K 6/Ȁˆ/hϼ&5#LAgϝg6hƟ[ΜZ$f]o?3hmnt&d+rxc]?kAmE$8 2$53H,aAnT  WQ<KH3WXuy~ +c9_֯7[D,H5N`:$Lg;g ΂ 7HjYYR3dC,hry.&uoS>FyGȜlc"k1zVI;-m9NJtseMjZp&dP «AR#>#.h5 ("~)&}NjڀsL0Fj$<2]F+ _̘ ،^{uz3@r/ oɇ5V6aJQEmis Lg;Ϋ%;, a,bԌ7$5kRh +C6g\K $<-&vr=![Y 3WK@ 8ls0!g;5s(;;|vo_0 +mO%{nn{\:$YgAIͅLE82ȘF+ C니M1%(%!uog_kKvcȗxFƙf#Ɠ,a<#ss3jtݕe #S* + ['ˉ/lg,Yφf! YGF]BS9=+ZRg`\؟r轰!mN5t3}Z™-%z95snkG55/ˣm9&qZn%B.]$YgAIͅ@E828F+ CXM1(;0Z-I=~xE*B99xr*{n9Iz,Ml{FgA3wG qR3* +vtzn_Hq~ߙƏoOpegdΝgImIPZOY I͵4iU1K*2SNs+;DhViƐM I3')g36OgӍ_Ku1 qץbg\%Pfr$_V,Y@HjiC%5s:0 } +c-bRs)l!7g"g6 Ɵ/S̜Ƶ>%iiZ-8mzQ/s{pyW_=?- {Y[ֱ eӜ/Ԣׂ0[֓z,xHj^%-`|,X +r x@؟̖3;Su"(|^7>:ǵ{0 8ƍ?s͜/O^!8[Omfe7MUkEӾK9W˖\K1A +IOC\ D[9sd*6d"deX a?$5=#<̜s>/k"9,Ѣݸݢm)!ZJ6`sڍ[YzcG9Kp- !OhY]Eѱ!3ܩ0[`RǕTFGp,nCF-3=q{4E[i')o/8g6 <̙jo`s(8c/͏]"ۙ{=kglEZfzcZ ΂ 08B, +2jܻO4:.5#[@0 8ݎgrfca8옳9?q mcPpFlzEKc?A6-8%hes[ޥ{t,»CR3А!EP8VDC-{T0:=\<tf1$hZ?/xʙ]7<3sΎjp?8;G9WX?%h +[Ҟ +Z6Im|-g6(ֽ?IpAkڐiUrN׆TmV 0 +w TQu2Ml ؒ?8ub%cȜWj ;ͣ<[VF"s3YM aZsBhRn!ղe-Wzl$8  I=C\ lY IcQʵXWӳŦ2J`oPj:?395yv̹3 +}Edsv{ܻ?M%21%Yk!eZ(Ԗ/ׂ0[fd|,p4$5ׄ!#.5 ("5?:*d)q)R]II&xFșMd9#}#s9o{yΠl8rIƟ!+i9Z+r^~X-Z?z]ٗ,p$5g (=\pd siMjq&5WnxF G83sN&@\3g<,WsF]#nˉ7E[i)+"ZL%8 \SH0,\8$dXTt0fU:B}(:I։I͗xFș3`|Tcm`Mmuo-8[  ύ}|'cӢXVܽ(-[|lnU-L1Adoo*vIͫf!t~`l"sCh4@%Gg{߭3I35-_aN*82g ΂ $5$!#.5 (sA6)9K׽s.5&RqB*;z`R3%1~<0l|!_@2g>qNpvIg!'83dD_@X- Z? fS̾gAݐ\0͒M[–3 <"5#{,LRsx<#af1g>as/2E;~N gǙ)8$/VG Ta2khR[ _ :7%3ș0#FsjL˿ %uW(87& ΑˤCKeW˖|ޥ} ΂  asF`h8sdQF6Yi =*V6;Nj&9@Wf% )Aș33ȜoqwV݇0f 4ղiMjkA' Ax"I͖"9 sEX\E jqL9^ q}~cf|Djn7Rs/H820;& l7~‚s}7so!/ "\8~-]H{b%8 -猄a5qs3CGdm%̖3VXj޴; 5gܠԌ2Vg`=Cdl μjXp6v4G5?fid篚MhR[Ty,YCR>#.5 (oA'!)GT_R؟awvjr/ѹ/3 @ΜA|o1'#s_8S$8%ӆg#77*δp/E +ܖ/޻/Y!,qm>|hVՖ$5,wj8; n 5buB?nr-{%N:3̜/K"`QsRv\U*v=ڛImIPZIgA;f$5sE-!?3( 4N坝HxF73gK9!b +{GIO#G +H{s-Yw,mԜo7.,w(c +jo;iSaGŌ4o5s~ yup +vjo&%AkA' Ax$5gӀ<(bnA! )GN_ue`qb7uϤ3w`5s.jƳ+8J*8LK_mK9}|]/Ax5F +WS$?y5MjKׂ0[KxӾIpi,»ARsaq4}g!0"b-9ml +5ٻy<'o ;l^`ّ̄9CΙܗs6CN,1[,(:Rłr*m| +tl;&Y,KX̰f]RMAϴ՟3َgÙWsl~d_f^ +μrkZS*8.Ax&$5jw0~M{Y(c*aMl7\s|<Ýg!sek +60sg,YQ ΂ < .YlEFZꙘ)/nfQ+짴_i9?syUpƕe?|Y++|MjKׂ0[KxDpb༉9?7 N8PjX/s(b+?.M3Phb +=kbH͗M0$5gW-9W5Mg*8+\hl _8Ͳo K..˖|AMyN6P Of b 6hHKB%3 >}~$K#~ƜO>חс+ܞ[JA%iGn$8gAC C5a`kVQDU~]jg$a\ Qe7@.5% b'`9G5 8K,#K,ppe!b9gںBSms_bAFHj`&f^E6}Jv+5g#cQ{筫yZV=z* 7ad;\L["8*, fIͯ$5llR5iuMR=`_QNqsܶ rғ\߳МK Km]h)^hUe8Qpâ  Il@Ѥ:q>Tjv"̈́GHSY4bg^eλ pη^k\ Ku0s}km*YBRs͒*`r*`vyga_s}sB<ܲi״(r MmZ r,»@REP4N ){ǩ8O*5_~-gwW_3.Qg 4pΏ]qWgANI͵5Kj~I%R3(7:ؤIͨ}Լ3`F݈̋S]ȟG-2n-: ΂ >$5K +_dEģ.v=EjglsjNfZwu],KBRsz͒?O;/qEpn$8k,vt'Y'@R$EP4Ng%ٸx@yeg7=S6Ax>DjѸܛ\ղe-_Tj3Lb-8}b1rzcn*g>`s{|Y~f+mC gQR3FcOE&a-.O>E|}O↜P0gwTC3ϊ_- )f5 +1'#N[h | ^Mj~D`{Ӱ^Z< K[9sȜш]bIflI6 ΂ /5ZJ[nܵ`a8{봐-5y͹ERHg}nbNvǪ/'\K gՖ3Jt;M, #fL\ߣk7 Kes[ ߿ԌyP*3G5laJpo09=v\-17@A8%*5!j5II)ג:d?!)ز$cMi![n-5ͤμʜãM Y)ג:صYsՖN3dS.8 ܗ[,YW!@EKRs8xHhL1KqorW˖|AMOMR>2g|tIp~'f`ULÂ3v\pvA:u +b΂ix=0⼵U4?qׂ-[K2r(5wpi-gм3 j+4@ n +9jKBiogA^/5{jY!y0400kw,څ\ղe-_0w)H;,=\j_5s}P]3߽H_0\?EzΖ,[Njd{VgA;f ǒO dMjLܵ`6pu ۨuzg_Q iͱW[237XAxwIjPaE4,b!83ua)׽|lyn ] +! } +ƷWwsf[g7ϴT_0\yϖ,^NAxKñf-d\BS'&5$Ze:["Fr8,5[ *aOg֚cefjoB1eNgi+W CfN2BjvYRsQ[jK +rW˖|ޥ [j`Uj?w9.X n>i``yOіqi-6|AxY@j\Ffd%^eq9$*[2_Xդ摟*5s1kث-q=bJ=4ZoCplY |R)C+Y!bЙ$Y)׽|lyn ]7{$5IahBaΫVgZ/6):;9.}lA8'-8bB/9|TD9([#2]XRr9Ip~=ڴrkדZnZp(8_gA.5VW]`ys&ͪ-iCVu/_-[F{xzIq9\;g7ϴx_o؟mo͔9lf٦[θĜxLj?Njvè\]__j)X-s,r,r>yǺ9Ip~=ڴ~ mQ[bKB H={uzos gď!ǏEjKrW˖|ޥ` >Rj%,3--a'DK7g-ybZ /W{-3glnE0ʄADZ8|TRD4#%[C",!REf_ag6zòL3bHrGò~<,“Sz;e,1ΤS%UJes[`xRi59./P$8y~ ^|)v %gA^+5[!Rsȟ9p>VV9#Re~ `6pu5:EN&5\3gk2Y=ڴW뭫c\cwL[6Uy,櫛:\j6w 6b諳PkvXә$ Y)׽|lyn ]?Լʙ?;^gZ N7s 36#nQO θ~Pp?эKpXfFmEJۇr[F@fTyC> dP~!)زEjm԰ȹAgEg6hM1aHr +Y<gAbRo=>Gjv|Ԍ!y}dF +~mL1p*\X_-[F3U +S)My9KpvS} yЎs7:fr6(Ҟgs#6ZkAǦ{z9>Y(0ܐ(OCk,o`HB +<}\W^0l]Y٣MaSu<I!v|iӚHpał[$5ΤJ%1Jn1,[F3= +S9zfL%8 ?Ip< hg-g}g+5s6A8GIRu~},ǚUhLʢmHçCk7_0[N*5t4#XQ3f+W1|mZa/ 6f.8O $8 xDTzԌDgGd6,5!y}d0VChsfSR[ ˖|L>~\/_&|_xXЩnQ@pvRħqs_ñ)>Zj4cԌͩ"yfCjGvĨ,ΆD1|Z;$f{CQIRFڼghurZycQʵ(rXa/ 6&.$ t-87X7m%8 'R_$5͙)Ns K[p|ޥϑWXeAׁs_M 7l +Lǃx\<&5Q/!0m~ RDd/ׂ-Oi5~YsyE(ZRg`9wV?_1[ 6lEyVm%8 PiGq H=6gxԶT)s[`d1Լo%8%0Ip^ta@K~Upa,±F?Jj#K9LYR YyR=]sF"mLV;k=ڴދ^*11тuWt!8&Kp-iMjFilIjVڒd-HA{b_Jj~D Iw ;v^dOsH|(8OS,GI͘03)e-Y,yתH[.Uϫs>gg6 +|lz_u[:!_yo p^SjzOj6'd6yp3kȥC^m2W* w8A؄IfRioaWݦzwkMmRղe-G9T\ٗ'%YK +θwsgAV R}}Uefs["nx-iQ ˢ`k?B +|xW ] +&?0';K[!Y{Hu7I͉)mRղe-G9Ԛ\?KEOAx $5wapip;lIBX 3 _ l u +q$(Җt): Gڬ +Ks!8Hp!HG|,܂Tgyg(=qR[c&|lynQU&b%5?!_sCu>;]2!1vg& ΂x|u fwJџg9RjƄqsԼ"'Iu 9[[.%\ХyOe>!|s.C{u]Ī|Q: ΂ 0N&5;<"5OK"xC:,1+[Z]sԖ=+8 _-[[:"8+&Ir !y5ekjn`.؁8tדgAkJ33:'JgIdGw-زg.98N9Hplmp*rA+噞a9]f[{lOp)rv + +}"Ip"R*5_Ճf!u>HVWԔ2ge+1ͬΊIRsCH%8E^SGux5+x;zz?{8{8f ΂ ᭥^y9sRj6Ojvq!糤f2"l3T'I"$8s\V8!KLʜQ4ǢVi\ +ytܴJ!C6)-m,Xڜ]Rղ!ΊIRwp 93*8ë^ŻWϷ7J= J}R3;yԌ!У"" !m(زg6(_aOQHplmpZrA^b9uEhOFy BG?B ^$>AjF>h60P C#AN_ڜv vfIͧWw2o"_:*8ë9 +^}"QƟ=NWpgApl0|̒Xf$x-,XιW2g~T4mVcў0@( ][nA,5ws00en$ZsPAr9Qlg|8(yu.'խ:൹>+(a;p-Y>2aP,,'g1yu6e%5/k jV8C&I͏Njlg δвpMc9xd"t|E:,ëELj&:h>X%0:"͙)̉Ng;E@ κg\-w|uk4j~=2!RpGM 9^Jjwlpn 5c +W]D0ߛE@%5/k̘ Uahv[*sKe (c6L̫' ΂ l+Ǿkn\{Z&j@BR>9f(Bjjڜœkt3Kj>i\{K垑neQ:Zܚ=ʾ2c|* )-57l4!+Bam)QcԼ% v'9xMs`Zh,OmܕekiAGAg]X|3jWixsΓ%͙)̉=lg|''n˝#_V+HX sC컺+-=:>Dͯ t)G@A͘%5/k$5U{Ў˹ɇY-^4s6>Kp~ (޽Ԝ0BOy!939g8̒? IpJƥrWʲ5F7.}>}vLx_yEy@j80e!ϞrՌYRIR7ڀ7 K$LB8sљwv&6}|:Tp\N7tKe9:L>|BKH{lŦ0E0̒?&Ip}KƥrWֲFgL[:,+8{p ΂p|Ԍ$Ԩܵ`˓ so oOإNr3#2+s-gAXQsR3;OǓIYt|nO3XYR8 εɸt[%V\~RZ;WN 3Wj) s,7q}\~1y8b9{4&5w-$mƛ%y~l.k&iȟy d3.YoV'R3s|u@ɂU,X*ǝUSYRGF7 εɸt[(]XZ6s8f3)x/} |#>\jFn ?#nvٸXWQpGhua@ @'Iͧmo%o[flվqcv!恘$8o51̤fDBCwڢW,,Zዲ- +s2œ0̒?8IpMƥ`UYx >rH-hٌp +Kp~#OYfȏ6Q/3fljZeG#L@_IRm̛%vxyUV4H- gA  !o +" Vrl,y`8$8~f༽Ϛ^ [74pv58R Zv.sVvF|0A`˓ӅڞO-3(sfh.'{ ΂ ϻŲבkU'sVrlQ '2̉leMR2 ΅N-8?b ;0 w6 (#53Hu[2ڢXVv.V|/w i {M$yْ:C R{?7rA|/Y>B淓GWAǣtSG&âLRlxfz>GifvHi3RݖL5(Wi]|}!l~@_IRC{m' ˖Bo\h.?#{ ΂x5"5[jK%eq\ׅIj%<[ޭgnh$8;9RsPjpOjfKj$5@z $yْ:CGV # xAA,{E9dʎK$5\׆g Rl +ٕ孇 ?\dVIw_YLQԬxm$yْ:C|:H +yIp4#[^1팘a"*H2dN햚9pT| ly8^󙼐 BR3Kmt\\CR}lI!o!LqM=Vp.oޛgA8+ZIjnQ`j$5+Z=%8[KLF"A(^R5}zԌօ*I5$5+T{m' ˖BT £q8 +R3;gm_hQ0Q`GԬ8Hp|l-] svR`zTylIx#YAj'Kpm a +zBI n BKvӿ(*qBO).:8Ǜ++IjVBHp<^Vxqywxz8HG|>ِ'li~OYx8v޹ 5} a?z|v-g{*Y^'MGIalB)..8E &ٲIjVlbHpԜIaj yfG}͊,0Ij>Nw̬n{o7 ΂8AT:\ ;hQ),Qi +_PjluBRI6+$L8ik&.Kƭ},oģJuB%6kဍԵxD<*-Y~HpAHjԼZ&l%8{,Y|Ax OC[j6N$*-Y(Hp߸Ƿw,/I7}b=ۗԬ0P`/yܟ`ogAxy IjV +c$,yq/ӷw,/ I͒Gjy$8f_W̧7 ΂8AԬFIRy!YH-_do"Y^%5vGR'[~ 3~$8 KqgUjf(}@ܙ^FjYqpHp\j͈S J͊5ǽ f~ XVE 'QFRL)%5#'4ЃQ$5$8Kpeܾt ΂`8kyԼ)Č}= 1aCLBhsp)@%8 CqRsK\K !/CK-5QnQ|AuJͶj^2ΪP%8 aER+5.V8eX-#HK +fdy*YKp[gd=;eű/Y')SCbJG:UѢ2Rs$EL 5gjhCqVeE-÷{pn`A`,߇O!JMkL$Xq{8ϣۣ;fw￳P$ň6nHpy:Υ\ղ@؈ٗ,O 'GAi5d70ll75ؤRuѤUYpV}fE-÷{ `(A`,߁I#U|S( j3[pp;Gu6-ٔȤ?C:K=~~mSGl\q- 52RT~9sZ?}؈ٗ,O ∤'ǑAyz8솽R +v=hqRs)WڜI?{hK@$8,j/YQ8kDtAdVi`\"nR#ϖ&DRs-ռ1H?qr_q 5V=[c,Yp^ ܖ8G) +}G[Jaٌ<=e%+K4,pI͖Cj RohB Ϊآd :YǙ1ؒFRsvpl=8Vl!# z"E!4 6~sm~!uJn5Ip:'ᇥ\ղeD4p)f_ ŋOEo,oHj-g8$F{>47 Rs+ݹ״IWܛNhX(&\3pu潎A`wT$8,juKaφ% & ΂(Xo3,ٻcoղ؆!:v yݘRH3 1`m)5fRy9oOÝ>u ]K@lm馐NSK@a't3Kp,?))7 y"yMbQj_v ĉӾ;(:W紿F*si]CX-5gQ˸} Aa}ĈR{:=%{ Ί1*H2_HQ@%=y9sXy2N71g-sٱ3yLX9_-[Ɵۀ?t)f_ ňĈM@;ˎ+?yv?qb…s Ė/AdΌr/s7SwTpLIX-5gQ˸D|`gA8 +琚Cʝd6VT(tRjx1GE ;ˀ.LAڼ*8ɜ|Rz^]/+&k3gs+6 +aC"$Y sWb5dv3PW|[Jq[W  OϹJr:oϫ}YIAG̙Ǯdv\b[gϼK1a7Nk=\} a-f1Oh6c|oÐaov0_hIh /6״3o$[i yG΢q[TflhPm@:Ip/(Hjn +a}ZJfx]؇ȚbG9.[vuM'ɦ1?o8H39d_%y^eѯFtV# ycQ۶7 +a){,3c$Yv9UIla<ʌtAYg@ˡ⛂k.?lQ,`9Nh746w;hsvq~k=<_ƙm_e~y8i1"aJj~\M*Jր񆍣hO]l2"tjzǀҖ'4XNA{`ڼ9gx'σ]_V^xeٕŔcdkdkPr}W˖yK$1 ΂ecso'5;Y,~3d!˹ +6=-거Ca + ;12/И` +m6cĜ7Ew7ذÏşMm)/0 ζXpuQ +8 s~u +l= nLPj$8 v JR`]o ؘU^21df?e@O\8{<3#mys81=ՈVv'yd5eE 㴶 ZOl/&{$8 0iFHKjfY\`X+gٲp7:ĽQ]yv!v7_Y ԜFi)f9;-Ũ w}nl;EX w,j+a/z>ܘ,Y6b_73=휰RTpzxW<$ϗyf3ȓNh}XGh3VqaފcsX&7Ntm{YA8m^war}W˖0وٿHp5΅JjւWssn#!9>5>ИWNF6_?tRf] 9Ux%> sEЛortUT yG΢qRAC\$8 9s8K_7p\R5Bґ&N}~]*$ϝrhm r'`_ ~.<Ȝ<3^%èGZ=9 yb50r}W˖gla?\$8 Bq93?N]#6] +n1^S-O74'ִ-%'ӘO`LJ1 pZF(x޷WWpO0njk-C%쥂0[gC6\$8 BqOI̓n8_%"5+>GooC6w771g$;( ք@} w2gnƠumw٭e.Sjs[.X͞%8Kp^ n_R3g ]?,χJ;U?" +y]6+'i4"vstۍK?w +Ϋ̙sHE3ՌqzAxmB^IyxGȓMe~&ZflhpcbgA(I*)ygLq LS!Z`3]y/3*bCÞ,~(W +|? _ 7'8g٤G˯;B/>:G/ Q^p[fkIƫ>߷50%8 q,NyW{cRh&oܓ!gvtnMLkgFisO܏ksNp.3g#,zvƷw:c/K'Ζ!s5 Oh52n? |-4Ipֻ9]}Ƅ[:qhsk$q? wmMsq)uܾ}vϿ6sّg;ʢDwSntYV\U<_" ^e%sA3Ut L ܖߗ8"Yn͒9[辘aYG~'aYg dm&¾*TbWLf{@M0q̴ %:ǜ/<;)tȢw}6wʢɚ?xZݴy;ZS!sB*Dgˆ(u!B_W}&>m!" ΂lݱCә9)o݋NsEЁ[\f:|(o~6_'W6; +?o_cl@3Shfԫtz+\\8ğ_<;#\ݙFeerdYMj -{¬ٳg a6Kjlrƕ8y6lpfNIqy,Pmۜo\7U.Դ>@׽}O/$82NyvShǢG$ήlj*^ϛs͜3|?mTN'8ZftQԬQ `Cj+x?Kp8g硤q]jzZom!5w]:?GQhKJk[vAC+]:.П+aЭ&j `';ٳg ³ yПEB7|+3IBkY VisV/ *t&ɳ3ĭ'CoxQ9 =yX$tPΫ| r#3 awb;/ؑr~&-rN'D5(qcgWvTØsgƨC7ƟgПEB.=VYWg !9#_trc<r`cv/ $8obE#Ƭ]&Y@kAّ{x?Kp>vv(tCc>*3٨ȚUז=ʮX*d.3R?n'Q sv3agyLoƱ1dюB[jyy.`q; ([_mt" )x` $8 I̓><,&O\Yw0GTvzwĐYin//p9d3s@vfl/}A! 2=]H߫ttEZ|st;hg %8 Of=;pNw^CkEn"Puw9bn0謡zOoN8l|_lWgy +m,pa)<9y ]E; :/CMBW6.;?9?SpF)󒲲pvZFpq7ų ̉lg^AvSΟr }͐&Y Hj7%g$tMIXAn>p̜v#V4%6@;#Fyc>ni\H b23yvӟBwcIpr{3i>Й3;9YK[ˍA5fjάMWvRRp6+~,| $5;u_ +]W|Zt疷zԐJTd85҆ +ޒ@Nm"l_2?S9_g΍yc|6DNp|۵9=Gي쟽cΝ3MU3SG ȨGql%LFHYf +ley θXf9\vNs0Ÿ_͙ղm9V"Y85$5;iGrN{^}ҝCKF|T<]-^>-\>6i6gUeKðnI'y.Qh<ȁp4 Đ0n0??]Bk`N Ng;wSΟr }͐&Y8/$5c; ݑk ܩfÊe`dTΙ5ҢLh30}}LØiI-grv tשȳIvlбP<D0<3guȥvf#ٝOndNjs/+8Os |x{jd? 4|rl v;SCR RKwaulr],f"n|u[;Wmcdsݸlw*MEGg3=F#;96E\t͟39#ϛdgfOc!m>|YmXpzf2ϓbkRh?.vJ֙El4 !9ۙrFBG䚄e[N3u}ٰIqf$fᒜjrbwؗy,l:/7͞nDsiG Ǜk>!]#WV!!oϡ\gtsv` 94"qʎ"|׵jάMpׂ0`Cg6 ¹ y%iz̑3Ս{qGޱ7^5 Ȑy-m&b &gȟB[3H[;C8Pk35#:Xsje?sE8 muPx YqJxn*j0E0Ȏ;=la Mp.HjGg`ж[s3)md}B@{ygПCF"Ei3Έ:9w܏m eeND +k2 ~Ip^$8 gWg k׬5!E|y ;E^$ V<=0^cwHDft <Y"H݉h?F{qGbَ̉h3S $8 I͙|3$,)kG8w~v8mGzfhey ~s>]n <ѝ?V}*a~d"mC=CȟQ|ٺA xdg<u6ʜ?gaۚvk.sҺ&9 7n@^z^fS@R rR3>]'fpv'm"u~A>!Co.K|}. Vey<r_wY=Lf .%tV<j,6oRj2ܖE,7 ;CRs3o㌄5 aY?Azo N#9 mHko*Cp(Ɋ_to1X*kR~pWv8FMI{vm5sM|VsrE#7\ ڌ2.6dǹzsvF4e); ~sWvZRrh+}HiL9nuz1jW#EQC >5ܟ6zT d挿!.Nw |,YԜy8#qM²|?oQ{HƟL9?&pd[.ߚ@߽w/i`?p0:=.gǺw["=QhYy&8a/˓;KZ@au~ɞ2 i'ċS(faZ̄ 7dXfIRv' +&kp}Kl`H"7NUx#1vX$ռ Skc#l#1FZzI5$3^VF:`׽.^5%9 ٠yU?Mظ9%9[MB d9Oy=hˉ3y܇7[=WlݹBJ=OԖ3"IM:Vѐ-3v&Ts|T0WC +hy7RlqYǤzQ~5DoH +m9\l31%9y^DigOu~prMc_gy&Ք+3yȷ׽АnA!-TN`GIwTxZ^_rأFCd rbZنjT5[y+ HGK*m$#9g!B"M()^OA.FH]`9u]%PG?xyE><:Y"H"#KFX>pzi[(V+$վ$~ +)nE#lC]o)Lu&sv9#s&-Ί)re&gy&N( 32acw1g9q s~ g%dEx=p.ҽÈ$5ܫ? R[bŒȵ[ڥ3<]eM{,7k;Imcd$.H[4+S8ܻn,AƟˌ)FƸboP;dƳ{2U1Ue,63da cNrNh'Km2pV(#ZEL4ڑVyq5L8τ2Sͮ*qI hmtĔM[ + +na416*r|3Db/[QD7yl^EW}F5:3( NB5is6xCa%t +b>5 6ܪU!K?"(O˜K(<39sNL8d¹'}¹xpVP#D4~Q[RbMG:2dHU6Y B2SUfuͪw6DIEcJ6cM +-ýMuϵfg]?l}@49 U<ÛqocWcvABWo=lTl6~F&s^faCmxf˜/!ꨧBD Q瞓zTE'~KL|ꅨ1-3uIuީnGwEݵ0mv*IkU҄3L=$gn4P,Pag =#JK Vj&P}yfUU3?TbҧWVXT:3gGr^ο 4l!oG=UTMWM|~$#@2*~KL|ꅨ16y )o 3SoZգF޵#Ή[)wn+=G ^t]^&i1|޺%H2sE2x[dn}|shΪ-J}znا:xQ?TR LXM} s^'D knIS5,.unp6g8ᬿPwQ0Ql;UUXόY="j5I`WfyL5q]_utjۑ1լцIVw9cXgnGTM*W!S_ ,2OxĢM)ÒE|G'mb dvֽ K?a:Kus_$gZ) +5&wVM|`BQ@2*~KLVB{k2S@f9r[,!B4uqbUɸo IU/d#.9'GQާ|͌"YK)8- ]D\>#_|dx̊M(1dg[֧M(Ty$S5Se,lfUZZ+8vCWh +jDZ_mR'LmUz*Opy2Sgő %Ӡ!a[N':wQIub|lwHbRDHjbL],?OnL=Qt$D'xZ< +BjLCǿ8&l~s{0ge9_ϙ?Tq4ƼY^M +͊Z#KC¶ȄC/9 8oE{"KFF/ǿd<CKɦmG=Q$p[>xZ=^0&3<2S͛.KcPȥ,rR2GƓDI\hp$jy&N8/7s.rk\5Bٲ 铦G3Qs3V:2ֿx'$ j|I87IC +~'8[ubHTOo|FN/u.`wlgL5o:O7ș,w;ARlkxQ %#r[MSn"Ӣ:6](iXud׍-%+Bd !؀99'$ͩ7?/|7I /K8W`׽z%sEƾ.qIw 򇉪AU¶yH<3ݦ?S^ 3լZ5qavjrt\$ѣWQ,jCdG ynH~֝Kd|Hڊz*Љj}MRͦ.Oү25"t˧j<6΄3z  ,׌& ؽjEU Fl>:Ui]}՛m RPKL|FE1nMfykd7ݦVs\܈:rzW$ö7EǽѨ"W$ ̍_(L'\ )w펄N s-wq'707iD7}L)WH39WD$sTm҂;Bڛrꑺ&6E{xd߶3#ݩ𻁟M8`*pmM8>Az .4]^A%r5uG%&t>L8oQ)ϐjΝdˆ9 +uu4 +Wx z99Ꮬ-L*CUI D+^_h viJtHTbm-iVzhJi@ѩk/bt?6.TRs&=Y&YJl:mS^z %ϵ6prRf9rXO4$EzJr~r7N]ԏӒc 0:uMq2*Nd,".͵2jMZx]r >!qծAGQ=[l݅g+qTXT;@~I&: gLۥ +Gܗ&N)ן?-1aYgyMVd]'.B`9u=a` ?sFkj6Z I9$jj5mr'r[6MNz "[JN~sBHt$}cŵp`VCYTm(K: ηGbz5X VC9A7:UpksJ=:@L8τ;I~1TswRB>Q쮁$N罛G]ȴQ mKnxvqR"}l] nIȰT 'AH*IvG*@0G] 1yn[r \N/pF gp}i6TUԋj\t_ Dvn3J֝aAIHS5VV,^<@wJLL8O+39ʎ&T@ww7̹dyd`AQiWQ%`XX"P\DmH{40t$| 3 .]pn ٶtOrv#/NTY97~r& \{ҥw] *v{8R\Qi *U5? [bl.^n3 }nszfySDx*\P)1TbgyʸTs4$583^9-0MV܋TG[ōa zdFg=K/cLDSqc%*L֣ppF_ҩf ge%SL]-ztS9dH?@umaڶӋm&f3լmWf9uԐ7? 6pD+O|ݕ7irE#t'!lq&C\1nt]\TGϒKt0I(q 1&Fr 2y2N)|w'4gI|dNylUicZ굚EaY7O8;jc X5dPjl.]ǢFr_K6  ̄CZ=e%*h/!Ч+PSM ̹fҦKŜ"ϻ:DPHpg;3Rͷg܍$LqOT<|$̙$yME^uڑ tzɵESna+\]zLp/zHvhߑw&1߾u^7\D +۰ g{ٶVC%Q &r-m.Ip߄0#謄Zm#U )T3:C%7r +r:ٻlmN\1V:vmogN)ep̹xEEUN42s2gt!,<;[ +mu1_?i 6Q +qx g +u88RC1Q4?RKA媧wVFBnDMЁ τ;L5GN/A4)qAMCRj [;ǝawK:o.M;[Y}y۷d*;XU1* } K vHjNy7|$m&p#&<A@w-m.I߄0$΄Xf + +|FWS 9se|9ojJ˔ԏĥmB<3^ B#Œ-mkv`>l*!^UFWְ_ ߫S5V2\Wu1߿oX|&gy\4 +.êEnS p gCT7%X&%.iH_] $qhg߈mlՑ^ִIwɿJ.Oqԭۇ˖$Ak56.{/wXNr Mը†w7{~r '$7ǑB#UןJ-1am;# g}΄WjnAf@h +#j,FlȘaWw&jkFX PhwHzf4UAͣv͒p[c<5yx_Y.F7pPR_p&SܛpЀ HkI\^*[z\ae=WjD=F )E(nW73~onQ_r=m*W1"F եaHc2~5wU3 'QyX$@7`t'$P@le[9phr{mb&7U"KdNh56'`AUl#ѻs&wUqpϯ-3ܼ%U ,)Zmjd$' {WgFx콚HNF0q\6Udcgzcd!uiڪ0zb1pHdj/l3-VD9j0nЕĵ.S{ sT)*[@VtzתH\Ոc y&|T}u;S.5]uӁM[E + T9oyPUe*pd-j]GMyϵ%Ks*:F`nτWf9qkfۉB8Z'w/ޖv-E#_(S|;8/_YUXTQtimV}BN;o U𻁖ZH +OK8k|pɄs ZHd⋺,9JhrU)"PMDbL8Oڼ%3ܼ B%L, -G:vW}7ЉNSERD)rTvEb)?#ô ڴW8Z ,t&O&-ϼ7솘慛jΉUGsDI#n3sN2S͉CNy] ;H#nD{/dg6*!=G:8]y>KZyYHIwcihB{ֿ[֚H-"/btgs33ec4̄kj f ඝ40׭sgX5I8L8 WMA[;X4OXЁ&y_$;xF;LPV~s){dfmƐGf|aG`srJjafhi L8>5@CWژkÃ0ߕ8q#RQ΄L8J~ly}HZ{WL PEdm40*lk=~V4$+2ޣq=!{*#הzIȇD͛ܳ#ZqF*-N8fڄ{YX¹Ʊ %̴pњHaDuoBa B<xL8wye4ռS6p3lx" #JN F1n9ؼxdTl6G%Qԙzܓ3vsی8גrC#h$uǙs >/f) v,ASXA ? ۟ۮ'+'Ik +ᦼA@Q٤ZjFmPkv-"%\O:p=\eTsM]7][2rzFmwѿ3t$|/}Z$83""Z|k9"x8y!ܼB!MY/Ksu&g¹ƣAa 2CH]8,Q +.k'w ?|-9}_yT3.M5/'Q@>ٜ$J5poTŸj&#n)Erdj朜zwԁۍq󅤈:py +Yn6$%9AL 5h/0K nOL8ypn4d?K8kArL"Iפ."D=`"tt@qWv 繆H5(q[6CuSD]M $g&?TRC&Ss{EAD6xƍDa+f?u&jTa[I~)&o{L^ps <wwI8H"U&4i+wgTG1 ٶ Qj65j֍VoWkl/ÐnG l% 5$j7:"ugbSUՌB~VneTuׄimh5p^#L8τk؉$6E\f$a +VFae&|nVo-Y`-$8<5լ%.9: :Av1KDy#Cy<a8"gM13FG4e8Uн6@f$l4s5p63o[N_+lx5Q CڌA*^<sc0яl)av\nr{Khm83UeD{~Tٛ XMR@r'FH]t{!uqqb m֏xMZ@:sD4zYB~ҚwMp8&, KǨ5lQ +=c 珝_I8:ـgoIߎ Moqc_޼ sЧ< +0X0-!6}.=BXjE 绕΄ʛMGGav<Ռ qVdZS54\¾{{ 8|k&>. }<) +y ##*4r[0S%&5Hapn'K9nj[Ϣ0$*h5J2ᜣ2hS\z"zquZhۈV.<|7r:ጐ\V&'+Sɂ=ꊣT3:+{%0O5XY"D.K9zTyәٺ_|BUgT͋¹ 4 Qਚkih3}??+b3pQkf& L8cÑhrAZޛxHBJl&[pkĄ] 3*" Ɵ H5ƢT/J5IG};I5M J5#:\7 fnf͘ +TҚh[xH1\{\r,9σέ<:mި;b5O9!x p6n $Y8գ٠~TM<0ڕtk]8!tuwJ?#'%WL 9pvq:HsTSIyTphxA(EΊn1bc9"cdiecb"9pP6dZ-*Sk%gcŪcٰ&| Q]5c0Ge9I +@b.xt gKbP$6Zva60Ga(L;@PyyLP3NRͭRRV̀ЂTHֳw w%F}ftc=@ý|̚ Rh-Wmp/eR/WK> +CVQ.%̙?C6N5 QHJ+>V[/J8WYWB#K@ERy /4 Bj#ti/c]DkKW\opF<~n™nrgr9jZxL:(ojƬ2AJ\ԄTo:Q#ITgPm>WIt48m3cghQNrLjHBnc>OE\3v"|rUXK gS9s g\k„VS|tDAysTQfUKCh7sAοxgyK5ڧ0b["=u#xw8ZDr!+t$xry/4Mweʺ\^&v9F~ =U?Hs&u{dU]) g U m~ewDYOMNmo[mpA{DyMD +[" +Niu $W<  R6+SȐ7S͆_IyQ!bVPElYa⪊^:,/c8ϖ *h#4rǮ,e +aְ%@L#DH8Ia%ٍV sQ gDһZr(,9u$6+FyE(r/S)j3LXw wK몼+[x$o'fU ']Ӹ_?fX[I_r?z돔~ze"*z?BtMω-DגKɓKQ闐,)m'֭6KQ1uîqi7/2aÝ3Y & /k,6=CR&F8GPdd{I]#˓{ި{klE'G%EdUi'X7rU.N/(L5cPH\ +d ++48׭)l]&r6ow{Oɾ. Z9Ɵmw0l_5.j:3{I>3dH8G1+a_1\igfL)$ "WcV/1 崗/$h%̊VvYZ%6aox_?9'3RFsE_>S, Bjv}ZuN +W-ã +6 m_9X(hyK9v,{/nzԩB*:TWv-y0739Ua/3y;pv + =,q™  M%D-<99.=]`wUHi6+p /"w$|~I/O5/{}>lfFLfVM4mְs5$%]<|>C^3o +ʁB:ԋ7K >H i ("[KaE/نudkEfSh-m+Ll%C]BkjZHًlރ@'Qcg\OUQ gƜT^(ռޭE"YǸ",|QIƚjW' e`zSe_(^7hwж9K>0:c\~M +k/meq&yB(T-2MdEDjp\͕< 5ݘ**ón;;6jJ5ˀkƱo#jXau{{<jsd<vHW6 K)/9ztϙ'yOH8Qmfťjjw0KiWtvnW8]*Zv-˼&Y-Wom'1 SQ9ĉ5m3-ʓGD>X@^#QyF2y!pVZXs׌_˅2H禜ҋ[g6(乻r7T(:S! g=5s&im&pjXABrBL\ݻ\hu .a]ld֍gO!$ݹ]*YUXI?b&DZQQšuD@=n(ܛKdr0-3X.dV9+1j䩴Po4WY9BL#`j3_]]/,b;Dİ!ie׆]$.xݸr$*%Ml- 6)cFwzwXǡi֊rA@3M?0n]s+>3b2gɅ9﵇KbwǑ]/e L%KvZa~k@O8# f80Nz_'yȥU-d<ʈB/E= ʷ]twn: Mx &V8iصE?Clb +< R9-Ma?yR +k&0QI,)7IR:EJԭXJũxQpYMmD RͯYwnW-[wJ@`JB0"=INq5!5캻Ysz<ĩֵ+ѽ@ [p@Cv7WD]\H6kO)'"k0vƻNX2*y D"Z狁{ˀRyD/nްۍ;GMddDhƊA snHs9X^j$-/rH>{Sv;CuW  k|kX}iDu?}r>7#K7iuպ-~ݮupVMHfεMpE:,#!Dz"="@Gq\)vƙ2Ιo|֝{_ۃq9C:ݭtJXN Mhh?7ǵ5D21:C.̔/*{s$ySt듷I0?)U>P_bH\;Ɯ?+|aC\: aź&f6TEm*JauyDDX[ɬ*w%:U认!//z/]4$+<!HMl9]rK[4d0Iyʸ-'ޙ{;@j+ޓ_kaeU"r| s>FoOH8SJK8'Yv@2qjAvjV”{J#xF<HMȬڣy/n~'Y34>e@u>XY!t]PTߥͪsDBmd}|d9FIh8b`KDWHBp RX iԱjt5Ȝ6l?T-@C3;j6ce^m>H]Ѫg~.b+,)OUu7Tk3fh6ee@3K3f =dQh{=%Fp'$vl|?1CӽUbMRt` HүAg4>Ds׶{{^5?1x), _ e_|11OC s~A_!]ή!.7=kjQj{56I.IaRtSVb_ytI{\P6j:*`Wge@CǗcg6 /-!X4bȷ Lc|q}K"u8>p!?ҦYW$̛Cjmvj[v:WbFy'SX/l O8U m XTBwmѶ45Uw/v랫 鯩nlӥO4U5̪޴y Efhw Lհ.4I3Ya0tCœX +GhDdw'{7lL9)h/m{ӂ$.< ˒kq +W>qs3%[&ڄzwECHMBfyyM0"baTp3UyVX{۰>SgUyuoX/b>CKdJM(4`-dUpb;RК::#2`\ˑ1|H".=>i JQ20Oc_5q{iGyoP{A/ݰ̍; 7TfPSQ=nUѪ\rj"^xt +IGm[0*1ֻy*qr͵v֋7涰"34,|urפ*>aJ'y򅤉PHW%R y UػKd4&4*&+`#3 5Ka$ƌH\O4$ڕh[7G+={zd5x`DTyIiYi\V8EghXn34# a*y$r/Ե|5|Eqm%̻MdcDEƺu+H~ɫ*<ݵiC#σc64ܠ%f}ĝԂ׍]gb#g⢃u6^PuJMoiʔO2 l!6Y{l1KL!lWFMCZ~iCw|4qfdwƖɐLJB%fvh Ɠ{ûr8eʋef:_Quѽ`MFdr5y +Г6~y߽Y\Ĝ_po$1lYxЖ0UؔqE]DRѱ)1V*A# +O@:5Jx)7+jpkDJɱeMn7m mޥȟ ~Md"m,&<.aָ? 'Qfʔo/ a]$b7Ҍ-tFU*[ >+ΦmGryLonޓ{5z{~J8ST4J8˟{NV{%goS3V񴇸X`X9vQ#?_FE##N9? _m` ș$Ks& ?OI&mQa$C=Psʔɮ^9st ip֕SQ'$=֨l/(%ػ ]'O]@dK8s{(oM85I +> Pd _AM:o9BGLWyNx]@b'oiN ݱj֫ɴyәH.=G/=LlF;\dff.4"4a[B;rG?RDc2{K¨79* 0M'͛zȓ(7&Jj 7/Wk Ip: (e!Ϫ+.l5`նH4ȤG;ۨ?:ޜ6.PC!,?Xtis]ӛ2tW#Ob349][W^Ml8ހ~.GRnBwӨp*5m2yq4~Z@;aa+>_e'Lbjz3>`w{B]I[S,_EVO+%KSÎN3]ێ +UI^fBvxV.=^Lo^ .Cg7sMyfs#[;f89dQ:X!t<ӱ:ǥmaSMJ>yXT<rPo#&7yZ͓7{9pnl%LJVøP]ҿn y"u-X&SKc^#e$v*+.'j֥<7?U^3ydՇum +VCCoF"b}ckQ#c;1LyspTR]xg];RdǥhȤIӛ]>@ygBHH5p^pn0/K$Y%jMjUㆋ7eHhul5x#rz<NxhތcrxKJzY9 6;M|*azʔ&T9 y]`N +_%I +ѽnJMl+o&m +nc7_H5ݮN8_,]kJ8S GA!yS熳Hݒ\:0w$x辠/*jة3hp]h9w dbsݹb}*67e*~[{Apa5f(E82{4~.Z^R3eJnK@hQ l3 #I +1"7x+p'L&.o6ar(m~j}H |aƣȆ]Ks"yt%Z%:]Ѷ1  r#HkV;oza@.؜hfǟ#V+#l\a^&YHBhQؤMee]Q}KR3`z<3{FV`4ar^0Ly97a2wne/N8c_]躷0c!.4$(nGme.15W0h;]1dEgnrm`{]7_֯p>@dn|L6~t"E]XX"y\* JNE2yy5@z] +ڥH7Mma̵r]LY" 2Ml@n[g&L&n92|I+,ǢPV!Om~绢]KrD=(*o›K3Aױw'3L#\CWTvD!B8a.*9FNR)SYɳzA;qPu8 +%:/Ϣ-vd5y+c=#w$/欜9 +7J8VIBL V  (ՈpVdN*$,)uu9FT.]MEk~[oFU&nVwx2mC' +Zg{K u]r5 \QIdFL6P]8a.x9&r -\ fڰbm=Oz+0#M΃oWy7.= +Zk?E%OYmOy, PX< q!AuwClp\\L&7:iT}߿YFSl) +CU뚷BFE~c9G]cݮN¦Ly9i̛uG>M(>RyRP^?9F*~x|iP {X f 7 5^pkDOJKF\3@GU{:g/%yC d=k[Xπ)T қ\\~d nrk֕6 NWk'~|2hzz~~ 5.Ft: +p&Qx%#@e/2 y^[!QK_io̟][5"`ʓbD6[Lc]y$FAڄ3-/Ղ` .0u62l6F%p Iq\,wk1 &.D뗞ӣ W0b ych,³NYV}w"#Pٵs2]_e)4( lVmedxʔ1~mNB:_@DƴY.ki+ZjI_Ϸ@uRGhǾm=9LF_?qXG7wIasb;*!ܴ>Usp*_9s4h0a +'c2qVh*vEJ6r}8m\^F3S1W,[GO(*c& 9. S|4ˮI6TQG&w团AO3>潩(,v&$ 班' A `dHX0!WsM4^J]h*U [CSuT +73_ |[N|-m]6W޳7![zNk(#: +1 +=eʷРGTb\LE9 Ln$J1:43S?x-m $?gp\K8s'ʖXd$FvKQlJhJ\)b8-}&^"n"TM hkЊZ-mr]ٽW8Cy\[rm}5ɔ檦N@P8U6*)nTMFx6|9zg?mGw%Qk_(T b G)zI>(.$u:NwCiSw=VhGBDh͟oI:ec9aFwJ-6jІ]oiW]'tC* dS(!h j68#8`K$H'řmÈq +x%xb yismxnY~b v} "He"d"cSC0).25ҹ& :qF% tA/gX}9N<0f}kxp}jZЛhb1<+FqMnZ)(*`Dk{=)SJgU_7&>e䪍beB@Y1F23.(]7 k<%%sEsLȵ\bʔ/* ۼnW&ѐ{8ZHKZ lma ֐w m7mc|\/~7p>.6i0sv\%(k|Ԩ<).HIK!ahm}tV6*4wT,ܧL8Nf݉VJ'ukTm^7Bϵw 9dPD(SUk,aSxZHEI)SHQ!jgZϫz n"=U-.7Ӕ[If{ԋH ^WE{@!*+8po_d["l}g%2YRPH +F7zѯ#rъAFEPMj,jh]xZ/g[6/qҿ^nzkTM4d&kR-2x.ImXpKe|ʔ"#Qu&o;z,ךpGHw.׏aRB3aԼp +)M9g"oiyWfiJ!B4\ån5nVwH}MwȨH[{\ p:B#Ba6O:5]+Z ٴck6͑Om "WdJ8ݎ0$E`t;r{W'Lr`KdxHkiqxʍf`u]a^5kʴ wou+L~ڼ7Dv&btɻjdRB!A xZuK̈́JO_UPDD`!QOKWV:$Ll@NZA+iC6lCBYy5K#{7SJX@&_Na DbSv9)S_4#18RXV ulZBKgDB I n*_H$D9# _.n`]hss jp EC?/OnyT QqE^TRVƓOji8*-VmEʥϠUx!Zgmist394[,*&ġ"@J% acGK.kGȆf܈QZKѭ(ꩭ VzBHvaX}}z@.v߿moGS.O':c_{@q"/8 Dcs,1Cv3e7]@PEҍ¦kk8ֺ ##5b;W@6(9G @xS5hU ztF+@YRY +hZ5M\QMZƅBsM#M" ocS6Ma]cGn75vf5"="= ++BJ#u[=aM0QH$fʔ/-$bUU/F7jFa :(Lo7o9G{h=(۾`x]F# z.ͻB@B Fѻ2-x2{8T$h%%H5cDF-Q&:H!‛dr_G^h^S)rm4a&o huYh=s/|T0&n-2O đ+5IQY{GQDž]2eʷcX @ڒpbVn dԫ$ +6>.0GZ4GS%mo͛Mn"bz=E8GS54/V'c5Iݶ޼Ԯ)W8Anxp hϣzl֡J5?gOf{u3MYl?vA R"KǚcgPʀ-)o"=]=)i(^V\`ܠtHnmH,Ʃ>`^:iע+ifLEr@zhpBn9Ȝжprdf &'V^i"}|E +tT`62V4&_;em6o6Mh7 uLgU`&fDBGFj%-DO|ʔ)lBBMmxG~F9F;Dm/:v_/y*|Ʌgi8œpyn`2UCףpQOå$5(\nZji$%J=EQh-}*ho+cOm=%oKq゛p9#W@`i82V DU|pp؊pʔ)#bɣmJ5:*ᘼ 9 +"%:+:mS]\z ++dϿzb;/͛mo" ~r`}m=ohwZ"stE.TO1A5Vng-ۥߺtP=;$m>)+Nriw+߶RM&`Ɍ -?+ ^MND^DN2%Gj\BuZN'Ӽ(G֐rgT}chyT܈lZkغ@'~QU<Fh9kkGJpD6shf}+< }yd6Tt'B6_w㬚I-*!ה^"6ewci^@#%Qzan ,RDBkEAM"<4{k׏toE7"%ZBP4UCv?mZYEk-@Q3_zBJFbu\ +T"`wc^]P}<6'ig{+0ɽrt7ւgS%x1ߞgex}oفd9 btS5,h$2y K@XDf:q@$EG"q$G4z'a1ݠfqڼ?i[z<2OÞ:ыћ 9Ֆ "B"nJa + l8eʔ5QEH +Fσe􅎵;}ݶZ*.o3h^m>4oLnt_e5t^FtSHK^ 2Nj. +Ъ+H!o 5P - 0_ +4L>I^@?Ʀ7< [O^s@P{g3Mmބfp?2gȓ_9ȽyF]p Ep y $2eziج$>8Ղ:Ųh[!b9FVa UW bV8Ur0:ɸyaO5RLi{ўMп(+-b\rGO&~Q J%'idY 4NXSNnpL5LH0@d Ȑ5O(˔)O϶N6N-S45t6aXNբ +(*}YL%x&J׋⩒GuW9S)zE- "٧qh6ل'maamhEOH_<.!݌GN晗9 4!T9iS9 ]~Zȃ +q=jeJi0({"«I}ɫ|oz1-Lr_$9g%N=.}&8 Eb1j(K@[CsW [ϓqj61+):)S$B ʽ1|urjm0Xb0:.7 +gy ~j=Ϝ-hsz˜-QeH6̊inCJdH@](VDD*y6ބyyh{m{|y!y^}|qP7U] $Fc~cʔ..^M~biX%.0.}ªy<>[#ipmuթ'>oz.yugy cé39 N0.MP+YT3Mk$ʖ=jM~Dub Nޠ'DoV Cal@m{)x P &>Gg0`cDBUs%WۜoUIÂou<"pUn b++({ $LJW|sYnɁo;;*f}fupe@E B!@ NBuBBdeQ@G7uwϹKVխzz}&t^O}[sA0)bC?R;tc~}c/:$ ^TʞoD\ء n&ؗ9{_У;%ϙ'>2 /VPeZRm[ tEl5fSsܢ -078rW{~%ұlt6-Nץy5,{٧JʮRO~6AsB\wzk;sY<'YЁ".e먆u99h>Lը7]p"8.%hϤb$Z)V:r endstream endobj 1130 0 obj <>stream +Lk[DWykҜdӢ^>F؆yRiU62nqDb)h-'-h,g u3s2zY^~Gd7 WmdxQ{OI >y5:༰7g:)Ƴ֓;27QՉF}&B?f5%7)Ԝ36̆HA>e՜-z"o-0yV3])֭T5pZ`L*]s1^sie~CQs(?k, 9!iYXjX7φ^s!".6r.Y> +7~eWjEY6\~4ϮSSzZZ=K :ID꥕*֯SNg;ͫj$rNiցI z?[O^rhD3Q~I{p8mL9Ճ*{q~]*U7P5WR ˫lS$Xwn,JU%|i!7 +@%l;[Y>%L댡h6 SNQ^33_jgU/䶩6Rj{J>zGpfskۆLFzzȹ/.;Nto{p(ə3)+ mc[Uek u5JRmӷzS,\snL^ [SDp=pmLJ{`=@Z4pӍ)/)eHyJLދm0\6r)ilAJ7uڭ)ײpLRԱ].UPJ˳f*X(lpM\b|ܼyj62pnp69'͠聍 J198ɤl'LJ}F&LMʴ7xV6ӅVN5i̴6Ʌޣ)w3v'4Yق¢_sEŔVm22 +t댭=tyWE! ߞëN-Ťs jQ由sw}fySޏϽ +] X% w F|G/wLkim0w=~9d<@nm(woyv'>e(WlKdz*D)I=i ?b.KQϚ+d{Vzjb8jWm.qeH7Zʔsݑ/~_ݩ5gnRWIN Er?Z7H=M|imFۜC6CgxsY):cg>[? tlvZȻެiWRˮdU#3 e^W} HR+Vtsm?h^yIMA6gtVsC6,>-S9Nn/{3U4XC5^O^esvcg$Ԇwzl\MVvwiPk$04ŁtTRYnvm뚚^͒+O:ƿΩH~}>[[\kƒaxF}7 %… 멓(<ם9Q ˴•Ԑx?s0Ok ;9s-Osv_N'>-ϔwklVh |;VǁM{p8ۇSb*Bלo> V^R\g#ﷶzk 6jC n^5؜4nspw9<ƇϦX\d:O`rxR>E;Z6/X#<9'Ϊl}۟-e6ys1X׃Y2$1a +1jm^{jZdQg"^{I^U啬ҿ LCDY>ul9;uRS|*HOͳ=OGK}lx?C:569/鵀%kl` cgsf3ϔwk<)Ҕ} +$&}+N>e[83)jsze3os7{y*Rpf!%\k_!Ik׈ؚX1T3s3v;ls9Z>Zt_OR}Z,)DZei<8im$#]t I%0cgǔTk e?%Whz_4MtpR0U;g2ҭ5j]4o`юj~"kleYؼzUSIR7|{W,l{welX:Qo,=I>5D[DV>MRj3LVhiZ yeG5қs-y=Qwεn3<k ڥh-Emd|IœᔛLw~SfY.!WukkVRٯo#u\wyݱUl W +p */eHip/9g>%ٰ>lͣ41#ZV,I%5REkWR1HkȵZ#[Gj cބGV9?#/S}yóᔔ&]';4*λAn|jUVcb}իj-ۓuK~狸O{nl7+U~gR͙ K<גjg3U*&?aR%)JM@.pZy-~9sk`J/6ӲVv$kdM6jz+^l9Ng& d#Y.;2FO o>5n6b^DSjO0{`#i Q@|UjWF(LN>YP3]Ik8pv12nm-4gQgyYJ LtLyw;k>_ WI5p;غPkֽQ( fb M^`+_[oX8d. WEWUR6zNn_"ZAk\wFRRR]̭.p +0yQ 9e<Jw\J*ϵlnn͢%tkVQwRKYIaᔘLYvٗBun.5/StZ՗52%Հxda tE9Rs9snUs̟[>SK|I1TX +KiI[K)65u:Z&?ҟ]_gx賨%$dS{\I8Nf J%I K-fE*sqRƿrZ +6؊*ػ+_D nz[aTG3U۟U哊knu?I +LkWZ,!1DI|~E25d\--j$ݝ wYxp8RS"TV˅(viW-:/%ߘ䳑ޭށ<'$džos-~P$I͞=?+`)C^C p:-U֎jxQ$-]`\̓Hϟ]AޜԛeF|.$2p +D<Mhk^u+Ð ;Td] eb)Yı3+rY7n݉t3h5_Zc̛/Ͻ _:JWp*e7= 7"LUJӌ잁 wR}wYS)?{ST UUwb@TLkwZ ȾR:cgoy!"b|HumEdYBү i&ދ<&̩̈́zr=~^-*X*^ wݜ;w3sXi^B~Nza_jUŚpHSPeZi%)ٻFٜfO{/ E:N[[Ht:B[s~ы5 +ݧϬj g#z{Bb`#iܠXSX&Tj50)- Ui-f9']͟)ל${G;ط"_t}WN2o]ϩ|IH׿}z`Wp86&e?KtGsy.;fB.߁ޮ_`wl0Zxl69 .55|bVFĚ˭z̈́4Ui-qs@<*.9B[[{w٧ p8׭VKԹRԼ5ߜ5l 0*gӟI:ӭ`ja?δ2y9¸U-ƽ٪)-˻Qg$r9NSkYWp5o|]$ r)8e-sj=FVtzpk^TIk4K;|HX&]ۨ+yA +j7żTr[ wlU®5|>PӇ5ҟrk^ZذៜiTM#tTXoĸR^--Szuzr]8N$E.줘Ω$zVZ2B֔o֞]gk[-fuI1J0\ 79iR3Iv$䓪uuiޕéVZO{H,%\WyS[K;Sp-yw[5b$5_ML)n-6 +ϋ9ŭ,:ɭmkT֐v꠴9R)'Yą݋+ Bu{j2W- c+ZҜ3j}[{R@rNkzNSW+aZ9y8нމ{R9 5w +%= F9NS?☢$73^CV[kDxs.EI9Puk^qiR>-Z<RJs..*![=9N5{y1$R˗wf+x}Vpc#zue]6iLkӚ7MB\w.$]/F) Yjj7S=i߼ +py] Ki=acbzߟCZt{Z82]IkvȺq-?˄h/ꋥCJ4źWJ\b}͋7]c+pzr^+Ϲ[ZtZJ֔go@ڜ [$B}E 0BN1n Qmv]7ɿ5g`JM$Ws[sOxV԰glZ +L5W:rԢH: a%I$]׷\MXy a-6´NZÓQDHw.1=iӴxS~h_zs^_-`pJ>l6i-1s].ts1{s8NHiwl3Ӂ +6D4TV/r]\9B3إi'y\ݞd&7k\jZ2lOp m1ɦ\L+'%:tO@COIqp8Ju&䪘~1,f+-lckd!zV{HCJ)hѝҢSp8\{˼Iۈz pR]Yi儧c=Z?3{JW`/<9Uu,|`%S&8ɦ??;Dl(?iIKe S /P i^تid{2KreZ9ȣ!t˘mM?T%-jW&Y3.*z]07 ><\mr< kQXOwۗl!+-L+@z> ! DI29N+SLI f޿NHZYe +xMxi45-.2C Z94/.nȷ'˿!|pig{V N2})\mE3)2e] +1sǿ3d{,ʡ ~|zqR4p8MMe^/ ؃#ٞn +L+[8&nf9N&bU-sNavHVN) $t9+4{ra MӆiiN)p8K)vS)iiQڍ\i5i[ _p8p8p8p8p8p8p8p8p8p8p8p8p8p8)9qp8p8p8p86K˓v'L1 i[fi}ĖpZfqs8MLe9:p_M`)jf_)B1pfb v?NnnT%piv?$NRdar8EܜAr8l4)0J()f'`Ɨ M͆8v?LN%lߙ_'gM6lez9d n2 e8~8IIzYN2‰2/Xo6IEGnM>~_'9a&R$18 v?vNCddS)v N/Aׇ{C8_Ɨñ̮n\[8o~ 96$ݸtc:8G; r8&RrcuuF807v?Nn\Ăį/˗3n"\ dbv?N뒎?t-FRn ̈0!ï_3]tRn5JpDoL/gPn +6'qD.v?N+n2\[M?e$!8&`oQplikV$ѡgʰ7/ ׮BWIxG, `¯o^zr8MN +ɍqG9~ft/< aW/v,UmYK~,91#%~o|^ΠI:Rt) +\C*Gb%o_/L/g&ݘvХJp OC9— xTf]-]\mT>M?Q6#D_|^`KFĺ +]M.Wc!?c0KMv?NSʮG1r% +[g0#?CqD07o%_3(]Ԯ.eEWb!911+%6J +_|^ Kv՘J5n5FQ>Oގ@%5uL/g-͉RRt:WJl5/>(&#z+`\VuN4Sr6T.\VCȿAQLVF~SrU}n] ]JWbƊbB3:wg%_3.D]%݈\V1)d3;Mƈ0FR?SU\:e/;nܥKEFȭ0 +cE0yRR   `_8BWVg/v?NcI-Hٕ*.EJrq[V^2{7%aXu%9^.ΜK7]9k"s¸\-@+pGdxCd`X,#|+?fqd/x]v?MD׹\a\wohH1 ,ѿq|z:;,{s8œ,8x6#].s\\.`x=H|(`7 ߍY ^,xv?fi7Bwg=)-P+X=Cs R `hЂ___uMX2n4k3E-@+`=!o!aXxo_o^lr$ZM"8̺2vecrqo[# 9 +o!ǂa$KIolgSذaW-wjB"@"@C$X8 |ey ٦vgN%Mdt3d ].4f]$EnZqw< )>K`a`W k_ _Q* \9]I\Jv?bU*X ]]hP\єoO +9 oƈ F~JWVg9-{ri]Jދ@U]5d+ИZU-| aÆ 7ŇcDXG|ewV+_Qʢ8s.Y*Ufڙ rȼWUctr)# bM!FC#b+H&^zah[řT7K=ٕ;D2ﴳl̪0#\0I-@+p94(x{ȑ1",~~5{'v睾*3лnI^V/IV9 sf..w2mﶻhЕrES"F=t3t1~5bZ#z) 3v+8| )fewwa YiwZW+;EpGg1f̘3E2ƌa +=ΰ nf[z9ݕiYaUt6CaV{hC]˄\ Ǝ{gEwر@1"<Ej|;|uuEg0qn7ɓL\fwwq.LѺ ݈\,sƍ;W<qŀc@ _/P{ՙҋ^J4v%.Tf='aa5 +pmlOOϴiӦ눷aAĈ_h`ߓ, y};zᤤ0-{3SkMl͛ncw7Xbe]ݓ ?EEr' ^8>}ƌDfwf̘!( OYvg!_ΰw+E^&gV/I5RDтWnmߍ؅.Vf=eu]."3gΚ5{9Q{gg 5; buƅ/ 9 z0eoę˩t+U44o #]b+{(X" ] l̙;wy擈w`W;ѣ|: zы'%\e9ͬX&SNi ^9r+8 ڻj+DWe.+Ο`… a/_ @,ï/{3Lj/W,|#zn9^8z9Oxɤa6wT*..wO!Su ]AWvPx%K R@X@Օ;T`]&whWLdxsժUbAՙһ{iFf٫gfT69I ^Avq+*3v/]&]ЮYs25kV`Ѣ~ysgς+_ΰ5|`DZ{fo3/,]Y0 +t%+֮]{UxkZx;s4!_Jɒ^8k=,{Iq3̊Ojp*4m"sJi6vxɂ.TNڥ.`{U] Y~=n:^E|a "XbuųVƖ)ř˩vrWNpҌy;] +D{dg: /\ J銦|Zk%X K~ -7=;OJʡn<&I]T0a/}MYfA3Գ]̨޾eBH:kor_w"|5X|}5l[)zS+8) #g",@V/;|uK4s 1v`eј#t%\o馛u7 u_(_|d^1:أaLrHgf/SdWϰU44wГO9UwI݅]ј]z07r˭"A[o%W]^bzBVe8vQI ol(VQi ^9h>aSN=y^U]!]$ho;Hn _ ߚΆ^Z1;(Ze/-0q63+[cr*lUpyH+9O6F93+2+Ba|-+{`{w|SEyw +`־;ʷW;;j)'$Vj8.J;r::yKx Y; a>CE^~ZWJw}="{/rxW0,_%߈r{3O۽}\ljUvS$7iViUT/.xaG]]X"H0O~&R|p0]5tի`,މ=gq|rٻ>{⼹(vSWψi%093wL݅Ka+,]A-P<y!E+kփ|W_]5Vzkg5Ojz9H>m,͸+N?s&xڕjrlzaGd͇_ ׋,&FE;\9B-{MqfV'5X*%x6<[xҌ;r;sΛ0qfԝy̨ݛnJrj}Ǣa%_A/T灈ީS&?6`h%w{8ˉ3Y#ά^N[6UwԂ\`ǰ{1Yj;4\['D~D+V@2^p>q 86{78]_˩ZċgDDfZEK3w.>s(믽{ǝt.>O7a05Zۯ66g8AfV>T-kx4錱0EvE, +O=O?#F4b8Ο3k49WAqG5b笒Njz9JxH)^M$4Ҭvp{/=w%qvo.f.+>6ȯ_#_wΛ۽r 8jf]T8+FfH3Ti]sj[/@v.TfЮX*t}}瞏"OA~Yn +#z̃ #Xn/Q .br|U#|&2[p-,JWЋ]~qE Ζs1^VS3+{(vH˩R7:! +gҬv.2U\rfPQ] }E _\|.\jzW, F4Q7{afe'5X$xmdL:FfK4uErX%.{`*3jW+ ~/t/;?ΰEzajre2 dqofEOjz9LCVi4|V (͸K0h{r*3AjSG!l{=߄ ]ޕ+fV#Gv^sRޟ@W/trcD|&:m4L&NPNEi]"X°JdR] W3 dy~eb3OWK8g(]Oz9J.~:3f&R*)}X ԲWg<,o/Eqd\z9UJ^nW436V-XTNeib ˚]A/H`3W+ֽpZ^]K +Yv9Wdr:, w{"^y>Cm٪x# P,x..wUct\/1 Ua[=0.{c8ۋvѰ꤆/tr܃ŋ# |3/J^OGjt[_C_!_+ާ#8_jRET/ޟT4%Wޑ#|&UrZbeT͂W<̪^~Tf(]$ D +bwk}Grg8㌷vx.R'5!@4&^u+ 9)&D +™FY̷w."c_)_Q9~9 z~իV)IulC^NSXU6ѹrVjNi]T vB4 +_8rVg58Q Y}8ǓGFeV/i\D⅃|&]rZ͂W.Vfј o[Mk3րZ G5Zn/;{Q]IR~IS4&^s#Ac +MxIi6*]Jnį—Ы3+]DOjX*җ{w ot>Cni.fX5"o(||Ԋ,{eqfVFtH˩|7:>񪃑x>cz&=gA4ÂWnD{_^UP=RGI ޱ^Nw,/ϐg3HiVЙ +\_/8 +Oz׭7Ԙݕo^˩Tk;<&xQm"U)͔?P|{_Wtq&E8xcQ8Yjx5K(ꃑ|9[<Гfo]] JoD/^3rf}Hr^NWw$|F4Hiê] ]W bř̬TUzխ^NUSx789/~U^if3Yk-{Q 92GFZ\Zݙ˩FqP|V ^?ƢⲗgYzWzdrxYx=xL/'+樆YvQL׫=Zϱz96gKߠxqZ%'Ͳ4b+Ɩ򌳜Y"^yHO05w另T&L*^uG:&Ti?Wks|f!ɸz Fbrڕ4'T{9LU43&W7g8UJsXJ'D~4x(K56Q42 ^.E78Uz$wbr*R{txLo4IbťWg3z$joTerژ֋x6QtC7^v^:*Ez9{GxךVY/rfeeV/ +_}M7 qF*,̈́IP[S^Nӑ}n*ӑpVb3"}q.MT>^N禽}MĮ^]_IRY^NE!w$Ӫv%.RVɖzwdr:/#^6QlZcQoލz?5%^u0+ވ׿xsz qߐz峟>7 ޟd7V<{~io&޿tz?!!ޟe.7H&weLz9H~_S-^#?]P=$CarڒGykO6=\w`iEn"SQꍽ;Ӛ,ޡ!},XYЛ^7SZ꽐$]Uo1>T>-/,K W G~z+6)&/&7ݤtuRŻL&[HUW唛 -z9N6Q#=;^w_{z9no1~۫ezOcr:1oxwjxVtv+޿AJW~wV/M)CCS)Mw~kzOdr:*Usm-HxQ(W(ۘzoT﮶z?"}wxw=<&I-_7&]@RN`r:&aU32{O} 75#}躽z@fw{V/ix/{O7%4ԫBT/mV/#RfvU2?zGc^NDNq:?Lxz{zO`rڙ7?7@c^Ng7xR@/7z杷bwFz7crZxA>l?Yz9-O9/)}'=u R;+U_ V/I)_Y] G[zIUX&❗"\^@kxReJs}=ȣ n4+Ż כ(^ϸ*Kܞޗ<ʧZ`rZ{_m*^l|c/ޑwջU]XVU]giuU>xS_ެoO@V/CRDﭷߕCt\%ucmxӹ)Inw_-4x3^{dFԻTXf4BGoazxcEa>RbK'z9-O!aGuluZsaxfK?ͩ1^N;Rx(gs[ ߿Uzbr:/}$@ o~|u{szݜiR-%%ׅKPg[oU^N')=:̟ { ׮w,I=%X/f.y o,wEV/i)E{=xHo9قRowgm('@Ijz`r&w聾!6!d >Yz?4Ż}x{QW/EOX /yvV/ +ix/*g댫Nozzmw;V/ #ޏwdo(H^NSxO 퉋 lL0tu0NfrZ +]8I +?({-*Mz9KQn-xoo$^'덏,?KR;xV/)I%BO7ln6ݢP^- [_Nt~#j玂dw:R{L+^@n}'\hoί޺SY'x7G;W'%?xTLV/u)OUy+*|&r#~߳z9JEw+7o,o'%83⧑E;'[[z9( ^gɛJ.E-)!Dߓ}{U/SF:Pq ܷcįW\ꅻYҘx$Żg3kSCM76Kޤ{1ʔ,ޓ,.{=SZ?7v@Tr |T￲z9 ӈx㪘!rD8?xnӡix/lKN w>ӊ]a{]^K\ hMFݚ]tt o`,&Ker:6MXx_{͖x_ +CЍ} `v֕p%,/K2G`r:%-^޸v)\b};oKUY6!nO'5x%J\KDoRtf:J[lk7hE<`ï_W^N{5HWve6٠UL?!m0W9\zz9MJ;ARxt5ڟ`_olVV(V/.S-"JheEp5?#%Uxu~ۂ4S3K/ n2\V†_o/3:tB:S1xcŮ.  Xuz9I).-;񦰫5*lF1|MT< Sy7uʌ%"Z#_/V,zYI⅟C[jba@^54(lzߊ,M{z9|^{S^®^JRtѸ+H`Wvzbr:)I}3]YvEcY,}x ~5bkD/97kRt\{H_%_Wjާt\+ & +(]M^nKH0+k_κ:g92M)Ben$} +F|:}Bdr:"-޷2f+BWyDE|;Yz9J7]\jW+>鈷G__?M^V/R }M6f.+v,0Cz"^N} xc/S`L%>>ϐw`WWkk+ ӾE'޷\aW.wvѺ@B"EQ_Ko{Rά^NPe׀Y^v ]A.p?D%_J/c-_Gz9)(޷lUp.++>w`/_/^Z_JW>[oڥ RttpxD?RMZ7MHLi*JtA\{GG} XM7q[I_Ӳ/Qx/ISaYv2Gt\x~>+|Q.|qvh^N+Uf*]p=]wux~ 9N/]:ř~i^N d&"ur;;`WsD/e,{#!moT/a+ 芺~mvm!_Cgٛűz9-L[rxK3BeVEt[o[n6+^8kę^NS9zl f]].{7tcnfů+sW^Al_{&ά^NRxhxI4"{D]QA] ozn#/Wέ /zIqfr:(!ޟg[հ +DvEe5_u׊\#^wF/ l}#g͘8z9O7UlY.x%E,ѽ"WcW V$VMhwffiA*!Jfas7hW ^}uRYF~_%{s}ngV/թxeio,]5p{kuJA0+U%i_C+ۛ9brZ7})R]++ `W[ޗgV/3R9iUTq>aؽ +r/_fu5kȯͷX>,}9qf.oT(~v5 p/lJV#_%_ΊG֓@/.{~O耯iz ^*=iVY,x`V%ٽfԮAWR@J:J/{Q*U/VҌ ާV]]AwK.Y" ~_\ s+MC? +#gZLfVvӺTOMdU4<{aM7Be^wUv`bWt׋Wȣ8r^])\LNti ^4? ]WEt%/[/Re(_Jxx2-꜕wiU*#ބi.>]W\"z___/D'^]抵0 >(e/zUVtDPK`r{`KU4p*bwkVŒ p{kR@]uTgU~AXת<㜵]& wg%C[-^VI3f{l^%u, KWbu]:XvDBi)x:C{7GvE,ZX dVgE/@zo_iw*+^3Rfu:՗D*t-\`<˂Z(˱:GJbqmz9mNkgĦU4ZΝ;wF!НEuӫ'znz9JkmIPdOEY,xonEr̞={قy_b^{fks4үtar*7|V]]v/]\TXw>;k̋tf+|,އЙUvTXrU?/qvEe^Df@wwƌӧO6MwT.Z9FUAϬvӶTQm"+KYRvzbcFtzzzBįaX5W.x̬"V/-x6Nf]%WL[[+ѝ&)2^xT73һjk%83꜕]<9Dl-͸dBЮBW;y$ɓ s:Sz7V̊isEҌ ^Ι5S;yLԹWX#zqkgrΊig-^M$ŋ82./*E34? _΢:G +X#9)ot>kJV +$b;]'ȹǏp> 9 zhe]//9 Ua+XVΘ3UXW{ƍ;GD"|g\xEX9+]T4*WUjZfX +v{.] [6]hIOЫjY&?$0GUp=V8nI [?crZ/D8%6uf*IHq+sq_SEug="<ݟ:] ^|uu>pZuKTi*S@¹{1GsX;^93o!L03+.“X >iīU+K3.x'MpfWj=:sQ`ė #gX G5 +| vޟz&ӄtx0RӪ: +k.x'7Ɯ;I{C2d+vw9?ҔAq-3+o{-tx> DѴ +GPY,xcJt~a&{C= }ƙ^\<!YK.DE TRowk[iUm LLê]]DW AW7X,23+]dez}3+V/TU?YGVӪs4O*.hW{a8CT= +_B\N +煋afu*]tz9mJFm"yO<|8VvABr9`/+酡չ8ϒ"Y]NrT]/{&R[3g\8 g>SNV +t "~~BH#FJsaw}V/u\.ޟxWU;"Uł7bWTfDWX!_J/.{Eq6{֜`rړ./ޑgm"V͞)K\F + +t8`Wf¾*W.{8O}]t䐤W`r +5G* M*8!JZ=8.hW7d}~:Z 0EGoz9Zmx\v) U/,2#ܽt¿ RzŲWg{zΔr:Up&Oh!^MU;SH ȯw}ՑGI |M sZ_6#?z_erLww#޳Q'`ZJm4HB_)_wtqs}>W*ykyXV/Z⽈*R]] ȯ|-Fg9:D@V/u şIīLiʼYš)jpyYR }Ļ4AxҼЙ2  zqgzSŬ^NӁ]PߵK~'VAibs\" 7PC]/X1QoSUgxx{Z<fZYΪ|A@/,{:Yɻ+Yzdr/,m%Kxϳ쵻>Ei66|^X⼭Wﱷdu5\(JQo>CSmJ`xGP,͆]@S:/^]aH؋'D/3-c1>$TVogf[p>C歱4vO^,ΛEٜivWtx$.jZV4vH|^Y7,gV꤆Q@~)!FgɧqDdZٰ+y8Uz?Q]4#J7Gm"Vai6*reb~[ڀz_arJx=\>waW017mOj8ꝜާY2R}&>> l.PQ +'[sV꤆TǙע3şʫLw 񚃑lfFY n bqfVD~]4%SŻJwNLCxH:F]E_E,dfe{hzgrJ 器x`dlZ%J3aW@ysrO*z;4Uwfx*(̈́]E8ozk;VҬgЫGcS0xJ|n;Rg4#hA| 8˙9$Ŭ^N3N^KҬgî荊s)})nxʗ{=Pw'KP?{D(~X%ʙUzO +U~Xx_#S-F36UեYa +]DO;&@ϲz9}:U'fwմbC:ޏKgv!z8꽗i0]*QD=Dr3YB$^Yz"&}k`2ToZ׈x6)ȮFW7YC@|-lGi ](닉7VEDeYzݏwOWz9 Bx%W~WMԂWBY)"Lz9;LxUw$m"S韐]%_BYC^NK=}8Uc-w$ħUH~ `9azzS,xE]&]xOWV,}? ̬'5 P唓>"1<)fM$bݫYIzwSbA4!⅟=7:Rؕ*>b2mHwp)^Q5SkԻ mmJ:]A ݐDmVIeěXMī_g=vG&ғfY%(| I!Yc4xYYeoT 5uAR~۱N^U@YC>v#z wބGN2xOwx D,Oj$Hz{zoz팤=-]c=&^Yq~]z/HeV0#G[\]E]z7v{R)꽯}}f[)O;Evwc,z*z'G&]KYO׋w_{yīgU4KvmBŹzhzHUX%^4ziqNQ/}lz[4]e5[UHM~ }Ů>Vo[Su\x7Na]:Bmǣ fv?=/=kMv)jfޯz9 +7Yק-v#z'\;^iF^cwJ!iezMqTyS0](xmx#^YԉћGv=BԻ;3({ALI~=H>v 8Ň69]%2{F+KS@z۟J7*1NhP/pAwmɃd,ztxSHŋľC%3zGۡZZN9')>ߜsu蕗8x6yƇ[xkJŮnVN`oQūJ.Roձ k(>Pޖfp]}R 'w#ިz7?zM^/6>g#7%^?z3UcNJ 6prH7ή[z+|d2)]`bWL^{bz7XoGa^96\ұbWĬwwM?:1%:5[nch Q-txE{JzDECƻ2==B iRDcƻQxO7ƾ&Mۗx:lV7ea]wrGƻ1YUa;X戮 za#cx+ ;wd^ǐL'ޛt7R*mza]=~8YoϢS]:xgW3}^}z/Iێhx w +n +>zo"ֻwD}}_h+W4Gxz_zXNY띔#=PWFxGzMxh&8+=Bر6oͬuwJƻK}|odfweG{X['1@ɈodNwr=&4ޛo=n}ѐog-c)Y]'Yo/nVƻBWx9;lz{`Li6x+ += b3;trz{bnjQ7?ִ`ud}b[f"H(XofL~)oT조%mo$fWʌ~4YoSѝN&]#oGr>nRYzThx?ixShشkkY/z^x +>FpLޫ3a_4gx?\xϳ ԡ2Fw Xcz1K2ޡ׺z;bW]ÉQe׿X7Yof+㝔5ޝBgƛGcxzU7oهzey%"&:$QQ7ޱeL;H;UzH;xU +{xI7YoH; zY7)zfU5ާFxz_,z[:xdfKgh'cώn^^x_9{qG36[k7x&u4n;Ś[Y1ƌw[olLLx?#*}zdMD{wizvGˍdnL[q$M[1 +fM۲Ŵ^}m7YoV@gxKIށ/Vo(Zo{F7%Co}w$Lۢ[1I?&͋1޽"j++{ M֛4Lj\qfu]R㽔(\ od91v638ˌaݮx7޶7Y/ǐxg`b5q`;Vz&Fx8 mS^w)ky?7uzcx `9xn,;]CQ%UsM֛bȍq~w^${G)$묅;M4Ys޴כR}5j♧~i=74]}]UYxtF2Yo^a0\N\j^{Iwi4.FUx{#z1b`?u?w{5W|5 :h뭽&TJs" oJdA 񾢍xg[l[=2ƻlƻa=ظJo1ͳ7Y &Dd$shO>d^4ޛ3+9x7c OFFf:6A7Y OVs0^^xbxa5n4j>Ξ̌.)7Y[oKgxWsg59^̍|^ȿv]@o\ˇcz;ʦv.z̃xq-wƛNd{>?kmޚۚ6Y 0x_ OFR{9o '<WQ:Dvo +mb\xM[`?/^O=)]@W*FmzϫedS7;'%|zMrD*Z=x;{z]gB/w7FddvH +7Bx-vr'ֲ35zM%B7OdhwHJBL&gͲQ[WzdzGze/cxf7s@C '#ʜ hdnЈTxs Zqߐwuƛ)5.~mƃ|@k4(6Xsv+fտ$Y[oOQ}W>=F^ªkyz[fM;;\4D* Vz\q-|wdUyIWUR5Cˋiק7&5}hzGzxU~UOTxFxOWMSWhйfWe [ZޑA;jV*{FEȱft\32 +UV8 FѴ!1ްjqՓn\@}x _Uͺ*NXcf  YѶ޶b7{k&mUU֫Va8~7zGzl=xqUWuKo-̫Bx=z (9ގ>uU䍟o-U3+ +^>ao4!7}.Y LM~vWf5 Ee^g32>oHs.ցקUwdC-6EUs3IP7s޼Ju3^\qͥ7YY`E;? +/-w7y鄆myJK+zE|-(8pzwp1;J՜y'fuzaKf z-/QY~k⛬w;~xBRlOhsK KKw^^.9!1m>^9aF>tfuR*w X/"pB#[땧wXoEƫO^U\[U^~( +8Z/"p +@ [wp >zJh!0?9-"yr! W7+z_QJrpʭood-d޴fz ^kˀ\3^̫z)wyy^ K/#^G%*8{@{k~s^Yzo.lk.(ⳑn^vޏ,W +gE~ `Ű!><~kA(Yo{UKxEOtǫ7ƌ-5|x?47h^r_V 03vV;#YDυږW_^ZKܫ=|<6m^y6Yz _&XA#Ǵϰ"8o +z_Nh9o{)[^Fvwd}z-/lxGNDq [=f~}|曬wj*W 71/LnƑř3°w#b 8_jWNfVzvx}vW^ѐG 6'VX7ckEe|`FR|5>>oyK殬zN;h1n̼qWWa3׼݄ͫ᥉͸[DB~E1Q :e|r霬w[o 7ϫ[ Jܢ m:8^^4_[b"aV +?{~][dz_HhK^7W찙lZxq`'^We #İr"´X~;ѭZzv D.a3~RO6GXzpFz|_ F8c0 {[|czh!D6?>o߫G6o ^^okᅺ +^0_ė% aX{AA,/Wk6m'uc&m,ZfzH676f^yլoV"̬^0_  "KX^dwC}}_[|>OUxD7 {GN>m{ ;иy#53rfE|-`D X"/bt+auڙͷ>Yz{-0gx3B13wo?,/ӥY yi[Zkm];z[z{CcoއNU/Bx܏&Vnz_S<0 #dbXxd ̰?\-oP;ћ3sz?Rn'xxyZx#=Q /:"M6`uO0/lFbKGPL # 0د_;v@@z{7޿%>/xQ42M⼙ +gV^lFcr$>[(&`w˾d񵵳|e\ޞXzm4^ݿR0x=/ 5_izGV`CD9X>'sl`yi1ra]y˥sMz9Yzh*v;ifx%pB݌K]k P<10 <)ULF8Q-w;\:W{T֛W8'$f VyIx/:ni~0zw™pֵZ آIAt3G>π0b WT\^oo +dFU!Mo5xx^ p܌Mџ96™d | ___lFc)yɾcÂ=]B.[+v9ӥsgvc۩gkfzIۋh>*xux7\{5ܤA+lznLnK"`00 cLƴ0<ƅdaxlB!_b5ʡnwd1^f&I,Ic{I'zz5[m//l61bbż|-Dd [~=c+AOoЪd_;\Ǘa+`bM/pBW +gK632/X>`00S|"+b 5a+߽ҹ6zǚx3Ëb}q35P7vI8Y蝹m5Za)^Hbh +JF_{϶vV367դN1d0޿oloҠSx=6_;g IeY3|! $%Vύl(d FoC:&[&})npDxq36]u3뵅;{Yh_ï_l6 #ŀ1Z +Mj^ٍ-/Cl֗:_,o.>Rifׇxf5nvzal gw]vfe|_! lcuNBl<ų[gT:۬~8YpB[Exc]7™酙30a@ # b^8#8Vrz h\:j u=޹z6^ae¸Y7{q=Ɣ|vf| `b6 bbV4> ;lh:|x˥sUYz?ZeMۃhE+fR Z+5| t6k:_p_"l62 G DxsSWJgj|}zK r +yֶId'mA ^=cn[_8=SN23t_W69w.A.vv1=~ҙ_޷[zK +ivxv^be^zifLljg/6 bx.b͆E]8 3`s|vo9F?z +^?zb$C =ot,M/tNCgVX8[zq|`%~ `"ؘ0@ #{3s5 4sv9 h|t7Joxk[Jb[d"Iƛ-ىR݌#+zafB|Mkjg †a1b c|:?Cjpw>/ໞ拥360¹1Dw^> ޡ3x$Nzal +g8~BlKa@ƾ.3R .Q<6|6}k4el|?ڑ:Qp`%{nz/(ާzBoWGWd^=wٴދ/+`= "0lF ć DŽ K<gӉ/Vϛ|WW3g=][ֻuށDˍpMӋuYEfƶ{e^ q_ #0R cCq + +G h+~~}7٘:_C/6DG0͍cy[H5د g)=zaԒs8mos߬CeR:ezfkٺY[c?O7bl=Eað1)N(8N1,nv=Bum\}U`.[ +0*,{m+oW%=`1}5[7X:׳ƀ`C0"lc$8[XnF 0 53OHZH &v/3y3.~^xJ/*^8c۫}޻anE`a 6#nj/ƹ6,gs%N ]e:U {܅齡vה0u\{/֐^ZqufVZ[zAx[mh^,z|+k"Ɓ/G b8YN$1 ~~0ٰiwuw +뵽¹iPTzIv[mOYY<ހ^8-4_ƗclFcf9?.ą +{<;c!rrAQnU^]پYz.o%mvon@oz{|CK"< Wsq\ޖ]\&گ{}@ :b o)L:۬xmfZs}k"d쿷܌ Ĉ1qey\ž`F Æ\e|"C,P:s^9Sۋa<ݳ>)x[lJ!KoуaP|-|\W'/mK.y hg(^˅?]ԹniSUσd;<[n~?k5 a`@#UkPK-~L/tމQuxVz;Y[ئ YoCZ*h#að1&Ҹ!=|5Į!/w`lJ{ᜳ^/LkouhFOF}=oQǬpvmOo//K[ 1q|+\7GBsO(sC}X~Rdol|pЫ^|EՈozUֻ{`_iBoBvx3fހ^e}~F`a)& LVުY7Լ/Ub||5{ةsk{1߯ohfUn:^΅dM; +ҙKك 1b$۸b¢LR7F|>8*z&8yGvfUFdv㍲3(\:"~6#00b$SU51;h('+.A+d5sxKZI\0gozw[zwh_&*Z/^1u_}"~& +a84 =t%|C 4( 0iylƺ g{.jzRֻr~;,/U|_S$6k:zv* 5tfaf &9gyG3ݛM!z}9;v/^a,#3~[.avxpg28BEu Pl_-4 ٮ&Ɨ+%(O=p}7w]pÈ^u3q^"uOjtbkƭdw8_1xsT:SkE5#0@ֈt8c.y3){טz+< +g<̛}K +V[o}E ^ ts^m///,?$cًemr-|ҋ/[z<Ⰳa6(S8/RݝԨgSޡ0ސݼ9^6__aX8KPdw,&|̗K糿=6lKEp^ƥ`t޷zx,/vf| 0D1bdw_|/azϠh`j{q +̪벢=;sHw؍p#+>o300L[%~T/ 'ϓ{_֘|_z?{ j~zferOj$z8X.㍱[^ǗE`F &d?~R#<ypfҒjl|-'xGp0m-񨆛Y)͜Xoa^zO;_//`lIģU#n.F?o9F_w,l?~ͬxFkn3^?X;;ׇ\|_1`G0 LljhډW:x4SO>80v{g ZkgVvQֻ +YfRzr[0ެG2__ǯ0 0SHϫc2)z;W/3P9uN;pm/tnpp]wR#<$Yzz7b]bh~0no[N|LZ5Z`0A#ُ'jOx&܄kjg4_<40:Hh{ٛp3zfE`އ+{nzf[^m___` &ȿ x!`gr<K-#t^;޹CLG5dWonZtm6jϏvo+xހ^|~_0Ėc O)/Tt+7O[zas`=`]8g;RE9$rWg1d7xxsuS+U:+|~`v` FbrI<]h9EG<բ^vEw.lQ +g8{3+Z~d+}5fڌuC[Bo`|_03Ėcv>OlBe|¦{e\xy_:c"(w#p3+.`$ޅ.Yl5C*hYX2ȻYFabX(YQ||3 pZ6=X[83qb${lFU&jӛ/F abXqםϺ) 3|CD&`m'c|(λ̡^YECCdY=3.m贈dGG-z|'fa8`nDW.//Φz{oV82m/Y*'U]48)23͒vnsƻkhxG^e}_ͯf-.^<|k}>D.x}L6 ^Z]x>հAgYut1]90Nql6[oSdwn4KkWo^m_/fbq+7=+}/]#m+3άmֻT/[o&Iޟ?9ݸޟ}mGo__&ꑃ^~t!uK +j~xTfVtJPZSXevdY=56|3[2"zku"`FAȂ[w^ o_^š'3q׋nI:E%ֻjgUY*ƺ6dk(0+\R7^Ko_&XVsH?OW=(-co +v{m| vfvzkzsz^oxxx(zIW!=Boo_Xf=q>^K2_[zg6 m B8 +֞P$h{wYo]]Nw5msB=סּ,jT  Z`XEzQl"~KC+™6,9GNj!ɱafm;fXYcNzO-HzrFk 3^2kz[t F>, CXCbkE:鮥P!xV#3#(aNj}Z?|k{utojvlD/fG# ͧ7`Kq!u#XkΗ酙3z^[8_tq׋I@ ҃xWW V|뽈aù-x'ƻ5^#93:泫sad)v'4ݭ++Oq%'#cn?fǸEX{J_> 8) C)u)q6J[rXHkbgRM+2漞`' zz3x>e{1Mh܇/z=^\լZ;Wcq==|{J rTgVb4n"ɜB> x*kYz 7UXߞ@X/_F[o鹄dg[/{v̓uWSx?bo1~}K 0";|^Z*-pZVpƣl2xW=[oɎez;hUOF r8p]kY0޲a_xC`ۋoH}.ܦ}}9_NUTU9V7îo|~cfͯ~H+g™fV1`l`t2w o{gOS}K1vȽ{~m2/땳Fg>[ow˴'OH/]}|;| 'T^Go%|*z -aX뵽~ +vo;XƬpd@&DW3p~%>_Ou}ۯ+zDs\mRF6^gW;iNrx+YĮOoߞaĔhL3+g}h 4~N7޻kp$Yo5p~Ň׫ܯOθXe/# >@zFqqonXͧr*k$ğsF:O^R骙[ŲRfQ[zZl'* {3Xo+Ԥ™}Ň7;(GoD{*G\oW +o3R|<=Vv^zvoz×W%™. ׻*MXC?x8'S8#&~/#+[.:K׵z[@x/xy~Uj[(7n8T ,^{\NǦ5zކ7zJ<ޤY ϬpVڣjUpFRo}U#G\blY2w r4x#p]KesǑ-d^;~ПY4x쵁m:[jY >8E'5څIG7wᬝV~Pcf5޼Ề6{%h\.4Խt}x= eBrk|UXU*>1-j p7YEӟ[mV:RF75oqUd''# +|f߾7oȣv{Jo`~^wru^n@[zījf@ Z>3YyE35^OpPyx#UsFd$4DR~KMX·s~ܾ[~eM;xq 2nujDzWo3 ިpe[@@·-iduYݢd8_OnQqUUmFdȍ ./^ߚ]ɋ۷ݞG@fnHIY%6b.zѦVވN}=}U}f[;i:xr/ŷgW7CNpA3g$mV{d@_GOg҇ gzQӰuw{(J>#UҹZLt\ΗoU;x=zj5"u-Y8.8u䐽6j# 9[Vz3]tHYaG!Egovd7U'㪢;#݋qU^9&w"޿0֝F|ެH82rBT4#Ja9we|rQQ48U9Y^J%|e}+@mo k\꘮Ye."^;>zʪ뽒ʷ-qr9,oe]8vqdFV :gyiZH-=$k.z^W"7 5"bo^;4ɍsEa/DY-FLo$$ +gj{z-/]©=, +&\7gOYcGovd=Gx%X6_Ei|esjN5/n}C{9)덎M)6lE~m~ckW*Uߝm_$㺹jy ?v=]HUvq~^wC}I]${s91K3FmtG]FC+Z/鏷/Ǹs‹"tq4oi\&ɫFhږ7Zfٷa N#"W2mOHrF/&;Uls>BY9+e<9!z-|wŜ˯7.;;[wTW55ةuX^u 巈P8w؅}" ˧OT|DnV|d7s~5OjܒF}{ {l o]" ؤ~Z 8{T7W6yᬙvq֠ +jWnNNrǯ&xE?ofjr+,՟7;@o&9*nף0^'hZ{mv\^QE˪MށvyyoөwC8 阎F'އt:F- +>pp|ò;UmVTq&10q= Fnk$oa՜wF.Wb if rDƾߥKr$otL>?xkzϯ7u +M]XJoI Y٧W_—%r w4x)V{ʒEЫ\ͫ`k/W X҃U ¯>ާmGǤ+?WnoFeAEXé™^Z¥+[b/}1,eOQ\W^Z E/{2]/y‹?e˝]:{; H;݁A-zBR^@>*꽛ujѦCߺ/ >".W~]@p4,`/3jQٻ&<嵻W_w*BjԠUG4"OԻB/S)xi[u?֫to +o.YzCSξP.a2D0vQ8,Y",{eゼͽ{3F3ЩTSȰ%MX—Cn5P=d Zx[^JA.ոٵnxBR7MUZ/ɛ™^Kϙ^B0o]Ie;SEWKЛ1x}oDY-Ud}cb6(pKjñk.2w wzE-;|u3ͬlLCg5^hne5 E. +*+}_济zWm@U57fSp-/ ]˃Bܡv{m%}:s)hCv< 4wMMofQIozkYoCctRC"MWB %~`vi~#YhP.{͢l7Z5{d)Amιk#ydxWҌhw||x Nt&xoFZ7ʟ(Ta1c<۽ 8 &`&`G~8/Ns˞kzE:zYTu/%Uy-=OnU8l !{KjiSQNGfp?zvi^) ??l6ДMp+u.XlƣԤPϣm>_OOP,.. GEohx.{OԛȪWE̾D-}7b:ܥr+S~/{teMoݖ׿yl +}p;qÃSP+'x&V~eG[I ؿU YK0Yc݈]>p7l3{5~͢=;Z+vz7>:`d^e 1Ea԰Pv*R73xNZirq./6?xДz'Vw +'VWwdh2FQE|J +.(B/s/ iE ܪG% f-\"5o/%м6sBQy" u2-yF rX <-CWk{m +ޠSq7wVs^+s*qQ^qߋB3ŗE9`rvmL)YxX^N+D oׁrojA{#*ɓ}>R"4Zrp.-yi=nxv›`F>C _^{E<47w)Xյި#^*IuJ0_*V&'/~pn#~J YtUSGX4S x@%р̫qL Kd 4\^x?Cv~ݧdlP5GSSt3㍛;xG#KSP>rK3+*ign3R z + +F)H. 'ڒk«k{bU oϻj4y .+YVIMoNJ4+^<5n>vLXKaKA?޹+7wc4I1(ͬlM 0ԎqEîj]+wqCㅒ28 4`ڬ-\j)0yUFb 4?e^J?yB'nE`_#ځ<&V +>V +/(2qkd +Z.d;27-Q{xwa ۼ^yIdfD{|22i %հ +<>)"0jf㕑i,^:^̯INWNjv= +gWѝK/cXACk2ˤl]f~dז,8mV<xeυ[zyʓ޿=ul&qo"G//Kc\P|CD>"7@`f2^I pȥg ՄGg֫1fVx~ gzϤ~+XW/f"lMcߕUW/s֙rك[:Wk W]!'xq0x({p K$Y/'FZ_Gvԥ,Q  voU3wḿ<4o^b% Sp?xˮJgL,6AAg /Sf<}78:xi* &酺_uF" 2=`iYg:t%sUiyc)o57zK-ےl VdL/9˭[܂mpE8ܭ.NS"OHrxL:ŵzf (bF%H&uxX!o .1o5 )bgf6/öf^m oz'5"=Y Ł(v/ eK~pvѻ]bf)X5~'}V-EUr୥\ctd^^1 J`l{n*," +ú ~<8bmo (x@(xO9k?S5ym +T +vbnm^S882[9u`jg/fI{ofl +GbS>fV=W8$*jN>kipiV4ljizA_m5kp}d|_ F )GZi)hα /j6-/& NS)1zYC: gض ͗ &A7<)XZ+w֙l\5~cemୢJʽSc`GSژ +GkBuc&YbVY(ytq߈EWLL.%UWbBF~j6NmM6\ߍ E;$fV< +;Z/ D=oE6e !n(ybeVSI#|"lsW^o@^Kv]f+/6^n_7wh@7`6mâ&\5S;6/|ýûMI0訆m{!,^@e 2L +y+/Wʝ3%ˁaLᘞ[z6DkK} X18:Jgї1kewS(b.~]"m~~}ߍqG R"՛ 9Ue{0s`z͗%w@~!8n| uC\^@ aRީf-\GF}c89-YԅKZ௉wbx+]#@f3^a3аKxab +iܸ奝"J=[;+[o$o9+o;^UlwL~qA@P8^]h6rn;KQQ-Jp @Ӌ %nZ/.,* +| 5mܑw*/6ELLj .|ju}d')XzsNjؙWA sBzq;k;@kZ32f-7nXȚ]p>̙Er(Â3x+ctG +~]cǞ".H/Z~FJܖJbϦ?1ضip6n2uy4<yqez1`Vp~z?_`a&08G.y@ܗP˪)7G+Nc5 [to+#5bT8[zqm%|Y^>,0J{9q?"wK@[}Ѕj?nyY]?լWpa{3X: +IA@qA0?]MKʙEϔNc}vF嶙AG4-١r9Jone 0qkťf .t&/ˋV)nƑ,> H?]cgffe8k7>`%)Hn +O[o gҎwg3싄/dI11kn"x.Kf;)ܺ^+ʍ*!N^60RS2\8'K1_—ԅUP\u#H|&(8\J@0Ovm&Eؕ&jv +4op^/?8EztF5Ks*5™%DN~7XD-˔[rM}1jT5P7{kmMeEeyV`Y_ug5qI*mSi<ZL~pvJjg +_bcqAaQ.™% ;ޱ*G%K5 ov]uvᅑ6|(.k}/U^+G0*ܣ3G`'pg9m)k*I3+;W.n٘/vgzf~#L3Ii?BH8\"Whi+2ިrﬣ\gi5%+e =~A\Vȫ_F.3p\<>{G O׎ UsR#٫r^:0#$80$+ +Uo35 g.Y53,,1E~`"N?0c6 h]csf@*}F-:2܁X\E +7!sR#V8F+^.t +tXT~UI&?Dp%O(VxTxK!Y\8cQcEaͺKڈڲF] +)R/0 ҏu H>ضQGPyU&YhA^;rz=͗HI2̤fůGʝ0(嚂772ovK"DaO/JK(. Ja_j*`{&[L?Gbnט>{㴔6,oj?>%$[vdޥيyMWvr&K4j﨔yniUxzEivlӌ %8厥%O+g{lӫP4&\8 ++g(WEaYYhkuA'1)$2v<` Ra)ty6Ι17tc4N6^;1]ȴiPYXNL5%7h`PY|?١*LD8Un_ܜ*mTj橚mz0Apzd5E 3 K6Ң . b##=>Kgrȵ .PNV~\᛼>PXKk+HۋyKkpc,mB6#G"Ðhi*A݌p܎jLN.h&:#*Ӌ1_U5-Q9jv= 1sŮ 2wÝJwLA˛k<5ē 5֒mflC36Wy&&~+gr+Vz'V9K" pfgh^Yv6Z~IXh ₺,0Q)""Ŏ3:pOyd uH]_,^]8"p 8 _0_&`tel3?8(pP)rp(voWYo * KX5+l5mQ]0+)$|ag̃Cl%qpag-<LK8/m`۫ƭcx8SFhlܢD$$l 0lMe'FB**s庂W^oW +g(hxI\*Gt$teaCiA[8V:FޟZBYJE0J@0ӴRV}d`۸UZop桕th^[Ak<h{Hq폙qm3:7n֋ 4 +DzaIdQ͚ዲ"ƁQXT)uI_)\8ă3g5a|8mtM3K?m2t)o*[^8O/mLc`|M񬍂%ly/  (c&+ *gtZij +\MEânT%YQW(kmA}X`)l @>z&LAor? h>4Ӵd \mK}tո)Њ7rfgi0 +)-\r3\xf5J45/,T;*Ja -`^|:FFQlfI>>;!S Akzh6SE/PsS|"/bgz4.:۴w ~w2M%prg[kM]QnPESѺ$֋CYM;4|_P]QX,H ڢ{֋yc$j\(zZ>I?K֜8oW˥_80剩r-9ҢQƄI~NKcT\ln$xV۠\'" k3"B KnEaRey)vOQN+n<=M@vW[ee ',m-45nU፤[RF1_ҠγN!TLT\s&?‰r3Q:TnfoYH[La化Jg4_/ +".H0 +K&qQ^ )73rCpU$XycNvͅQ{R\8YX4,|)_Ә_O55J0pTSEѵL/gZ!0K03NR 6aIY$."*hGN,,<=L>>lmj>? %rׇ7ϵt:,~1kj.(°!mmrzଫZt^ FR/ +2FXVF#*E0,'1(Ng7kACs-zq@j4εWb|MgUFr-ֻV*WQ`9t#+׊xgf> /܎&-/ ,(b쐢Vn!z&( 8$tXq:4mK)\ tUj,Ѽ7h҈^`m+C~ tIQµW.bF{/3Sm=#20]AXP6EmGGgj>:Xw;Х[xs +BzqlB㻺mdl b+e[TV3(*+"󋚒FU#eQ[)j ES&dLux 82pecʱz_9ǓMyyɶ9'e[[pUL*[(((k"80jT5@1LEaeCAN=L 7#@$6U-r.]m1zj{^!ZEdP -4o5sNQZ`&بJ&V +2bAgӏ%-@o^k`I +)J¹E<82Sn}Pnݶ)ׁMsՂjEqIQ +JRlfXP1$ֶGKuzmgo.ÛgܥƲǷRqIҩ[[+\5=z CT_55UAVЕX?EC)ԓ[æ9'`nKg`Sٹ}T,WfE.ٶͶ5tqX8VnMPn-S*[`pZFuzz‚H$EM*JbG#5\[:Xtl<2(m+V +V̶^ӬflͶUuq|uڪ\e9CF$_ j~IRԈJZ)JEDAAY=|}~+BM*֡P#m\rEmo^eb_ ɶOlt|bu-\T)-c:3.Tc@2_Y_V%5(+ ++ڮNQ-p*y& (\?c6#f`+*)X1zY/rӍ*JZ\exzgZ9q ɣ+eI *+;yS əG']h6i5MkKg0_Wv11n6H pn(ܴv)WIgWz=9(Jj4EUQVղ) +#ԋe\cH-bA֡Îd"^6b*=G/6j<$ZOjg//lل bEOi[UV3NDz2,(*J$+ ˱b#9QY$f:wl`f2еmt#/r B+o3 3馔R:RMЖ2|-ZA0hV[?GL,q*cIq3֡P.Rbȅ6RLkE=o~60߲ U[W5BNMr-rHZAIQU,ʮMQ/(KGgO[l򼅚6P)L._ͯ7pMlr[ b(IbJcrȈ&j{|&r):TZw: ):L/ۅzVp:OYZ\CZ)jEIASdMqX%ǓQQP]d``Y +}Cެ]9 p˹spU31ߔS_&ŌAQR)f]ꦨJHW#|&tN@4.bب}E]p½3L`Iy)krY +b jr1cIP5EQEW˦~,+J$M?pO%`Xж5o%zj"pb>朓krU!j-|d~` %MQT'lIQQDUs$eI?u #Gq< #qKq-e\$ZjWbR)W=APaX0Fb+&>~X9 (a :'WZ~g\$ZU7_8|/ȯ zVQȍ\DV}~6 kkD+|]휱ߪK:>XQwL +3_Ք +*J:]dWM̃cP~؄}Tȸ"vM.ȸxҩRrU|}NK/`%M#H)~|.rmj3PF. Gov  gSϸR*KcZQPT( MQ;<%DZ5$dM??L@<󨞁}K9go6)g\<2!Q#)cukg+E%Q}iStZQ={|}~6:w(/.[sSNYܢ) +庑RVBU;d5a5EC]ܦ%dͿH摛 Û[QEN+W]ʐ^m|&ʉzR{RtIp̽E1xG'¯GXLoNg?ޑr9J(f̈%I:M=]StJEYwSGW3WK78szQp(WEz|_z +d"/rOa)+ЛonνVzj*.|YKY }EOhkFBk+6$8:\J7SU˹wr.u(YR(ZrF䴂:],*jfmIIuDRv$͹W̹x(W$d)e)+5aJT~ G-ά<%fM??y0r._eo+ɹzIQoW/VK& UM\x|}.$PG2^79$ʹI_C\}%_zNPȊkusKy3s.rMUnҤS7AjJfA_+[ =ENh9":UW9{ .*f劕 +)"ArS/L>f`6teµZN+RNNOl8BE^'N0b ,I,$p+ב9J%F(TtA%[u fղ.ttC\/+R +V@Ht$GoS瓛h +0Jv +u,S2҉P\U#O_#=~g]R)݋82bf?+Hg` ͑u_?U1#di1U4E/"=7'V}EmB|C~3U ru*bFL>~aEOQ\~E r2F2"g6MRu߬{D6lUKe`Qe]3u2dec(oe_4 +ҁP*יJH'e)X_${JRDFO!11Ͻ"GO矗0ipYE1ʕɘp eAS*"{VͿGYO.n+@@<1ԽJbo`zyWI1ʕ%grgp6w#\e: 8g>0ׂvCr2VбD#<oEɻx⍴r*t!8<(z"'[xʻ!VQKȣ}rϹmwxcQ9&eqJaTNG@DŽq[ =QOUNG\Ȅr(Lv$`3yW9Ɛr^[C-9|ѶtUS͏$)E~ߴLQ+*?6&@oQcESG'j }M1Ɋh1>zGn(LV)ATL$Ġ5KX :Ơr1h%Atumx b2$5MDR)jǠH5R2Etb>r GMQ~\)RH"E)RH"E)RH"E)RH"E)RXr5^c~z\ufo6kF .9sUovoq3?5a͙5wƙ_1n}vey'7i9ˌu+_pU,MzւS[ĉ,7m)ӦM2uҤqN4aSMۅ0qUם>ssf\3h`~捛4~ +f`k~>}i+79}ܲOFN0?+1iʤid~U_ڎ;r޼Y{Ι=n}fmμM5HeӢCj,Ə2)φZ=N.lg4O4'O\a2vn^鲿ojǾMdXE2ȁti9 ^mUwi=7kYKCк5w3p:x]@aWAa2IfZЊ(nHePEjZEbmjZ-.uuQQ}|/g7M&|s==ϹxFMpqN2Ƴ|Fqœlj/NW-^M:qꉢ\|ѐ!{@SՃG)1y´ c'pqSNMʛԋ#'srRT bH)M;Έ6DR'Pm0]M( A3INUui-)2Ex┳ϿtE6lZpQ cU'Iė2P[z4\ +Չansxj$Bo1!DOj?uhmD4hRJsA_TB ]BG#]$չB5k"ʸ&N FC*!5j;Zxd48NրF%6wJ1wj?BkB"Po(Z= n; p}( Ԋŭ( P hm8oֱͮ.""u␈B6RgGHm(q?,#bEE1MLF 7ԋj -y׬ F/(:Q$,~'Sh">Z?Y qu#\tG/}7(C^! @ +O:A ,4-jozMjԅQLR-z?8q7dN6hDf_ilpˉr?[_ф`Đ6wܩ5?DU+Zr.;bs&LnDaW > g78|XcNÖlrDوC3Pu rP!Tͮ!uNHO0 7:,~F谍a)NMfSZ.խ,sRMqFvH5ؔB: "l;8xa*kP+aPwŜB8~xB`܁B4NV8Մ=@e!\_9 Hq] ?'R`P!Wur;(@1;Z)ҟXj%>O6+ 2i$b9 Q߅ Һz* +SggeϢU.jPXxӣW+A{cחGεh" A3H;S㴋9iBb9`\[IQl8T4JUI;*esaZC>mP +b.u5NoJeX ],7,K ^M7C7cXVx\XDhPG`Hrk炂Mw?;#w1v8145ʒ?bsaY:z.'w.jT(wsIw1sDbST4w1;צ],K +4ri.'w.ZG*.f#WpWʡ^ԃ\sV endstream endobj 1131 0 obj <>stream + w1>x +V"w1-kPżԎw1-~u//GYhV*ŀ\Tpo.7r] )DRHTS7V +ѹHՊwH5B{Ŷ-uDOM޷.WJϒ̠t4V\N'E;:X!:T2i,m$й,!>ָ!\XdSS\#o]НK:{ ŶsEJO wmEO[Ɛ0/.V7l Ve9VŊй:0&6\˩.V葋4rR[P::rŊٹ ^kC,/Wt*s֞H)*=ܠmZY$ֹhYgφ̙3 {b-չ`qQ'[ [Ŋ߹t#h$Y/.Fi΅-ko`_Ajyŋg ER#_͸װРF … aB%)I| [ hRUdsF3v7r +'yFKPfA +/P@U^+,K[M:ҳг3ԝI=&9s&x#eJQa]LGpl²]=XIstR"DJ/MpJs!h%Q, -DLUFoe*~%F/;.$bZu=vbWOQnAZ8OKXMW$CzRIG#+KbFX/"D^>d3B;hp@">mG8>K+Ba^Z{#k5&I31.P N7æde>"MH=6cƌ[nZ&:m3uR@Z,˜x*8^nX2x?/0ID:{saB[2Pk"B1dM%obԾ@X m̯cS@tȣlEۃ}:y`vTF^)]2ŋimPR6o"yU,Y-gVIG)^ڪ^߱=cɀ<ÒQKĘFh(A0H׭dpbB'Rk~k1l͑lKy hӆX-6S-U8&ƞ2es41LSd]NHsJO‰ 1osZ.5"%mڶm@MdZ$9Դiۮ}StоNmۈ@ԾC]v랤[U: RTt}]{֧O>Kn]D=AU]{ڧ{ g}g=w{]:O%ع} :6 +ׇCuwwJP1 ӥGh8G>hh=ҭJ$5&gǝ:t[ȡGoŷ>lʕ_._>z/g_>BxB<ٷVYͪ/?}է^pbw3 ]p~Ͽf݆ ׮r/nb-s;f͛7mXꋏZpgHyu 36nٺu kݗ\qΨ)Qy_/Wk7n[lZzE^waq +υ-Lϊ7O$hxlۭ\@L]@ٶm[ RBx6fg?O>C+oŪ. cƳ7^xo}C?˾o +W@ِ,O~鉇ͭ~x]z? +U@ِ,_}{o_8os_]a +Z<>kjnO~Y{/?opS&Oysotx츉ܹOK_.lYݗ>x{gSOu1_>ky +X@nM3.:rc&_}xD̽ӎᡇ qӮoo, Ա'~P8pQ?𓹿*hϯ\y);`Ǎsm +^<1R߀^ Wy)sF^^UScL) œ׻nՃ‡ۂ_@Gdzع^5]@^f=vKsתN޳xD{uԡ}.=ͣ<OrvruC؜ (qmڶ!pE$wlSǮ, ųkjr{dIe8FP6œor@V'x.3+{-'s)' +R,@yIJt-TuW|Ƴ^`Q_a Z<シ%s<75};l/TV|-|o=d^u2 , T<̛&r6nX]}{u\}ݼR}Ldյr/<~/oƒvսծ]+YwY 8zw\UUթS'XZqtuSƹ3>`e瞂=w%YX'* $rr1ןugSƜpׯ_r:6ȯ2α'ӓj郿_3;zؐpo gמ]E S@9ڰOEz_vޘQ v D k%Og ʓk9rG}Ԉ#87{]:fwlٚ\!n?=`.p~<< #84R;z;ClݺE/>zg]{]zO\4IƝyq?<88h=/d^ߓZ&͗s뽿ܛfx Yf/p˜Q#^>e}Or?~wwܾWv\]yS:n~;wKٖ?Aw^񙥏?CӃ>?w]w:Ϧ?eA亶Pl/g~'|"Gw̻vڸذ ϻk a꯾}7k)^}W^~ṧمgy}mas֭YՊ->C{W:r~xR ,4oV}/\/>|ɇ^4q' EI3%ӓJЖM7_v5kAV2죷^\g1O9t ȲN?#,ۚ\IhEz_-ٗ? sV@LEpI/6XfVϥVm$W2מN.w)O~/>s=ts|՚uQgI3KVW /{{Br[l֒* qOo'zdt;BQJOVZvY:xey;T)]uŷ?o֮[т֬_bƴRWnIAt\+Wt׫W N}du5)$~/%joz+Az6a_賯l/W,$gZ޻^t=ѧ/b-O>xgﶹW'~\QO?;~l|δ¶۾MN=S7O~o|/ֻ7>x?y~sܫ'vܣEI>'}q*gDhczBNE9K?z^kưҿ?x?9:pf/fg9z74G^|ympҜEzD.37{GOxe>mΌ=bȁ`~FC9cOn\x|.='(<1[w.8;^5#N:k?usi-Lʿ[os%o9ءA5Tܽ< r gs/KСG:kˮ3fκ;fͼ?dO8bH퀾) +twǟ8+_w3'y΁ ?8Sǎ?S/bW 84RX~2PvI\8U]m?yiq昬8O=cvPpܵw>y>N}9=pG8J;~_HXܻ^0b4 mܻ{Ͼ /KR>{ӫg|' Rԥ.V9`"AP@uҽ.z۷_~"ң[Nm'ީKb7S$ΩJУGYڵҁ9C*vsS`v;tةS#1z8;6ǀ-ӧ=d~Om!n1Eۧ7?4!yOm[l'5ѻoq q6jU8iS0fЩp S&zyq(P=ƱBjΙ0Y<U $zhc?ljR=**Dk‘Pm0XW  5ںh4 P`6Z k)Gj@!i5@CC0RG@pM>N]G! 7iV_Wi"6$@"Q1 '5 `CCX$!.X ׅ#b5 +j1k`(\ Db#T"Y5jTUzѧOWU|`O Y+"HP"HFBRIsd0ͭZ<j2d}z)&\!M0r1CGD^8nэ@a'O\ RuO{jMC(Pjh(ZoI 5P$:R+"∨P!M{;تP II8' +VP N ՋV AmC> T~ZDa]Ejk"d"PW_44DBqdԅjkuQ-uT4ѠDA&buB5!lDkZ'ʡn\"h`H*u;>b!qX6ߛʼn"7^2}liw@(:hцHCO0o:C7†DRWOC¢Wѡ7dE[:9%S?ݿmˎv.v;os{!C%=" xȒ%Knx >#8 kF*BQ,^xMwnxD|!.w%sg…NP <@s+J޵K2 'K)X+C+ Qi8YƗG9WkQ_q.DR jy] fzQoNwTdC&$)|i/ _CӯW?E ِn#ڳL$Yp{o"o YUKC,8mBc*D$+!IMtzQ<=!hKАM(F^|=,SDڐƏ_ ԄP Ս2 9- ic72-Թ[@^y͑l?cWU9F\5Y*.|&R$ E@OܚcM*o,vq;Zx1}9aY _ WC؄8$E-M)$5!ZOi d͡ E&M>ShH9 d۸M`xCʪ & 3ʢ!\èb\RMH{vt RMH[?˺!Єb`u uCʭ Jk/WCʹ i zGېrkBЏyS^:ER )&DN7oirlH4! (ޅʱ!Մoeڐ|iBPqX3p_Җv4$ x_M+=2vGLe^ &={v"R+>ۋM ſА +фa}5|p-RnHjBPS2mHkBP6|Rb_Z! P֐ЄriHEkBVG45jRPR + M(ziن"M(۪iن[P˒hH97!`ܹsyXeAd>cξ솅K~w,Ჳӫʧ,lcՁg]~'_|Y=:νrԛx߯;nz!zw% yε幷>Yb'o=[=gdh_~?8Rާ5k|O\zyМ W>jݦ͛}+zƄcYholϼbnݴvŻ?~ng!~e7nue=v ٳcn4}no7gXpӵݎy]@ɀdYs"vWSd`d:bpn @>sᨃ놡f dV~_yM㈺yd!3 vo=GFY~$~_#K~~`<9[nټiӦm_?&.=yR6mٲiúk׮۰i-V-{5y㞗U6o޴\W߬O^9.e/VWؐa9֯7^~7>|,O lfYP3B1M?=G'ܟ6=lmcSv)gXYe@$3Gg\y}DJck 촡V>pic իgSD2wֹnK٩}t% ܮmQ(,2 m2`N;lNeXfd-]2 '!,f@#gɂ + 2Oxn:oliH.Y~RsV}4!ߵG]vҹSvm⬫~re ylݼa/?_G~w?m鸣B2 v9a yOY0B[׬^5??% dusӯX ~X6&݉i6_z/}.whӱcϛyuHӢ(iZlmmWY򷟾Ϲ$*PaB |(~ꣷ_`ݎw~}%ns[lٲyڕ_]7ݓ1 #)SԽG_4iCrvuF]857lبcÆ YI3!vf=fͪ-^;CRܻ$ĽOg+V~d5{c9b'o?3;~Ϟh olϵGx~ۯ?g~`. GWz7^~KfM>i>7Q +v sҧyY#2؎.Ci?;,uG6 B}2IW\;릹7[{Ӭk.;#AgxniΜ a=vE$®{ѧ5I'O 5y2sTM4igva}uhh۱n{4ãF{ Qw'ڰSv_M. q{ݹK"uԸ,n5oS.=vݷ_w!߯OUo/%3ɯ mcv:uҥjԱ}3kai+(fn 9qzy|;h8}a0>vتGV :"ؐ +Zx#WVT=)U ,Uڵܫ!ʵ"Rs+#Cu4fOř 6Yġc#^Yq1Ʃ4stc E7DS&WRM:5 hC] T/ևkkS \ +EB#P]8 GQ*pC ZءVERDh]kkkP0R  ԉ(DY@AqZ6)5*\(oꓵ"KDchnpz) FEk:6U+&EBOPd]"AuJDfJ>PP(, z(r\s5"3P&6ŝ,NaW > g78|XcNkiU$Fp8EwEgTG Tbd`ސ)$'U JwrdR `Zn0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 S6N>0 0LI[ aaʋ.!O13*M+0%g,aRd%^ůi(vaa*TAn//9l/o0 0 SZe%ò7Epaa)(ò0FUJg~U 0 0H!Ę_+uEͲf9,0 0-KqĘvR&Qz_=J5Sic-~Ub\B&i0T8EДP'm4UQyF!j3ӔL.SUZy6aa){ +Ǵ9p$$[LRb j0I}I3)ԹHWDuӴ +MrϨ6SM30yLX`f\dU0 0$)ˬt1cec1N]F 14Tҋ +*e"J#*M"6IkJ,<9M4LuIM'K˼$2aHG=:Y]IstvzbS5/RWUMjӨB3i3Ͱa쓘^Te 0 ;Ec8Y5p1-TJ~qc1 ks1UN +MghLfhQǬ)T:veU0 ô-J9 Ug ]/*1pPAI}RWHޠ^$DyVz3i4KLv2$&2aiK2$=ezA1M3Tj*T&Z=E +E$=j3 p-ITLĴ/Tv2Uyl] 0 c^1iR2pcx(J g$QKR_" ̈́*4Z(ฤͨ0 + aA%2Iv+cU0 0ՔE5ecX$=F=&K(dm1!'Jzh(@Ҁjs4(C" 3 6"t*3[`&.Ua) Z㱥1 0 c(u =]<tjIbLkc $%at.I;fBNZKg6$̰4TavLviY̋QFUK2a1ez i1jL'Z]O_`gTeE1uvY$UhZm7 30LeiYAU0 0c9& -IRĨ6C9Zꮘ>xV 3ˡk> /עJj3UFX1 0L)}2G,1$Ǵ>4V ɁN\Cm&0`t&rYQ&𸬋F" CUbN\AVLz*Ti3[EQI6ݺ_mBaaZ'XdIQWZs)v!4$Ƥ/*èT1ws|)Ay SNu*̤)]"2UY`aarƣEÔ%]eW35cZ12I ( ۤL*(&g^B>KWĔH"c'%a\cce1$II;c:q%0 LYzYB&+%B3VkQO dCvR22 CEda$'i3ȚjI 2⍞nM尨LmN-aaZ9OYJK\̋&+djTCaf䛁ܢ$I5PG3Di>@OW-2YH& #Z%e0e)Mbf]dUUFU:.*a͟aaJߧ,Kc-z '+a;hu/HoFqTPCeWFɄǩEF2*$ma4IѼyLJNbRUkɲUe<}0 0}Uw=.Yor2$ƨB[Ika!F.䰡F#TILfPndN]OAKO_zl 0 Sl)K2 z EnSs4($IC=zS8J/Kddu1#$̠ШŅu=A&1`2G_}QYVӗ,aI[2̙3:_)鱦Nq2Y {\P%M9d=<5֒()Kխ0d ӝ3&Q+(.IR + +wt I&%xǘR=1&ayUVK[91q^ɍ^?rz?UP#<#K&gBvd]Ub4|<=X,juJ2߃>բ2^0 0*)E?Dz2~ݤd(^$QSKfQYt_i]2A(^iiVѽ=.*ӗ 0 yOYZEWR=WRE]AX!G*pDbS \2Ef2L.gT daiQPFSU&JXUeLKY-*vKda +_̲eWJyQe.*7+s]TV˖( 0 S@bxi 0 S"Íad~.d%d1ӚB 3p$TCŒd"QdZ &(*10<1UerDK? +G0颲DNe1eKQl1 0,yO(\H2 O7PH&NHqw҂1s\hBX +:g-Eet2s?e 0Lk#Ҫ~1e .DKKzQ%UHbFL,IuN~.3֔H͠cqfS[tILenXR:}F0 Sf5[dYW?SL$OIX$oLL{ JYYtRrЖcR~-T%rHT?{YjnI3 0LRP~ʴST2i9̚ܙ9҅jThOj6B+Ԫ&5~U2I)4E=KLJ$-1S [a8D5cU T(ca*BXdWFd4/Ғ~|$Jֱ1h.$o&n˧6IytH$J<)|.O٧/:iQ0 ôprYH[TzlJV|0ǚ2aR)E֔}U?N_eIüy,+,Q},% +ZwK$$$*56GYo2hzw&8YGeRvFb/(3o 1L;.r6a2Y,aAљJTKGU,(T"UGyk9I[KU212<(":ѭ +vC 6a@-uoX/,>Y\TӚEZ=e&Q$yDRKKUOkL{i5Z=d.eE皡1҆ZL%6aJ4-21LF|@ & [,~<S~ڱkL EGY0 R.q)פSw$r$SKH*4=6IQɔN\ϴp*g16a!Y e 0L+D,28N-2')JdNJ$Gi&9_)1/BL)6{$Sbq=N_bvhYI٤1KFUl1 0B[d$)I"){F +(m`00T$??-z$L:"i,M 0VRT:LZ>)m!k2Q֤b2a|)A9D d%YR5aϒ++sU/J"{`kIR &^24Npg#t' T!PLʤ0PGLaDeO%Nk8Yocex\EEl1 0nC4|MdZm&eGA,[ۯ^:x뚒1wj<Se@cfBZcai"a]-2*̨ #Yd Tr2Ti +9$]LV,Y=6TŕkLqRsD +k1 +I\aaieEJ ْ bΚM˜]BYOm锬//4#ZThO TkQ[J-^\<&1G)I2a5S. dSS*Tj'[=JWTQzTRiil2F0 SE#1˒I\H +D3TX|*UQbJ=yKɿRrUbRqK$&>j#l1 0CZd%K.% c'7f1 SjʬS3 [6(JLknI1Q0 T6l b{S堺^vmF{S;jI%Y.-JLk9"P6a@-21&|Hq[MsB2ʤvUEhGi:?ukh;DiEI9(sU,&jK(ca*,2}N:mv d:(8.caxJ"Yˆj%2w$3 T* iQgCaJ)h?(S;i9f7pW6a\,2ijQ,2WLJATjrLR{!S<ԦnviOq`.(caZ'űAEĥj$E]-5%h0]h^RZ,Pï(caZ3eg6ZdU"sXWf+3~КHjvQGSͅMW9RJ+ovQfl1 0PQLUI]'}ViՈ`HJɢokS,Y3I26a\TC)… +Yd6bLF솏E8K]IzY2)#QE@:n%]F0 J2eYv ˜,2<.A=3jYu:GhH>%~Dz1ʤ"j5cik(ca*Yd0"?a ɔaAU~PiL.O=&&di r(6aGYdSU*ԐAy M+ su8jԤTzg")SbڃZɬ6aJ1-20Fl,2G'^,2*!D{_~z G')+ FBXdT!&5bj/ICjR1K,b.F0 S"9sf.ļXdNLR0"SOv\"54`U0LѼXd8j-2I`Q@YI`XR%HrYe`%0L+GL7l,2ii*rLJ#7LDnztZ(ca,21HJk(E%-2I6X-V^HςeNca`LO,2TL(4uuLRhJ>2ʴhJL0$e 0LYS"1gN +Zd4& |,2 ْEO)erl1 0C[dw"#xȊel1 0Ť-2')EfpEzuWK(caRF-2,28МEl`2a8ELNoEV'$"sc̗TndQƪa")e"K.yXd0sYXdXe2a"cȨ6"×(il$P5@-X|Iw!v%Zl6X1 T%e.,Sw-gU\ȲM3el1 0Zd֊s,{T_گZJ"ˉh26a*l;u?a]S4" 1%0F6Nx ,6aR,2^E(57<-DR|$M%V((KQ0 D[dZEfwnap\fa0&bU+LG(3`aEURmf!GB[dҸOU$Z")/$sMT,4;G(caUѲ5LFYXdxV=暞'aZe:F60 ø:-2)]-2o5d2a-2u֎4LzĄ|a2aVKXdnU*.+U2j~ _ٱ\‹P4{בeY'Yup-WL[ȀFzd*%2t:FR2킨gTG2EB $2O/ܻ!:f} p;79pw-~ e BR"ÊLr 1o.z&{+{!,%zC&H(A.DiUXs%2Yv\"IJP&L>Y(\W"#.G5r^WnDdݯ{z2AaȞS"%*+XFjyQıs}}íԘy?؆2A!$K%]NͲ:Gw?ģ `G]e$I(Ax($ҪeKpᎷа:$r{]mLf$aܐP& DD>DVW3:c/Wl2H(P&hH"ۥUG p 2vP)D'ݘ  eA֧FIq* v#twbV3!LB >ATg/EH< c} ֗ 'vFP +rH +o1VVV eA IdE}ind}C>p(dMtYP%YXYF'MDX2A^<+ +ffYip+j.gs+۵Qd-aWțeʈِP&DVTƬv01Y] =/ ܌:m~@+CB*Ls!̳VKmfc-ehx;+#M,k?2Q2AȊNZ"!Wƚ|,"7yH1]z9 Xd)7g?/$ ȊjUNE޲)g>C[ ԫŎv9ߐqv(q}pӍ AU,"V e /IdA8tmؾ[]oevvID2H V։p7t=;zFPA^ Ȋ:N͵Ц(:a!3:JM-޴qGr.2>2AIdAU}&1e2h7Ed/+mP&L IdE*f"l.) Xԑ(oY6iߥaԷSt eAxOH"{NVMo:3&>f11ۅ4wC2Q2A^ȊڗN^XA|C9`5.>$~[ó(ԉ6C0[$ |H",٦jҏ£% Ύ'Z޸8ǚw{kE-`A3$U/ +K̤KacHCtp(IȌu8}(Pm:mh^!p-A$yVVӒbS:)XMϰo}+ >Q8Сðəɬ E{h~v)Ա6#fCB $eS[-6 i@vܬ,<Ł֫n\CSEay5 +qx e  Id_@0>@.; \}d=n*d%!2-A<+ ^h^a|?ѡjYЮ%X%00"}&FHfF3<.v}#ǓE!L;@YQݲjةڄnɲ@VCaKop4vvh*XC/d,<;bW_C +pJe| AOAB BId_.0C!X͖|% HFWι3gY'dB*[PAȊN %]%XXg +f2 D*[(oH횢} HEaH(A:H",!x?R *8HPTaD\ߌ Z5 29k> G\(˨L(믿$ DVTu*&ȣiMPT|9 i-:rHI]5;jfc=fGiWџbdP&DYYXe +es"UpS-IJ8\7F'.KBV7x,oIgCàI)]%?2A$~eS+=܆4ɣ6=s͈PƈPWA +]$1gjt)(./\4>n?\W][$ <+ +Z ^a,ae6#:`cH!jd1:˔qCsupYdbaSB ] \YTI E5YGmm OdzW˥㢱u;^7ȉߥK; o +pf| uP&YDY.E-GON:>k +7|#|̘jFrBjDDl!y$v;s>JWCCyv=PcaB |}ᥩD: ++;0põXA><+in¸Yka|l67u+-½]`512ګHE0^B`2b6$ |$*nHl M^p}cfۉH ^܅ˇD/]Qo% YwoAId_0n0C> +& +^5ϸ2W2ľBnwyTJyqؼow=Pc]԰AB BIdEZ&RqGAvi@cFbA!ZT2,#IaY'Xv6^eW.42>^KpV(CnfwsP&Bgea+ewDe>=u̎]0w1Z(Ax7H"+HM]0n0s$3ȜPlrbD>f:4W$ Ǐ4u{ᎇJ42@2OB e $6eS3@{.B3AS{!%fYц`G~s}5~Q2>+G¡`B&1u e ew e 4$yV~¸Yj!-{"I_H %ˎR/R'5.An$*eUSC.% t3S2"p&#f/8L$͓+%uHw/PEd{ pח\|0" ]M6n6>J(!̳2,a"Z]F>"M#@ө DRՌ}z7S-K$ِP&$SH(dZ3dwYu? Nր6ęuN.j2Ƃ䐮 Zݥt:emգ3`q^S +1\"-[&+P&·$2ʰYz +{ߐ,P]`{8]`ÇhlaؿtB2 P88Ck!` eg e+04 e 3$5hX;7 +AC +3%Y #GWEN>YڻqI ;$0Ϸg:tasN>H,@,2A5$Qu-jW7K[E & #ap~D"V[kDsHz:mph cExX%I(K!,>9a#Y<`9.eDx0Ҭr슏 #F=u6:bHaceKrFĨ1 +"L$2TFR f1=tz/"DCD<Čc`c-ĵ0|Qı_!](]Q\Z(,.{Bـ*L$d:F84 +y>C +9F*9lZgn'gٽKZr +YIZI풜 eؓMz B٤gC(;[J(AgeXU +[+eᐫ,[ihG[Vxh˄,?ۋ +}'at.k. }E~n?ĎEa` ks r\(% 2DVLFRF!ԢwH :`$陉ߊxLp-'_ p_dVv݅'8 Q.>glwo9c^:;r[,/Q6U1@B#oDpLwT /!v{uX1i]֯ʐ'ʲۗ_Ax)H" LZ YSvьaM0,˟^2KHr^ZDz|E}+ +>E8).YR(#ocKq?B(CV&L'$2_3*,[W7f]BZ"̳ ^io5܈- yUl7<~`3iaE`.]w |oP&CوgWa-2Z fL5/H9` 0"is bw̆\g|΅d-onEAC Qtq}^Z F4`حBٹQB  IdVҺ`]a,5JA!X!ՍPff, pFT +%,maBTn;E<5,uh5u6ıPF/B~bI{Agee.OW7f!'1K*Oolo Zݳ+ܻ4c=qi{ךQ_ c>l^+P,z:=OtkٿF(s2AAوE +PidP}c'3QڊvDwd!Kf/Qa?>K6<8)]|5' "C:!vۿ8/Y2l_㓼W`6f,rcY_!9SI2 h8~(=}H(k=('%3V&LO$;jT&tc}Ha cVZ@+$dߦ4v4_@ߣg0/"Nh?)kNv8uw9ƚ('XʐCQ(?$ %DYPڸY+;nhYRב171($?DNۗ`V[^MFol977^>!FWwQq 2<ɸV(#ٸ"l~wZ(cFB _Id#tRy s)h""΢zuO-;PLdڈ$csT쉲dScOmb/Ů;s-eƣe +b^hGNAu_9VB $2 +BP]?MD,Q&Ge=l3I(}H@i`̌ebڸ$%uGaw/s<]~tO( elB[|(L!lD5ί8Vv,1޿)% +b7ΰen^{B̳ +Sjd +gx}.Y{Xon +}ju.XZP6Սu\P6'&;82AIda'f}x=DyZ;\ݤ\r^a^| qў(3Lbo\y~^~RȿEJ@{Tl'9t92ԃaU8Gvac!Sg΋qec# +AxH"Qu$խC3,|["*7]م:kA>6G1h,pn7E+a2pj@Kr+$CC ދF&Oo eݡe-L"P&CYVqH7+:!7[3?R4{M|ltxgolV&ƌuWĨ³v9tQ2CbU8Gvac!:9% lDu-TEz1\aiR;bq"s{ϭc"/.oǣ0H(;:,r{լ'.%'$'^=8h|R˧ ePvnB$]&MLB IdaK!5cܬ{~FvpcȞGHxv2V_9c4^]Wd-54F4jVV8QDdPfP6S Rn e | $7a-+_PԎć}h'n"T1.卯;^%HhS?ᵮ(V/ q5ge8NYj.-}O>/.A*c;% UGεs"]V(^([aE e |9$QK]z*VvʵO"wIq3:M_+S:^; S}׈VvT +k4>=>;0'VesB9I(Df'q! ɓ @؁a'K ;v1cDΣ+<͌ +ܢZ/(tIJF]T_&ꡲ*#8% owg\^V-yW(` e |.$F᢮S"G!. 0b'/{IX%Wn_MIcf4bӽ%[iS( {fm}Pvh>;'xQ޿G8 e |7H"C€P]U]?wU_CD]l!iDqƈB>6.d 8M׈YV9a/XAQ!ltuy X5*d~,+6I(AYo,zA:1;ʮqx%+Էu؉&8Stj嬒sLX4 V6*'sw&:L,,ZvQ>Pp8VvQ0veI(DF@X(wCWA| Y#)T்-+}y>L<-gfE1V~ܵoG/C!ogࡷzKֹ٦]W%<؈ q7-GUB _IdaVo2ήCԮSޡ@}BrIW=k0ŰBu)cʉe̿Uiv-!QKǏUBY$AHP&BD FǸ.½ +fMƶb) ml/@ + ~Ѱ`,de8|! ՛evCb.EHad`YB OIdꐕ2jUԈC1(YUſ؀tݎK5/_/O-K/csyc0bYF*-, + p]l2u#pC+F :-7e8(yAxzH"53Xz(7Q7uMƶ-&|Xl1e9">f`[CV/MF#2fD(C9 ]W!˜gv"oaHH$v2A +º,.du*n&%+)dS;Id(M൰:hq@5ħ\YB>6+Ct)c˻,0:h |q0s捗R( =Ә$o2v2A>|5BJM:xlg !ac[H[&f.{FXM/zˍ|FN͗+/%L,Ћʦ煲l@>Puy!a *0I- eV e |$YVxW6)YLq ;Ǭ߱X:}WBVHd'$< +A{1,޲_[ 1 YݾXgE^(ѸK?a4z(ph Ҁ+/Pydh@B-B2I e |ĜJM +xlgܠ&`#P:,[dĬNRHعX_#f&!+[?"ۗVWNB cOyʸXPvh[=ypzb6͇e8J}hkO(8؈2xA8 +Idaɠo*D`0X41N;r =g5nl;$BAUoYf|hXJF2Vۗı'!0G)yR]1>@B IdBZAjQ"îZ"J#d!_DX{VwPf UBm5s[s ѫ2?V% p$YZªtjYC@{,'_ݲR|Ѱ?. bn_o_P6>ۀjgd=)?JsQOe|P&.$PX^?DFJd+(ֺR۬w;E0nV ePV UBmaf4. bތ1WvҖI(wpݵk6Pw+u2A>ȊLn+5>쀝%2<;j]"[MF$ǸYp8%e!G,#㤿B+L!8a)ɈM¸Yn _뱇23- %2z +>Y_1L(0&AJ( +~kF4h% PH"+r!qթ(u(%2oм0w=Cn KO-1cx]0W !+ᠥ{slS(Ӹ=[\(ˆeAx>M"" mj)ĻU{fnao'e,QC2@bF߾\BY8tiEy7P&'CY auF_EDs*DIdvD^v$St˒1$c,ce9EB e:򂃅AH"F:`l\2 me'1~@Vfw0~ e73Ռz̑72A@Y$})\CdiҀ ;IddqY~_ݰDfO>_[Ԭ exC,s1H0NCB^I I]WY% +gŷV|e'Tp?,gG%2С€/e|_9+ۗ 7z*@FV3;CwP&§%_/8K"Kmm%EK$eƾ{Df̌#ٯ[t˲c6hCV6wۗG2}#ƪyX.T}flD>$ `H"{maUVBY٭u_Ӊ!u2ٞ}l%B"nY3JL̃XYݾ<7J(kHhb"x`CB B"{=aaCY#El)%"aQ[l2 a~/[!^AEyPhc)و]']$ pH"{UaUV} 5bnնb,4xDn Jd9O[ 7 YY eԸCW1YaH(NDk4lSA]WYfWN cKdvMC_";_s-Kc8]@f ^({ PGC(HlH(ސDzj[HDbybwX:t\,eدeB^(P{t! B:ÑQACVX¢PNv]eu +OZšmmwچ`l[|Y 1$)s"q@`CB sJdKM S+Tk3YvY&C%XʊۗB9~ eN6ƩI}6؎mHd% WId} tG"ÚjV +N +g9VBY=wC')3D6$ p-$əZj*D6 F(?L&3~a +<)![;tt#ZraH(ìAV)1Jȼ1ֺO҆kW X?BN eGSӧ;9ؐP&q|̘X-ps@)tJNv!WJ o\@"է#?E"k&+PFf yJ,`El帥5P&mxDVwgtϰYϔq¸Sz7JCƐk@㦂V:֠h,њoY1betRBYqsBu<Rx%|"A8CG!Bܗ01,s͍=%Ul qqVȖYY +VvGl21 e͹b̭g8G>A(ib`-%2'GKdg?ReFz$$f~y +e^%%)WD6$ wȨЌ=aU_h092pݩCtD(/XHXU-,C޸&-YǨyVf +EB7q<4G;logp7s-χ2A|D3%-7a#%gYn?đ +N +k\ؾK qDV4b?ӱ3zDxG"d,\޾!,AǸ9:n)<}aP&BId#*1kPC +x!c{oDdwyD6K 瓮cVvt^ eO)ϡ[;zm>Apv%)ajؗpGZ٘r!T;, ɷHd%q̊!H$%k޲1ʈI(kR]x=)o :\B !P"uD波g Ԙe].;{Д :e{r9(e]%sKd?wGcH({PF +ْ'l$6a e >G";gYK$"[Gّɹ4 +NE~ ŗHѰ +%Yqj<2Q>+Hڦ!1u2A_.(ug ԘHdw,79\g"fDf)Ȯc!%z e> L Q";]mK,Yڿi4 +N+D3_s{F+=^"AJdXk>G"˦FʮW e4p{H+:pP&Bo-Yd]ΐe%a]hs%2V".- 'Nn)CBH(AQٹ~D +H-:iw/9뽑׊N!M>*Vb_pPpht:\B I(كwBɁQ)!B䧓 5g%:g$Yѥc~;lw2$I(2Axf=$2,.k$aqHd҃f͐P& ٬,wfD{~e)K[IdGg elR]x=3>P&ogCو8%2#$$$2[&a%sYD8 Z;CBH(Wٜ?DZb%0@M:Sح)#Žvi½lZ +>zH(uip{Hg| A.L Lɖ&*٘%l_d9>v{I"㺠 ZQ.DYݰdYY6$ 13wYנ=:NoFԒMχ2AxtVY%\nJdy\bGٵf %n{蔒 +xcwHHq]%Df%C|fehf:x=3>P&HѐȬK"5g =rxL1E:gl^QY>A"k|Hd$Y=$eiB足A3 +{&uތO!LhVWIdlD"$>9-LO"RoLaD3QQ˞DvTADvh#,u7gh!1u2Axm\W>ElGS"`,WIdېG|P"6M.*̲9%,5dL3ѯB5Q039fdL-~ e~&Evؓ%ɻako -)[b !TS>4w=ȎHd %,uW +W7gh!1u2AxU|Dv Ksw=j,Kq'Xv"ab +h'KdpmL tګޘ}n .5RثX5{ƾDvtfI( ^8Ф(S:\B dE"y"7AʲDF-wn_P&LBY2Sfq/,$%s JdezP"W0jڑgL}>F7&a^^rX'qT"[/ e~r` G#N|0nN̎C +O?cp eJx P"39 s]H(z8s䍝CЪowbaEa}~D$!I<4A +x=YP&(alvu5  wso;Ze 7qeבY^I"~P6 =b;`grXȘZuUlCOI$0M5N'bՠDJ9rlQC{pc˄$bI(/fyhIp{Hgs A.L;DfE10k +qf?nM=h%ֻuB0{Id#*$YEM 3M!=:NoFݐP&/-,P+HύH(av S!jth:{cbnaD;$O<4Y +Tx=P&#`aJd@׆7­YQtypؓ [C_qqDfJd'7BИf+:)]=C +{&uތϾ!L^ V:ـpDVpF*<2&Y.uklfSҀ D_F]Pp)S7'l!;u2Axf s5Id+,{HdE>=o.{V~k{hiE#·ȼglHBY涞Y!=:NoFP&/DF/RKpDvGtNjt,Hd翯-yP Y1n֎C +O?}p eTy"Q :b2gw'K+[CO+QDcCE2wHx䰎ӛ18$ Jd>-#&~`^}a-Dv4Pd8b͵qO!Au2A.x7ΓY ٝ%FNKf@j7ZZ! B%2lhP,)qz32?2A*F`6,C?M:{c3*pDJd( -M㎟C +O?p ex~lϗ}$7HM*3Cqz32?+2A^u+dmϲb(JdX G/M㎟C +O?p ex JI(5Y1#Zu%"ҡ N=4~2?"BIBIhRga7#cjssH(w +FyoM$2ՋY|}׸`}O\"GPh8iw4=Rx٬DPK( KdvڈV0sZuy1lk{hJi$2\l咄2;zJ{&uތ!LDf9Kd+#MFZBo|w }sL%yb54mkt;~n)d-)aδw 3jc8zKJd & ev& +3L8SCB |l2;zs{&uތ١ <+A"+2|("NIoyDFn2so:?{c3S /3ئY_cp{HgA.Lϖo2f0Vz]BY8z%4Ɍfb(9qz32?sQ|xO 0a$~uC!|-Pgfolf۟m%%!YuVRUxľ|D]ĮC%C +c%o%cZKh>Žޜa&a7#cjwh1%τ'DFY}Df ?A9ϷD:տ]VCfw )_)QygN@qgA]UI(;dvǐ/:\*ALOƗȚ6DC +cK/ʒCqz32?Wux arTF/F];iguaO’Pv!euVXhfhiC4{hSat&e]CBYr:NoFgвKճgrZO|Y~}-epEr5}V^L#60Cӳ0iz=9KIaU$je_CBYr:NoFKҵDI |i2~>vϟ,,>/Z,q΅p^IZw4=RxLGPk%}RtF/E.=/ʒCqz32?뇖`O~Ab/=9;)gu~Q9?* ~3"jt;~n)`X'9.<ql܌&Ylh% tgrXȘZZ ½>3RJk>UKN9@qqefeYp^sBqO!zJ:\k1AYV9KߚtXiYiK>1]!&Zhjņ6[@'[x&uތg }J9٧/gN+Pdo\E9Y9y}Vd~&lPr1iz=׊L}DO(;:%d%xEe-fu&tKd 䰎ӛ1<0({}O&>ąoVZQ8}0[eW.s7dRDqO!euebƘI(/芼:騇M籧T| giF#-c٤ YC,6 ݒe:39fdL-> -6OiD?[3K}wYu>y}Vg4gJ8k(Qw4=RxY"L>IxM":m:IwIwȞ@li$ڄn2lqz322A}!.Q6&e_2_ 8| Y6'qO!eW-!EY /2$==gF.c CO,6 ݒe:39fdL->3 epo{=0>4fG^_,[$xYF>}~gFpք3,y׸rϮ e}E$l;ċ&I$ k~g ?_0Xlh% tgrXȘZ|~0z4.fa"}hxBVu}fY7Lw%ަD>}k8N8̲9w;~nH,EI{Hd)wNrRysr?Q2ܫK6?L0QԹbC-Yf-<:NoFĐP&=ah[|L2˷@h|k=0D'[˴[KoOId(-Πz5qO!1i-I$^Hv9{luх@Wv9B9< dkσ$<$]~| 1?ha&tKd 䰎ӛ10$ 0z43-`˴aKC"z )Z2WIdYHc>35iz=3>-2EB (^>ofèhYe]jIliHd34[Hdg]lզD&JFx[6>yFx䰎ӛ1d)"!Lx{aPER0s%2w$fc[Jd$?%{|OB45iz=3>P&JC lE7~Pxr۬Jd:&k\sL2lrId+P&8`,olp7r>Mbrd.?nGx䰎ӛ1;$ Be"d0ŭ y8]P)Oon%2::wl |'XZxļJu\$$&%ٵXka:3d5iz=3>P&3Z0dAy'bҕ0[Xy ٹ?eMy|K9C-h.dF\]|r᢬<[fUB 0p(6 +ӚHdY Q_ʫY;a}5Ƕ?FZB>D6WHVك?ߵ?bejn7SIv㖣4:\BPRTo"5.H`VP<#Bkhr3< 6~y}2mK]-u;w-QwKoh.g%J Y>iA.->  epfT5KAvܕ۱[<<.م8$Y~^{]ːde{gMRxCPK( NitzMaml5K&R&7 AGY.̫$"k٤dW>k? +ٹΣyQӹ +NjhO(Y,?#fCB e. Kq9l3^2̀lR_DCK(hvY9Bۇ39/V=zjJ#4p+h_oeH(1l19,ʄ$R>-<(vOx}ޞ]\E\23 yƣD.o%4?D|RpN=LPDb;HM:8;& +3Il 3I7ψِP&70T̢Yɸ.W +˻C{j˅!ccWߧm/N{J eMb;{$;nP3O?cRP&6'| A)x>y #_@ -B ,2KH?/(,o'JvWPB(]77C+bK<fVM: tqzmF̆2]'fN$0 v3ll׶x~=,=؟gѣ>eYv8X-_$m: +3>晭O&2>ɓfONu)o\~,&g`Dѧ5pr YAndeܬ8 +k,< :Qb6K~_<8Y6#fCB~xI3=$cYިSMX`CCv)j&e{g~R%Kr2%Gf^}1+ppNgkEBYϸH,Y""Lx=Oڤ9ff]@.GsH: ʙ6w_wZdPKPn֧dD8U)\6u2N]c:YjX)flH( `x"?d5nS'eT}:~oJҹإك4 軖d%eT zH>+{rPd~:0.N?@d ek}&n?yuv*Xᾅe0$9qao8%k9H$ )ُ?Bge?Jb ?>W$;r>%{EEz4B.3McGoR)tSِ͈P&azْfw-\ r,"vT'L­HF&QY@ &CZ)Y2b6n4Cvn!w\YA:s'~>M-0.N1u2>浟u:/` RBG;`}s&~^<>aֺ}iѽˌTl#f})Xy^Q$J&R Q},s!Lxud$0OfY'۷H;<tLRTx;zyqG$?-`뻖ky]gϣ1d9C`e{GYs+qS/q~R7t<4]a\c" ekt}$I3O:I^ +q#GE'+Ɩv>Z,Gr?s,(\{H(X&̌IC\Njj|Ck&]uȞbx ,CfesM*叒틍(aNu!Lx]t֭!=gd,> W:إ^e';1wVоs̓?/d.5ߵevJhpvv7"K8?^b H󱐱àwtQMvW1ca ewFs沟xE.,;#O &Yx8䥼ky|!>S2L]ޥge!7sF̭:ngetX`Mz8+i +)|(پ]1ʄWDgrHƲ[tA'F>q0sDw-dH˓バdjTݲx e+ g5OŽ: FJW\ W 'i^MWqxY>APK(/H44$+.p'ZÆd:s@PCekƒdoR_{!1kr"Q:wGv#7뤑;Ro6A +3&]1О8vܘ틍(!L I"+$:؉^=I(zɐfژ w )COL}c虜P9Xw-eS~Z=S2| |{&yVveḦ cNC,dY_Bp_rn C:ϴ0SspM?mi4L 5|(lEB2:POm7Cw'VC?KrH6>(8W崟 mR_{CBbr3ch+Ayul i5'3ڱNDqmX4?p6(< {)| AzP&|d77 Ҝr.ת ;.IÖa}mی[udˇ,냆rfe73z24CF`w3C(16WP\(^ M+Ad?z` 2l0CmF̆2;CY1߳0 [^Rw3a=KŘB'yEoc?]~X|nljYuK(ـp`/ +el|BinjgL82de-E.3b YAB̭ڢ l녳풴f̳[b2VFxEBYfYx,>$ ȊeydQ|E>e]RDÈfv)9߸d.]P,Xq7yxړ@OYn!fXbZf3׉>uBmvB{ab!:z$LxbH"lkթDL|-C%{x@n+Xˋa1d% ]c +[/ϕ1[ホ=#FlҶ&:C2F2ZFjn Ĭ_Y2VFAxr\(R1miV҄CO&q=2ԘUއ2AY1dz0x4l=30#iN`d{'V(/V6 +rfD&o+0cnP&a#ѳ7#bFsC̮vUF^C(ٚMq-}-[<\I E!WOʄ$2vV4M<[dd ] oR2reה>9ff''yVv&`'ˌ͜15-/lI;D<7k3z)]2Vf-a (5Q¿cX\d<58 >$?$ Ȋٝej$*Ck~|gv}0Ï#d>lYLE. z͈y[?W*me m?iY}+(2~(,-[<4T㷆7c +e'L!̳2*!*EI1.c &bFqqw9Z9mw +> 3y}YM'9ѳ $i[aTM:4/cnco(el3 +M +e^t82,oH(Aÿ4%2h +,1RG SP&|H"+u zptwPs(0vf.1%kxlX //(X3yfFόq;6ӹ59Q5$i6›G?FU{e%{f ZeDO"QtԮ%&=4@p0g| A}{P&< $ٿX-E'pSH>`HM,C#YF|N6v%%t(8G]Pˊ]KLL3V6` 1;Cf+3ch`%k/ZWR$W2nfhV3MJ.;O(v#e|]c̥cokԘaJ7CBDV,PK'i(Xc'ų,c#R:-2d녘~ ufe348l=36qJпkx-iЈzq3ͮ fgʰ^=7z@ -HM-$+Է' e@ަv܎ruDV؊Q:7(&Ɔڟ~ĸ/]Ɩ?ؘi9SdӛqIόM̑-k& 5;PHBzFq3#f(XABtPsaP&0')SC cn!;;jS(ţO2 e>ܼI}+" +qԷ' e—BKNr7DVȥNSE##˒4"˴l]C̛ge'-K#fƅ!B36:w9 G,G/}I=Bz6mQh6-˾yJzBצFBctB1Dj[(W?/ e.$8ҧ:КnCWokzR2́~AD,WxVvs>!1gv|e mO+Qzt٫_A~mMRdhDBnfY(yV3,u<'$6*-)Bm)o8,l@B!oOʄ/$2㝴nZ'Pŭ@1g.]l#AH vl1\TY1q 7@,'#I3l?{nPOyq6jRMҿ/al9-3f}Z.ChV B4a*Qx^I|Ew(Y'<鳱n\.H题M30cl\4ipPe`D2Gjvv/ν~s%f\Y2˷hhgzzGa{M}<wʄAdc2~B7G$,=^g6J͒?9([}rlb\ 91n NS*)`XPs61!7YF>|vPVTB٬E(vJYj*, + e',EBpWH"+fn6ө0!h%alL Ӕ۫Sƌ -@~^]73e񜭉}"~5#6iD,ii~}4,#fed!qWќ' e'Bߧf*77HdT >TFS:4[8L7XAKc nZ>e&CJ-j},#~5 ; k4􌸙S4w3 beMde_%J2V6nyVMX2βSMkl\{)4 0<rI(2H"+l6GD9Bl,|η8n}"XlP$L ͖m},Lr!fb6ZY@LA*i! EkTmHڒг1[.w3Q1uV9k5ɦ2oBD!-ъfV3kj/e'чY.u' eƒ!즖"!d;fY Yrtk0:ZuK2K_Vlų8fg&B i)Aɻ3x8=gB6͌- 7]&1Ţ fX^.71?}G9ob1P v#]{MyP&<_,>_3oq:|U΁vˁt 00߫ݦ'ıy9egm:Db3dhHh.kQ %[xwҳoߗ M&1'1[\71·J( mBlvMmw}^=P)#f'ABP@Y1OyM-E*v?vjAaט<aދFmp+(c`-úBfONO``G/q⥰V@)BFA>EͯFl lY/;x+=`FOMVf?tr׬̄YYhBQ:ds ^}%4U'nB<98Dvje{΃JBBKLb}vn΋bF۴8]Ά-[\q6;1L}ʈP6̍+Ii{v0S<7+TBbfr=]6?ݣe3>+ Qey26ͲM8K$ɈɆfnܦaqh:hӘks}HXV(~%irP~cȊhj)@av3ϡS([.w-3p,H;Cp/rc;voj@Z(_"4/#m]ȼ}2lL99ZTXv+*@iXsoY"0oN~$Vrx EW}qM&lِ\,[ +JvwQ$,(f=CϡԢp}:h8셱ҵj!YRF?OʄBY17L-E6khccFي[#_zʢT,l/)UM">)чrBBp/H"+fe6H٦:WrLAu:C>BCwz1e,^9gY +U46BNuwelohѽ \3˟5T<"bl11Sr3cefszCeMV9B K[(08,}n 竄2xf9l*}lP&H"/?=&DF6jJܴK8 D$ePy;PKϒف f=R,xS03/.S#fs*!17hͭky:Vv߇:.By(Y[BOF?tCsn4Dg/:ص0y)q,PfEB$p>R붚)0"av1CXk(%6$2d5>e\U2:,F_: }M$2kaq%^c+c712Y0 }ʾD(;Wd$Klx,9''W~Bټ@(P~n}PfEB7$2;41DF.eQ'MY8t=Oa20\F?{ohVՉ9&$m'1y@P'Q_GD@u߻<h;EFˮڧԚjW:ӽ{n]T|aP5ˎaYn--!d2wN>Zd0VCo&^2\ldBWV_d]_(ۍ>R٤P6Kp 0Hjl,VMJtNӔmtxJ +R,-eR(#D%2j8ߪL\!S%g]jϢNSbn4m" ְREzvntzB؎c,1Rl-IBazZQI5L.? +er ei:,%RQp##M]`/.̮[ )1&JQJEa0FJ V]ʢPv>5Y[Q=C߉i3GQvXɐ5%2w\Xݴ\P/5V1Q+`}q+bԃVfο؀4e@e1zь߸,gK˒nvBvvQCkg#OP8{h8r ^vzHB.z+7BGȐ)jQ %3ej6Z~ EYMxm,Qf*vt Ldl4B TGYΜXˈK*n <&1.GW?CdtQ0JWڒPFWBKbAq5{iM6vdT](ZaSENB@T9Jnq6cia?Hyzuxkje YLWOOQa%v-[lc}L +x,L%VDckkc+kus_L_^x 3!4Z(Bno- +22!!d5Y{5at-ȍ'("B(])DT3R-V*49]TUL/sH@k)p{wZgeBى< vO%]zAN&4+֕j_]Tvm eeL* eT*QV\Q(c)b)Mv2Ԃz5{8Xs, P(C*і: +e Q"S'ZCٷCKڢݝr3][bʔ EHYĄޕⅇPAlbdV;@l>]Acb2sZbW$1 :9.aBO_/OK>Ӭ0<ObF$2JX]ml1^F,L +ei-BكEȐzjnQ zSnW@PLfݩ]^U3}W^`dZf -,3#j0 r-z8%m$M/2 + uƬ/݌?4ғέҕ,V6l +e5 +eVHOQm)sQP5̚~iwBeEPbM~oh7Rj +em#ʨ+YZ[J|]j"_gVՏQ(#5!Q"C^HҩYEzSiv\Kz(xVtbt2x-kR"[b?0{廵h]8uZKj]F|o+^#D6-+렪*C_EeS(οPF e$x`Zҥcot75_֦uX,`UOj4:=t(9*s{(,c[$Uq +f-flL]Xb=+ly2mCi}2;NX&+6[TO*ZnZ(m@sxBNK-$jIJ،ŭ]†t-%] +8'cuIx%ik ,hiǒrMՓ+ eO,m(џL*=Un2Qv-W9(+ȜnqN5f +Q{] V`QWaW7-0YKs@5gaON4a[gef^åmvvE2S$"EJ:%ś4dDe9IqSN_b* Q0_QBN\(T#pװJnC(t +e[Q(C%L +vs401 +egGȒYs-c=yĺP,;(}ztT-KL8ڠ BLBNn2AL4c@j҉GbWPf)ν,=EcȜ59/pY::{9PM/օomtcuL8B&j #E7i-8,:[3R+fy&iKi3q*u¶mSEJl +D;uG rtBOLl'a2)K:4r,Kbi%BY)[Gw)Y1++~v%[0F٠s eEerceB3rBN|FrD4KYʚCmj׺AT¶XV9hW7ؠ\R<[ևI ?Psp܁Ke ilQYF<떵/T9cϲbd,DA;/A~`2Ēȫj endstream endobj 1112 0 obj [/ICCBased 1114 0 R] endobj 1106 0 obj <>stream +H\n0DwNl_ KQTQ*K]"lY}_z]X{c0sywo8OlbcVaȭ6^&:F> endobj 1108 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 200 0 cm +0 0 m +-109.777 0 l +-162.7 44.789 l +-105.369 158.998 l +-90.705 158.998 l +0 75.89 l +h +f +Q + endstream endobj 1133 0 obj <> endobj 1132 0 obj [/ICCBased 1114 0 R] endobj 1103 0 obj <>stream +H\MN1 9Ż8vBU~̂)*s g"PDgَ}a#canyU}<3>V !RU+!|b$g:pɜ6_Ὸt'0_UQN+d;X7mPHUD2Iq5oxO5u?W,%4D.|/'! \2/$y)d6_#(Ht endstream endobj 1104 0 obj <> endobj 1105 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 299.9375 0 cm +0 0 m +-164.666 0.001 l +-244.05 67.183 l +-158.054 238.497 l +-136.058 238.497 l +-0.001 113.835 l +h +f +Q + endstream endobj 1135 0 obj <> endobj 1134 0 obj [/ICCBased 1114 0 R] endobj 1099 0 obj <>stream +HdN0Dwڹ6-\PU$zHQK8I +djf;}l;c0Dz}g+GTfEUN [G66'N8bkߍ퇛|Wd9OKK T`P+`F'!QIVQ.$jHS^Pk$"HɅ8_c\$(22n&%I+֊Z{ÿ:N< endstream endobj 1100 0 obj <> endobj 1102 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 1200 0.0001 cm +0 0 m +-658.663 0.002 l +-976.199 268.731 l +-632.216 953.988 l +-544.232 953.988 l +-0.002 455.338 l +h +f +Q + endstream endobj 1137 0 obj <> endobj 1136 0 obj [/ICCBased 1114 0 R] endobj 1095 0 obj <>stream +H\N0 krn UCb :%P5G/vqK{}s3 u +ә9eXCHig*!% ]`#cq7}Uid{}lj݆{c;57̐07u D>(~ɈLdqHKJ"R(+੍q\$'yG'zO endstream endobj 1096 0 obj <> endobj 1097 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 120 0 cm +0 0 m +-65.866 0 l +-97.62 26.873 l +-63.222 95.399 l +-54.423 95.399 l +0 45.534 l +h +f +Q + endstream endobj 1098 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +97 0 0 87 16 14 cm +/Im0 Do +Q + endstream endobj 1140 0 obj <> endobj 1143 0 obj <>stream +H̗: MF>ϗy6(4͛?%_}F/&(*4RObӱk;ghc+:"gHuAĉ೪)q䅘%3'{ÛCs@ yBabR~b_ ' +0CЯW&&mwzUbNs恛Aaw $Ѽ!&p e~@bO|={Ay?BQYۋ0f4$+J}>tgTC(6;€!RkkyHw59fP}S +9[HU_0S8z{ +.OWf)4{vN=o3}uSoEX=BPyދpi]v"ϻ"ts.7y ̜ׄ}seLAֱa @.Oޱa Wx7"-#EX`߉Cx* a f5wPM5}MXZF Xkd݀@L41@V̫f&)~5! %=/@x`;VV76",dmm.*d?i)1:U[6t, B ~`G@M +*5PIS /!̎C㨇[+*,Ny]KRzopv\9m^G#~6kzQUۦa*ʁF IBS&!ta v>Q22R [G3$I|YIƜȗ7#3r8$/[ʭ!,Dny:!?C6&+%AXh1jev&sܥ#@ŷ h Fބ^'mWpM{=Nyg WӌBwup?An~c0$ugOEI';l+0XTIgw r@PE<$6ŊUWg@y5}AmoCAnS())80'%UZyP90 \ GArϳg$}VO_W}N(-iIIn3!PETګ\x\TNjs[hQSpI/P5<nϺAW8(Wm @%^r!M +NDM8} zFj}.4WD+P|$HֱT5ʧNR;[?Z$?'͋\/ƷI0ͥ6cxV%1n<'f\_iEuc>/Filter/FlateDecode/Height 87/Intent/RelativeColorimetric/Length 2489/Name/X/Subtype/Image/Type/XObject/Width 97>>stream +H̗yPgK~9EBpT GP5uCud]Bkebg#QsVVq r(1I!$pf0y<|%XonQbjC18LR2À3:?gH[ZZ)8 FItS+['gdkeJ'g0X?ai_[2Ȁa7Dc'w}phDdDhz˘f&,ycSOINvfv9gΝIcg64fs! Wn/u%?3!a:K+QQyMō}A>AÒNWշuvuWL +w%qEe;eEq:RpF"/i %RZS8#`"\k@"W%]/*/߲ 9۵!`o{"mD 2Ø-*RawӃ+?7F` +0Q{tu&$DWU Bsյ,wf!3 u#;wb{D1@I#|tġЕ.l:bB>Y_Vx$v#0 &t H +B޵V&2D"k{Xqhf_=O@"IX"Ă'a IT*񻻺}"8بa(=O/Ur/_A1lHT$"߫ZDR q_gsMݒ5͝}US녳~-y6 TގWrsޯŹ-~TA{흳QQg(] ?)pSW(_jnD[Rp!:Ԅ`78ai#|@M93!A'$: @@uĄG~az"@&ܯB@TF\s՜[ hP(2>ґId}oKxD〰4JK j@ˑ5ۘfddDRHx,ly^膠Rʤ"JHaeia6aDc^煒'ra{8ϛkc>JqG/U4A@~tց6[fM@/|ܝF خaެn}'j|4@*[kK/JNݷ'&&::jWW}92xp`G +AGkP )x3'sdefff?ܰƄ:eevU!dq._TTxY_G-`M’7M?w^Υ`Fh}ߪ@?kL2yyȁU5wk.uA*tio}Eg~+:~O\paI&vSۡA $ba݈=]k~%+v~od>oAGa  T28&H<" a  + &^RJ$/l(9ZdW}*y*+xÀVP,l(+!vp Q4{ތAu¾Υ 5!bPc]T/_.4£@8*|V GS򺫇Ncn--H=Umo;;38. >mhjnѨ榆U%}1߂I>A +nT+w{|F[啕4Si[-@pC2󯔔+bҮ/g lc߳N>_XtQ]3o>N02e(޼1ɩiC X"o +m +E#Cr=XD +ј];*jw-k5C549 a:K&>stream +fffUUU endstream endobj 1142 0 obj <> endobj 1146 0 obj <> endobj 1147 0 obj [0.0 0.0 0.0] endobj 1148 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +97 0 0 87 16 14 cm +/Im0 Do +Q + endstream endobj 1149 0 obj <> endobj 1151 0 obj <>/Filter/FlateDecode/Height 87/Intent/RelativeColorimetric/Length 2489/Name/X/Subtype/Image/Type/XObject/Width 97>>stream +H̗yPgK~9EBpT GP5uCud]Bkebg#QsVVq r(1I!$pf0y<|%XonQbjC18LR2À3:?gH[ZZ)8 FItS+['gdkeJ'g0X?ai_[2Ȁa7Dc'w}phDdDhz˘f&,ycSOINvfv9gΝIcg64fs! Wn/u%?3!a:K+QQyMō}A>AÒNWշuvuWL +w%qEe;eEq:RpF"/i %RZS8#`"\k@"W%]/*/߲ 9۵!`o{"mD 2Ø-*RawӃ+?7F` +0Q{tu&$DWU Bsյ,wf!3 u#;wb{D1@I#|tġЕ.l:bB>Y_Vx$v#0 &t H +B޵V&2D"k{Xqhf_=O@"IX"Ă'a IT*񻻺}"8بa(=O/Ur/_A1lHT$"߫ZDR q_gsMݒ5͝}US녳~-y6 TގWrsޯŹ-~TA{흳QQg(] ?)pSW(_jnD[Rp!:Ԅ`78ai#|@M93!A'$: @@uĄG~az"@&ܯB@TF\s՜[ hP(2>ґId}oKxD〰4JK j@ˑ5ۘfddDRHx,ly^膠Rʤ"JHaeia6aDc^煒'ra{8ϛkc>JqG/U4A@~tց6[fM@/|ܝF خaެn}'j|4@*[kK/JNݷ'&&::jWW}92xp`G +AGkP )x3'sdefff?ܰƄ:eevU!dq._TTxY_G-`M’7M?w^Υ`Fh}ߪ@?kL2yyȁU5wk.uA*tio}Eg~+:~O\paI&vSۡA $ba݈=]k~%+v~od>oAGa  T28&H<" a  + &^RJ$/l(9ZdW}*y*+xÀVP,l(+!vp Q4{ތAu¾Υ 5!bPc]T/_.4£@8*|V GS򺫇Ncn--H=Umo;;38. >mhjnѨ榆U%}1߂I>A +nT+w{|F[啕4Si[-@pC2󯔔+bҮ/g lc߳N>_XtQ]3o>N02e(޼1ɩiC X"o +m +E#Cr=XD +ј];*jw-k5C549 a:K&> endobj 1139 0 obj <> endobj 1084 0 obj <> endobj 1152 0 obj <> endobj 1153 0 obj <> endobj 1083 0 obj <> endobj 1138 0 obj [/ICCBased 1114 0 R] endobj 1091 0 obj <>stream +H\j0 "KoY>larPIپtw07`HyU}:3>gm6ʉ5$Q֊sBE#a2 yd#_tG1Y^qb쿗yne影fr07BW(sISmL)E/x!'Žr[* -)X:e߷5o!Hɻ Zɇh>᤿#aP endstream endobj 1092 0 obj <> endobj 1093 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 180 0 cm +0 0 m +-98.8 0 l +-146.43 40.31 l +-94.832 143.098 l +-81.635 143.098 l +0 68.301 l +h +f +Q + endstream endobj 1094 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +144 0 0 131 24.5 21.5 cm +/Im0 Do +Q + endstream endobj 1156 0 obj <> endobj 1159 0 obj <>stream +Hz: ascYJHrBB($s,˛cq㻅l>N5"eCo$Vbx*c;%5fC4mǏ֘#D,P0@ z:ĸ#OqmA"մoPQڽ=luAI9}jYkXG G*hu9-j@БT{*hͤ>v :Ǣ,8*{q]&[ 9 `=IJ8fXX[O < +QMVT-ZsKP>r!gȻK`&9D cvwN$C?@Ha2ߕ%}?DR,p 8;8Ur)jzOjD, iЄ"+xe0#>0Ÿx+B\)y:aK]PcugK|QB [ PrnW920=$WC`T6-Hk*HiRLIj@%i-@}UH[ H*Q<[tMe$m @}hEVt'{>ұ%n.db-~ވR՞FM^p[i} G-iB\y7@ ]YĢZ,/4Ƞ.wRnȢï', }@`œ_|Jϋ]?.,U$+j"4\,M2eO`-ѫp2P9 z xd@)#o4wВiqتig}$xx|ZͯOv̰2ن /z[1j)x- h>Y6Sd@sYfMxTCxN|<61@a9E<>@EtK] W.t!@_^BE=E=͸}4~}Y hləz{_*7uC6^ly(J@٣2ߺvv"¶赍@h[PE_h OM0yG .@Ef;,a*4'+'aPw֊S|\*#~ Ԅuh`#BP;gj8z@mA4<.\;dKݭ="H8 Ļb`T n.Wݥb4tDN 'apՎ/4'GOSUKqPe_k\_hx :rzBt0r(u׽tO0H̱Di@SsjJLZY@';E8ɺJ+~JKIP|ֱy*̛(gȊuq\@<ίK^@ޔxXpP) _<,sx)dW%X4ŲayJep36'GpH'襨-v- +LG4UG mtC%s;;J R +4(F M5 ۖ}P0}F\RG7X(%uSt/]44tʌV>` ›}ϏDR D#~q78*~AJZLqF4V_zqhL]{wdydUog̵Hg#B}bޟcA3T.(p܊ve^IUMV<&3T+=̢$Yφ\~XqC\^)i8Qؽkķ5YWZ)|}4Z5-~*$QhKXY,ive> vp0!G6qm`>e|Zk!6k,Yz KDdyw13d1G9C-d+F) )vϲV\֟u +~U0o&Y]Pv/$yw^(m (Ɩy1#y3PeMV[=G d&AEI'Piw8}wA>EC;o{yRxher{yN.?<>/Filter/FlateDecode/Height 131/Intent/RelativeColorimetric/Length 4256/Name/X/Subtype/Image/Type/XObject/Width 144>>stream +Hyz$7;vr|7@ƣ!+j-Y/$:NV^aW%/so;ygTY"J@c<u8*nN˷U5ՕEy7ni"J@v 鴁7O$:з<އN_y]}4Ť7+z7<aq)52XgWNvEW'Yi]K5<22<Ĥv/,Kc8 c] 8QP#,`xlAyFq~:PN^=lTo1n<5 L" - ," 3 j]XtT`xL<ۙLbA49 gX :688H3@$@1?9O? hN1y }hF x{[>55}jn6 &q :𾦦cs[A򪺦.Hi Xhn*-~ūZÉ$,}ݫdeⷵM=H򀋧cGwnLM+*kA)|--ȹw=I)+?~;Bh(+^r|td3oe>}]4q  r,RjS_Vu#dp=â=)B+OcU;NyokkːSWe΃'.-jD{<۾a?{߁t_ejրcR! =}56&f6uQ\9mΞᓎwv~+t5Ե txvYD՜pԹEcjḿxۘj+S +jW9rdIFYV& rstM!D$?t@<(JpX8iM(cDR< 6x!!aA yd 4A y Ϟ-(x?U=S:,D3s4eiXMSĀ(B@!鷉 Dh&M"+7 {Ɩf:d@6UNTPHоG@Y o S.>u?9rrrrttt_aglYB +,yY1 khxŀ'E۵kM1d8@=7>:<ɝSryZr=+>*THGM}*ԵLlܘ!NyRs+> K`r_a6ֵ q!- 収[~ _H~>Rp9T{-R?n㎀9ubbR qA^sI!lJ8.? GEt5e jFt'u;b_.zT74<2:6.{glZngNCsb +?~U~v 9kŕuA.oXCg@G-(bP ;v!Y}K7aw$tAۅœ->_)&1+MKG[vG#eUi+#vxY w@3dW܉+˞nnlkBDn*G4-XyObֵu+V茮83)8/# +t햽rPnnnTCt`mIȼw󚺗vz-V~EPk&6^ۿI=s55Rv~*|7D~~_?TV3+3ׁn>V _FܢҲ%~E8ͺz#VmQx++3SDo t1~-1}!wCġ/J#Ngpۺzoܹhg_ƿ,MY'cc^H7f6.ևK<}t:Lw9]RrJHIINL;oWXO,ԡXغ. P\BbRrT:j9{0m + ;fr!KM  ‡K2ں0|7o .i ^ψfdo@`pH 3АuSty78.^\e҅~@iԹ΋=yzy3gL+n +wLMOYwtsgXdʤJT1X-)..N ѩ&$J~1N[ldni3@Y] +$)f4K+:zӭ,F:x udpZbbFYul ȐAO6P fP@1C#85 +8-D]6]\5ZxHԙ1@UǠ`}%)@˦ Kp8aj4,>stream +mmmfffUUU endstream endobj 1158 0 obj <> endobj 1162 0 obj <> endobj 1163 0 obj [0.0 0.0 0.0] endobj 1164 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +144 0 0 131 24.5 21.5 cm +/Im0 Do +Q + endstream endobj 1165 0 obj <> endobj 1166 0 obj <>/Filter/FlateDecode/Height 131/Intent/RelativeColorimetric/Length 4256/Name/X/Subtype/Image/Type/XObject/Width 144>>stream +Hyz$7;vr|7@ƣ!+j-Y/$:NV^aW%/so;ygTY"J@c<u8*nN˷U5ՕEy7ni"J@v 鴁7O$:з<އN_y]}4Ť7+z7<aq)52XgWNvEW'Yi]K5<22<Ĥv/,Kc8 c] 8QP#,`xlAyFq~:PN^=lTo1n<5 L" - ," 3 j]XtT`xL<ۙLbA49 gX :688H3@$@1?9O? hN1y }hF x{[>55}jn6 &q :𾦦cs[A򪺦.Hi Xhn*-~ūZÉ$,}ݫdeⷵM=H򀋧cGwnLM+*kA)|--ȹw=I)+?~;Bh(+^r|td3oe>}]4q  r,RjS_Vu#dp=â=)B+OcU;NyokkːSWe΃'.-jD{<۾a?{߁t_ejրcR! =}56&f6uQ\9mΞᓎwv~+t5Ե txvYD՜pԹEcjḿxۘj+S +jW9rdIFYV& rstM!D$?t@<(JpX8iM(cDR< 6x!!aA yd 4A y Ϟ-(x?U=S:,D3s4eiXMSĀ(B@!鷉 Dh&M"+7 {Ɩf:d@6UNTPHоG@Y o S.>u?9rrrrttt_aglYB +,yY1 khxŀ'E۵kM1d8@=7>:<ɝSryZr=+>*THGM}*ԵLlܘ!NyRs+> K`r_a6ֵ q!- 収[~ _H~>Rp9T{-R?n㎀9ubbR qA^sI!lJ8.? GEt5e jFt'u;b_.zT74<2:6.{glZngNCsb +?~U~v 9kŕuA.oXCg@G-(bP ;v!Y}K7aw$tAۅœ->_)&1+MKG[vG#eUi+#vxY w@3dW܉+˞nnlkBDn*G4-XyObֵu+V茮83)8/# +t햽rPnnnTCt`mIȼw󚺗vz-V~EPk&6^ۿI=s55Rv~*|7D~~_?TV3+3ׁn>V _FܢҲ%~E8ͺz#VmQx++3SDo t1~-1}!wCġ/J#Ngpۺzoܹhg_ƿ,MY'cc^H7f6.ևK<}t:Lw9]RrJHIINL;oWXO,ԡXغ. P\BbRrT:j9{0m + ;fr!KM  ‡K2ں0|7o .i ^ψfdo@`pH 3АuSty78.^\e҅~@iԹ΋=yzy3gL+n +wLMOYwtsgXdʤJT1X-)..N ѩ&$J~1N[ldni3@Y] +$)f4K+:zӭ,F:x udpZbbFYul ȐAO6P fP@1C#85 +8-D]6]\5ZxHԙ1@UǠ`}%)@˦ Kp8aj4,> endobj 1154 0 obj [/ICCBased 1114 0 R] endobj 1087 0 obj <>stream +HdN0 ~:u&T W^C/$*HH眣q 0wC@$on}vWHD,+.׷`O3: ̯HO˓}XuDl87>;ir8Uc怽+0@SpI({$h[!1g =\rҖ*r%cT嫙E_ \S endstream endobj 1088 0 obj <> endobj 1089 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 1024 0 cm +0 0 m +-562.06 0.002 l +-833.023 229.317 l +-539.491 814.07 l +-464.412 814.07 l +-0.002 388.555 l +h +f +Q + endstream endobj 1090 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +817 0 0 740 142.7045746 122.7999878 cm +/Im0 Do +Q + endstream endobj 1169 0 obj <> endobj 1172 0 obj <>stream +HS82ǒ-;Ф]ɒ- eݵ4bX,bX,bX,bXRߔrGYϭ]6M(]T/}Sc^yX~yh|ɾ%-X?De|=mXrׯZ~z+#c=+HJbI*bsnqOUճT X,״̰ +*b\R`=JSj 7b_qɴPVة)ͬ}3}eZ֩\ֳΦjfX)\Z6U' +zKd̨LB' 4Ɍ| Kz xqݔj6c\RRɱLig\u/b=$z&7I̜L廳Xn׹lSE$]Rϥϧ{^\j}B-)Q54bf"sȘ=%ED.Z.IVOJ:Gl'3f1KXnJ\P.Qb׳)aD3J̿q/'~E 0*"I;6 35Cd +2os˿:7̚MY/|<_$X +=qL+ ^;j'! nd6&rvͺ[ u|+r&Ȇ<Ʉ1Q4MfftyKeOU/^ hH+;0ǟs#/5 T ШdP2-d ^tQry-B0i[Y\ymAlkf^R-l*=dLY2ͱiM\P.;hz ,R-Wysv#j "3;-i_5/:Ǥ^μ" pHe唁Ua3R3 sV2ۭAl咼LKBBKlji +u'c` aʼn6B΀(o3H&;eC&cL%c&-KEPEfK(j-ibb,7y9BkHEG~Ng2~D ,ݰ3 K4'eT2imF/2Ǵ^vvFE%H!#eႡFGhh\3ftŒg4%Q/sXt.B:c*Xd A"hshi ;tD&)eQ1\L'X>,W9zㅹЏZh).їq f a2Zf12(eˎ11Ol%/Mŋ-y" 1*;]CXZ(R00V !6-=ឡ%3=epVLL(|Z#8`r/z竧\`7lhLd .g=dbg|l/\/V֘K\ZB=1deۥ nBBJL8eQKFWG^P/ .{z3.+3`W f^cOA y؋αp&fb zOdaT294qn&\g|\V +FlK/'rzicia,l #' E|84Z2Gs*l˧( 4/g]/p(;A]Hpv:5l 2ed%gY?4Qf`, 1 z.Z.N,׊Y0*)稜`ì#>4˖bg2G2pd^f^0zg]\gz1( +^N:F✼(ÿO-? +%3x̲L1QvۿX?+30#=A;egz`aZ}c1 @K1e`-s(|^+ +]ziB{+\pqKTqha:N#猐i m,lQV,K`6xy&/Ą~za7tr0T׊~FVG\<˘N=3fcc^RG·{c #0.oBK#kch.0kdPȳëp vcL +fv.^> o,3טh06L'Xkg{.󂁗f>Ȟ慼SZ~0NV+ |@K9@B.X1 븱bעqBb|8F䣬Q1V1kl:`|=^du>7rABeⵄȾy{ɾuV9(_IQ0i]Avnz2spfjEpbEf\)dt+YJbˁ􇝜19e(WlV0iӷA"WG *Z0}Ly+Mގ/`|)FkصtQZ1&̃L>iy^6'r]nni# Ӌs|I9n?|g'-N f"C2 c9ή}c\cl1fL1bf}P=(/l,:-& ObL-3Tsfb//bPv3b>a*f}@z'bIWWLayʑ,xp$2 @e_Ɣ`ُF7>Ƽ&0\0d1dl:/@1/8԰ pH_ot81܉lQPT̬7@\mj)Pbcʋv!S0xG(!U؇}GCLjT`*6\ϪS1>sqQ7CB B8">}RZtbʹ1湇bnS1Q0=@&ٙ|9kxDC0%C1,4Unc =2PS(濩YjL?j@mo8EfrY3x.b4څKcoS1>~%`V갬H{Ɠ3z-1*$a1AmWFxDcLL1+fq81S1ǂilY=fCxda^1 +QOj^tkcuA(lCT̬`Q0dU ˜ۥPvL"T/qjI2B.}cW%!+]}_K2}\W,S1@&Ȗ d` +_g"kZ5%8N{#qV.g;HBLR0 %"YÂjN5/UgPv^]1?(T̬ǂ`<-KYNV_iCԢ/ $+;}8y2^mPvZ+dLCN123`|1؋Pf y^Lz$^0W `Vd[ d`>zw;43Z5{dj ;&Ӎ1ʜb~a:b{ܦbfR斂vs%"/#z[RfDk]-5su`*2h [`*) ^ㅽ)ijra|)'.v<8ĩ).BPLm)ud̿) hv,'Et?R;cq(FHk؇:&x謸e2b+|`~| fUśvvbh0O]>5.&#'!X BY?輚b.+T̬CWA0_`Vt, @]6GP$ybASJ+6I8V׎@.B- #֮/Pm*f,iǮYH[-ZU^ɋcP$Sho`# krpn +Y]Wes PvN:^SC0 cqLo;ZvX(}R{.at?%1jIJ!b*f+i*fAP0 +fC6-ZD E2a%NLqVDc| +F SP1bf]I0W!)@Fx%ӽu<>{'1Lؾ7ʄ|ѻ TZβԩYG֛#sȜ|30LhiAB`@+Rgtb@G$>+.P*S1 椊a_a,::w?h\8cY'ɞS.:)Q*T̬‹ +Ɔ_I\wCLD2xg[G+;1%8z.~geS,|uxK0ї&!H9s""_( '5|fxh3L<3`r +Q H0XsKb\4$ۺ;Dr.kь\1:Ȩb$bYԻcYyLƥfnD8Cx "x'j;1{)jaOdYƓT̬ !L LEK?1%G_q;'>r2☽gcY1XL1%ST1שY#t`űPuT֞]kl3C*9032q*ulO0֑kTXݢǬ-[уx8\;q>T1 +ޛIJ-P bNz`6 1d\0n sC{lKWXe( Kd\1%s63z`&)z*b@FIm9p!~p rUųE;vHXˡ>qXt5[dCz)wEu ĦbfZoz'47>6bo2L.M32N(z~e,9S17: +xOCfKc3%3R.CGAm@~ fy*ffC +y"b0D`2&1/1 u0`b.Z83OC`ʂ 3q! #=cAK\^*Fbf}]0㌨\Y"sER ʞoވ F#$D M +A1ŬS1?SR0Ҡgjߑ^VPBT̬O FL0vf(rT8rK,pGhzkr\l%&AΙn[7?26bdfƀ?- mNx9G\^QiWp%s1Ȍ`~>`_\QI;TΛxɡCĶƣt{z/p! d40_`l_L,g?yۙٸۺOIDؗ d9|F`VGօ+1!Pvf9Xw:K%1IR.jt1Ȝ<wj + n yKH?1T-(W<\s|$b%aH?dv +y{f gJa-L$f S|" ZQWLZuB+1Jw{-aX )ZїҕZUbHEbA0!`֭E%&5'\l>FcQq םZJj.Af `B +b8 D* )KЇUi7_U1 b2 {cVd|r?mh4(ٶ- U}پZ?fY20[g(. 0vEEu'{P-  ;M&ЦV ;:= ?8[r,fd^v}` L(2rXh dbJ <m*n۴emG ,jC#[mc ǎR +bAf!0?va L(0Vi BȮdr i|0i<1(Lj 8>0 0!,!u>'0A Vc;1x4ԯ C1 , 0TF,&,ٹb"A&g +,p0A K %$JLOdn$0m4PLz& ِzMz]XBڈ!̌.0pFb xf!ƼĤA rA<`~ݿG4\cO6uҍ}( f{a L(FPM;niRCL^A0񁹭v&N-0jAD%&ʌ$0TaG}ӯk;-v3bFLO?#00,ime۾cbouA0.K.V 7'za!LM%0K2{^QCL%21b 9 o|lYsb99b A*0y+Q7( uy]?L>L)T'TnĨ{@ ruFX}| Lp b<0|po- yQ̢IJk*&PmLs}z z0A1`, +&7 48}in1[Czpc40D^cC 3P:o)j] +3DL1%9̗RS"0 y\ yS1Lhbe60-O +Ф * A%.0J| 1 s/w71A sv6(4 ! fid  LiM_9] bg3 4~0 yeN20)`pػA rqs`9r=2䲜fI,tkɢ ݾC{ph d1ȼ\LދH`:m.1J@ 2#灡oT_b_`M01:0\#|`8C4f0z1ȅf&s +cb ;80119 +m`Ncra a`>=`=`0~aƴ1ȕy[`v#Vd^eyD  #s'C@ r]&C-0e>W}e20¢Rk|0WT.1ٜ`xCV' +#tbEa{Ba$1O\ S?WLt`<00SnI*dj30?PB5SdN]vI㇀9s\wFXc d09`Tol%w 30灥H{Ecb .F.<\ ܞ:pIa{< |~bs + +`C`/#;0AUQb9<  [`x;rWΙhs4;i̻WwuM& b d60 `*W(1ȁf6 ?Fffl&}5S(0vg]w%A5&xMi,> b`FׁtZ3 y.#m|J=vVT r 0noqS +@ 2_I9.,y^g|u 9 Ȏk /؈bgJ` ״UMnGIb =&vcX]^y-Ly\9^@ 2wF\aԮ5dϫrx3圚b= gj`zqnY BS% 1b0h;mٹ0ON1nNz7eEK˻G+nus@ 3;T v驴hd:1ș\LP]Lԥ4kK> AF@ ġgn51L&x!`&Ljgq].31H'C'ԣi˶43;j*1X^ DƑ>G_@w\/4p:md@ r0̢󭿞$Y4tQ;.؞b'0/RJ'\"k1 y`¨ci^=(-XU-ilcb /; mKYn\(p}V1]"?e7nЙNS\{mgOdo:I) qO 'СtLcOyJM`h$f2qG!wxD N;#_XC0caՉy$ß.F͌Lmuhb2<&sxf%@cS8=DPd!&qG!=/qNyxwwGE#`"jϤb2ɂ%C6"4%q8H̸TLOL= GuhlD0R:ܜ8Es F('s;&Ή R1C,"]oNs:zVy`TLa"jcR1ojA3sA[{Jw ~i(c-E j($018)R1O =d +E݊cIfp`p汌`*dä"*FtcI]ؑj`ɘcÄIܰ;Ud"ceq#83dӘAcB+T2zex`f`&#{*抱`dH6ְL} TLE3m⊪(wڮ.쐣Tw0>c[]^^p–eeu71zq,.$mU~#jqf΅Q?u=vTL`,Ƞүh:FhV؞/PK*檱`³f)@+5!f|s;q F+ e5Vj ii&e6/ ;b+柩KZ5` +'aGyC#W㾩XW0VWas\[+2Sc{P @p)-#8ĩXU0ak]{a4- c]Qvp8!@*O +F}?AkZVՠ3yb6U b`8mf*EMծMs#MML*&((" +/ܳ0H@s<б}BR1׌㍈%#F3FM?氍J+ j# `-X7F0+Y2wOdĊ/sg0TUȴ8x( g;p_bM,..0ܢp'gDS2)h 1R) 03)1ecQ+vFJ;L;e$kU +jRfl+)f#T̕ba 5R xah}pkV` Mn[]05T{ܟ|TL=VLMŬ /^QךUȤH +?YQ"F׿D6VT :-NܚbJ*fXU0sh^D/=_ y ,= u5~I1xY7"B׌CG*4Dl?]J1:@HTf|b꬘ZZ혊J\E0=UM0؈%(1Lb!&6â`x)(bK F3y◬LڋARF&1O qW1A1IWElR FMnčڊhit^x eH̤@6PLb({v}XV0vcOe>P K4QS#c̛ CAfǴsbĞ6HŬ]`^5PZm +] 0$ M{ /8E@}K1%s`Bu-ts;V+¸BPjcU* 9$ '>A1-HŬ E4M$^Z\4=JM MB +:V}b꬘Y8.*[_K3~}b^ nll .zdld R1O +5e\ jaFQ)RcN^L1YL q<*)gmz1$1_0J.Boֻ(0DÖ{U˯٤.ǏST1[*fŸ`t*FŎJST$Qc/x| AW mV yj\U0\L5$l PjW*¶F2@y]1P̄WgMŀ*b^ǠT̗ueiT]K2HZr\yq~U1]Rb\18U_R1_ +Ɵ F`!)ʤFyi*[10Ta51wcPr(8PL<}J*!/'a}'uf(BEYa6 DCAMœb=y)o T‚ѲS(BEYkS +0t+0ƒAߦcqbt3C'Ը`O|Fa{*nKym:mWI)&b.8Qw*1Š+bj* hF݂CKi7L& [&oҳPB5 +?P2+f׋r:i4愄гI|![hgP0`eJג@X&\٣ :>X CYEe18/.14lbψ7i<1/ eD̯J̖u$` }1=1!I0bcUW$F)(t)v?YɈiSbꈘ7OM9Ub6#G`d2)t:Lb nqi )|81ɻbtN\CJL+ĘJL0ſƄ@ҙi$tsLy(/8xaBZ "b|iëY1-sM ``&O)0dmF[KI %Df%18} Tb쪐|F̹g058+yQZG6NuNdt$ =ycEUbIXnFھ80qҊJG3Lk 蜘f$w%f:0f Hъp@(/=C5YZ jfiy)&MK|Q@ TbJ€w*009D`ƗP0.]7 Cadp0XُjދV bLQsb`$} sdؔi y LL J׀÷91`bB:¿1k L"ƌ(ZMq;v$/I5p|keM4ub z feb K]%:0OM)0&j x` 0:`\7 -[`[%FIĔ\kqgiGpԲ,v1^q^)z1yZKω91vl_GFCo "$/3^~`@ˢNQq{ 1:%Ʒ=kw`N?b6躆~`dBbxQDžBʉc^FJ:e`g + oPa04>1Q2mxm}z<X#f 91P)^ $v0Жh æ,yi(z:À@ѓ1ĘJL0:UY X/|bPp\H,lJ}Z f1SX$`l#vme}'E4 +[,)z<1ќ4+ѕ=D aNVFq𒕭 +e&t 8mu0&dK=6>/D'1< 1-O3.o[٪,1#0to] ̺^2b3W)&X>`T*#Cل.,pbE_*1[V`Vpܧ d]aPby(; 15lL ĸ|%bJu0`"0 P-LiR11BLӢ/1.fKl]77[QC91~(~Ę"l\&{_I  +o&b^0,Js)F{s1CB| ~ ||P&*ۭ1cVYٲ + <́ 0:sԌyPcbh16%&ySh13`vJjlFZ/}Gi=\.ľЁf<}맘%Tbv;9o L`r"0"0ya #É,%/l,Y$Tb#( L2PIdBbKIW˲M%* r` yi}0o mO&%Oʐ7RN53.Wb6 ?v ?JʙjLcA]_k%U0&{0!. dB^Ρ(2CBkguubl%f0^΢0tY)&13bPĘJ~1pg`0a^.'‰v}QĀg%f"0iɳ&90)0Q +-[䅲$C~BS<1u ɷ^:Qo 0/>/׫xbG7C|Sٹ^&гk|^lbH߱ebtFU L[u wAs iy CHM7`[[ +0J^5S``b^~S\q2t>ss3b̔+1[VtR0t۳j,o=W5 eKW}vS`4@/˘շKWUbvb;Iv B[VR'6B̭eo@|f%18`f?ʀ1م& dƗ$&_1g%f:0y,p0%yǟɇңJ~}`:0``tҕ 1q(Kqcrb Ub{f}L2`5`Z`| ׯ_>p +'*1*0P0`Fy6{NU,DžJ"ㇲfkAkU` +0 dh ) dL"1_߶#FWb +$ 1%ifbf%b⋕>`. 0nx20qI~K`@'.R?833gJ#Pv)y_eIsq4vY(mu)0z=!xŚs3"*1 ĬXUO<0zlXd!/62ɿAyhMe} u} ́"` L(1KCBV0V-K}T +F`.y`nE'Fʄ\%risIX #`Mi&z y$F 1Bh[:`奎E, KYb5HaItCIP$ G}ؼy1(1B}`^ęq ]PDĀF= 0lPd QLFҫů$/<1[%B̊5lQ9`p`BJz!sr y1b$1 Ecc)0Q70107n8/,1[ 0C +1k}`z^;i60#Ƥ?vsab`ҼĴI 1`0 -L,0ud 0m`Zyb|>` + #`BL"K + .O!F*T`0tFY`3_v|dsy% 0C'$ d&EbTӀ:?833aWEb  08`"1*L?Y`X,JSsLI.C]`}r8,aO&2pI)WS0~wo6 P&HfiqFD9 1q}O`0t`h(0o}H#ĸVFY`9$?d`sb$1zEP +Ə|-rTU(`y)PM+ 0,0 udB2swZ'!F=Y`޻! a g (`!&060`UeFb\W `p`  6\B!=`恩`C^l~i!&! <0ā@`-L5`^'B́;p c1kv&Y7p`0\&^!F 5| :Qq(L1j=.`^80R0C+SA j3hҁbV!+ 0Kc`ƍ#Ąc`|7K>y`h*0K$1aęy0Cd0Bj(0J< 0Bk:0tBA #ĸ G0*e ~b[Qny>10s N``.0Bcjp` v2{0ρ#Ĝ& A;1{c0!FijX` L5vちn`.bh`r(s#1c 0h-#1Ł }!F<}P`(1'f0m; ?#0Bщ̛!L #@Z4@a`0Ḇ) O r`h_1&0\ ]9`IbLD`C0>5ޟ ^9,1Ӏq# ( ZbJP q0BQ 4MߏsPb +Îevb fa1$f 0@0R'F9$1c LB{WpӅSj:;`3#I>` vs8bSP0F91!`,<;0B) 2L1"@IEQs(bV&"i# 1 80M̞bC1!Ta.}#mc<1!l s b +C)0dy`C0F91z\ 0b +1&f`h$0{jwbC08sb bMLC!|n`Sj!fĔFbvMLi`!W +1%00f.<&0B̎Y06F/1 10bvJLa``|X!f, V_]0.ᬶBW[aC1$fi` ף\|W}DW#,T!fi!`( ez +p`n=bvGc׳\!fl. -|`a`w*C|P!f_l X`t\80>0BΈyZ`ȅEFec57㪁yI,bD#}#&m=M&F 1 5s0jb?UzK0*f1;"f`^. CD; #t LQU<yu\0M`^܉k1!A`'0`0tWI ̳3c/y ɔCf̣:k7w" Y41Ӻ'_O +1E&K# 6Od^ԭDK7_8w Wd +1 ad EIf 0UdQz}?%Y"1Sib ZM ,\&ކ{q83iOd/̉Ʈ)HyDmR- a~E Lt 0 '(0|LϖqH-OhH5X'6w97'2+=eyb~@}l! wTeA]zkv`~w1'%fd*6Zgkw^q}[x`1QdE*!ɉy00X-EiCQ1AӂؕW/W.YlKLMLf/bzke`W9`ȿ#>jƁ!tм7Od3+t0 L fHj3 lqAFϋˌ^xbd&gۿDv6'p MLRppf +CB̪&0+cD( +H?)wfܽ*lDvkoaB`~L_v?-Ĝ!)%Ef^'Ui^ob*U)s"360I`%GfXp:_vd~$aۗX{sjM|G%a@W̗+SֱcỦuu,TpJE7VzV h[]Id )&C2p 9li޸bU p݆`J Do&VyH21Ȁ/r3mN %[7:΄)5Wt/Y|]&PV|E]W0('П~X1M~;%2tƈ1djfzz9v\L1{lTb>^W̑%!ۥ eslId ڳ(;í͎303vr"Mgf特b骘[1b+پb%2-M.00%QL&ƐQh +7U-3GML_eUW Nd8IdPy;C:<0v 0ɔFa&W7,Sa3L؋|p +aULe᪘[U>ɀy,_6Fm(,(11C<*7=:-GSr26 +MIܵ-blV\nB0mh!p\0G1 K0<~B #C4FSO]5;57̓9Dj姙쓊b|V\nL0퐈9FlAc4AC +ܽ 1<+1 03z۲B3s"2wރO)&꺞`i+ت31ܻUF&0_1 1&:G!dܯ_ۢX==49dկnS\S3S #([]_gnLIy211ZJ&kH)df鈹kx9K1[pT1h+4YU13yvDRCWA  uk FbcfjL86wi*&bnê udoJ:UޖlViÊPvA$4 0_ơqʹL$Srߖɪ뚂 d0 #LT>6QBU1J3Kf`(3BMU,=r^eA~"\Z1q^1X-bޯoLlhP&f^+ _y,r&8F@{֐!5ʍV; /V E1{4S#s1_b?S1-GӒ4'0jTA +䏥8TL&"ۤÇN(/ R)d)cmlk$a晳iƑFj9Ne9QLCOLhsC;mL  @;?_ +122J sS;d/Tʥ)(4 6f22&N!TS ULN*&O|b6?U1W 45/X҄E`u6(,_ƶL`fFzP,b +BRl|t!rFơ2^,dr,τs͊U1L՗,S3 0Yr 0@>̠&!%AS5mDSŌFQ<'9Lahv 32H0]2u,{\1(,bpU u3)]{ՐM0Ԑ<1S6:FEBk^a<řrd-Q<4 CA&%2dN#3eS^1*fM0mju?pڏB@4A)Jt+f05%`L2Q }Ӛ`%UPЌ #'xfddp,:쩗WLE1ˊL<0>vdeAt $ADRhh+&9Rr B;d4^r0QF&CxRb"fX"3N1 ~gLbR(fcs+M7KGr.8D"q "[ +5nUpe"c#nd(3#CI 2=1os80)6p;ERӪKdQ`?CtTbrL +>[f~)ds~mF&h.L2:3cV KˡQ ,(&-*f94ˏ=0 Q-4acLu(KDzNR#Vb'qlhY^KU ^ -Moh+_X&GJhL@t#)4#ًdx!sbNA1.VB ikb;uq]0:~?GU|CWLyOzL'F&8 UtJñ1Ò)MLJ!dh\1Q 4Ƽ1Hm^^"="Df4z";S<{O䀑;fgݗ1y;0}Ab, šae2fdqPŐ+J}zy5Ɯ3eBL,"Ӥ"_t1b6;&Ji@:.s^XM:иUu2gæEbh$''bi1ljb2)c̚)[E !f7GCb+oJQRYa4[_c'Wo J)CG Rz8bE1MQSj戁#&!&bc!Zىj4Qt3&v%8ruF6 ydD2|Y먣Y+UL٧K?@MͶ/F}1LcfzWY >竘%Pߨw +n1n4H\2dFWXbL-MهsWD tT*AWK1 D:ItlqĢܢ9VHek58:%ROfq _DO̜\QC|3C%f䙢Ęl1" 1bT4"7A #&m1̒!zqE/mIntKQVa"c rUU?(H5joG+-]1E, (ZSV3kGbFI=bxmfɐ%W|Aɣi.BK&\ }!c2E:#&eLbwb^H1H3cLg.@Iܯ cj4:;zT$*}qČ fqJ 1JsvD@N+L86A #?ٓVF` SLYȗ3Sv:]ODV- fZ@ \b1W`Ȧ1_db j|~ T0ݦinRˆ Ih2zc,Sv1O<vdy1 Zm 1c?3e7̷o?m]0'cagمM6$$@{8՘Ş8Qz!U O/$Ű+;RgdQ:){*y =b:b}mΏ%$b'K@f11 +sc΂ȧ>˴.IfڪKU ]< +f<)Z 7]yDVĤ!F`kUӤegif-y h43R7⵪D=LِbD4)=sg6e@,T}&C +-"W2GAPwoM&SS漠`vr 75r{e 1,cؔqgS䈉cu1?&3~)b"bƖUˈy^D!fs"{s{:!UV6? 00Co8LMtewIM hleW1e즈91[̴gg3ɵjJR@BcF+V}{We0e1?c̔ 2UIx1?.C bHFCǤj[i7Քc~&E:=pyP[@XD91`RSM2AI1߯R±G 1&!& Ƨ엋r9E33.-5&m;-dekXN$qJ,?0 b'3꽴#"B~,S eQA:-"FTu27HQFj#_8I>(I`L}#)1Bj@[B +ԇ#3ݚL΅4d-e"S}jbH= KSr빖6UI4$1s%bhM$b] +1%* #1OgLUwh4ћ +oT@u _)+MLJvZM(cWES|"G0}"F’W 1 +`@1pmz5[SPZ\+q" +]tI2##f1LjCLoßO?0չbFCEq[j`Cx9E:)LcCEOvE ߇$9FĜkeqL1L2`3ebr_ۼ"FTKJ,fi_E=(".rQcO„ǂWFĜW#f7b #ƈ \4'C&9nonO쿲K R0M3Ҝ ykvclC]vbĜb[1 +1=Ĕ1iݘ_!abf*P1/bw`yuv}a쵴FX.Ƈыh&&>, filͼ/b` 1g@ЛU f}m]N+TDqI=Sb.ʨ&E߷ 5b<>1v\1"fc< 0"تWj\slЦ.e %DYJ521I|B5[]:bX/?1e4A bW#fwRpkGF1Me+ӕjr +ؒLW.9bұ-6C! 1mbP#}q -b W NF0}`ābo]SrUCM 䍘5ڋ1Zr-e3T$1i;1o'x;!FGLnn[Ĝ1F8{bMUF?aQ[ 2 +OAd¤_検$s1|Y3`nYRL% +,wR~C cZ7:jnȀIi(sOIb +1n=b\u>,|FĬ0F@rALaв`>:Bˎ71Obʢ0EYIbx)I|ldb|1SBLc"A000L/y(1]7H%͖6eci0/%0IJ1ѕı10D >%b޿1;`0i(se0rd`:Z~W\rPxVIqE+ż\ 8en\&Glbшy˶b3D17btl 17C:Aedԁ顳U9b~J$+J`*脧8Z0߾U';} /@{aƅrh +@/,v")GB#l5 fd#1wF nDΈY #yѻπqc䅫`UQ5ic%ceT=yRݯTfğKSpRrqVbaX Y4%ё1xbvՋ`9Yl*䮲:c`h)wjVͤ!LMvu%O(;,tS9m+;SWӱu.J,bv4`T`|l0fTUEJf#ht%S6,({kN-TŒ9Nk:a1"F>nB )lw@5:`f)Tl8%pF"gʩ"29?iT#DmH9z.I*w'Uܾ=磹114acX@Lmk'KΈ/ݝ@JUD.Ekc2UB_);TŃRkf'AΏ ꁓc%b^kF1 +1-XU£s \р$L01 3=97RI_g1J:lvK*m=fUe'"uz 1"-*ֶzѶ b|BLbr˵gBD4D Ĕ.!f)B fŌs A]_Rbe0-"kcoITyZzAYU:1?˳!F*>bF>,_1W#!&4nވi̫O9xq:AHq;+'{-JQp}lO>m2WTi.B,UaJAF! 擟F[=h՞`F ,@CV4s*?侄ӋXDuČSBC33`I(y4K"kN.*(Q\Jp[Gp/JI#փxcߣ`W2bQT}$b();# `bD`9fh> dIq$յnQ0Nk=p&=a5!ZTuTDDxAN:Y[1>#ƏókD56>kv~hČcb˷bA= 0Gpydzd j몴9鍣sVq0$M :@N@ &[8լq}:uZQBYԒ~woN?00!8%0BƧ4RWD9rXKT~Ҷ1|U.jP!# ){]b?CH+mbN+SfG3+^ٞR]d(t.Y!n7bGVɀLv@N-%0X)VM]a`yەƕ 'A"EY*XcoG.&l@뤘N,jϏE͸KSL܏erqqEIlX,~6BfP[a(zo|Ԗ7+3Vjv,wm~ry I2VW)RnI.CgPfYa>R +9paldFBE5#OA(AgPvL%hFE0ۇU*MQ +~J;̲]ه]?-|I[f-Z, UM HHo۵ؽ&w{8G;%h8Q)^v&IyC}pmPxks"i_@r$p[v"^ߍF:xyݘ}M)FO:XX5&kc7L[,Ms^<1vMgC-ۿ-">TGޥkm mδJd%@;r^*xMUدXƟk7ʣÐ, ^n1]3T9d")QpȏLMb^z9UHCXt+縯UH-օ e"bdoỲ׉ :"ӭxDJ4wecτ^Ӆ +^S)ҭsH~&k1AY(WvXWdW8<ɶgD&"DVq QᘶVu/t0 "Y"tHE!s!pd1f1,bZ`]0U tǙީ?Z@֩Cy /0Ⱦ=wU"o_w]LkSǢ0PLZ)ɺPVL6Res!!sHl׫3--T-vޭ;d {XzIR/lp]#-|h0M<6O] s.R/F0.KthkkJoBjClpտ`aȞȰ A{ r ip rOJZWCjm+nEYkA~5[Hsn J0)b[L#chŠvjQ?7ub|nOda^baRIcuW zg$ BQ8$n0&͙a_b'T4j]'MhNL[q\:2b -d֤KY$,I8:pp;pVYy\:8U8Ʒ>,Abkqwˊ-qH`ޡB{4ՠWm`V +Lmla~R)"B$Kgn7XLO_x`ꨄ)Xt[h,Q>Pk񈆩m憡;r0bŬa ԡ &IW>ya\X֓KU(hR<"0 y%]OXL9?|>9Y`zFI/X j7iyK>L5̑244)cVk@ :Hj M92aIH!ڹyb;8&؀LAilpM$ȠtqZoafߋfe*)͉&g27(3 +-nаvk'ŮlbvEV$ 9IҽlHuT6Z K *HԳ:Pӻ kDf2 ;MUKZ_GZg0ÆiAff$0Ȫϔ Q ٙ ҧZ5P*F2@ﴌ4f(2j"J4ɯ4n P1fFk|Fv 4jؘݖYtż)bvSǏGf1aI;V/^.O3XͰx`FȺ4ľ| 1Q0"Do#꥔KD5)/57DȆ ȴSdt"9OX+1B3^t@U_칣Wc,#X|b =Lo/`a$1_|(7?G:^wȿ:w$EnfOS$dt`.GW0D.5'cF@R 5 ^0a1c&sMq+/K#"pm=E {184_!$72I^$9I6gSy +TuK!}1p \r5<ְH:,n$`*O>kRM,,hNҫڲvd8!Z$ſv@GIAe$$g]0c;9f戱Z +Dw8ko\/`-X\-H~Usa Xŵ >N`glb xOx*$IU +Ix`#wj/T5P2l 8[)yXK09`z}NS}-H!Q؂=`dGȖ|ƄQ7M5)m[TJ|IF Hr8!b w:k"\R?z_*r5,XHg[X0|b,[.b`ʦpnG@r^lQ$CwA}"ɷ 糂t1L` +p|3vS6XD1IueqݾqrirF,z,n&@vp m!KJAoqBtҶ 'Z1KBžZ&Iy`"1-b +XAȥl1%;$9Iw w +xm2%1r:zyHG 'MOŊAwN !n<4W$EHB +f2bVΗ:7J/eSBnC_(! +Y*"Mb ̒e lRkG \|ӯvN"-0=yEa95n\͠\lȧr#iQ q ٠|=R0A0uI>kISL~D+eUOʙ/(mb e!D2gԁ$7 +f1" GLn\ʸqBD$ cHW u:RX=J0Uޓ0aq{IĬ1* "`'2}|&HZmQ:ȮdJe4#ƶ`_V\jݼy!Q a,`T,I*1^n_,v aÂD %^< -gI#Iٿ_0)b>RuzMU:E?钸v2>h**;bq YsAz̐ڗd~zo>f@i5F'pfCV)p ӦBe"UD0ݾp#`>OG9ᵗ;ŻJ 9D DH(L,b($A `Z^-_df)M1r8,Y0,a#F~HXlZEѺ$!wwU! mWIyM0SSĴR6y9QEaAPX3V*6>u.XB0L0-{ۈNbm`(lZm +i Q"rq%k +cn;Ҿ$ &`%bu(b$L[-_e["Ƥu,L3c,C*c^k"F`K/SfzQ1[..tߕjwv.FS=%11b^ uL/^i6R$ʽ$T`[oƦ 0}o0Qt#ii'D=!aL o9& SOaK0=T* AUsIZ 9A!R1+rѺ]d:P*X!-E sxJ&YS P tyM'>8ՄؒkjT[Hs$9 7iϦ3y(F| ws@(K!fuaMAU#'&.-;=V#][n-c +m{zf?ykeh  EQwV*gUMUr ;os$sm#qKsuŔK.aʭ5le2xL%Ċ +"h0EңA ,|ҍuoU ŝ[י_Tk]wd#OINFLZ7^{uϗ]RAZ54mx $ x`rsmو`bX'/2a0eƈb"_\08y(nn p01]L;n?R󵸔F1}LT&)k2(>MJ6QZ4Иhxl_He x؄Ύs3MJ!b w80+(3fZ%FE3#0IK.o͟y9_*#\heW"Uzm%fXq_##kqKw֝aFH柃K/YwBwCeiٟĬ-Q#So9'#9N!R(佣K&e8cC QQŭ=-6_DpJye xhāg.5xo]kXDjcgwճnC)}V(:1mbeGV&(|l86CYD0BEjOj{j`kգVEԆ"|IG+q-ZJ!da +};t'N\4PDx18y,TSYM'&W?F1(n51$[7Ia#-Y˟5z4"I; {鑼sR_oTGr$+Ԡ%y̴Db;B,6 cRZܨRNLDž#CiX*:4[tSS#7rdBKHFfPz$T o) +2;cϝ#J5G#PkxZ\gY( h+D]KLQud $ɐYD Tハ 3Gn,I">GvBHKJ*)^N0-{bG[ҥՁtK&#7=c41l+E#4b$/W^{tb:]\^U"fTa|<*(ٕ{To 9uANV -)Afp]W.j3<#"1h}42y)n[Vv^>َ ?bR0H~j1ΓܸG+L^7-Q@fdc j,1MBp<&{7121[yZbN$[^̋7,e@Hγywb/'%ՅjT/ˣI4*aBkdS~*/.$A"BJ!xW~T榈`{ԐN=RKLr>1i$y`'@eؘ\%֩c)BB]S`pjM?9Eګ4Gu Sَ9Z@RG^xWKu]=J.+ÊeFfYs؂ncE_FFqjdv53XiңTöWOբ#y؈| "-,"z##$\6=z+y$-gBNLצI~R#Bnԭ}F;y?vbSsȫXD+U2?\g\#Xvb^]..n=#iPuBq) </#*9O/IQH*`&H /%Gq mf Z!v_"qSJR,S_:y飼.IKY-S1~=s_jpݰ O9Z)@MbS%,pb.SS9|xr$,l‡ 75gtG7΂fpʧGX$<f,gy,a!H$D"H$D"H$D"H$9 endstream endobj 1170 0 obj [/Indexed 1080 0 R 28 1174 0 R] endobj 1173 0 obj <>/Filter/FlateDecode/Height 740/Intent/RelativeColorimetric/Length 49936/Name/X/Subtype/Image/Type/XObject/Width 817>>stream +H[ՈY%*QKuoxň + ++QW9:t0}tg?OU}iiiiiii-_JJ(jZ6k'e-fъvEhٌ_jS3"l&DR4o N`MfJalGk7U4+dO״ X7i3`,HfGh󹂴X&͈i$I5JF2S(y3дRR/T2YMK.K%I0dQ +/%Q2<(GK'Dy䤚Q1ZK|lr(m~K _nbhiS:tbhfd4-%%%ʊ񘉓Q1Z V0WK |Q2%KKLʪbnhɨ%RVMML +?Kj Xӊ fdTVryDDksjr$Q1Z4^\\-Q'Ƣq$ ?;^.F%b-b'P1f\2C&돦-Ҽr1PrX5M8gm/v1d3%rF 63s˸CFhP!^x.h1XĊe&,Ơ3ke_^/fxk1XĊaM^:VA3#b 2*F+/!X؊H\2t c& 2Q1Z%{ 13\`a+I h3fdkOL֟Q[$ . "XqҀ[a4lnj%[Fho!/p³VICډo91sFƌY2CF2-y8"P.W7~#x 2ib"`/2^h.Ed,"NvS{{_x)rƠA#fL4{ Hzǔ twX@>7~z a4 3|ٰ!2LhYc,x:mbdB:[<[6&1c! CFֲeM{:ㅷ1Yjp-4Z Ya)$;7P440LY^!Lh%PB.d _/r:³[cizС g8F~&slf #\2VL#,K6g%0{%b +9r(u /=EcK21gL֟T[y2>_K%bd+줭Gx-54LHƊl2yъݷys!-,4W +NBа9I3~2*F+ &e%j9-BV SN>}Í-R4d5!Y0Θ?@K0̀x/xs-@JGGg3gF7ClH 3121Q1;bthsSBF^V^uL /cB[a!+rsϟ."EoΝbCjN~&f ^d2#fU(&a)j 2B0~/ava.vX!*Pul!5bƎ&[C&g-s1i.i!syǔ=Y.4V.\˗\u5 W@iChB3 e{̐,&fuLmNJ[VB똌2.*Wvw_v:Atwb#hK3hZ f%R]K`Ls:㥹Vb*ݐw#z{AиccFȴ!ZkwQ~{-y 4lfb b6!bkY 1ѥLGV<,do /:^u=]ÅPy~zÇ}0=Mr!33 C=2Zٻ4Gw)21ZJ0Lں\/%/F)-$O?F?}Hn 935 2<tPW1Kf3 p!3LFYd--hJF)-.DYfU~rALzj=j1ƀe9H1~nabby,2F@3Ȝ&&hI*/+WaP^v;XQY]CNZ[ڎ+ +rF1SS]Yql7u2 U+Ub6e ̫Q&#+`>|`4~dAnAFh&g,tB9Fz[Fv!\4BwtP!h02LuY e)IsmV5cD!&i^by!%4dJ99.~nbJef1rƅ´o*'Oɓ3F|?IlF1DLZJ8s(QQ(HM0> +0?50` &K|BbrZ̬쥹n X/UdGcs q$@:srgtu':f TUden.ʜo10c( (*񑊑` -h$ؓS0+;'7/x)XXTrRK1F- sN9 adf,ʲE ܜ쬅MM'Ќq/(UL*FC0ddB0dd6{Rj9zg\X.DYrw|o/4`5ԳdeĬYh$,ZiS9X1<T<Q3ujIXhe+XC=^JJ1_cG٥B*}}.x"}.\6@3@irde2%D l+-YhAF:5fL(H{`>,, fAwK-hk[;p\>rҥK?sfL{[Q eف21?/[]2RI=T<[3v`I0dadF&3+{)xY#x٬B9a]z1-+W{ +qhBaю.k,S b~\ bfgeYF0e!3V*F﭂/~,E0Z]3ȒR0`0`V l^ap^\bk׮nܸAk !fdH2e2ʉͿl1+0c0cRQ* q)/̧R1y#o@  &$рYvxuql7p!\fX 2itd#0d\lĬ[ +3&fLZJb,QƊAOJ{`Ɛ`ƍ"  D ÀY`KE襻rp-`[n+w͛22=B22 +1M1c@ fe}Q ʂ?RgǍ{`>yU0AJEDĪAy)ܲm./15&p+CCw8@e];m)qEYlLdneA*y޸wy! P >'Zo4#ȒEFe>'//c˅.!rԻ{ A57z{80dlY1eɈ2Q='|6CQƊw*F3fT!qXрٽw?x9=yZy*ۅi,<|zH9MĠ{w3e cltdYbbƍP0'M +q +&L76 sRQ rrcva\,=~z3,d1NbGf5Qst0bB&O #ϛ7"h<ͬ1&KaA淲rRs#bɓ( Qf23'1zS^ϘaQ67b=hby ӆC0FAƂQL0jMGA1<}rx'3@$I&G}m!e(QƊAYF(&\6S*Fިf + k!)2S^;O_0_(Pc ´<{ ?5 eeeS mƈ(s)g2|͊"#^ %|ł-$y ! c^[ZO^c ˗UK@C23HL%D{kK"=ʠ쬅I1>)&T*FoĂ p +."*`ٓ9rrVRz<8~\I&8'qIllcf0`:.{H5Z]zDF"$'DZy9HbWss?"<`r K+kj^\ !l$KF,!2ʼpY'l6Bb‰g[600u7o;y'dzze 21199%$D͐deB1,+).*2|cpy{:Y[Il";N ?y?S`[cٱ{+[gw/_ ;{|EՅY/8ǀ ؂ܸq&=hL!L*BUyQ +9|p;&kcļĉg[0/U-Cf sf6N>0ȢAVZ^UsIs@-4 ~hf3L*FhjXS(tu0;q!f˦ k?bb^QFy0L`^温_ XiU75+:^Q BRŎdаdpCѦlnFY,@?owG[+sϐ2`ޥlߵgs7 tdL4֡{s傱܆%CgXNv@1>&Ĭ37(00[gw/Ĕ,q5 #Wb/TJ;R 43oiH1QeY)Q!^@1N ?cA1wrON̑ 2|tf t\;H3 3DF,ʈFY~NfZR|LDX'! !N g{90kD``l\Ĕ:  eT̅rW:l&#/f:(+HI + rwqb lļg[0`J yIHNE``]lA֩0Wz]H-@2bƮ +Ϙ.m'2 91'81w+ff?cne_HoR( |=61I{!tTdh1c_bz`)Mĸh$[$HN ?CҀo~80GMHN-(*.``A0cR/8ǀR˿#d,c2Z`]*/-.bғb#O#1nN6zĬ3=OE`ؽWKJ/CM}LN]!"BsyNH!Cq}j>c(Sw*pU19IqAH9̉g{0?cic 0)Yy feJcr/z -17qiTJ )JOAbB|1G91rKWOG` 0_0`Z::ݽlML]# sLSOh$Cg,)cB1atiJES}mus@L6Eq3 W&,"&>)-3 S^uQuA6=s>`@/ X2 2M1(u UH̙4$&cgenJٽϐ"`^c 9ˀiPkz^H) kGL1]l 2}֋T +>-I2ʀ.SLIfĸrbM"0d!0LY%Bٔ4޻'d==!{Jl2JL'sbMpN ?A D`rI 0#a^T̃ Gseo!0?]0D`0zutaA-R81u@L !Ljq3-2 Lm}Fdz"%Ê!e0>JL#ƇD`{20[#OL F۳s 'C1(3Li3=;0G0N `0C ܤ,CzsS$fb 1E"1"191 uOOfR`roAL08@/tzy(2ʠ;tL1PHSBI3ҭUK*C3skvn^dz<Կ_1ru_ AB@^P$@RDETQE 5&\|>wzsg}}oW֑ٙ}obQ6ˎIzil `9CbZ{w$0̤fReY =ʪE ;1{A ֝&07R`>%i0gBSDs$N[@  q`I`.\Rj8j!Č;a0yiL`wwQqz1aG fs$fr̃`nX ) "qK3@ 5 :0sVC{ᑬbLbV*툹`9̃c8}Ȏ(`^փb ,e Rdv/z1(Ui1b,q(0m8S~:0OS w(0a^\`|1X 檫Aw +`>#y00.0a4 +ja<4.0o|v̠ ̬vH6bQԞ- ty ̳O +Lf490rm1X7's̏SׁbJhbn1X6K,`n|)8hŀu+ 0oL 4fF?66bS׈1Xw']}S%0/1Xi00ey\0o7])qz Ad\}S0/ds e +` yr01M*`2ciyV;`~yۖ?tu}ɀ@`@ Vsw_90_ f<`@ Vr'퀹MgY(`O&ʲ<&(04 ̩i zyn<`{)0#r%fs[̚EL `Yz`^ƁyK;`vw[ [|_'2,|[`N`ΧxS VeG `~+ٞK $0o2*W00 +Zj`^yG0He/0Z1`1-ug)y>`- ̡$CYLfdr`T1to2 ~ +{o#b..C`>m"{ %JY1X>Wf 0\f4A `n|1-0.2dCDFS1X~uL`4b1S l 1 b-c`3 L&]0k2AJe `#`Ŭț `-`~m7.0f0Ywщ1XgKs<|0Ci^܋m1,u Jf +C2]N>60Efv0 e44`x0n1d4<fkO` +FS9bg-`E&IZ̚/erT0^V|80ULPL` `.C`>ks֞^ 3 Ɯ 2_n90bV``:) Fd*Z80Z0bxڋ +`/S`lsg80 +3_ivYb)1A ~\dQh0 j. [l`v$&<޵ fUd KsfF6O% `D~UcY1X0CT80v0F-bfA ze&<ը_q,b./A +Tk hT %bNV 0L;4jLbΖ0wƜKÝM/nE\IRfU֌ +`<؟szشh`$1K Ki9ZD5wz4Z3n0 x]ffEcEQ5WLK`W`xE"Y WmehʼnY1XLЃi8N*|F6' Үh`0aX*ީhD3!ɂ11XO0V.Ʋo2LX2Mu,Ldg#˒gz4Q4 `)V`k,z&i K2#i4\D, |l ֌L ^>l1nTE.UʜZkHFGF,%^xQZd*d6ƌHOFS1Xḙ>`x11&rɜ5%L`VB`l^d.E2"5c%Ca3bx+9 KE"K6#aD 1XFd/2V o1 mƗ*F.U%ZT/u)^d.2is|5F6#8˂ `W00Epz1yaZX,4D6 ]LC{x`d0  T.6W#!ɰ,@FQ,JL^8/Z.ʤ> FO#>ob$+eyk<\h-dfx20wy1Xܕ~1^T.tьHF 21cobv+0^9Fy rRNiݐhX3,zQdbX+08 ˅k9uɓ?jH3@=Dbx+0^fY/ rĉb Z k23:d׽_/) ˅B[9Fvbf2 +R\h1u8]xQZX*G OFeN1UQi]' +b+""_x/$ 2A6NG_lH4 8ŀ,JKEͅBc?D6FFlh3Lb@ c¾w) 26vɺaPfdbŀ,L^\.,߿Oa͐dLdd1F1n0 ZIq?v/ͅB[ٻw>fÚѓg,fu<+0z/c"xaZh+#b֌L#c>,te<80Bϱ }4!aZ k'ÐQL,9w_1XJLEdy\h-CCi4 EeA.x7BV"`A`=Fz!E2bEF~ j4#,8|1b \ DB1ʋ̅ƲkΝ;wW$ M"2U9V FT1  ]Y7z6z!EOb׷]TC`d&[h1퉙1ZOZ90sS_/*m۶KF~lpdx1i1Ih1@ X`*aAf21>v<\-{I*===gL(.T*UY$_ *,|T<`33AL2G 3#c03m]id*SWZ9<l GI21@vȌ9RʄbDN~B8 +5C22L21@6C3棥L(FhN0 + = 14e\}},}}}.AC&21DsB)9%{`0`vw77ԼxXpqG j !ːdm6c>V>ň +Ѐa<_yBeB-ۻYvf2(f$B̺D ͘SK~ N]omi_Vx$.Kl]rl6PC2$I'OW4cԊy*WB1m - 0W#݁~ [WgbZ;; G$Z6噹v̓g˫kQJOB1"GMH ++' +/chcV,v9K1CȠA2e21K8ڱRX)9m [VW]_xpXV ЀBIK،9 ň|"T^K .Ң ֋a.D Xiiinnnjj·2(f 2F'F1T^Q)A9`g + ;v!\jkjԀbȴ[]T˼xgI':J)wB1> % + ++d/w1_PǠ֖Fdd1LU5 HKF!==sO1RL(FG/o^1loI Bu mp2UVT[jV, "p);`L(FѲ`ް˹˹.2C/KC=p-@OiiYyE!SW^fV1wb^ULB1"r4*C0݄`// ;FcII1hCTVU51Clk;woP0b rjJxy^ h+ERBTUS%ƈšhHvQ^X(FX4-L0;f* fhǮ.EC>PPPfLL(u){JB1"FK +0}=v҄:Ve(+5-yy999恚BBp 3[`B1"|9 F.dcwv[K%XI1%7GsxL&;t *e;bфbDNw\.dS0N}LX\T` Zt.++ +Jpb.1R)bP B + W[른А\ )uL^>zQ&nH3Qʘbb^lPFy{T0(dx!Àhomn伔^ВJIKKO3<jӌJقRJ1G1V(G}4+d4`f/lVRIIIM#dI2e iÌlvnlgwPG9W շ;`z:-zEpIINJLL`IL6)@FU{&X)SV;/S{_?L0xBCR:d.%>...666..>>!#s["f +etB1"̖/y Y\z!\bcbnĀ ɠ1bLu v=X\:bޟbRob4_̦`FY!ZhTYc&'1\n݌yV ILd$bF1D4+e/<|$)PѬ` +fc2{I0c}aK/YcK| jnފKHL3bj،alqn~q1W>?+PoE"o{хBJXT .7nܸ_xxD$%ɤqbeU ͭR)pC15S̶Pȩ .˯`Th s9/KtTDB)aa!ɀ ]vn~!XYRf&c3s^\1_b~)h[0{|.zـ).xI \BCByBBBLD$$ÈdĔRtn +kI1o;IP6;y35 SEiI!7[y!0\]z5((kLxDB>f JJYoؤ299#%&tHXd2%^Pxh̭X+(ŒR92{WolNJqb&SѺ`TO`R!M,g$xKcx)c'ЖCGW+UEPe|F0`V +YԤKXHUZ.PH˦#.R wlSsbAP/gX̰J0&^ti q%roXΟ4@&K&ÌQ2W̒J1%ub `p=q677ʅ,3-9D2^H/~ܹyΝ_AQggN;m6QEeaveFoA!(hl8 iN:m3Ә&mm3ئ.+_kq)#b׆vb@̏b$7 '`>`fg.dGtw/KfZsf˅dP lemlzS䞘gb;<yB{A襨sX,lcd +Kb[ۻ32$溽o&"1~ +9J9=Ť# 0fn!j?P'ROdY0f9dC] ~E!ٵ%fZ!F#y`>wMo\2x4`/EyKVffNff%T732g/\#7tBOGF2\SB* f\2p3(g ,e@9"DD"G7`d黅4#,d},?ϖc\RSSpRS(KS^Q]K\ʎ< \v:SWuI]+Hcd ̙O + >`*k6S.)&JƜŔWV3GN1/_H bn9ө#Ñ10m=2 >`ˠ%;+r1Ddfq1V7RČb~ i' 1׌BTFv=5C >` dS.$^ LzSچv f`e~BL+1 +1 +3Ewu/-dհ R.zNju:IMb +KW5"1#'D 5%fr|G!Ƈ#S`^G`.0xUtBV] |%%rj5< $c/&cY 1 疘.#[`^`&FF`k.)ϵhx`LNbPGA,} +yŁ#P҈ Q_бz ?9Bo\{1 ԢV @1[>L}ļĸ!ѸDb|:rNsS[ؕY-fyIPǫTq0**hL1>615 ļꁘWN̬W;1?G7`ud 0'O 5@ >`̙ `2ZP {̬*\TZjƎt!0ýP.< & 4^ʈ 9bu[3wr9P!Ƨ#k`0G&AϽ@.p1b3i)+-{//ip$Fo'&ؑ(z|̗#GYn/bzJ!#`'`Z+yKLbݻg^h&;bb|=>$ jGD11MLߴ- EHg -et hĔ1yN̄Btgyr`83L!c/d; l8 ^"Pk'C*Hp|̣%w1G+rn!zP6`2\R#bDLBFJ`6I&0t` Eo V1R1ـ0-At ̠22җܘRFsCLõ10CEfSX:ԣt2D)Ns` ZȨʘї2L +1A;>t&1 8#q& ?&m!3'ic,e +#ĐDo`P +ї2L~ʨXb# a#c$8(d8εc,duu/)(1u\ҭGOYĨ`0 1`ēw#0=w\U,e,1'A6.1%`vHā9:x10t_PSPpeƄAAѓ"b>ٸQ$s ̿s0M05&KFLS]`xV1AT &ܤkfL + L`.L^{Gz]*QA:1D9`؁IbP=K%^s)c 2+Iff rya ] :3EDLb^޸Vb1%vr`BӁAmS]hĬb80ݢ",s!f 5^PKBLy#I\g`n(̷)` +}i4/e灘O\y95.0sE12/mIHcr| NZ{(`4Yk_`ؾXxd &LU] /(1hDgnol E@LI 0 .x6RKޘJ@ Ł,00ScYc.e@ e/̃ ^9lA6O]S{llļ(DO`mۢ7'܃9mBrd!+C/ށ9>:`/TU@L 6gG[쬰L>0ƫ1 Ky~6xRQo|s0}{1dƜ5B*c#[Ĭbb`;3%<`>uffX `7Ӎ( ~߀$G!`Z܀yJf f> ̥^hL: (1`:R80ڋ1 +Ĩs +=mvC p:?fHP9M`R* 0e$jQ/I-08, LY1!sI`܀f|4 0?t' +c}!V &!SQ!`^Aa 3̠b|b1ORYE^iCƫR1* B/0#Ey50{L`ޱ3f+0|`H]?H̗@L#Zyf_Rv)b l P6CeRLi)16C̳@L h^fq$<j:7p|`n?r10ƨ@2:Lb(ESL`KZD\g`:Sj nz &L>0G ̟AӃ&g  +O`3+0KFO0t|KcI<%ds0mZx%1q?ObM‹ 0`*+y Y 1h ' Yc2))7*W`rE9sՔ(T+0SRbm F00܀-Sa &'TSyq< -)0̉V`)ӧ\Sj!` i%ypv`Nsg)wceO0O *V`N`( CV`s_( aـ30"2>0}@c fAy^y0S8 C%`~ 0O"0̗b0TS_#`^\%s+1X? 1#L{cL`N 0$sT`3NFE36/l`b18MR  +G=0 3s70V`}@ C0s 0?b`= )0Ü)% Od1A9K?0g` +d1x;' 0@ c&0cƞ80(`:bHe,0?CJ``wUq` ƈ7`z̈! 0dG`bp< }s$)1@? 9wFbPG0_Dqboy/+'OsobPy21@t`$1>^[X`w <1iF{ ubsUqi1'F>04dtdiJbLO`N&\s?"|50,11~D`֤ &y ̙<`يٙ`0 i`6Ss41Y%& 0'-`#ŀ%1$&0vS Ib|\:Ā曨|@L̂dYf7f*bGL0`/̛1y00;Ӛ<`1td =ɸm`>N0@L-1!,C1"F:0lK50@Lv E)`>DdYd594`5g &Hft^iM20@L& 1*Ӛ` |$^1vbs$H` &H_ 0Ӓp`H^ &0oI11\nbL 1% j;07h`-`X &Ąꈁֽ1$ Z4=0{10EnU.0U &ĨLk:bH7`4;bRGLc1#FI`;ި|`+LQ6QBYB.t+0^(.bf<`Fɉ)K[f !uvڹ~@L< 0$ mLVƓfau9b](ZTPuZ֙9) J("-"EQ|@И>*/ȖF\g߯sy@#/_Ε V0i&f ˂9`#`, ۂײW& +fWq(7' DyKZL"(9%L((ƏI 摩`ʍ\&`x.2G1b<s_L= tuU%L&+`.7W+`%PL,FIL L#- +m L aSߜ4 +f$|ƋLׁ:Sk`J + 4$h@N3 +fƨEӓN1R59᳕`YLL֞tQ0Q`k4 c`|~; M"3X0$&'Q3%d8Ob|IKg# yL6Qe7H0_D9/c )ZAMu,x80(#f_9`)ἴi!},۴.~oA9§`&ci70 ;~q*QL!ٵK!IiuWׯ[En̰ioNDӓ +DUf,c7ŴQLΟIX点uZ:v*JO>Y[6Į^0 c'#"3lLGxa`P4^oz邛 qבY{?IٶeS|ژU -;Xd"Ӟ0_0`(1 +2ށcTL={ +1M,sgj`NU|YZR\X9ac욏VТ +l<]d$; Èa2c!KpLj` yƺNM梻&W^ ùHrlOB?a!pd,cLNgȈ?b:C0"U/,+u\ +TWޗ[ -BXd Q`Pz*1*3?H?tӧ`4`xn[["Ss+=QTrܝ3ykb†5ѰȰ`" &?apס^D`0b4f:;V? FZdX0-D0M86w-qבY{?IپeS|ܺ((\ttAnJ EFd=zF*7&G1:? FEYdZ羿uaEVZR\X+uGs˗i,tr 7td c#7&y `+g',2^sMܼp岚KxCjPj3a#ib4b24Y3bbl%vEF[Vj|rȶEBEk?a0%`&# d$fyG/bVu*;l\B1v-EV -]ׯYEz¼5#l*vDjhF*&QLOǢ`",*-)*,8$d3:eru F,h cG@$3×}ˈ@oSn_YUgt`EdP)e)6e)eKH KBk%/e+YbUU댵"NNs{>'7!{_}u4ċ'0]tA4aܘQ#d'ֵiɐbCnx~1)9F4lhmfBb\`"1k01߫vEsR`~u1 +8G!%1X `1{5bpx{M3c EJfc 1#bLbHL0I,:1%&D[`HWF57U+-Y`^S&'Lt1D0!6"ǚI12c:dŠrbO{H̟>K,1Uh Tވj jX0YӦLCKӅ#CiVvZkLN-]N4ʌʌ'Z#F3|虘Xb'Jyp0i0=4' H0^DLϸ݄a4P6mX̓^R+Rj6Ùd薩$EJLԩOLڗ,1饬:bl0nU\tq^1S&O(RbpCa3jǴ 6ؐa3Ɍih2^MF31|NbZh LA98b2MMMIJ?!&YD :4ܴg:2<5%nD 1̄qE&i*1{ļ+s,1'zSVŸ9~Tl݄7*|81rd@̠3a7#kc9F0DžLFj/CdFb$$p,1՞P/>`x $0D$1ɶd{V!4H a99CT0bCj2{LVdkY%b`*K3:1ɗl$1%Ą LYp0_]_)9|`o޸~ 1esbN :d0E3G pr=!KuKpk4ʌd!H-KLN+0yJ? }`n߼3y9bNwb^YeČiSLj(6#Hۑ3CXďu A Zz&f^$2!k>c$Wb'IbEQbt]KLE| o}Nf%f ֬Ziɞ3+kFt&3YRClPQL8g{hX!fC2d薡ȸ2CS4܉%r0R؉i0ov `#vubvM7]mɞ;{L&3UV3ݐ£fόc![:D f4eOZ"!bBϘj$]r$7A *ms1J=vl+޲Z r)2L&CR6!g?Kn 2h2Xd/Cd=c$_bW+1jby%~$&b ~7;wϜ~cG^?o׶o`EyLf&- $cMLѶn 1PfLN;ZF*.eމ;t p$&G'fs܊%R/LE))Ua0tܠщNs⍣b +W,/`/#2sNl əLxd&M5/$k!5# 3&[2 e8dl1~KR vƄO~L*J6$uIEI%A\ +: +LE!cdܕ#ƱĜGCb6[ST`ITehfd"5 L%;1e 밖`2g3f,f&Ao2qMkZDup6Fd?׻e1z)y<\btbzŀt`*#4$XmlMѪDf)ndf>a5`7 a=dzO͋b7`Dh f6ZƇL-,1~gL%JLVC&fWbQbVb)0!`M0,;Yhbx)1cc-˖"3sAgQ3wh_LH;bЈ [2Dkp@"M8ϘHL'x%ZHLwb~X<E%F1;3Sbx-Kfa!7#;s!Y0$ 2 |? .:dB|ӠAU24IDGbօ$Z5=Vb򫐘Q3W`_B2~81Rܿw7e[7c/#2B$ذCvxrf999 mٸLf(2d!ӡӼYSq1.eiL̏\,s$*33: +"բ,.tZ%. D".B-,ET,!B bK*NhygIrrΛ>9{L&Ĵrb +`bG 61Qfn8dAe +rh7!ƏD"Bn44^ws%197:b1UL('13iZ$v/o&W3\1%֮Y%2fs5Ӧ)Il蛨`܀(1fdFONDb:"|S㌲sN +gM̋1qcLܺ+wx/&Ǝ21fn,YB`͟'fFԐ =}S⾂n<1 Hf̽Yx*b5 +eS;ߛNbn&fMH$,'& + /M_F1m˫e9HfY"2O6p8Koz72Dƒ)3f +.<%[l-nDfˌlw٣pފq(;*$Di|ČM KLD"0a^&'?1adpɐkE#|oYW\(+nh :3}ɠ2p ,!ct#L>r\|Qc(;˿ܓ'iӚ#1D31 LP1Nb1e9| g;dd Р4J =V%{+Ȗy7`P̜Jlw22>1ܱ{ƴ2W5dVbf!1G 1GiKL,'&bBeG2^2Bf5alr ֆ5 :S<٤βC |H3/kgCr FG1_UO$&d.LLyJI̥Ĝ3 &ҁ1b1' ,K%#f ͥ*oJYerF 03 L2,!3d+{nΘ9# weUJ1i(1y01ǒ%f71}'$&r9 &Qv]eC9{5fAC5nLlV?1oS2+)q"Ag^o̘&,!+oN|Ug01#YUkI̙YILs*be1K怚yKHhF @yVwp6@c03Jf, gQ~n[cGY UuT%1g\Me<1 fbDoY@X3o(zۚb^)!Ɔhhfi+ fGLyݺ/g;Z(󜺾|^q|F&ziD?0|Ms1fAl Cxduu{6D3茐0,ńqcFAߏy]yxFv,1gg/1O113lb&6'1m R`xq|㎲v'vƠk;$o9ζG6P44%-` ?;v(koGٕW(\HL1H L̟I̯mbFܗBb_&&x}|lcX22ԌFՀ#oO*o9vjrcf:![e fI)lOrƸUeƵLPbVILTS?h`*+ccd͌!lFyo<5cȬX^\$,98<Ѓ˜1Q|4LCbZ'oF&f/1hb$:b¿LL $#*W242Ne5C4#v佝=YxT#hČ%zՊe f+f4<(+(s1GELGj87 $@D`4se ecڴ+-fg 0ݣ+WsmZhV#W̃^*ӰS|Y'('#oG 6f  2\2@QAޅ_KUe_2$SMB0϶`^QY;E$Áa.27`-7b,d37qP=DA#CaĜdAFy 3M8!^H1i)F) C1LŬ,b<S.`%3qtL&̬=^c/2_"FCFcCé11 E "cw"Θr$-;;Q# ?ńobQvV Dr|8Lս(RL,WL0e!rj4j-)$-`Y sE0ދ,,0&1:2:3A< +4n3B2x1lg 8@1Oꐁފ9!k5PqQ:P B1 ,,t`!y fkuBJ0m061.pf47!tn3 !riTF 18CD.I?Ʉ]1L\sUS'R1mI3RHX1NHL{`@J0-I0f'3ul7"%C|[d`1d82;;> !$ceۨU׬? cbZ*XTrj`Sy~AdD%sL1R1xQ{ $Y08ȳp&b"HA0Q83X f~Rbz]J0hs_3\d0~%ɌFQBNϕ W|t "H e{Uam? P1#C+UCJR1bJ)Fv5[1箘b(#"XxBUQyK (qc3$-]!7;'!B0"+"0Od366AS(eD"柧{ 8ugM2 zŸ('fV1#UFS1'b>W1aP"Ɓal3K1YTx)uLUL %  ӹ{h&q'O)̬j F_dс O-/`$1ŌIM(r"|&5 + O. +9#GY64_5՟ň6,FU~`(5W i`}P{b=%O:t/Ȣ}Y(dS\0u7lԴL@!s&.]M&{` Uq/j[c0M@)fшHl=L#wW5żk GVS:0eSbٺ]Sy%QVɸbx}` KR0ŌEŘ]$YG  3tH&))#9&Xd`1!i1yQb&,8=EbddgGp&nv,(7P ;\UCV]ZKEԤ01!@{Ve1^zbD3w*21jap'qDѱ5E,0d0900HEk>߼#cӳ +˫65voߵ 9|3:#F +N)fhF%U07+-9!"f 1k׬^g*, U&K?S1%bA#VUjb>,JFΝ>ya]6bܚG" +3\,[2/LXxt\bjFN~Qiw`,`ܞ[01DYVmЦ+DVuk+J3Rᬒ g5Ϊ"! Iյ{V=1Ykګ,cGQnQ^vzJblT8V]<h7A+#0jt#X,t>Y|u2]=; qdڳ3HF|FQ8(h!Lhl<,C [QT˭ |5bvߕo-j '?#-̢,0dƫC:KWաFW'26!Nqy^mpuU*'qJ C濎 )Vp%KKr <-1!JMONuj݈y~.b?[%䅎(1Dzp# +Hr .|p߲A! cNXxt\bjFv~Qin\ 1m u2\pϾG*/薄8xCz;VӪb>cr%b|#&NDLmCs{W/D^1?%Lߛ +`O/,ΝVlf40vJ/ ]Cf=YL|RZf.Y͖ƖkÝLÙR?x +]Qb'{HMe&I1.R!Uzh$SD!4b͉Q!(80Z?%Ng +̢hd.Nff!}般0 (Pd9ȩmϿQРz:ZCJ +Sb^SuҪ KbUu=1a$b20b*0bںz +"e0bP&)0`Ddzwvf#'?,8D3D1F99>Nƈpĥ3$8zc/D%Aq?u2 zHNFjb\4z!C~ +KBNVʚS F Habd(/l,tNfNfb&qld~zwG/bbd#OF#+F#khiFfuqt=!y 6m6z.2`% w#'$NF.CDյd^:bFz!wRHqp(sd#耹l5 p2f,;sF69#N0'h@N A>[iY)x>Er@Cؒ@UK :YwGkN6zS:B:"bb0b0bZ:zQ勣SHb2Q^ao(vaw2#aȖ,Y6ޛ7`B?SɦPf5⹿Wg{ZiXlRwmlk!KC~캓1Fck=sH' ↓(dvf1#N挑ӣFYDL|RZfNJ˖vw]M9-pf$6𸸮_0\(/<`./1{ww77lTn*!aCd^FL"bΤ2ZcoΑAf(. +/q<6Wfg]^D(F0F\GLT@--ѲHZ)rdcvu߃0\/$``K4K2z. 4]t4n*+.JOND%ayVlGWTR^5"i8ֳ eZbd -cdk9E2IY[b +7YF6fȂ`vbS +ï kQZRf6ypq_trG܏&\K2 Kr .>*XbScC1%oCE/1iVl'WRXc817x2 yixYxOY/1F7;cqI9JG0X畫)1+1"kjfN +Km=|$?;ٯ]f>TyA#YO,s2{fY֓["(T_ +# gc`/Q'SQJmNͤΗMjijxA 1ݒ-IoW;4ݚʲE܉qX#}fr\b\i^IHI+,.յWW2RcAfĈM BC`A0^#, )`T#;5Xa*̆0 0G0c$1hY č؈7e{aˤ]Q͒KM4¼ F%UyqcZ[ǸDbLDæ,h\D!BhDDqW WAqWGQIӦD9y}/ f}>kFz$ϙKW{|FqJj8^K*k,@`̠h䞡\oTܫC,n^G,D0/;6aD0hd`cQp857mw=5p\(_QD9@5Ӗ-*4b*'7r;y.eN_^$y_x!`P#(k]ܰpIۦӄ̰49yh-dd6q4s'lH$ځ 3-Uo\a ASF$XF$-[:߶t d\;{(.6b2ns-H]|֫R&3F)|zhFߓ'/ ldׯ^jQ,2ba(&L>A,@-lH'֬w $3?dhNFhz +Zxf4v^T`mGT9e#z ɊKRK7@&I-]?ŽqxJ.11FXmmh4_W|Rf͘+b,BNߞ4ჟߐ\)p¢h`Qɦ.lF3UY5*Z1p6yng{뺂Xz_O++ι$ IH_ XK{o#f.f8E.3P)3R-2}M@\И];b< +J0Q1q2$p~v3h13Z13ӧV5` z3zn [z֎$9_~W$y ҍkpz.>D_9b'~LƭϬ TBj(P^|&awLn3S,f ]0c\&KlJ]ledgT:K}pgtu]@3I#PBT/lG +jdI`fNzdİX$^,ݦE,(eKrK*8fףlI-e0-igY' ML f)`0c`Ɗ|F™rOӸ~<6,UyMwcG ܷN$$a/fD ڥ s;?Jj.e4cb`І%??~TF$ +/KE;Ƣ` v>+!X &2:3Lf՚u +d b Y1YC c[ SOra޼q Z; G>>|H-֭q X Ilt$X0mD0>D̫B}~U0VY3#D10ϏAoP ,6 & c`!6I0x? #FA]$cLJ?sQ;pJ ܹu%I&x p"I"Iuvp(F|-4|HиRfo6LdD2D`Ȇ~޻Pz;Mrm\^ɎvT@ AS=s{?ڹ͙$$C#$y1Ht}JN֭጑+a/a@5|P7.WK`h1(bc13 +ܓjQrQ¦ +-j;mٛ7]bl$IP$ +%"Iݻ5I0^ELE `AvL"NbQ Բ 5&@ #j,h,JϞv"m`K`a0B'+(:zLF\ u_鷙~ +jrQr +LZvܹ $I2Wp'Ol$i,#ƵRď3n¤)),JKB`R8`mDPX԰^Zf ``z%*0bYxb0-ZhاݔT8Rk66Ul!P7\I2I6I0VX ХJT]ԌVΊ) X kI-Wl0$` `a|R;9F掺wmMoG\(rA8R)$Sݳkl+/u$ 6<'$gx1}1b1Q1q My&*fFLP!P  +HD$ +E;Z ?!>S[sJ \0UZ2`d4in^ĕ"VUV~` Sݞj;\&[zH$ tR0)S2c R6µq--6M,qH,׮1y]`d8b-X1yba d/6F''G! X*l\#y!``m_)s$0I]0&::Fp 4|Hk)s@A!T +Q0NQ0ILa{сfD * j2x][A1FͶno^#3jAT +9rp1Uj!\ۓzLJJ#$ $Fڱ19bCK)z9 P +PZ{5!ddD3D 2@rT+a‚9kTӖA Q;wƴ'32~XLtFH 8G(FEL?1X⸔!)ٸ%;g X2 D$DZX.Eӡ! V(c)8b9J1IB.Ŷ +C R Q,H!tvőS@ >sǏM$@_!tF0Eb0UƎn#VsO, rCXM0]H0=@B"fcU^>& "\W%_A4C4Eilٴa-*E@m;cG'DI!I^&"tU01/ݧoR9A&oYTLzFf5m2,hD3D 2A~ +Q1ٝq| _gMNYCPi0V,Ec\"O=NA,`S]L-j{RQ FE +IHңɂ1'ܟ:(܌s1N%$mN'MwjzE%"buH 6fviZgkp@{Δ̳w) P֡ް}j119*ߏi)7m`;bls,$Kט/hcg7z? !@Gz?6A gkP=tP-֯[j Lf̔!1Z1?'Y͑TKWk xO Q ,I3370l/ xvͶbcbdieq1>URm;%$yq$$d&/eoCĠ'F"3A +[aF$bʁə,smSvhkŴl?|O fˍ1NJ@,CO59‚ +EP[7o\U3'n?jCuۯ6oR Y2vIh\I Lʂ\j̭)(e:clt*11,{X˰d}箙fT H(2xIbĨmcȱNpsq r<7h.,Pd 4Ϯ+p>uؑCm5T6Z qݹ&ɜ o$ʹ ޕ 4c@B, 㯽"VLSs7YȉEK4\Fn{TdxE`|K}WÇuh\3GX673׷W[37J ?7^` +<(bߧ R|L GOcɰn02 ] (C|Iޘ X*y %uĴ0kihsXdnh+Auv0*w}X4Po"}=r%d]3$ET`XeĪه0`Tn}NA!Wȅ} ]q+(![QC5B߹`̠ +l,eI' +\p"'Cc. 8(3)fF7g^b'VQel`"-33057 h }'1x~Po'*Bэ{#uP-Gj!V;KwdF/e2L< ?=T- e.D`"a(I3X+Fa)Ml4XxɜE18H XMfxqCz {]D7n٩*GP-$U% PqWLe-ˌB8C|P +(-0ɱrTuSCmq#hi!ddH27pfǧe\2h *Z: Fl"a(b`S *cAweLMa'(T`uI*|0 ;.LS b9đʎݮ\vfZ$GXS369z PfƍPo| EeYL>05슫_1`_t5+;zPԻ@`ȑÜP#d6v:KovxG&s&eCA3&vt2d8@e9f Mm0aH,:eaQr^ DqX)cTAuu\d|f8)7@%X_oWqtˎ.AA!m^ԝ۷mGXڭf j$p$+zabLm5&u8)NABǟ@+̢Ɉ[_1,H%`Ht(7@%Xe^v N!?(7HK8?e PIZHΊ!3@UmH<4DOR ! +8TT]1Sb\SLDJI)FGN9bUIacʾq:Qi+w١:%IruoĨђq[=]k:(4J c}<`T(-0EjkK*X[gQj"*:nr^!q ސFMT4>֍kXiW C5$jᥔ2ILPEF#4_>{$wHhjj(9b +V|ŵ,eiBkӒ%c I)2\w:^ q`?)48Epr~+v.Z8PM|I Bbb|`-%"֑&!#=PV*Ƣ3HqW =21!1 +Efk a4ck?` Ez4cBhV/~Α5pGPYB/r ՗4T'B!Tb]ZG(#>(5i!BI,+bKY%ǖ̔ILjaj`'+<_K QڴY u*‘vqKfK D )UJJz:1⍤+SBdFPTW`)6  9ZeP +Ў={vcBSԨ.\VōkUiW-L61V:P˰d:,2j!k`D +&eR) +[1+&3EL\fm(rpIAe%ȐVkQ$jht^]9s6sM8﷾P_l%@@P9}%@E y8|f %InrB3=|Y/P ^,5 /'0,f-J§\h=n LJ[\\BDք &7\4+,k!CDo@'?;Ǜ:kWH[ -!#:f:Rk?؈/f*Nh^+_CGYz KBB(i#x& 6 yr?š✢!"<g#t4Fu$,Ng-3 (h)NDbK%}Q. +dU: !Aq_աGI QR#i$) )NYr#dzT}((( *ANb,6S.CZC9Xq~>D%v<?D` jT8&5u~F+ư=%Ұ/Kfb,:xX_1o+&œ-僛( Ha%yy8)~;3yn抜FGneQܙWȄM0e%؉ύSAg+2 , H A`Lߒ +B{`TJdI?mЌBghGiH65'4ߏbNmOZx23\DABL G"H3#z|ɂО "qR'i$-CgVFx;yZ*$ai dN +A@TDDAL +#$@py \TRD&}j99XKSqB:A1 +t{bРD<<)ȇ}RBN_2+ !@v偂9CAEhRSGh! $Y9]o9=؉G 'D +#S;Ycc,tFimb+pRL).C ":߸#jDY/23485)P _ btcC& "`N‚ )#~ x!p"aRdȺ$+l ͨ t8$RZȟ b%1D %y&iG4$SN#zTFu$mKN&iC +kEbjD+; FH\HU0LI=D;GB(B'H8Q/dȒ0^?EM(W0EQ< c|X(dGC+zL!s%5FOu>xG2K19KXQC1lڍpxP3GZFDI@Ua !h!!xvY;mZqOR, [RŦlV&@@CDT$J`G;(udQ+MXbJ6%1tj B)i< :%;GHHٷ,+j):SZqZ~ ,f鰩a:OPɨ0+v1dH̊Zc%S w涱bJ0,V4&(|"JY>:Ԁ0+ŏ H4D'uێVƔC;cnEU b+c$v& nS2XPA!L6=bgZih10hldO3@ $dlmCC"ŤV@ "χcX&{taB%c15$x AEdRB-TZܮELM23@G0 "d1yډn!UEY#I[%ɽjֈ,6m aB +)-F?@kHTĜ vE բbCߘfe- !>(iİ|F6v9vJ3u/nLxqcL c2LCxNB%w]8A!F@vH1;blSl!<(JW?@kU$ԭ:mzqŻ/b\R2ZM#x"K~ !HߑM$xѪLESI1NFeL&cCpNOL!nQCtP[lϑ /[J2apN?PhH9ڣh$!6 GR]:2Eg+,0%&"䙛\rqŌ1Y,$l*x<$EkO+O܆;2c4.LL. !"񉛚RcqiZYmBJO95EK&-MhIeqL Ǽv ].ygr4x槄?A]s-5d1LwgӴki5d,T:ӁRԫ1I.u0ޜCh.%UZ,[e 7c9i,kx6Ji ᱘ksa?rcP&g~t7E9-:,`o-0TMca[}E}sp-B-΢}`q\,ћhfh>stream +UUU endstream endobj 1171 0 obj <> endobj 1175 0 obj <> endobj 1176 0 obj [0.0 0.0 0.0] endobj 1177 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +817 0 0 740 142.7045746 122.7999878 cm +/Im0 Do +Q + endstream endobj 1178 0 obj <> endobj 1179 0 obj <>/Filter/FlateDecode/Height 740/Intent/RelativeColorimetric/Length 49936/Name/X/Subtype/Image/Type/XObject/Width 817>>stream +H[ՈY%*QKuoxň + ++QW9:t0}tg?OU}iiiiiii-_JJ(jZ6k'e-fъvEhٌ_jS3"l&DR4o N`MfJalGk7U4+dO״ X7i3`,HfGh󹂴X&͈i$I5JF2S(y3дRR/T2YMK.K%I0dQ +/%Q2<(GK'Dy䤚Q1ZK|lr(m~K _nbhiS:tbhfd4-%%%ʊ񘉓Q1Z V0WK |Q2%KKLʪbnhɨ%RVMML +?Kj Xӊ fdTVryDDksjr$Q1Z4^\\-Q'Ƣq$ ?;^.F%b-b'P1f\2C&돦-Ҽr1PrX5M8gm/v1d3%rF 63s˸CFhP!^x.h1XĊe&,Ơ3ke_^/fxk1XĊaM^:VA3#b 2*F+/!X؊H\2t c& 2Q1Z%{ 13\`a+I h3fdkOL֟Q[$ . "XqҀ[a4lnj%[Fho!/p³VICډo91sFƌY2CF2-y8"P.W7~#x 2ib"`/2^h.Ed,"NvS{{_x)rƠA#fL4{ Hzǔ twX@>7~z a4 3|ٰ!2LhYc,x:mbdB:[<[6&1c! CFֲeM{:ㅷ1Yjp-4Z Ya)$;7P440LY^!Lh%PB.d _/r:³[cizС g8F~&slf #\2VL#,K6g%0{%b +9r(u /=EcK21gL֟T[y2>_K%bd+줭Gx-54LHƊl2yъݷys!-,4W +NBа9I3~2*F+ &e%j9-BV SN>}Í-R4d5!Y0Θ?@K0̀x/xs-@JGGg3gF7ClH 3121Q1;bthsSBF^V^uL /cB[a!+rsϟ."EoΝbCjN~&f ^d2#fU(&a)j 2B0~/ava.vX!*Pul!5bƎ&[C&g-s1i.i!syǔ=Y.4V.\˗\u5 W@iChB3 e{̐,&fuLmNJ[VB똌2.*Wvw_v:Atwb#hK3hZ f%R]K`Ls:㥹Vb*ݐw#z{AиccFȴ!ZkwQ~{-y 4lfb b6!bkY 1ѥLGV<,do /:^u=]ÅPy~zÇ}0=Mr!33 C=2Zٻ4Gw)21ZJ0Lں\/%/F)-$O?F?}Hn 935 2<tPW1Kf3 p!3LFYd--hJF)-.DYfU~rALzj=j1ƀe9H1~nabby,2F@3Ȝ&&hI*/+WaP^v;XQY]CNZ[ڎ+ +rF1SS]Yql7u2 U+Ub6e ̫Q&#+`>|`4~dAnAFh&g,tB9Fz[Fv!\4BwtP!h02LuY e)IsmV5cD!&i^by!%4dJ99.~nbJef1rƅ´o*'Oɓ3F|?IlF1DLZJ8s(QQ(HM0> +0?50` &K|BbrZ̬쥹n X/UdGcs q$@:srgtu':f TUden.ʜo10c( (*񑊑` -h$ؓS0+;'7/x)XXTrRK1F- sN9 adf,ʲE ܜ쬅MM'Ќq/(UL*FC0ddB0dd6{Rj9zg\X.DYrw|o/4`5ԳdeĬYh$,ZiS9X1<T<Q3ujIXhe+XC=^JJ1_cG٥B*}}.x"}.\6@3@irde2%D l+-YhAF:5fL(H{`>,, fAwK-hk[;p\>rҥK?sfL{[Q eف21?/[]2RI=T<[3v`I0dadF&3+{)xY#x٬B9a]z1-+W{ +qhBaю.k,S b~\ bfgeYF0e!3V*F﭂/~,E0Z]3ȒR0`0`V l^ap^\bk׮nܸAk !fdH2e2ʉͿl1+0c0cRQ* q)/̧R1y#o@  &$рYvxuql7p!\fX 2itd#0d\lĬ[ +3&fLZJb,QƊAOJ{`Ɛ`ƍ"  D ÀY`KE襻rp-`[n+w͛22=B22 +1M1c@ fe}Q ʂ?RgǍ{`>yU0AJEDĪAy)ܲm./15&p+CCw8@e];m)qEYlLdneA*y޸wy! P >'Zo4#ȒEFe>'//c˅.!rԻ{ A57z{80dlY1eɈ2Q='|6CQƊw*F3fT!qXрٽw?x9=yZy*ۅi,<|zH9MĠ{w3e cltdYbbƍP0'M +q +&L76 sRQ rrcva\,=~z3,d1NbGf5Qst0bB&O #ϛ7"h<ͬ1&KaA淲rRs#bɓ( Qf23'1zS^ϘaQ67b=hby ӆC0FAƂQL0jMGA1<}rx'3@$I&G}m!e(QƊAYF(&\6S*Fިf + k!)2S^;O_0_(Pc ´<{ ?5 eeeS mƈ(s)g2|͊"#^ %|ł-$y ! c^[ZO^c ˗UK@C23HL%D{kK"=ʠ쬅I1>)&T*FoĂ p +."*`ٓ9rrVRz<8~\I&8'qIllcf0`:.{H5Z]zDF"$'DZy9HbWss?"<`r K+kj^\ !l$KF,!2ʼpY'l6Bb‰g[600u7o;y'dzze 21199%$D͐deB1,+).*2|cpy{:Y[Il";N ?y?S`[cٱ{+[gw/_ ;{|EՅY/8ǀ ؂ܸq&=hL!L*BUyQ +9|p;&kcļĉg[0/U-Cf sf6N>0ȢAVZ^UsIs@-4 ~hf3L*FhjXS(tu0;q!f˦ k?bb^QFy0L`^温_ XiU75+:^Q BRŎdаdpCѦlnFY,@?owG[+sϐ2`ޥlߵgs7 tdL4֡{s傱܆%CgXNv@1>&Ĭ37(00[gw/Ĕ,q5 #Wb/TJ;R 43oiH1QeY)Q!^@1N ?cA1wrON̑ 2|tf t\;H3 3DF,ʈFY~NfZR|LDX'! !N g{90kD``l\Ĕ:  eT̅rW:l&#/f:(+HI + rwqb lļg[0`J yIHNE``]lA֩0Wz]H-@2bƮ +Ϙ.m'2 91'81w+ff?cne_HoR( |=61I{!tTdh1c_bz`)Mĸh$[$HN ?CҀo~80GMHN-(*.``A0cR/8ǀR˿#d,c2Z`]*/-.bғb#O#1nN6zĬ3=OE`ؽWKJ/CM}LN]!"BsyNH!Cq}j>c(Sw*pU19IqAH9̉g{0?cic 0)Yy feJcr/z -17qiTJ )JOAbB|1G91rKWOG` 0_0`Z::ݽlML]# sLSOh$Cg,)cB1atiJES}mus@L6Eq3 W&,"&>)-3 S^uQuA6=s>`@/ X2 2M1(u UH̙4$&cgenJٽϐ"`^c 9ˀiPkz^H) kGL1]l 2}֋T +>-I2ʀ.SLIfĸrbM"0d!0LY%Bٔ4޻'d==!{Jl2JL'sbMpN ?A D`rI 0#a^T̃ Gseo!0?]0D`0zutaA-R81u@L !Ljq3-2 Lm}Fdz"%Ê!e0>JL#ƇD`{20[#OL F۳s 'C1(3Li3=;0G0N `0C ܤ,CzsS$fb 1E"1"191 uOOfR`roAL08@/tzy(2ʠ;tL1PHSBI3ҭUK*C3skvn^dz<Կ_1ru_ AB@^P$@RDETQE 5&\|>wzsg}}oW֑ٙ}obQ6ˎIzil `9CbZ{w$0̤fReY =ʪE ;1{A ֝&07R`>%i0gBSDs$N[@  q`I`.\Rj8j!Č;a0yiL`wwQqz1aG fs$fr̃`nX ) "qK3@ 5 :0sVC{ᑬbLbV*툹`9̃c8}Ȏ(`^փb ,e Rdv/z1(Ui1b,q(0m8S~:0OS w(0a^\`|1X 檫Aw +`>#y00.0a4 +ja<4.0o|v̠ ̬vH6bQԞ- ty ̳O +Lf490rm1X7's̏SׁbJhbn1X6K,`n|)8hŀu+ 0oL 4fF?66bS׈1Xw']}S%0/1Xi00ey\0o7])qz Ad\}S0/ds e +` yr01M*`2ciyV;`~yۖ?tu}ɀ@`@ Vsw_90_ f<`@ Vr'퀹MgY(`O&ʲ<&(04 ̩i zyn<`{)0#r%fs[̚EL `Yz`^ƁyK;`vw[ [|_'2,|[`N`ΧxS VeG `~+ٞK $0o2*W00 +Zj`^yG0He/0Z1`1-ug)y>`- ̡$CYLfdr`T1to2 ~ +{o#b..C`>m"{ %JY1X>Wf 0\f4A `n|1-0.2dCDFS1X~uL`4b1S l 1 b-c`3 L&]0k2AJe `#`Ŭț `-`~m7.0f0Ywщ1XgKs<|0Ci^܋m1,u Jf +C2]N>60Efv0 e44`x0n1d4<fkO` +FS9bg-`E&IZ̚/erT0^V|80ULPL` `.C`>ks֞^ 3 Ɯ 2_n90bV``:) Fd*Z80Z0bxڋ +`/S`lsg80 +3_ivYb)1A ~\dQh0 j. [l`v$&<޵ fUd KsfF6O% `D~UcY1X0CT80v0F-bfA ze&<ը_q,b./A +Tk hT %bNV 0L;4jLbΖ0wƜKÝM/nE\IRfU֌ +`<؟szشh`$1K Ki9ZD5wz4Z3n0 x]ffEcEQ5WLK`W`xE"Y WmehʼnY1XLЃi8N*|F6' Үh`0aX*ީhD3!ɂ11XO0V.Ʋo2LX2Mu,Ldg#˒gz4Q4 `)V`k,z&i K2#i4\D, |l ֌L ^>l1nTE.UʜZkHFGF,%^xQZd*d6ƌHOFS1Xḙ>`x11&rɜ5%L`VB`l^d.E2"5c%Ca3bx+9 KE"K6#aD 1XFd/2V o1 mƗ*F.U%ZT/u)^d.2is|5F6#8˂ `W00Epz1yaZX,4D6 ]LC{x`d0  T.6W#!ɰ,@FQ,JL^8/Z.ʤ> FO#>ob$+eyk<\h-dfx20wy1Xܕ~1^T.tьHF 21cobv+0^9Fy rRNiݐhX3,zQdbX+08 ˅k9uɓ?jH3@=Dbx+0^fY/ rĉb Z k23:d׽_/) ˅B[9Fvbf2 +R\h1u8]xQZX*G OFeN1UQi]' +b+""_x/$ 2A6NG_lH4 8ŀ,JKEͅBc?D6FFlh3Lb@ c¾w) 26vɺaPfdbŀ,L^\.,߿Oa͐dLdd1F1n0 ZIq?v/ͅB[ٻw>fÚѓg,fu<+0z/c"xaZh+#b֌L#c>,te<80Bϱ }4!aZ k'ÐQL,9w_1XJLEdy\h-CCi4 EeA.x7BV"`A`=Fz!E2bEF~ j4#,8|1b \ DB1ʋ̅ƲkΝ;wW$ M"2U9V FT1  ]Y7z6z!EOb׷]TC`d&[h1퉙1ZOZ90sS_/*m۶KF~lpdx1i1Ih1@ X`*aAf21>v<\-{I*===gL(.T*UY$_ *,|T<`33AL2G 3#c03m]id*SWZ9<l GI21@vȌ9RʄbDN~B8 +5C22L21@6C3棥L(FhN0 + = 14e\}},}}}.AC&21DsB)9%{`0`vw77ԼxXpqG j !ːdm6c>V>ň +Ѐa<_yBeB-ۻYvf2(f$B̺D ͘SK~ N]omi_Vx$.Kl]rl6PC2$I'OW4cԊy*WB1m - 0W#݁~ [WgbZ;; G$Z6噹v̓g˫kQJOB1"GMH ++' +/chcV,v9K1CȠA2e21K8ڱRX)9m [VW]_xpXV ЀBIK،9 ň|"T^K .Ң ֋a.D Xiiinnnjj·2(f 2F'F1T^Q)A9`g + ;v!\jkjԀbȴ[]T˼xgI':J)wB1> % + ++d/w1_PǠ֖Fdd1LU5 HKF!==sO1RL(FG/o^1loI Bu mp2UVT[jV, "p);`L(FѲ`ް˹˹.2C/KC=p-@OiiYyE!SW^fV1wb^ULB1"r4*C0݄`// ;FcII1hCTVU51Clk;woP0b rjJxy^ h+ERBTUS%ƈšhHvQ^X(FX4-L0;f* fhǮ.EC>PPPfLL(u){JB1"FK +0}=v҄:Ve(+5-yy999恚BBp 3[`B1"|9 F.dcwv[K%XI1%7GsxL&;t *e;bфbDNw\.dS0N}LX\T` Zt.++ +Jpb.1R)bP B + W[른А\ )uL^>zQ&nH3Qʘbb^lPFy{T0(dx!Àhomn伔^ВJIKKO3<jӌJقRJ1G1V(G}4+d4`f/lVRIIIM#dI2e iÌlvnlgwPG9W շ;`z:-zEpIINJLL`IL6)@FU{&X)SV;/S{_?L0xBCR:d.%>...666..>>!#s["f +etB1"̖/y Y\z!\bcbnĀ ɠ1bLu v=X\:bޟbRob4_̦`FY!ZhTYc&'1\n݌yV ILd$bF1D4+e/<|$)PѬ` +fc2{I0c}aK/YcK| jnފKHL3bj،alqn~q1W>?+PoE"o{хBJXT .7nܸ_xxD$%ɤqbeU ͭR)pC15S̶Pȩ .˯`Th s9/KtTDB)aa!ɀ ]vn~!XYRf&c3s^\1_b~)h[0{|.zـ).xI \BCByBBBLD$$ÈdĔRtn +kI1o;IP6;y35 SEiI!7[y!0\]z5((kLxDB>f JJYoؤ299#%&tHXd2%^Pxh̭X+(ŒR92{WolNJqb&SѺ`TO`R!M,g$xKcx)c'ЖCGW+UEPe|F0`V +YԤKXHUZ.PH˦#.R wlSsbAP/gX̰J0&^ti q%roXΟ4@&K&ÌQ2W̒J1%ub `p=q677ʅ,3-9D2^H/~ܹyΝ_AQggN;m6QEeaveFoA!(hl8 iN:m3Ә&mm3ئ.+_kq)#b׆vb@̏b$7 '`>`fg.dGtw/KfZsf˅dP lemlzS䞘gb;<yB{A襨sX,lcd +Kb[ۻ32$溽o&"1~ +9J9=Ť# 0fn!j?P'ROdY0f9dC] ~E!ٵ%fZ!F#y`>wMo\2x4`/EyKVffNff%T732g/\#7tBOGF2\SB* f\2p3(g ,e@9"DD"G7`d黅4#,d},?ϖc\RSSpRS(KS^Q]K\ʎ< \v:SWuI]+Hcd ̙O + >`*k6S.)&JƜŔWV3GN1/_H bn9ө#Ñ10m=2 >`ˠ%;+r1Ddfq1V7RČb~ i' 1׌BTFv=5C >` dS.$^ LzSچv f`e~BL+1 +1 +3Ewu/-dհ R.zNju:IMb +KW5"1#'D 5%fr|G!Ƈ#S`^G`.0xUtBV] |%%rj5< $c/&cY 1 疘.#[`^`&FF`k.)ϵhx`LNbPGA,} +yŁ#P҈ Q_бz ?9Bo\{1 ԢV @1[>L}ļĸ!ѸDb|:rNsS[ؕY-fyIPǫTq0**hL1>615 ļꁘWN̬W;1?G7`ud 0'O 5@ >`̙ `2ZP {̬*\TZjƎt!0ýP.< & 4^ʈ 9bu[3wr9P!Ƨ#k`0G&AϽ@.p1b3i)+-{//ip$Fo'&ؑ(z|̗#GYn/bzJ!#`'`Z+yKLbݻg^h&;bb|=>$ jGD11MLߴ- EHg -et hĔ1yN̄Btgyr`83L!c/d; l8 ^"Pk'C*Hp|̣%w1G+rn!zP6`2\R#bDLBFJ`6I&0t` Eo V1R1ـ0-At ̠22җܘRFsCLõ10CEfSX:ԣt2D)Ns` ZȨʘї2L +1A;>t&1 8#q& ?&m!3'ic,e +#ĐDo`P +ї2L~ʨXb# a#c$8(d8εc,duu/)(1u\ҭGOYĨ`0 1`ēw#0=w\U,e,1'A6.1%`vHā9:x10t_PSPpeƄAAѓ"b>ٸQ$s ̿s0M05&KFLS]`xV1AT &ܤkfL + L`.L^{Gz]*QA:1D9`؁IbP=K%^s)c 2+Iff rya ] :3EDLb^޸Vb1%vr`BӁAmS]hĬb80ݢ",s!f 5^PKBLy#I\g`n(̷)` +}i4/e灘O\y95.0sE12/mIHcr| NZ{(`4Yk_`ؾXxd &LU] /(1hDgnol E@LI 0 .x6RKޘJ@ Ł,00ScYc.e@ e/̃ ^9lA6O]S{llļ(DO`mۢ7'܃9mBrd!+C/ށ9>:`/TU@L 6gG[쬰L>0ƫ1 Ky~6xRQo|s0}{1dƜ5B*c#[Ĭbb`;3%<`>uffX `7Ӎ( ~߀$G!`Z܀yJf f> ̥^hL: (1`:R80ڋ1 +Ĩs +=mvC p:?fHP9M`R* 0e$jQ/I-08, LY1!sI`܀f|4 0?t' +c}!V &!SQ!`^Aa 3̠b|b1ORYE^iCƫR1* B/0#Ey50{L`ޱ3f+0|`H]?H̗@L#Zyf_Rv)b l P6CeRLi)16C̳@L h^fq$<j:7p|`n?r10ƨ@2:Lb(ESL`KZD\g`:Sj nz &L>0G ̟AӃ&g  +O`3+0KFO0t|KcI<%ds0mZx%1q?ObM‹ 0`*+y Y 1h ' Yc2))7*W`rE9sՔ(T+0SRbm F00܀-Sa &'TSyq< -)0̉V`)ӧ\Sj!` i%ypv`Nsg)wceO0O *V`N`( CV`s_( aـ30"2>0}@c fAy^y0S8 C%`~ 0O"0̗b0TS_#`^\%s+1X? 1#L{cL`N 0$sT`3NFE36/l`b18MR  +G=0 3s70V`}@ C0s 0?b`= )0Ü)% Od1A9K?0g` +d1x;' 0@ c&0cƞ80(`:bHe,0?CJ``wUq` ƈ7`z̈! 0dG`bp< }s$)1@? 9wFbPG0_Dqboy/+'OsobPy21@t`$1>^[X`w <1iF{ ubsUqi1'F>04dtdiJbLO`N&\s?"|50,11~D`֤ &y ̙<`يٙ`0 i`6Ss41Y%& 0'-`#ŀ%1$&0vS Ib|\:Ā曨|@L̂dYf7f*bGL0`/̛1y00;Ӛ<`1td =ɸm`>N0@L-1!,C1"F:0lK50@Lv E)`>DdYd594`5g &Hft^iM20@L& 1*Ӛ` |$^1vbs$H` &H_ 0Ӓp`H^ &0oI11\nbL 1% j;07h`-`X &Ąꈁֽ1$ Z4=0{10EnU.0U &ĨLk:bH7`4;bRGLc1#FI`;ި|`+LQ6QBYB.t+0^(.bf<`Fɉ)K[f !uvڹ~@L< 0$ mLVƓfau9b](ZTPuZ֙9) J("-"EQ|@И>*/ȖF\g߯sy@#/_Ε V0i&f ˂9`#`, ۂײW& +fWq(7' DyKZL"(9%L((ƏI 摩`ʍ\&`x.2G1b<s_L= tuU%L&+`.7W+`%PL,FIL L#- +m L aSߜ4 +f$|ƋLׁ:Sk`J + 4$h@N3 +fƨEӓN1R59᳕`YLL֞tQ0Q`k4 c`|~; M"3X0$&'Q3%d8Ob|IKg# yL6Qe7H0_D9/c )ZAMu,x80(#f_9`)ἴi!},۴.~oA9§`&ci70 ;~q*QL!ٵK!IiuWׯ[En̰ioNDӓ +DUf,c7ŴQLΟIX点uZ:v*JO>Y[6Į^0 c'#"3lLGxa`P4^oz邛 qבY{?IٶeS|ژU -;Xd"Ӟ0_0`(1 +2ށcTL={ +1M,sgj`NU|YZR\X9ac욏VТ +l<]d$; Èa2c!KpLj` yƺNM梻&W^ ùHrlOB?a!pd,cLNgȈ?b:C0"U/,+u\ +TWޗ[ -BXd Q`Pz*1*3?H?tӧ`4`xn[["Ss+=QTrܝ3ykb†5ѰȰ`" &?apס^D`0b4f:;V? FZdX0-D0M86w-qבY{?IپeS|ܺ((\ttAnJ EFd=zF*7&G1:? FEYdZ羿uaEVZR\X+uGs˗i,tr 7td c#7&y `+g',2^sMܼp岚KxCjPj3a#ib4b24Y3bbl%vEF[Vj|rȶEBEk?a0%`&# d$fyG/bVu*;l\B1v-EV -]ׯYEz¼5#l*vDjhF*&QLOǢ`",*-)*,8$d3:eru F,h cG@$3×}ˈ@oSn_YUgt`EdP)e)6e)eKH KBk%/e+YbUU댵"NNs{>'7!{_}u4ċ'0]tA4aܘQ#d'ֵiɐbCnx~1)9F4lhmfBb\`"1k01߫vEsR`~u1 +8G!%1X `1{5bpx{M3c EJfc 1#bLbHL0I,:1%&D[`HWF57U+-Y`^S&'Lt1D0!6"ǚI12c:dŠrbO{H̟>K,1Uh Tވj jX0YӦLCKӅ#CiVvZkLN-]N4ʌʌ'Z#F3|虘Xb'Jyp0i0=4' H0^DLϸ݄a4P6mX̓^R+Rj6Ùd薩$EJLԩOLڗ,1饬:bl0nU\tq^1S&O(RbpCa3jǴ 6ؐa3Ɍih2^MF31|NbZh LA98b2MMMIJ?!&YD :4ܴg:2<5%nD 1̄qE&i*1{ļ+s,1'zSVŸ9~Tl݄7*|81rd@̠3a7#kc9F0DžLFj/CdFb$$p,1՞P/>`x $0D$1ɶd{V!4H a99CT0bCj2{LVdkY%b`*K3:1ɗl$1%Ą LYp0_]_)9|`o޸~ 1esbN :d0E3G pr=!KuKpk4ʌd!H-KLN+0yJ? }`n߼3y9bNwb^YeČiSLj(6#Hۑ3CXďu A Zz&f^$2!k>c$Wb'IbEQbt]KLE| o}Nf%f ֬Ziɞ3+kFt&3YRClPQL8g{hX!fC2d薡ȸ2CS4܉%r0R؉i0ov `#vubvM7]mɞ;{L&3UV3ݐ£fόc![:D f4eOZ"!bBϘj$]r$7A *ms1J=vl+޲Z r)2L&CR6!g?Kn 2h2Xd/Cd=c$_bW+1jby%~$&b ~7;wϜ~cG^?o׶o`EyLf&- $cMLѶn 1PfLN;ZF*.eމ;t p$&G'fs܊%R/LE))Ua0tܠщNs⍣b +W,/`/#2sNl əLxd&M5/$k!5# 3&[2 e8dl1~KR vƄO~L*J6$uIEI%A\ +: +LE!cdܕ#ƱĜGCb6[ST`ITehfd"5 L%;1e 밖`2g3f,f&Ao2qMkZDup6Fd?׻e1z)y<\btbzŀt`*#4$XmlMѪDf)ndf>a5`7 a=dzO͋b7`Dh f6ZƇL-,1~gL%JLVC&fWbQbVb)0!`M0,;Yhbx)1cc-˖"3sAgQ3wh_LH;bЈ [2Dkp@"M8ϘHL'x%ZHLwb~X<E%F1;3Sbx-Kfa!7#;s!Y0$ 2 |? .:dB|ӠAU24IDGbօ$Z5=Vb򫐘Q3W`_B2~81Rܿw7e[7c/#2B$ذCvxrf999 mٸLf(2d!ӡӼYSq1.eiL̏\,s$*33: +"բ,.tZ%. D".B-,ET,!B bK*NhygIrrΛ>9{L&Ĵrb +`bG 61Qfn8dAe +rh7!ƏD"Bn44^ws%197:b1UL('13iZ$v/o&W3\1%֮Y%2fs5Ӧ)Il蛨`܀(1fdFONDb:"|S㌲sN +gM̋1qcLܺ+wx/&Ǝ21fn,YB`͟'fFԐ =}S⾂n<1 Hf̽Yx*b5 +eS;ߛNbn&fMH$,'& + /M_F1m˫e9HfY"2O6p8Koz72Dƒ)3f +.<%[l-nDfˌlw٣pފq(;*$Di|ČM KLD"0a^&'?1adpɐkE#|oYW\(+nh :3}ɠ2p ,!ct#L>r\|Qc(;˿ܓ'iӚ#1D31 LP1Nb1e9| g;dd Р4J =V%{+Ȗy7`P̜Jlw22>1ܱ{ƴ2W5dVbf!1G 1GiKL,'&bBeG2^2Bf5alr ֆ5 :S<٤βC |H3/kgCr FG1_UO$&d.LLyJI̥Ĝ3 &ҁ1b1' ,K%#f ͥ*oJYerF 03 L2,!3d+{nΘ9# weUJ1i(1y01ǒ%f71}'$&r9 &Qv]eC9{5fAC5nLlV?1oS2+)q"Ag^o̘&,!+oN|Ug01#YUkI̙YILs*be1K怚yKHhF @yVwp6@c03Jf, gQ~n[cGY UuT%1g\Me<1 fbDoY@X3o(zۚb^)!Ɔhhfi+ fGLyݺ/g;Z(󜺾|^q|F&ziD?0|Ms1fAl Cxduu{6D3茐0,ńqcFAߏy]yxFv,1gg/1O113lb&6'1m R`xq|㎲v'vƠk;$o9ζG6P44%-` ?;v(koGٕW(\HL1H L̟I̯mbFܗBb_&&x}|lcX22ԌFՀ#oO*o9vjrcf:![e fI)lOrƸUeƵLPbVILTS?h`*+ccd͌!lFyo<5cȬX^\$,98<Ѓ˜1Q|4LCbZ'oF&f/1hb$:b¿LL $#*W242Ne5C4#v佝=YxT#hČ%zՊe f+f4<(+(s1GELGj87 $@D`4se ecڴ+-fg 0ݣ+WsmZhV#W̃^*ӰS|Y'('#oG 6f  2\2@QAޅ_KUe_2$SMB0϶`^QY;E$Áa.27`-7b,d37qP=DA#CaĜdAFy 3M8!^H1i)F) C1LŬ,b<S.`%3qtL&̬=^c/2_"FCFcCé11 E "cw"Θr$-;;Q# ?ńobQvV Dr|8Lս(RL,WL0e!rj4j-)$-`Y sE0ދ,,0&1:2:3A< +4n3B2x1lg 8@1Oꐁފ9!k5PqQ:P B1 ,,t`!y fkuBJ0m061.pf47!tn3 !riTF 18CD.I?Ʉ]1L\sUS'R1mI3RHX1NHL{`@J0-I0f'3ul7"%C|[d`1d82;;> !$ceۨU׬? cbZ*XTrj`Sy~AdD%sL1R1xQ{ $Y08ȳp&b"HA0Q83X f~Rbz]J0hs_3\d0~%ɌFQBNϕ W|t "H e{Uam? P1#C+UCJR1bJ)Fv5[1箘b(#"XxBUQyK (qc3$-]!7;'!B0"+"0Od366AS(eD"柧{ 8ugM2 zŸ('fV1#UFS1'b>W1aP"Ɓal3K1YTx)uLUL %  ӹ{h&q'O)̬j F_dс O-/`$1ŌIM(r"|&5 + O. +9#GY64_5՟ň6,FU~`(5W i`}P{b=%O:t/Ȣ}Y(dS\0u7lԴL@!s&.]M&{` Uq/j[c0M@)fшHl=L#wW5żk GVS:0eSbٺ]Sy%QVɸbx}` KR0ŌEŘ]$YG  3tH&))#9&Xd`1!i1yQb&,8=EbddgGp&nv,(7P ;\UCV]ZKEԤ01!@{Ve1^zbD3w*21jap'qDѱ5E,0d0900HEk>߼#cӳ +˫65voߵ 9|3:#F +N)fhF%U07+-9!"f 1k׬^g*, U&K?S1%bA#VUjb>,JFΝ>ya]6bܚG" +3\,[2/LXxt\bjFN~Qiw`,`ܞ[01DYVmЦ+DVuk+J3Rᬒ g5Ϊ"! Iյ{V=1Ykګ,cGQnQ^vzJblT8V]<h7A+#0jt#X,t>Y|u2]=; qdڳ3HF|FQ8(h!Lhl<,C [QT˭ |5bvߕo-j '?#-̢,0dƫC:KWաFW'26!Nqy^mpuU*'qJ C濎 )Vp%KKr <-1!JMONuj݈y~.b?[%䅎(1Dzp# +Hr .|p߲A! cNXxt\bjFv~Qin\ 1m u2\pϾG*/薄8xCz;VӪb>cr%b|#&NDLmCs{W/D^1?%Lߛ +`O/,ΝVlf40vJ/ ]Cf=YL|RZf.Y͖ƖkÝLÙR?x +]Qb'{HMe&I1.R!Uzh$SD!4b͉Q!(80Z?%Ng +̢hd.Nff!}般0 (Pd9ȩmϿQРz:ZCJ +Sb^SuҪ KbUu=1a$b20b*0bںz +"e0bP&)0`Ddzwvf#'?,8D3D1F99>Nƈpĥ3$8zc/D%Aq?u2 zHNFjb\4z!C~ +KBNVʚS F Habd(/l,tNfNfb&qld~zwG/bbd#OF#+F#khiFfuqt=!y 6m6z.2`% w#'$NF.CDյd^:bFz!wRHqp(sd#耹l5 p2f,;sF69#N0'h@N A>[iY)x>Er@Cؒ@UK :YwGkN6zS:B:"bb0b0bZ:zQ勣SHb2Q^ao(vaw2#aȖ,Y6ޛ7`B?SɦPf5⹿Wg{ZiXlRwmlk!KC~캓1Fck=sH' ↓(dvf1#N挑ӣFYDL|RZfNJ˖vw]M9-pf$6𸸮_0\(/<`./1{ww77lTn*!aCd^FL"bΤ2ZcoΑAf(. +/q<6Wfg]^D(F0F\GLT@--ѲHZ)rdcvu߃0\/$``K4K2z. 4]t4n*+.JOND%ayVlGWTR^5"i8ֳ eZbd -cdk9E2IY[b +7YF6fȂ`vbS +ï kQZRf6ypq_trG܏&\K2 Kr .>*XbScC1%oCE/1iVl'WRXc817x2 yixYxOY/1F7;cqI9JG0X畫)1+1"kjfN +Km=|$?;ٯ]f>TyA#YO,s2{fY֓["(T_ +# gc`/Q'SQJmNͤΗMjijxA 1ݒ-IoW;4ݚʲE܉qX#}fr\b\i^IHI+,.յWW2RcAfĈM BC`A0^#, )`T#;5Xa*̆0 0G0c$1hY č؈7e{aˤ]Q͒KM4¼ F%UyqcZ[ǸDbLDæ,h\D!BhDDqW WAqWGQIӦD9y}/ f}>kFz$ϙKW{|FqJj8^K*k,@`̠h䞡\oTܫC,n^G,D0/;6aD0hd`cQp857mw=5p\(_QD9@5Ӗ-*4b*'7r;y.eN_^$y_x!`P#(k]ܰpIۦӄ̰49yh-dd6q4s'lH$ځ 3-Uo\a ASF$XF$-[:߶t d\;{(.6b2ns-H]|֫R&3F)|zhFߓ'/ ldׯ^jQ,2ba(&L>A,@-lH'֬w $3?dhNFhz +Zxf4v^T`mGT9e#z ɊKRK7@&I-]?ŽqxJ.11FXmmh4_W|Rf͘+b,BNߞ4ჟߐ\)p¢h`Qɦ.lF3UY5*Z1p6yng{뺂Xz_O++ι$ IH_ XK{o#f.f8E.3P)3R-2}M@\И];b< +J0Q1q2$p~v3h13Z13ӧV5` z3zn [z֎$9_~W$y ҍkpz.>D_9b'~LƭϬ TBj(P^|&awLn3S,f ]0c\&KlJ]ledgT:K}pgtu]@3I#PBT/lG +jdI`fNzdİX$^,ݦE,(eKrK*8fףlI-e0-igY' ML f)`0c`Ɗ|F™rOӸ~<6,UyMwcG ܷN$$a/fD ڥ s;?Jj.e4cb`І%??~TF$ +/KE;Ƣ` v>+!X &2:3Lf՚u +d b Y1YC c[ SOra޼q Z; G>>|H-֭q X Ilt$X0mD0>D̫B}~U0VY3#D10ϏAoP ,6 & c`!6I0x? #FA]$cLJ?sQ;pJ ܹu%I&x p"I"Iuvp(F|-4|HиRfo6LdD2D`Ȇ~޻Pz;Mrm\^ɎvT@ AS=s{?ڹ͙$$C#$y1Ht}JN֭጑+a/a@5|P7.WK`h1(bc13 +ܓjQrQ¦ +-j;mٛ7]bl$IP$ +%"Iݻ5I0^ELE `AvL"NbQ Բ 5&@ #j,h,JϞv"m`K`a0B'+(:zLF\ u_鷙~ +jrQr +LZvܹ $I2Wp'Ol$i,#ƵRď3n¤)),JKB`R8`mDPX԰^Zf ``z%*0bYxb0-ZhاݔT8Rk66Ul!P7\I2I6I0VX ХJT]ԌVΊ) X kI-Wl0$` `a|R;9F掺wmMoG\(rA8R)$Sݳkl+/u$ 6<'$gx1}1b1Q1q My&*fFLP!P  +HD$ +E;Z ?!>S[sJ \0UZ2`d4in^ĕ"VUV~` Sݞj;\&[zH$ tR0)S2c R6µq--6M,qH,׮1y]`d8b-X1yba d/6F''G! X*l\#y!``m_)s$0I]0&::Fp 4|Hk)s@A!T +Q0NQ0ILa{сfD * j2x][A1FͶno^#3jAT +9rp1Uj!\ۓzLJJ#$ $Fڱ19bCK)z9 P +PZ{5!ddD3D 2@rT+a‚9kTӖA Q;wƴ'32~XLtFH 8G(FEL?1X⸔!)ٸ%;g X2 D$DZX.Eӡ! V(c)8b9J1IB.Ŷ +C R Q,H!tvőS@ >sǏM$@_!tF0Eb0UƎn#VsO, rCXM0]H0=@B"fcU^>& "\W%_A4C4Eilٴa-*E@m;cG'DI!I^&"tU01/ݧoR9A&oYTLzFf5m2,hD3D 2A~ +Q1ٝq| _gMNYCPi0V,Ec\"O=NA,`S]L-j{RQ FE +IHңɂ1'ܟ:(܌s1N%$mN'MwjzE%"buH 6fviZgkp@{Δ̳w) P֡ް}j119*ߏi)7m`;bls,$Kט/hcg7z? !@Gz?6A gkP=tP-֯[j Lf̔!1Z1?'Y͑TKWk xO Q ,I3370l/ xvͶbcbdieq1>URm;%$yq$$d&/eoCĠ'F"3A +[aF$bʁə,smSvhkŴl?|O fˍ1NJ@,CO59‚ +EP[7o\U3'n?jCuۯ6oR Y2vIh\I Lʂ\j̭)(e:clt*11,{X˰d}箙fT H(2xIbĨmcȱNpsq r<7h.,Pd 4Ϯ+p>uؑCm5T6Z qݹ&ɜ o$ʹ ޕ 4c@B, 㯽"VLSs7YȉEK4\Fn{TdxE`|K}WÇuh\3GX673׷W[37J ?7^` +<(bߧ R|L GOcɰn02 ] (C|Iޘ X*y %uĴ0kihsXdnh+Auv0*w}X4Po"}=r%d]3$ET`XeĪه0`Tn}NA!Wȅ} ]q+(![QC5B߹`̠ +l,eI' +\p"'Cc. 8(3)fF7g^b'VQel`"-33057 h }'1x~Po'*Bэ{#uP-Gj!V;KwdF/e2L< ?=T- e.D`"a(I3X+Fa)Ml4XxɜE18H XMfxqCz {]D7n٩*GP-$U% PqWLe-ˌB8C|P +(-0ɱrTuSCmq#hi!ddH27pfǧe\2h *Z: Fl"a(b`S *cAweLMa'(T`uI*|0 ;.LS b9đʎݮ\vfZ$GXS369z PfƍPo| EeYL>05슫_1`_t5+;zPԻ@`ȑÜP#d6v:KovxG&s&eCA3&vt2d8@e9f Mm0aH,:eaQr^ DqX)cTAuu\d|f8)7@%X_oWqtˎ.AA!m^ԝ۷mGXڭf j$p$+zabLm5&u8)NABǟ@+̢Ɉ[_1,H%`Ht(7@%Xe^v N!?(7HK8?e PIZHΊ!3@UmH<4DOR ! +8TT]1Sb\SLDJI)FGN9bUIacʾq:Qi+w١:%IruoĨђq[=]k:(4J c}<`T(-0EjkK*X[gQj"*:nr^!q ސFMT4>֍kXiW C5$jᥔ2ILPEF#4_>{$wHhjj(9b +V|ŵ,eiBkӒ%c I)2\w:^ q`?)48Epr~+v.Z8PM|I Bbb|`-%"֑&!#=PV*Ƣ3HqW =21!1 +Efk a4ck?` Ez4cBhV/~Α5pGPYB/r ՗4T'B!Tb]ZG(#>(5i!BI,+bKY%ǖ̔ILjaj`'+<_K QڴY u*‘vqKfK D )UJJz:1⍤+SBdFPTW`)6  9ZeP +Ў={vcBSԨ.\VōkUiW-L61V:P˰d:,2j!k`D +&eR) +[1+&3EL\fm(rpIAe%ȐVkQ$jht^]9s6sM8﷾P_l%@@P9}%@E y8|f %InrB3=|Y/P ^,5 /'0,f-J§\h=n LJ[\\BDք &7\4+,k!CDo@'?;Ǜ:kWH[ -!#:f:Rk?؈/f*Nh^+_CGYz KBB(i#x& 6 yr?š✢!"<g#t4Fu$,Ng-3 (h)NDbK%}Q. +dU: !Aq_աGI QR#i$) )NYr#dzT}((( *ANb,6S.CZC9Xq~>D%v<?D` jT8&5u~F+ư=%Ұ/Kfb,:xX_1o+&œ-僛( Ha%yy8)~;3yn抜FGneQܙWȄM0e%؉ύSAg+2 , H A`Lߒ +B{`TJdI?mЌBghGiH65'4ߏbNmOZx23\DABL G"H3#z|ɂО "qR'i$-CgVFx;yZ*$ai dN +A@TDDAL +#$@py \TRD&}j99XKSqB:A1 +t{bРD<<)ȇ}RBN_2+ !@v偂9CAEhRSGh! $Y9]o9=؉G 'D +#S;Ycc,tFimb+pRL).C ":߸#jDY/23485)P _ btcC& "`N‚ )#~ x!p"aRdȺ$+l ͨ t8$RZȟ b%1D %y&iG4$SN#zTFu$mKN&iC +kEbjD+; FH\HU0LI=D;GB(B'H8Q/dȒ0^?EM(W0EQ< c|X(dGC+zL!s%5FOu>xG2K19KXQC1lڍpxP3GZFDI@Ua !h!!xvY;mZqOR, [RŦlV&@@CDT$J`G;(udQ+MXbJ6%1tj B)i< :%;GHHٷ,+j):SZqZ~ ,f鰩a:OPɨ0+v1dH̊Zc%S w涱bJ0,V4&(|"JY>:Ԁ0+ŏ H4D'uێVƔC;cnEU b+c$v& nS2XPA!L6=bgZih10hldO3@ $dlmCC"ŤV@ "χcX&{taB%c15$x AEdRB-TZܮELM23@G0 "d1yډn!UEY#I[%ɽjֈ,6m aB +)-F?@kHTĜ vE բbCߘfe- !>(iİ|F6v9vJ3u/nLxqcL c2LCxNB%w]8A!F@vH1;blSl!<(JW?@kU$ԭ:mzqŻ/b\R2ZM#x"K~ !HߑM$xѪLESI1NFeL&cCpNOL!nQCtP[lϑ /[J2apN?PhH9ڣh$!6 GR]:2Eg+,0%&"䙛\rqŌ1Y,$l*x<$EkO+O܆;2c4.LL. !"񉛚RcqiZYmBJO95EK&-MhIeqL Ǽv ].ygr4x槄?A]s-5d1LwgӴki5d,T:ӁRԫ1I.u0ޜCh.%UZ,[e 7c9i,kx6Ji ᱘ksa?rcP&g~t7E9-:,`o-0TMca[}E}sp-B-΢}`q\,ћhfh> endobj 1167 0 obj [/ICCBased 1114 0 R] endobj 1077 0 obj <>stream +HdAO0 ul'q UCb + 7"Ed؁?v}Xv}g'fXN ar3H0p8CjcMb\6W;YajK"́u H㐰$k +(hI()W*2[ +a]\m=F%CÆH䠐H0ݫ8# S endstream endobj 1078 0 obj <> endobj 1085 0 obj <>/ExtGState<>>>/Subtype/Form>>stream +/CS0 cs 0 0 0 scn +/GS0 gs +q 1 0 0 1 1199.9999 0.0001 cm +0 0 m +-658.663 0.002 l +-976.199 268.731 l +-632.216 953.988 l +-544.232 953.988 l +-0.002 455.338 l +h +f +Q + endstream endobj 1086 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +957 0 0 866 166.9998627 144.0001221 cm +/Im0 Do +Q + endstream endobj 1182 0 obj <> endobj 1185 0 obj <>stream +H SX!`z\IPf/J2!v'`0q\}AAAAAAAAAAn)fAd1~&~|,#!_d ;ق0|#oNd ߕ_u +AOt~!s,}YAMD_`N| Yܮ_RO_dќAZ`|+AdOx0"yYv|/l\[8KY~{ A+93n .zmp(ݩۙj9usfn.f3k~_"zJ6[־&N/_dnڹnOfFx+E&ݙm=]Rio 9rs+~Z p~_/fN&Ml37<<2'rݙ܂[ya;soi=/jL, ryN8|dڝM&p۔g +#a&~B/rY]O7/L۠1:c'~'|AB&rƝ5m>Iq p7R{2Y2]߹)S9#9xMeɮndUd< M '3: Ћ`&sf垦nX/G2_LgֳdL7FOJRb8.M"X? \{ʓ9]<3ޭ/[ov\W {8z[ʂݤvzoY=Al}~'|<-_En'k9]{9pwyxvdkkw`ֽL;neYY΁oX̂x0?(S~ovv[<{/v#K5=&vu2[rz.ε16Ȟ'4|Wvpxu,&./f(]:t 5Bhaa˹9Ջ\]wr6|VuѮu'^H+{ڙ|H~. _qu1O |=Ht-L/͆s_G_h'v }t;-`p2[zmd:۱6,f+l*XTuaՋY+%?+[9ﶣ?w}Wk3uru;skn6ozdTA۩Z^ gJ`nzzծ#]4;nOUwFWr;n`r-}൯DQ!_d.u߽wQz7f}8Om\<o=^N~CYͩ^|Ttr~nx>tɭK;" Gz6s>{Eyw }fl`F>CCK9Ԛz3s=?.Yn/fo #b;$\?{}ʮ2 ni"&Ds ueqzo.^_^۽zs~~:;Oū|h)Ж \ r bmzSYuK6KJ{s 8lL pny?]4=^pn&\F{c7bqmRغ6/7|/~;z͹bp&(懩y~|%h^| +]ݘD>KQܿQCo7嘼b{ؤWCNz ^E /m;*9GdW|:T/w@xW!qm!^aK^*w>{_zo=;\Z&ۃx=KL\p Z }VjP\)^)`jIxZGN^uw<;ϸ"vZ<]u$mXk8ћhx)-\ٻ g^y{2"Ubь[t.:tٖ.pٍĵ-KN!9eWsotGD?=W>SwY!4h#زU&L mĜL[ww=Mη ۳p;Z>l`&1k*6'ohz]s}o.4ЋO){sWoTޏ{{.^Dfj7M"!GL0]k]_4^Hd.^Z^؀C8//T+z\xE4cWw`vف dHNv)v~xüO)P~ TyE8"26;|3R hO1xAIwPsf3 &xk Zt }^%yw-Ѽk4Eţ%&]g7`glbnk7MMj=ӯmjwp~Tmwmv@Ţ}b+Ĺz8g` `ps^Mz~*x5W ޒ,!J.h>U/mOjm[[3W{ M?zY+_Qz螊C-Z@l]k fQKs5MV5G<'et3mRz^߲m΄pcS:; M;> kr> 6aA=~r9Yx|r[)1չ~޺zK6;k񒉷x5 +XղW{0|#&wLSpf<-Rx +,pVpwWE8O;ݽYx-vN+W%Gn +l n[Sm<7VJȻ#1G}jp.+W/UW>g^T=cs+[FBݺ[8bWV[y繟7Kwx͢ ŽxZ7g.9w]z{l=Fx?ÙΊUu!w']-ؒfrP/&Fe\~9^M}ڻ@HT}gz^w{x]CljkkGb 69ٰZJF7F :|/T.KYTS߻ĻxZK{p̩DJv{L᲌y]F/.s.늽eS{˶u~ؽ5*b qHʎ8UsS˖eJ <͕ڕŻc$;"mxBH]G<`m2VCkqfVw7Pz#̭M7.c[ u$sޤl$S/:Bµ1λrWw 2PΆn=?=pw Fv+Żxa=xOu-$ȖeH6_X!v V+蚚&-kJ܊!eMNye0Z@p+^AzIo! &^TBͯ]q%,K]C=>$^`3uI4\MiŠj^G2}^+eR2aͦ׋zӬ?CN&'^!b夥Y((FjJ{O1նR!Q Fv/]b_]43CCcf3399h^ޮJA ]?;*z3eXMTvMn m JtYo\}wMu=nWoy~nKKT[P]ϱD싶E.8W?V_}|-z1c_*Չ`nd!!EcmaySbhpvŹ#b"\KAKzz#=I$M40̸;w,P( _-/d-MKmͬ޵^$޿/R?xQě 1k%q :~̋FP (M]MF^1f^4@+?K!d'‘s7$^[Y[Y +L pe:l:J 4 5=Ŵ\еn(g0۰h ZcN2^ FvśgCrL0抰μut[]AL+E{-O5;z#{=]:&^\ʁ{kASݪiп% Q-hI^bUoFvEhZʕפҌ^ΧfjFiݭ +8&ŹSoR%Kma–xSN!řsyV pƅ/ke٣2KTG7Byxoj>x"4:Z;adgz ghwl؂hRoVRvFvśxW1Uf"Uu,OHep ^pdm+#(ݩxw Flj7xR+z|O +Wx] iEdMɪ3fRQԛ Pod'yxOɴKe)hliwvo=ؐoչ2[v@ 7zOlͬꍼ^Jě@2ԋm5PEo3k--t{:ʺ*~HVfTreUP+uD]wv0ZqҚ/1z.ȞHĻx 7AeĤzѮ۞$ݾՋuPeeR1Uo"[oVZi6lgv@WٙWnNiR*x?n%pm1:t ɶ3כ.ċa4uPodGo=V&^ +Ŏ?AlgW^7,Z~QWq[LPodK27[]Fr_ \3h*F+ٮ8p!nxz#w7$ku,S#"$L{ NC=ER ش7^=´f׃mi@n՛_Q/z#śzǷٙV<1mZ7. |S/ p)=^KlEwxJboxE/:v^Ųx;?8x1 0ߔ&zF +;.MNy*w1G/)nZze,Vo!*$ETËxe|fͨGwѻJz{iZHޡ /E.x///( ό^,tN~TK^b+Eu_lы)FgI/rzrrTWjxMts)N\wY-o^ˇW27oTzF/dy?^Ktw&47NTyCyỚ"iWzޛkvx +ӝ ) ^i\l\N:{7z-wwޛwx/, )5 ʎ }ލ^Kq +rjWYNRK8! z9^2z-GmKB4x}xW]wTk`Z:xxǟc|4ÛfVhE/,~Ge_kXwi@ExR IE1kZN5g^`*P7ûVފfx(w)*E/ATSx5|j%kTN/>^Kl~2I爔 7B zF_ཏE /Eզ掉Uz1C/1zA7X׷W\*->"xK)^L5wca,uzF嘜xGިWZGY'*a zF4{h +/ç &gV4޹jrkK|e"N\jz__F샗fx/ Ҳ^Ub_w*z_oL]^K e䝠(XFa:|֚K2kM]O,B#kٕxOjs=}$+N6 F{ L$_$kfxjxc,-XN?V-͍QW8XMF9{^3 UqknK,XmZ../m)|Ct{ƀj _o^3 ͎z$9&̬\|4Gw# +T))ZKl6zfZK3X7;२HUnlxh7r`ZN?V+5E4Ht$L 鍂\$g+W koR8AkƟtq:_1z-W.x0hNe-+Z˖ٕS!\J:3kRv{oHDݥhl6lOO>{CUx.%M +ﵼJrN^4z-Gx›4ċtw4bmn9^bR^oZ]6χx|`yĊy^bN9 ^2V bvWD/N/W.@!} \n"l EU9zuUtشmB^ !AuO%z赜Nx1[8,m$d{_q31z-5-&n(1D.졗 't^W6zs^oZmrG :/8_:0AFKð^Z| q^%?%U^k9);zmw5^]pyY /ɷ7^K[!uu_hux ~=ʘ q#92mZ&xFx/F( 5)xDZ2$ +qskD "ڽLUMM5i~m0z-M_xI;}x݋2z#:gf%2"]F價 *9x +Q({7_Y^rix3aʺOq)-P8F /WD\~m9m/ڥ4 FeoEo+~(7`.K_ I&K&nGGޔǽB,4'ez5Ω\}BgבD=ZK1IeZrx+oh*|~^۹5ZY*/u‰ۀ-;SGd?7zsEsIh+7[=049Ggdzrw] Z/w7JRص;IęRa46p^Л~zVo[FrPb77?+ScWu y}UŹF@Ko5ߝd m^٭Lrd "0ϣc/K9Yݧ]RWM6iO bsK/^ŋ//1R0$CQ &'dr֧(XKSw*#K:6o?۹6M.ЕF%R1p0c]yImvnȯ+B +]{i bU׷ 9-jlvWĻx~,ހiuC0Qə:ݹLo:5ŵz;VK=`ݕ*vA2*`UY &,B7mEuVoV_ZήH֗ɝ$dFq-ǽ۹8/Xu 3m~qM@`O?Vo%8V#`[PIz.ZmvěAQ$gf \Po%/0=5yx_Z})с Yw]tR5Γh' [Xʄ$\!Ay饺_Ŷz;9 !3Й]PI u=d⵹:5_ܜG]x5&` lC[?V/`Zivn9w"7QQspeL-S3E鞩-j:[sxU7A`… +Hqb1i3uzGsj>ιKUZ_oLgԧ.!RSw25+?\_T휔牷C{SJx!owUr[X]_uh6:d^IKmax۹%/0-a(ZYU)GJ/̔VoKxxɑ a%t,ۘU_jVt}48C[;c񂊗.orDJHR& +b\] k*kvŻ.@&!Y0fWolC+vc۹#Oo&j`<WX/n]-۹'o$). V(2eɽOP +Uz;7a]h4vAwPçd'0/e}}RgsN"l”S1oU <^h,ۊw}E +ک4Voyx +TlfV`GVC*^q2 +Vy[895/oV"vMUKJ- ̭ivivޘg }f?Д%9j|VV j1l<휑u;U7=L25KYZG}1 J{}"[{|bFKIOEY% Z7p2y% ?ZCk)r< uL/n] +126o:^_sW)ޣex +.SkEMգ9D LHKE,Uy;*[#z;$^w8*\𒘃zT/"4z}s!mVo|xa^JdUw !k>RdŋEHZ[]pźƒ|ER֏0L|I8JA퉵۹<>H#A>6!:B#` +`YKUj[1EtS) n7 Ȯ|7Rk'(nv\^Aφf>spx_W3MqMTZc۹ tW31E#ǧVЩYxᙙ \!m'}IjZoɖzj.젔$}EV>`pmvN': :Ҭ^9#!n#Kۯ]&c8iz=> ]$EsQ.C?*-"`mhlgd]E 7"IfmQ}[M1+M^o)_;k䒸YmFT/i5u oL + 7*)^d+] e/n,z9DA僣&^Jw@z0W&9x, ͅ]qlI|~ǒ5 LQ;m|~ z=wAېת,&UvSc`$FW(mʶٍ`uouz/tlIQ)b.{9@/QU˶kpznClj.tmymӛq6zcش9UA^WȢs̝JfƎmZz=7!ŋ{ZV'_PvO<2òI10OJ/γV;U_}Z)Mvd:8݉ B9o + ΑYACwBV|4!Z7m+u'9$ab*/&g("_3TgaGɸz=wcsU B-@/(ʼ:_L2wyX3=? "_+]6ɲm+qz>%*O_pLmn&aO;o]Zpvܒg6)mpuۄӇݦ9K-zM!Axq?F}U\n>:+zL/gA} 툁t׽8F>$2o+[Xx:-gv*zmg; 7tW+[vioU VO/ .-qx!sxCV"UjfŹڳG^ޙ޳d&cG3 o1{=87޷jƦz.&n8xDᅉ>}k8O/6>Y1kK lxݵ͈^dz;K[vEХٹ8_^rdz{O^Ҭ7z)Dom-{, K#ć_ M{ӥW}^z1Lou%0zW]N職hۺ4;#̆͡p-x!{*zzЫ+E^ӻ]‹]x!?xkڛD^M;ӻb&iax1wx;sL^?ַf4"{`!x%J/ Xz1DoL92gBBË+˞^1;ӻy^h6)+xٵ댰ʁ^k0g2x8zיOP#^=xuv&-xQL^}*zCc'ӻ] +^1Mzۃ Kmz=0q>R^EЭ[gO;1V9K +I[2d;x07Gy&M/ :~0\yыܦ]zӻ{6WP.V!xC=k`ܚ^zú {x[WnЅFuY wC[2ܡ +^P ӻIZ 7oц~,0/ 3 Uk^`zrx׆ןdޘm҃Y6}7B^H,3ОWNn^r`ί[v tumKL^yƙmziOI/Xz!ӻVfKy;km 9 OOQ0B/4zz%w ЭᥫW L69~~[ax)OxG >5Uẃ+!L޷ 3M^ʧYzg;m~ܳ1x2)x/MS:No{DYW9k4޹G.A‹^uo,%^%w oY-P`ڟ5G`zH+.o`sc1!;qҦWVS{ LY޻>ہٞ=)kf>+/e^M{zO#{cz*b^],M^5^z)@/2d:&M^SGٚ7Lᅢ /zӫ +^ TxQxC/ лxoZAf9- ]tn^xW0=O]W=06k^t%+Y2d o&H!zn)օWÛ:ӻYf{",=m.oޙͲW//,%ӻen$R?x)xSB%^bzDx׫"xa^@{_ +Wϖ="svW}OO/͠]RNzM^G\z!6ʃ5ԅ%2{fxJ]^]7iq=x/@/[2ke.Ǝ;zQVxz<*huKG>=YҫMosV2˳EKy*w]y* ^V_5⥓^xuȞt+Ի~^}AIlkx, ۊz׬kC&^O_R 2lIyQjux+Hكwn!6^DoTZw/̋Wxb;-ϋzWWŬ7 +mno8SzۨFěa6H7QTY_N~xV|.^=#ޫDݏzAzx.[>zoJXVCWuSQm%m.*i%m.)i%m0(jxS~N;j{x])&{To{kf)y.fxwzZ^d$f˼|F`zgkuSzצūR/L$D 9=R^QL-Y½rr>  xE޳P|&^J#/\'SzjA#xD:osVwW;]KW}Y# g Wjef(ǤpXή!DOwxEډx[z!exEP,F"^{}*aRÊ'Flc_^QwQ>~LيwSx[W+ueīl4̻xū>~gm=&M^QoFɪzX%^T ^m{UN{So ^&?zשw>7VH +} +[ۃ}kEejKWԋ.p*Ż:urh8^"^ +^ xWW+-Q=]/fMwݮ.^x;_L9w-z.WԻ9jxxs#x5@+Ss/zڠxaК]3##Axܱ9N(zڌx'\S,]<0;tt\?著?-o<˳T>I-]_[Y""_/]j@oiEڹ**^Cwz- U~f;^>B{*'^Y7O^|n~LI0QH]=EM͉ᘃl.xb a5&w[u3xz_F Wc_~ZԻc,^`1Y ~9, +y Ff|1et77Ix[U1ՐxYZÇ(eK8Q|6ޓBYK/xԚ#Q/̉7M!Fm +if3m48^BFo|ĢE۩F[[L\0A !5/ǁOki{|Gx\Q#ΗovXԻS>Zx3aߥmgaR~לOؽ5mysx_H/.yk W7?(ݧz ^ǓYUG:\ּ~;r;KksНi (ŷ<$ݥz7 bо/= N0[Qsx!47szbQ ߢL͉8.Ð>֭ҷakf<+$wԴ޾oB sf4Ow_mP~ScD9XUnS42Pz/vpFz-_qIY9^ `z׬[D*NJܸwUq*;hCOoToF/[2xGS/O l 78jQXE+cū[\%d>ԬԌyDw OI^ _a^40.,9xV/xEW٩YgSSsߔ77I'ͤ@/x*i<^.^-mo /v/G3#+5rG\y+oC/ͦGz ߗOFY+@'$֦dDކ[q˫1-$v_ze^C *= #k%~w` ]0f"|3}[DJ@$޸gdޒdX9Cxx7Sc %~-4\H TU~zCтU튷DXg|}) ,: 8= êH%~W"3 ) `owU*QoՐxBū̲ ACmy[mrLzHp)U939 z57a1ՠx UT<@MOa VH.zs^ GDہ'k_aVL$ G"xU/z۩;54/k׸݇ئ͒z M/kuU<S'77o~ D<!Cʮ{7^ݽH-f{"~~?< b^й=9:uGD;Qf:qv-"9C +[1ל&o^uޣusyjU0b8V)3 *݅zo]wǵsس{..Hrx`Vh#`vnpFz#`0Bj~3)lv-ѕwmIIxh7]rēpmh\pc7pp6o_6ZjH=3IVd$g7}\՟Tnh3ǵ461)_ݯrJC nn 6_2Pvtbږx+qh_vzc7a &^&^4| {fAZ 3wVzzq]-vJC>h7HRᕁe ^^}l k}X_c{W,wzݠx}{xR5vקl3Gzg|3q`R-\VYoѯV{yzZvwWy +Rhpu̽|I^Z3ٻt0int+Dd;3I&KJ1j-re8#ߪQoiyWj3Ⅵ.*F[{kW*^nJ/?p3" `:S&ʵUö,+ÿ*,`{^{ڞxʮ{BAXM%!w/=+ + 2hHT aq::|;&VoՋ֢^5]wGD_^{D&J\} $_ƷqX*1֒]!3/ph]o|*T/^A 6z. [e%@knw0Hsn-ћ9pb|pC(2}A*6좥fO\\&=ߊ~+M7{z;ջ]O͈wp X?+Z gy$Dנs70Ɨyi ]9eB0_ӯWHG7X ^uzWGՖ;t=$,Kr&n]7q7P~NcNɮ{Eǻz?(ކ]mZd9 +62/< d|پtIa&iV|Rr%|e~Y![>BY]tj] ׳oi2X{;]z#^$rh᤹w)1i{~ g9K;~ ?3NmOO}z;>ښx16={tIT.D~784p ]j';,`=~T|MkWk>MUU_w>'}a> kEY9FEG)Wo3dpnAtU(4G8=*Ӭw~|>}E'_OzzT/8‚Zw>%ށ],ϑE\ٺ q,e-̾:/K A=Kޫ^ջڢx`} pU}Boek:HRj&l/ggebcBMyLoΧ, _Mk[qv2qcYrGĠ4*Dv%6[mڕnpfbuCX*&ggo2ZpCxz=zXo:ݙ^@YUCnFW饶}DYsԲ{K 2O'!QNef5;{oқn6NH^~U}zP[5x9 X!L. mlFٹD;V ! a&ZX )|):z޶ w>+!4wR4-83dіUmޥO!in{Ǚ"޽Xҷ͜p_3eg|9:$}cyzqWG֖k ¢؎POE_vjd-n~Vk 1x.bNqz.aτpp}k"_|%:;zUz?+-ڸx}Dju j_^YY|ؼr\rh*Av\V$|Ơ+'Upt~WG[~F׻z?6*ޅuOGyYk"zrMP2Xxyme +pŷ≠ZY̻_"v_FJKGo bnQ/$4xWiy^,=V/ e5ҝ/]} V5bZ@!ʼnWc3gGt_oVx+k{[YbfG{pV۔Rud2S0&g:s.eu]&y|Jt^ѻ:ީ^t^2m[Ӳڔx&KrڞMpKX%7}%fGIxRnEĽ(ꍂ-Ki=#Y5:~%z>8E¢zjZMhK#vV/4z#2wtڥ`xj#؉J.cK6KJ6[rF8wV~Y/ͼ*_Gz.}}fޡ^{Eڽڠxێ*-Y¬^HhRFk[&.T*&קhWu'Mp5Xs3ɥ);WKY}zaWԦ[GC9k6\^C7JO+]sikf^^:aNe K5:cE&8wVxVo UX^kw>)vw UBy52˝ċ=Sj%sͼQ|^+GK8+N*Sg|[z;18;x/RoF޴s ޶mMkv{p +@Ck%̼°٪ۖ:m[G0n֑Ci.5R8v+bw-x& w%)DP_1goR0zg ?e8vFo[ЋiGw݅x%)8d[ Ɉ 2뽭% *UZh3h4%[qYQEo6 ❫h:·w{*7oچ}`"xhWϩ 4FAea)g]@$T)G)|̓Vm;L[o9*%uwޮ`[^O zgE/,ѫ:w;zon[Pl; `%,JEˬݥv̺tPقbVxW܋C͘DMo-x- @s7C-Bym-rK ]S]$Y*Ie/=M^-{Eq2zwK獳;zڞM.cڄ`$p1iB^V҄EKxh/k6d1^4LEI"3mp8z7g[{"Euƌ;zojZð߱E~+ly8PpRx./|RvN3ӉbK[>)Luf4סT?F/mznz۝ݵZe*]n}]>U0~ חɏέ fq:C7w#0ֲCU|#z/ze۞wlUv)\tl[,^3X ]Y s|A{[VloUozKvX篠 +gA൮0:tI7WkA"AwKv\ +p9#d3EzSίS1}/97 ыc{[>x/6oXeY2:BEX RT`XXKJ>%ÐTz/4i[[cJU=zF;u+^)mۂp0*-. +B1O!EH˫XK2 D_rTիe+8Gz {;z-w%_YSIIѢ*Rw U?tT^h9eHje|-]ߝ} 3~~ x=mEN:Z&s:85 jTb5JSbD~ƨ_.V 4~doTNe\v ^JUAW7}vޅvU Mp\0Cb ^5v6}ؼs4ٸR4#wt^Geo1?q7@ܣ@o6hEl5h*5;𒎝T&}uμ~G/{8z;ыlݾFn^zm7qAgXґ״m/u_V܀WYD<,櫀+&*{Ke6̏ ACBE=^Fo{7>x.l~61V*vUF#5%W,sp4R9K+W \oWmЛvQ͂wl~cTy7l0C]YO;H[IN%H&ːH9xu̞9q|"|(!أNMߩ'z!v^bTAJ:q/Gp1Ŗ-o|CQ[{GvϮݍ"mmr^Gּcґty+[^0Qe7`hO Js:>q~!L|Oo:E?}S)WzGc_4\H1.Yk}Q߁1Ǘ1ŮEsaG0G OMzc5sys""lk}FF톏kh8HXOrw$mֽOƒ$$X}d1h( }5lMxOޅ&Z?厺)边-S/{C]V*]Rl9*?IB[c~=MLj|{xMO +ޅq^W p'6Llb 1 +,_/6,%s5'J kLd"qΗD ?EqpW}{>z?>x/U;K͵j*+ ܠ*fT2:ӫ%zP:Ɠson)8OߜN]n@/ Z7wz6xq"vuP+]W\?jC 9$B˲d/ׁcL =< z? 8@o^VɎGm1mv?x.y"mr?Do@V^eY*R/E"( /`$)ޠzC.Cogwzɷʬ\{ЬE)i^b5_FF9VҸ+E5@Nw~[G/fĠhE!m4Vˠ`^ljcA ڨޒ*yΉWBxy} zx)z~m{8Q]^OΡ4zaZ*8p@;_d.%,\♸7'OAhDX{л3xE92wowz;I͕;cJJ˭YhXP+y2!׌l{6zAz +tzw܂ի3#VksȆWed R5y4zhJ5腏-B=w6].i΀7B=zGUtٽ kOI_IP֥ heC(%L7w*@BAn}kٴz_.Fo$*@}$&&X5:Foыo`(*w^ouڜl5efz]ᴽ4byL7e<>̤څB?z}7[ȻA/g?Ww]*x/K*xڬ&qTV|$ pd;LAȍ[0P[JO"q8f_ߎ޿@/WYV{像^w˻9V8ݛ[,Ő-xYgӀWoxGu;W_WؿU b5ioj!%~?3}ߌOzXѡS_0B'/of.C-5}JfWc7jNT:KrFjtsjӉ + 1^lsob Klj&^~ŠJ=<k]F=f+.mFܕ +^RP{i*y.5V}[5*ɘH!8CEB; ءpg?-7.=zC^ g!x_[ϒ^ίv5\>2[7ȚÛ4ʰ%e> lKdn1 +GGk3Eo~r*zkonw o_xKJfNGoDR39O]Za|kq *FHP߆ޠ*^cҚ ޙ(Zs][ՠwQ ޷S)xolow 7R8FFF pu| +AѢ]LH` W Կ,\ޡx{V{ CbAoѫ&RzQw"~=%x/aU:7-g;o&t~ͽZljF=dKR0BТxGe0';o:BIGo){GSAcx +=x): ++QWt̖vl{wq *GI䒁 +ÁD `ȉX{Tsp+z?}]CrzގNfF y\d{hћe3B ޟ/'"xNwFBiX7"KoE^Twb͖}BOۇxz&("$$ t~zzx/E= $]UY=zT_eы!zK|=zx+zĻKo YJK0.Js?@+iKиs~z݆/,S cjRu`CI% {t˩ѫB'7WMpB꠷Hעj. -xȸW[ 9D=oS7~[Ob>M +!☩9Ի}$8z߶wو^ƚ,ZLƊ^ ``Л?קouAx!"ޅDjVx8yvu佾g7nu97Jxamb 3F z/V)[#^P<$i70s*z)3+zg*zhgCM +inC%l{lY'[ DT .zgޗKu{nBZEEze3Lucq۠. Qs~9.5L_F^CZP+^w 1EnZN(8mZ+sb$Rdƚ463xQAW< > !5yp^l"X ڻ)BEacAomd_[gcپ+9@lIK^ fNeι쭣{نvx6 _K(O:Y5]7آK\-[& lR-4D4zwk{;wA/V.+} cdr@LȀzPO +Zt07MQ91%W\ކC.|Q0]H3q0J {ݼAk*vyX?lxBEzԻB+wлye^ީ74EAo5mhQƠlb)ޘ态DNs˛r8/^0ǢwW߼ ^?@k$kW2\ =Ϟhت7Ԓ!7Hk6Qw#zdzadFMM4*fՁe["W7]Ȝ:a>G腄qQ+[^-^wO?[g݃Zm7䗋vIDw~a:+ 3gnUGx +::#d<`Z+Wwk{O4zźEu 7<@F)z9SIh(cܔAB*/m8XjIxy΃G//dQH|ڣs']iDy%׽wSqzыF2v۳+dyͽ^o]8aU\e4 l Kck*-8J{nڼqf~+}aGW~RZد ؃[LS;^0t\x/[ ᫍoD>L%,@%zIB +tINgea ihk~E7n޴>=pS_X oVtiͻc, + 5/Nٍf֋;ͻ;0eo6v7#wݶ<37,`:YU=cKTX7,+R{CK|K,,'^ 8zq|P3ق(xy{6}SO#uCFy&}yr?x?ʧ_pql9n A'zy_TR7_U]*ėQxıa AU~{BGV:w]Cxʍ|o:<)xTvgΈ(}(i sǜE +ݺj8ӴzD>hPDQ9t^Ңy| ^ S8m)}UCχiLԟ%W{zi\ꍣ)cqSxy]p9NhS}%ūGoN^,Irl|ߤ a*8BUA|~-xth^\^l]a|չ -+O?^29SmUC*GiGj57޽[{ة9ζ*o-au Ӡ/*/%>:o.:nz[K[9dIq Wd/{AofvT~ֻ?5[Ñwesza L z`Bc{/m  |YU?" %Hy|]nAi:8(W ,J^.{^ٖ^:r q{y' Q4R TT~ +5E8cIzT1K/RSѻ$t[G/`@d`A0QqX7̤qYxJ#l{ZjRj~Жg']C[Ζ.˯sjyC,ď3cm]e3 q00s^^y5@ҸI4@.s}vv B f42)$@@785XE8͗y׮|i btlTjFֶ}6]\n-UJ/})ye\~}sfө5^ 6 sLy^Zo-zEo-^tԽkR. 654v8k^Sk $|3c[̃J*|Mld: Z2&c so/9@FՄSb  ܼ ޖ  +tWچْ2FnA$b +ЇqܓmM֝aש5- RhZw5G+qk:VKFz{sCkz7 +1i2Řj87)@rm?!z+(%uhU0A_ʓu fn;P5܍PHym_ K$h`TV27L$Ե&x+{= ͛琧+2Y$@~nF/rG\mѱ̉%LG܌ޔ]\ h[)z01d<5y-FKr^2Y{d܄.ݸs9EnnTd흛y jy QvԆ\R)%OVYmQ՚ ܼ[q.qf}ab^mM{ˁ q{5h" D k0=(UW oLRf77c70s)wWnޤ}]6뱩mMp o,Q&!E U@d^$w{{kH;_zAE"ʂ@yzy2Ih3эY7=sn{yWph+@j3Ӷl-6 ڦ >MM}e?)gMp%YDI۝-!w{Ä>L9odoUT8`l^Y5n7+e}˾t;A{{gU?\yIF;e)+/H]zh:PޭF[?uy]5A|޿6K׿*EXJ(8@uɢG#Iq4;,y$|%iHko9+r4ucYB3Sʽl˽Sb)/PFS܌8ijwu`WD۶_mﶨo9߼8FoOAl^ %X, :N|b|6ݒ[,i-5ھkB/ٳGn(NvVy~($] 6I_g$a@nV!?dyr}&/]W<ՉՍC3e/8s~8G22!8ŏ譒̀A^n%6펰=X>וӮ)a|usxWɧs? +HwOg߾0z =ڕnxjw:֓7Yb ;R,S Iu4Ʃ +5Kq . ۦ Ci\6z.Gl| V!&2~JqHo=mmw 6z8yK|@>Ie[Y}@>ӭI_F9pSA:pX߆lC|#AoXP+3n+2ݸ4+ۦxD1GR +R,l~#a){#{qr/Xܰ^[/tnc=C.wP[Wv~?HHϧ%JAl@"THYIG,u5Uȟ蕼 },=r~,$V[9t;ݜOz/٣DBxAB^zB:ljc~{N9jj{ oy#]wdpB!pc+@YAhsͦx7.In[Lk[K"hӍ{f9:^6> kV8 7B- Jnot8BvI]%8NdGtJ\G/Us ̦txH{+hP2aiI<݈nWVuѻJsrmru.BPTڠ0m?{WfAl$s{7p&>3"cRiP +}NDI zw@BWL\VTM >Lri ;SzRJ-.2ez-'"E8p-5ّ+&IFnGO,޻25y_"mjX+pքF~ ^]dn#ޑZ-ĭ4f´"eXq.BikZj&N.07}A,^\߂"x!wD}fG$]EoE/]eqs ā68s濅vҟ*~X럲hm +f[ޢZlq2n'DHՖS6CH؁D^.c*yFecxȽV%^&t1_G >40;pWx֞%_l^hOZb;17ۄs +.Sr^Z>HVg>t gEG-YO8 Ep&3-W$rez/7䎯COFK)foa_"9V@5=F FefP2j#Ɂ%% j{Tj`pv% J_h`,-ZpzMx#z?44 ]>2-c}?ԅʦu?7fweE^-x׏^xKqL}5CP;5oX&d^w슠&mA%VhKV:fS. [*_kl*<%ˡTo^[Xgo`@U+5y|/ڂ9!Q-ࠜWD\-,7˕Qx?~ om6949}U*oo/2021TD'/s岒aXwj,v{u>^]{qV!n+bv]?>%TvȍH֯+[IU.M^UݩwuYq䷞E\0h{,ahoϾxw\~Tba -ϡ:+?W(T-xܭ͟φz[qVJq."(9kqFpH^"no@h?}* % Wr5ǩreBnާm7qBx[es$LuBt2E3cH'i6Z[m9 zO@;zˡlř$폺C_e %'&U[~:pk:2kWv{Bx7uTY[MIk ;}9rM1ZS\+qu5;`Ēu0zbW-\eEg_m +xvmґeJHL1=|1k5P_1zkamKķ)W] ʽ2˸ oe o5eiפܶ'ZeN*4;m }ƿy9y8ԻsiFLt_joA,xC+:b0)\,l,˴a4: :`L2V[ҕ Qzu )wNNsPoI/#҅J7<-Xe&&>\]{Q^{?{Lp`1U|hfՈZiv j\ >]{84>VX5)'Xd[rbK֒7پ{xrXkh:Jx,қ Maܭ>H,VKg0f +G(9յgo^Wg7 4tւΆ7 zaъ,}6ʝ&XcP1ȾZ7rZZYnQL9=@yWe~{x0r#dͷsljNqeC7Hû{Bm@x5f"je#e?>,0RNZ8Rʝȇڧ8/7 ķ0X+'rӵ"":5j(E,[C/[*A)&Xf(C`f4YIEv}1rw ;lշҠj// ]NŬ8Zq:df:h .S>Z%$ި\) oܛb /rE9MKS6^m5*t<Ηs7jdVîNTo,ógA'kչI\X8q#KՂ?·we}=O^)s+e(;P{^{LA B}x/k^0$rhͻM(eR`hof+kڨ"d☑T&("X˻ݬ^*8 A>DWA!iшíf2I>{}:iq譀cbAZoKa|SNeEKQ=Hkx`Ӽ>(5~ ہl]Fc&ֱqj4,CY>g_f,fQl +~H Ѕj,Xł(>9z8o-Ź;j!B!O]qbЗU7^: +rvVʙ2w߬U]6_z)iޣEvGkY$sPgC.y>e\H5k+' m*_ f7~j z8?$:di4& z rΘ2(ǃrr)RʵL݆ׄ^v]Et-=MUoYE?N^QO)]M)bd%ni$XpzQx79sG8nΘ$a,qx QWN7Tݭ4vkzs%d 2kW@^kNES o7sr~njn' »o5Yf(7#aV G2rVDXbEvoPV᭺N(Jx'(jo5of̶C,\W1{-~\1nD>;>BpA_d]ހޭ*"8V"egU -N^aD]9鉣rɡ62w^&,p#z ~6*:cyC}s^LhnF0ꏯH" +ûNzWy:ay`fan20ػ\WO+rFnQdl+lm]IC9$+v9WKu'H\t8ܪ[ 6| zւu6ŹLf,Q/G`3^&e>o@e/G,rφM;^UTQ7ыs 69(ڠј #v9DvmO ؜Uikr6tV4w|<ԟUÇvɻXPʂ.lËf,Hohmmf[9ԇGuʕ{"DT>zތ9"EEW"s]RE4Q4lu!'8kmGT^aeP?V|w4v9H}Xgo"V!Qޢ/ 7P^2(v-KW?u+dl)lyrysxRnJl%3A?FVԦ7+QL(qW3wX;y#.{oiw :;Ns5h1wBo[^oyב.uĖZĈ*XZ)} _Q.?m^, zQQ"mAC%opI`Ioq뛧t^۪_K<11)mH|w>w?2w9-y6{3 $h+ŎF mj_{cǂnyP8nإ ]ޕ[zsF﹢T3LHsd4 G=9}zGY~~^n7D+(5=dMaJGzQc?f|h f͊-K&jzD WG P Y+QyVa+9:~rzgX,խ+:2ї[7p/:02妨qFoniC:wrrς9^Ǯ+erͨh#$7`Uf̶`/ Em7+Fx/ՙ7?u=Ohb2ż7mלguZ:͋$䂒ϛ?iRsFByj_q!;S._޶7wug+.o&,2iW Yod2 +AԀ6c寧LGO9`d{^F/KqZI/v/[^]7e-H1km ` r[Hpf/ ՁS귅{j6{S^<WFa"s>wnZcZ=)wvz2 <%HFcn-1UW*>QE=*{:fz1;XøvۆV@굉9ʿ܏WQbA(4xi+G?NfESAK/ kW暃2-F箷!ª57a{&-4@ԎJB igWJ#[ +| ZZIyx-tWgxm0!ޝr(:]qxfzsq.mf:Dޅ!6&8{Vts>܎>Xi5Maā;#JzZz?ΉyhK-:vj6of[߼(NKn܆e<{%4u&SGXojy>6jy,##2Sȣ-3Cr9o7v7z*Yqd|6B;X6wBU}W]^݆YO)OгI=RaTфڬuܽx?|0|"f~$h|dny-T<_һp䪣/ 3۹7nؠ%XзSJ鹬2gF:_ï0ݔ4Y8NTeeÅN͹\gAҁy=v& +_Rbbm&W0V) [uU\C \w|6Z5z VDƶΆ<}յBE :d 7&$FTlot s^ߘׅ)Fsm~_v9G:{[r`Olzj|)7/'. +nl6`p;=k-Oߣ%Ҏs1sζGq`N| &+VzX]|i7=g&AB筮p7 ?X\VbI/oC·ow$ZWHL}R#sM_~K̀}gg1nc/.Lo VUZL_ݚvח*ʹTnwx[G?2T9e_tgSs9)Cr~c| to ƣOxGvCTL//;Ew\bkwqvm7Wݗrwf 9}3wgo}HA5&Ҳ.[YZuԫ F~.fṔq̶:[jL/މ8~s$ȭsMoVY۟)Wxvd%[zj~!hE'1#"Jz ?5dV'-B']YՀݥl[([Xv'-~ o#ɩbTnS6s5.Zeru6o(#,*kխĬT*}wqx|p|;y8ֿM4V>gOt g_;cKڝ5l 6Ms-ON`arjݨP[3+]k![ 4ML\(ҝ?SC^ {ˣ܈b?/mN8#[N,7_^I%KrptuN dc~by/@W?V(8|zuq=3 ~olg߬pp!GEPrE0X𓗯_ĹG`$uìɇ۟%v Qo {YZC g&h|s3oE}QnJ-ݽ +-zFre^]B4|۰aJ^չ[M&]࿷};kcklV72#ά-C.N$ܑ np/\˦L2u BZe2<5% Nz>4C*`7rM/}Rhn M_ӿ>4<( ;Nl/T&5.Xv Lqch +j]w37 N+][G_r#^9 FvJ78Sj]_"v|N X4 brgz|`р<-a[g^=UƙwuhG@pK&ɒ1鵋[./ +1ϰJKSְ4VDpu>h 7kmq́A<= e +"3+__# +ܸsxr,`b[]hn38_]ⶲ؃&|W0T~mzCB@F_6W43 +uݏ 0-F+ \eM,|U0?.C4g7"~6o1_0{M6YhG Bknc|٭$sƫߥi\|qen^r%,^.40O|~[- 6"1-D% mԆ3v}p5LX]ӋjAaDa`c`RePgҨb5MvPTL7@X88ĕ]V 2 +jBR[U- V.lT 7 +Xkc)7B9(3_TUFr9́[*ζ|ʱN9d ބȲ&p:xNi χ'k{w +G'[urTɕ<'Qb%& mud3j7__܋`f#kpONp[ ɒ(K_`7ēAi4Óڞ7ŒOx LNoss{΅Bn "Ɨ^&wA3jړng3_kU0,~ydׯߜsUʹuǫ WB2\cE(ǗBnC` @cfXN1ъ$ξoGՑ6_W*{tNl|g?5w-p8Iri$kB7&ͰjrM1;N)9z(auއ2p8W_V~~sܹB"p'WHO'XU~K\&$SՌq&$G1bc"{7ڏ_/`ҽ\䟀cPZ.&bfDlw##m +7#])\y\I2r.@l 3U~7?EqtN47 n2$ 7D!liZH"bIs1οP@Optir:ȕ`$<NÓ3HyEyLm C XLpt& d$&OnQUƚdC~?'0:/-ue\d1;IBi'4S̉&fxZ'឵/W k +Nh]A>&@ +Jd;њ?3GH8ٺ|VJc'٢ XJQ֌6;gC lc`E +r#, cDs?[}V?w bk( ur~v޺XRGc#'t4c}Nп7*_Kcx~S(-N4̘tpgN +pzZc %=Ȉd%'rZM5AC(qvOI.$+k $$<'(;>Lk`TU(8{п$)`y(p@_ p]fKze0f9@(@57J(RET}ڥ7ޭ\ƈ#)難 LiR['*)__w :ȥ)f1a*<,HBr"9JJtҥB `nw&'R48ajHt<)鳟ӻTsݪ# A1/iov3SO݊垥o~de>B9go{Ȋd7Ѣ88Ux7[)9ʾ|H'u73,"#5zAfFY3QJ#ԯgH/$'|/Y@.8\J$?ykhRĻQz A)>% +XJ#<D54ǐdTIfI u>'[CO V2k?D/WYmHϻK1ړ\,(s[3FHfpe(r+[FT@5gh4Fh4Fh4Fh4Fh4Kb endstream endobj 1183 0 obj [/Indexed 1080 0 R 31 1187 0 R] endobj 1186 0 obj <>/Filter/FlateDecode/Height 866/Intent/RelativeColorimetric/Length 60743/Name/X/Subtype/Image/Type/XObject/Width 957>>stream +H{Ua-B $@CA&0I "(Xl +%L) wX^{8!&.$ c'&r?*w` kOD/gԽˮ]GWe]'ԧQ`o׎ozE]]hk_4r0LZV:}}fůίu+Λ3ጺ*d6o݀kAP~QBfЋzң9kמfvbַХk[QRsG26Y2owvw;ӹSm-D^o78c7K\YnQ阦滛 `,lg_;:ogs:^ԅ5럻|2ؘˣK2֭eǹQI!3aXXg߀Y^@/gԝeڜ]ǮkGVȞ4r?aogw:ЛV--tɮ+kVВ֯Bf"_u~=_+{pF]Z5evdҕt*\uj)K `L ,sw.;/_=zmYG.I쾿m]v ]]KKp-%g9>*c%̀iye |ӹF/gu?xK~==\#[FK\'̆I0|'bwJ-ጺofks\Z\KnESSSab&Lyyecr:6y#4ʇ7~C__݀sY.MlKgV̄I0Ve|UΤwѻpF]oԮ]O|)3\vje{q>b!L0_7w:'zKohf\!]˓p-%W\ɿ0V_ycA/gu o]/f'̮^)]KK{+nYիר$'}dX3`7ogE˽=xvs׽vb6t 2[{ݔI_7dz1c%̂iy_$ۙǗNg}z^ΨK+UC.ڥ務fCɥK-eۿrIOČ0 f7K ;z:^MgE˿xxvsNf}Lo]kGȽN{n-qsܿ$'}bB `ۙWOgzޝًuUUG3 ݑ.5+k +\rhݻw-?3oh=sng_=EY7&p^| o|4{YOsWN'b6еryqcg0c!ٯ_3r;830z˹ًE˿TЛyἦRog Ikv?ܝ;}Y޺7nz}tnԳ snn3ᇳ<<*_:,{Ρ^y[}8czr,3+oLvwDv9zLKW`6+pgϟx0X=,Ϸn\_9ݣzGDo= ox4/v:M'ZsɌ Ȕ`.(*r\p[Ebkkkp_1GϬgwwjgw:dz#^@p g^sh&AKClv\b2v̬=E"]!¶6444666ûa|LX 2\zW}617,4wtwp65絛^f88$4<"*ڇ`sWkݓo+rۺzR|b>A1k~%U;C^ٽzF<~3׎:xKv#cn]]If]h7[WХt\Wmiimmkk;Z[ q34 5!_Ig*)gЛHz"I/gTFusw 1q KdW$3.[WХtIKlOloo8:|b -~5%E|%Aoɤ76&*"}ɨלox_4u ިenveqR5"]Kvھ39q/D /=v0Yo5|zW +)IKܳwJ8..y176.!1$v`-+g1ХtOܞӂY9u|~Ty}]$7R^ps;ϥ?ͯ] ^+X4)9eŻӲd..)UڭtY4nܹay"Ń +`W[_WS}\[V<-,O񙽓Ywt5MI%9xnQ.z%…@ %M 5/olf_c7xgfk]׬]fW'hD t5CЎ|d###+PJ:>YKzRg^sUѼьnF]HfYu&oq9::z`TY/hoke;tC5{]p65{QxV4+v7oUUm=~\^|ʕpWrŠ_uӛݲIѫyg+25~nlk{7x_"Ѽ4g>e27v\^:6v7>>.cccj~ӽ]l\nFz}f,lkE4J4h^~{H'J(W-~ ]NA0Vtwv|-z: +dso8OV+Fx'Lxohl^i dbWYf0Ѕt1ƍ7'&wnbbMA ~EwL65X y7nޘ={p^٨fE4/>9x2|حdE1;*r`{۷-" W;tN+\Wcfmߺyk"u8zlkγ7xhZkGkOv2s u3WkvD(fAW;NNwܽ{{wa{ف~צE];o]3{^sE>wQ9\%6@/9'1x7n޺#-=+;'p]IݯGKn tSWv| _Mo9[gwƮ0{pzӨwQ9uG[!afGk1xnߙ;'p_q遃j"-27\b_qa ~5Kha,~Eoޢ{20{XV/pzrU^s^(FWE;weޓWDحeWe.Ç?~gO0 i`۬vEYi;ULJ8GF*VzyfĻ /\q ={nIDܺ [2w/)?ɯwL^۽Ǐ>T^_a^Nvfk|RBzzyG~o x]Ѽ n[TRvXUڻ]vQ* %=c'"`>N^Lz-zI}gwIТ;Ϩלw/]hūyæ-z/+<: Z +]M/~UcR&'ΐ'j9|@IklfM^s^/? "EN4oٶC*kln%¿Z*|'ULzϪJzUVݝjW8GGF/ +\p&=x_#oX x#DV4tGsvN~ #ǪZ::߸)񁠫KpgϞ:<0~5|iz55UG+y c;c"CC@^sI!.KV^66~h(^sKk;gW/_&$<*&>1%5#;76]gw{.%3h e䮬<=! 27oH{p r2%i#‚=\m, P o@fVN.>~Aaq I N?4< +;؅s>za_,^pOzG𳷲\بPZ`gciWWױw WքGjY4Wpx0.%3.+?Jc/ȗʥD;vhdhކ: +|q1aA~>.N=BbGw5? ($,2&>!95# <8rx|BfR2+@췸'0z /×;7#c sZJ66*"Tpsv$:+oXV6v(^?U&4":V ќɢU͓vt\;y ae BﱣG Sc"C}]lA P)nb,]$^'W:($ě\$E CcG&Yfi~{"饻wǎJgy9Yq*?oORwPo KB4hnh/{ٯ/0vd6@Eje5Nxvur8zR@Q^/W%wWVRR[x_5V. ^KZ M_\E ьQ8x%v1vee"@hO҇F>ap{g/粒\Por7,80hK}]W̄&x`Gx#Aɩ ^J%ٽn] ]g=`_tD/5 gPo^N&W ՠz=~Yz#+rx7{98xUjM(WěWXrYf:xངx2b0srڿ#e||^g)~p*/fgzc"Â|z-@_M^1SZ x@1( ުV^f~"__^%z-5,To\47Pk\WD_9 K@xZݽJ4/{"6̀.K'L}{{y;{phVW@fzA^'{Vz^mL1ڢxHQ$ouhXfmήݧ̺D.qO'X—ҙyyY^i}&Poyi79AQPoxT$ToiyU<\4 KpvJb;..Poc0/7 +ԫ2PgBbLěWXml F|2vaR2C1Ϟ=Y"K{p>xq5+R8Nn_޺ښ#wnr8de9>6:2bw"B/I>6!YCcS$.]MHLIsg堣>x|ҳ]. +2/Jը^ݿO>䊋ڼqD&!S9lva1 2 xoJNDGst4܈ބ-+gm[^sfdxgϙ]nCĖ I)|r4&G3zvP\rn9`r u]p.A&˗HN;RM/>^cf!#x'N"JNCGsNhGқc+mlg^v8#z +r)I [0 Q{/Θdz^7:xmxGxs. nD1x Mڕ%ɞfcz+={ù0?'+#-9]%;mD@/ѳex͘E]H/,+l/W+={ՇsQA^vfzjRBw#w1G[^^x] ûJJM+(BG3W:уWծ. Ox8F)#x|Xu4vOv;vYҔ| |p!!r8cz$zc(syz_}^#k}T_*&0xh>"8vt+ꥇ3t8zs23RQ5<3zzaΜ)xora&fd{ NڕؕeSU=Uꪊ2|8#zwTM@Fz} ł "o7ݝ-=Zmmv5rJvtxe;J %zc4~! syޏ>V][Amlj&Gh7. G/WEs#9+ezKf9z}MC=@/.%nA&x TVVԪfմۣ˗<{ùBw2|  ~U546KULΗ>{D$WћݢK#~JLu@/̖ %^.K]\%_/W=FgDoΔdW)zX_WS襇3DKTygF}+Dң[mGsdJ99zo-_0Gx/!%cx)J^]>]Uޭzza>V xY^YsyKgJ1LomD{ B65&ɶ6t4vy+={Շ3Gow77/;3=7腅q!wofvw7W>;YtzùKmBwa`^A^X\xs&zËvuq^mJ^gBowz0g/o q^,jùCUѻKMoTޭ{ ۬ -vx͞{[UiIDo7^80x2o-YhhKeZB@/γxRx# ۩Wy<^%Džu8 ү$x+Dvuft=:zza-=W/7l95S<魔݉r.ѥf߅JOxOmW\ow7{ozzaM=ۭW]ZpV-z_{' ljxi=,jWW@o{pYj +޶v}x^{.-: E{k腅w6-x}^Xx4x{نˁ^Xf x[|+hUnT sL{]Z zSBz_e>+^XXvxWnp:J腅bFz[)ze^V/ ,#4 YW^\Oz]z0O 9zza_HugZ/Wqzzw;{& {Wx ;^XWx/ +%V«׮)zsB0kދz0gO]K;e^sһJC@/̎3M +w ޾л;{΅rzc{G-@/,Loedfx_@/Vs + zaO3[d }}z0zBK;7Ho޿0x}Rx{ اG!za6X3^SF< +W7ސ@/ ޫexo{!=6 t-՗Zz0{_x89 Tn +^ ^f7_xh5zZz K_wއ^Xf+|$U]xS{W^Aћl޿jB1}x/4 gTN \xezϘwO$f Q"xxiϚ,Qe>3 t .UՏWgxV#zwf9^Pbzw!z‚ ;svKЛwG9 ^f'Dza];7yz rZzg@/,s{kZzW w9^= MGϽ'-zaA𾮁wotkiV;+^X\xy'j"vWz{޹"z 5@/,X3 -=/>Gƈ/;:8C(ʢ^ 5j@Ѡ`0h  `0 A]әv6NN2e眙i{۞yLpNΜysx҇˚e#s޻ezoZYw[7үyIeNW(,Kx?5RwQ /5ooҪ -wxoޘ].w{ Vr ﷽w҅›YW%O /X齏K+}MAxw~sx93^Ͻwމ}Kk !?Mރ)ëf{FUoEnO޺^ozudףZ^Ke~/'sӦMJ/ ++$!^[o]Oog՞>B饕LXx8yś%/ZM͔^Za%_ o>z/Yx^ȖG)>Wj' /kW {ɻ蟽Xbz +XAd7 2Vzk1ݛzҚXRlxᭃj2l<^JYQ"{ * Nx(ݼ(fO{+&J/ Y{ oRc/oxfxĄw /Ʃ&,MX>A饕e@gfԻkzҊ[~6>û͉[}nz'K ww@‹zkֲ +~12OxgdxN8fVRasK'8K@ӧ%+Pzi/mx? 'O"%bb/kxLӔ^Zy/ߕ/If+ nK[Ak>k5mٯ L|zY }%CxGH:պ6KI{wKoow3*y34?z,a~Ǜ4m 3ǚ -+/]w i= +RP._wxL5^ZS+"5Y#F!%7w!lPK^wK.l+W0wgk,V2}MoSzZJsL>!x)6Ufg,æp^J/+$x»zm{ޑ]LB7;X;\G^ZETxov{<彬r34.Rzi_1}3u[++r4&Pzi-X^WRx*rѥX/X  &FSDݓ3vzwSzi-Y^xƄwAZ_̊c=oN|"_9靤ҪJkfW+ruF_L1J/k*7axow^/^-&] .:e,j|5*(jRE@uf;&] NS__7o1J/R+,O$ވٓ݀+~dM +~e~Q\d|NL齇Kk΂p5rh=)X _nN7(oxdnކf7Ȯ+Jg //FһKK*J/޷҆۰Ofu1+Nk|/H"l͜)V`xj2:^Ӯ]N) /+΅;<}Ko+/|^nH?}v%]WP$~mtsKUdE‹p.r=eMV~?=GUe װ`ٵ2hu{= _CKOU^Zز>Kx# +J`>aV|FG8Vߘ6ݽ,{2׵Nf].Y`Yėqz)ʬ~ ۖ:X2`(WŝTwŗ7^H|齝K˶ oG#]].+.c{'_ɗI)*-Sx/ca'3.\p0]\8cѯ;17^KkZޣ['.fWrۣ`WE#XzOAUbņ٤=px2cvbJuddH0x738NUg TTx#ɌO].3__֊% U-op4E]] 2յQ_(OУ펙vdetQƍ6lT7 +_w*,ߊ vGm2.XS|1p:zO5{ϋB饕<{{) fն1nȑaeNf̮rׯoo_3/NgxUzG^p*jLlxG3>]8!.]m-l c/ƗJ{?.^ZIJx#z4^nP`NfȮێp׬Y [/0 |1t=-'cJR zJ؊o͔iޓ;|ش+Ug̺0'ECٖ""""a@$0! J5 2 "6ZXvYZ}眀Z.EN.YF||:3zk;TL؝Q ^ǭ_s_6z/,.?lqKǔꕉ\t)^4o԰4? g+.W &~_._ΜމH//yqsJy OaFcbi~f䣇c>Ү.lP LL;{tAUze"*^Mi;;3.ݮN]'`@0bw ×p|bj1e>{Eqƃt5#+OTAhҼWؽPn459_/t.Μ@#wvg(ί^kUW&bٿ-l>(Bv2 ]FncCC=n㣡vp|IZzC@$2T-οgE#+FfĦZv2h]@ȵlx _zCHKwq ,ΠޭTLdHa[iV/;rWe0aͅ/w ʋ8oFWfk^ cеKo^8{ꅫf-W++=Aī)sgh"wnv9nuu/ڷ3Ӌř: ,R2!o^ox43&arv9Ufs%[k;Hw|bR5*ΛKD/x11jJNvۜ-].`[^^^F?@0bw +.<0/ί'ꕉRt&ޏc[$^lV-0x{otkصDnYiii Oi)\EBuK *W)+^~wp/7R2{=wx4 ˢ4dV֭$rKLb Z|?K#V}gg(+XH.Tf +3[B585TVم_^E% p!LXhgfLx_sUgAoG8ӍCřVW&ѩxnq?_% H43v}cZeyy,yyy/[QIՙms{^QQY#nr~#+cC3jK3 0v-5U].͓KѾTVWVzeCxJ3 ^ Ue%&nNvVVHVBy.Kw[qK\W&ѷx4Ҍu++2 t3 &|;CuVKYU3R2ы>P%īf^wP؅k*6"\CFzuHZg_/ UPTL[wyQBQi 65EƂ|.#7--550[T,ot8qBq*ř~xzev=f4Di ڬ5w‚\(@.prs|AF\mz|3W)+kϹzmt/犼PP<. ^MN’ s|AzeywR~MW&ѽxׄ&Gy4uUŵ tܤ,IIIW9L*0{.Vo #+/j@(0xjUvH.x'17=#3;Gj78ZDq}T>AX?۷@]Py v3 ]@MHȓp)]π魪hRq]}TncЊ(~}A4fjs`7# "x/&ѾReWVu&&mfov݄Y`lN/獮FQ^t2Nʛۊ^jpjW./&HofV6/p0b3ud^WU ~x݃Zj-;qm,.G7...66q/7 s3zԫPxx).^7ZUW.c9+#]18^7#?{m5Nԫ_~^;pZxAJΚr4M!,pwmZ( u.ԫaT1^Lj^^~eF慨L-M$ +[USGUU0ﰼ$-$ޒb^Aޏ!#;#J\dQu^Nu;5} ,T(3c/^%iAuԑU+ɫWa_&_No +Wfqrˇj{DR Y*,fSfwwSmdҼ*x.{/eEzEq+(*֓zťtjSU MVB:xW@Fzi%r/ ^xoi٧JW)^ ';df]2kE*qD蕊3PCW% _]26ps&уWcȽ CDotLl< ZAUL޷zU=Gl5U$T]?//3R\b+֮ԫ,vz-[@ZiBeFFEKř[szVUYC[xīhT"r!~QH/={,ԫ+zGzU%(ޯ/===-"3cE]bb +/ɗˋ3f.jˠ޾@ԻԫbYϹ{ćx="CiFv|^|iɷ/VlWU ^xYx\wLo[sh4k"?|^|BqNS倓 iCswJ*sCY7o,\V5v (_={Eqz+78f }[7A2zԻ4\-<//qT5v  ^*ΑzqѲz]zyWJޥ0[xO#^tnXV%vRD/+TIނ"ޖW^EȲo+[a$ .V5v?0~^Qj3RJ0ě)J.'@}썊ԛ-7^o0Qn!J9Yxa.0}WQzpYf9g^ň\%^_>ڃEjG!|uz8GH/7[dT3ޣWwz`Sٯ 3 0Rl!Kiy& ` &((Z,ŢX,*X`DS.iDP;EδNo߻{ٳg9>sd^ f]5Zp}ùYzcuQϾϤ|N.HϞ y&WKu78ǻ{^H)?ë=Vx5zۯVڞFP}Q{ùZ^c5zѻZ˒[42{Mg=5߮& h\_<ľ&z{D"j;32v4a՗΃jлʓ3@/$zW'}' mc;>QwݍFn56wz$W{  +^hA뫷:c o!x4meՏfjAګ;Sz!#9W -ֳG3n5[{ù&kw^HyOxMkgKw i +G6wޓ@/$bww+'f [_mMj5g^ĴA`zNkkťwg@z2»^HQ^CxkΠh?ףF{C5% 5(iBjG +^{ @/7(INq/Eݭb&q$@oq" .xw)$ RG/y4ח׍ޡZ3z!QÅ"ekTwXb6 o#s"Vk7$z]B*̇n9^pVZ3yn'ޮ@o>or^p&o;ڠw޵w+aԁ,M֍]^p&69蝊]C) f:e(L{w('M@Qލ|xsSWk>Q L2޽ӻܓށ@o>2:fT{ك^z6&qzgktwz+L#;&WxIw;,z;iF}x7]/]z!Iu+^p?|mF[TPGsdH{K/a1 {. c\/]6%&ix_T +^gw CS@ @OHgcG;‚w/Tw;E'Fo_ʛ@<@l>4+A|u+.ݥsf*ЫF\Vuv4ҵ" ;o`x;tpm/^y@/Лh;25Ge36]9>Dmx KwUe%@o>ctWrzq}{ +`VkkoM fqxko^{wqF'1o ,!-AA,/o$xo'//}Yx+=-)Wjzw$,@ox[R\ѫ/0.E;zwWrzO9}KT7 &oxQ6r8ۦ[z3L0xk{iouDfz/_wFL7 +o >f5Wz?w%Л[7Ղ]w+Л$^^~w'0=}  ^wto0c xDᕚ+>;0bWo;ޗo/^=,H(޾@o:Iާx*_wŖLJӻQzuW1z"z{3Лzg + ^A7ޫ +kTz?Bb!z{I; ef7"IJM'@4 |x+Y*B}w?Ct?Kx_V^0eFNz3H>υBSJzw'7:!WBL;ZmxޚqulCIoo7 \>oo9+_yһӻGa9iTz]j; M?am K o)^K^nv;äw$Л^b +e Wg2ë4;$6xr})zTޡgq7'Nxgj.eu VZz?=dѻw>ЛAw`UwЛMwB|brMi7Iއ==[xsJh{Ѥw8-@ob `7x{Q}xkozH,g}T+ÛKz Eg >C*7/ (Ax^Yo8z1.t{Л`w E8zODxow;woAzuz\NR] xcq^B. I%^xP{^k?M$IAzd!n`}'N^(O)'&x'ûB[Xz'I&諲{'EL_u^fGI' = +Zz.@ρ M1N ûޯ +t3zM|N3]ʃw_ᕋYKzSHtxGp» O ouI7ɤN;l)Л[zA޸  x-[D*қT>1;w! + "xWѓ+^с@/Mze &=ME?G7bB".BEUH:+B/g_I$xWq?$ (xߊ $78]-Hx@o glc:8dS!C`EGymʨYH!`В.fH@(/--us󃉄 +uDX7F~~;}sssss]_KϞ j6S!E^Po%DoiRo7ƔĨz49$_ӃzA~[^i"ow0MzGl fbo_w~ +kKyv{#MzAMĻσxoNcWozNxuV?.$٧xYyD)߁x Q] c)^P/7{o%$Hz㜜sG87X{'jѠɛ+&xx!y R\'zo@^HAEHEޠx/xТ&ZnEQEFO&T9(7jP6=D7AezAxo^^TjPFU]] ^z]&*ިâxA֣xG(^Pvm*~o֕zcSmG+񪓒.z5S=G7!(ԫaj9a:/9Iz5oT&?$O1Iz5h82%oMz6cH@Y'|H?7b@^ۀxsozG~T&d/ԛe +HZ uX|>~ʼn|  +xU &v>;x +(7 zAxBot(ީjS7.xA^n p\G^ uԈwB3hv zmEKwN.ƃ8ŞOxA^;h&'c61ָwxu e GxH0❌;a֭dدfP/7Ix7"/rxoJW/7 EbZm&}M&RCxT)HgN/ԋ'⽊R;ӆx nۺZ*ޒŋx̉wBNKވFSS3!?0wxw;ϋxf;@dwpV'I3xGЃVfGx+M{[%K:Na}]/*t"DKFB]|&.+^P4x?>oS$uH˗Ν'BsjkNo,zA„<%b!x/רs,gx˘xu>.^jCo ě<ċ9Y&޷x_ċۼfQ uozs/74"#xo5a$^TD|#2ZYV$^̧"b{s7w~JW}x7ycF/(74 H˺U* a +mAx3x?W"XOyEEBY EN|jի7g/,x-&{rNB(ܹ}xtw8Nz|/Wv=a=oUŊҥKΛSE]Aפ7+P\ԛ +Q]F ^jⅮgN8vx.Z ۶nҋ/l"]|[!.-rx-z}bO+\zw@`&^CDװxQx{;uj?z@3;_KPꪊR#3 (fFqePoԫxmG3T,ix{Hڎ{/A%^U8 +FW3́u5?l]zv|_O@)V~⽫/΁*^~#}:Q ڏ>ؼ)%G]“@+Q ^Po*՛,~f`%-V +yͪK/,7pv5'8^c _wPojիxyxX!Ņ\(j,_VxQՌ$vxEz%~}b`ǥzӬ7#^wPh@_owَG[hދ2f36G ^4p5 +')@kWWͯ}^7[.͸\1˗0({Ο9}xۑ4!y-xi^@w +y>m%^)v9t7!╯fjB繎SZlދWo|5]+ռ' "UvMzu/Ǯ|5f;\_͵jP\g^^^_/ ;_'*ԛF,ތ׮J}7W3nojX/x!w5'/w^^g] o$D w5FGͮCj~\;^.]ͨ l1}d2/AN#U/o1:X}/5׋=]l-hMt y%ѓ?noz%z"_H#W>-&r4oji\gW̫tw-ҥlQ{w8G/84g?޴7^^qoF /W+z;vl?zwWzTTWO^'8xCew3U%' *zAM"ěr5k^mGZ[Whu'/n^n&52~9`;>KWd7Cf{]/^C&n ; XW_{ԛW^v5SxͫA^j>7l=y럧]UQVvH ^C^/X+ +_[$;n;湫|lVo/]x ^S^/lXe7<]޼fTjnٿoOѓ_ͬ铷6w,T0z9z_ +0?YIV%FFPxoS;:rWj&B繎SZlƭ6}nbO^\˗`x Θ>mE/1̍gh a`_G|cUo3W}{h(^]J/{gbiOɻxI_G ^j9D~ =y/ᵿ]Ϝ>qsG mߢy9yś_z2c<|t ûޖ-lU|/V8`MJ`ku7Jszo=xO^ɏ=|pߞ; xމwo7?L%p*Wͩ?eðlؓ_o|~Xez(ɞpm׉~׀w-]/vbm|[7+K~ܠbb6 9¯ί+xәEM8my[{ޛw1 +/͐^z^/g_La5 a@, 3``3N M[zқ {xq~aO.ع}F[;_{3^ZI/Ɨ_`L֎;1__F}z + +-g>}⣇"m[6wuofL/.-^/e ̊y9>$l&F~ 7]z/7i޼i/>wLxwx1l}{̑G/6b|Q0#Ӡ֌%aL_ʯo +o |pm3^?^U#ދWM~mĻωwx!ӋތW/,x%/&K 3ajrw&7>^қ AxRxt<Mxl[ƿjIo=|ȠW"8[z @ {؞b&,`/:wL(׶Sd 93O4aÇܛ ~0dkf-a, uѯʯ_[ 0Joz&X?5]pY_2y¸ѣF L{3^Z֚/`bٚ_Ɔ-akȗ z/ M(𴉦ȱJG;Jo + {Wċ+1ީ';bޗf"_X/FH<曦dKl3`Zl[˭}` 0)=cb$lfM|7ֻ:'7JgjW/Oxޢ|޼j9wH/-Ro~})Ew0)n'$[sl23FJ0f_ܞvgcuWAzH~֕޼("1W4TDGm^]a;?WE a@A8>pک1|3d`(0Lչ:|JoKdx+h~ LG`'͐ޕjqz HU|/` I1281S7!F X~/-Ϡ6˗Vgq~Oxk,grB^mu ^b>z޼eN//R8B0`c :[0 ߧ|ZЛ6{ ax+xὌxMxgyMU+0ޱsGR|%` 11*(4Nj&HKگ+wo97}_h {s!:jqz'M?vL.~{a0qlLjZT7!F$X~s,Z.?<]]މ[ ux=vI/ +/ͣ"؛)98KS&Ms/%B0FlA٘eZI1VB__X֩ٛsw_a!Oz;1 oҬk7xqK6f|MZBwZLcwJv8&twً:س75Ν=k_ܝ_+` q?rܗ-;`z23gb0 r|NoտjދQz9! ]x{ z8>h7QƌDE1,H& =DHA!PPR $ 7PJ+VjӔ9Oe<]^aػYa~?ѫof7Nٳfh:_W) +b*c݈]V䆇g)a`l4_M/W7k8j{puW/po7αstF|_eYǀ0 1˱ݨYp!vYeX`j1wZz5p6,tF|^ +LaEԃ N u|vF|m:ᛥ#ggoZ$Kң^pެ]};W,o`|5#DLr|Y. Y7>@ N[ߘom;uMg{fM={ n> +ӻTzrx GsS^գv3>ҫW/SΑ5ԻN/_lg +00  nR񛘼{0Fb%_zb;+zBoLgopZzJR魻fw>23nIg݊/35,0 bl]W&xf)a`4xvV|9xI)={+5doVzW2ozkEoכmfK^/#܎gxz_s=/^˗-ʯS00Oc7_ݏp"aFDŽ~o vu@ﱦק N1%;$OAo<yԣv3zv/ZXﺇŗ~_`a)c̛y7Vð2 2V,|B{ +z?=:%;w^.#^/Nŝ;>ukd| /ϝ#0 bLn)y7f)6,_=5ۆz3_ +6+tz_@z_[&f=zw7~3ޟ?r;J`&Xag˱QnFػY&ba6/\<||3:&"_OMC}H;3Ƿ<tN۵=z=&|6c8{hn.xf7&_mge ab1&dn^YͰ`z 6ӹy=E7NNЋx.9[:ÃޚL<-qެp7#"~8KX9_}_ 0 + " @,&r X<0C,̯;j_|]ԗݽ+=ޯTޫ%[EBA}~83O?Я`F!ncenȻDLl|Q/^^lzzO޶Q[Fo?~[-b7{73ҋg ܶX|7=1K0a"0g\C[4Vo K0 b=ثw L.ޞN{ӛz9!LeӻL} Ooۭn Y%Tzcz5/?m7L" D ż;(s+RopCE 2; Ǎvf|0 Ez6'xB~T2)azୗgoRk|u_X!XaXݭ*{+ËЛe)ae_7^>yKMo/_Ag7UH7^ݘVxzM`7vs:' n97+S00C;ѭ.{wG_閸`L̯{It6tkrA7z&a?jg:+HȯkEXx{K={;j8x}@Z8J]^7OoIuޔ a}_,N0ðc\pO-[BfYaX2 KoW|CP;zNp/W sU{ls~ yzÛ +FW|"]AXI +"bL$ox~_wY˗s^2z/p g]?x3 rPһ.OoUzx3fOޏu+,03,NݶJokxy9v)+cΟϴ8L@):iK@q!D)"B}"@F*-RZ jXNUrZ }nvc?ay}gu _\\ȹ;z܁gG;;ӛ`ދ0!K^C/~O|!G!g „Ŝ}^cgh X`>vjG!p: \x?#ouΐVHlz;ڜT͔^`:/zFAaeeb|@P6Űc 1M}bp;S|ޙxc`޽q8W1ӻ3МHx^~uzz Sx:c|-|=caD̎ż~ h#`(0|kzGV<䁂yk7LHj;̑M Esgd:;o׋R5` TLs=Í _@&$S)zJ:h̨Æ=0(p8Їn~t#W%7=;9륗OSU|)_ $ #bR̎yGWc4 0|3|k +S/chQ!ԣ.,`op؏4Ҳ9!ôNoPx[_x/^kgf|%__/VL5 LI0~-v\Z1mIJ<8>c[;9)ƛu;:~ 0 FhKǒr1X5n݂srwIJǍ~pDzܝ8WMkᜦ};{u7u=z,j0 0+j!=mb̂0_'| /Zw{g ]:bX1?{slV=`HފIoa7p8;~z%߳/0fJ7Q}vLA0|w /_w;urƎ*g/, ιpVk}{eszN +Hz%__KY ̈l[b/#a f&z* ̟3kIR^u8ߎ3VP5: ީEXHo7>&_W H KJkK<+& ۻ >|ס*;oS&g}8w3:v^ "һLw[㦷4Sk㍡ח/ւ0#fƚ{Îa F}";ml\ȼ3MgaC +Y^۷ +H|"tzqzY2yzj6_k#`ɰP%睰caY0S~/tzr^Qtqe#sgϘ^|ѽszqq;1GwhKNoFOo7z/i/U`E%Hccg$_/ng]ϙzWzlsgg1x83WϬn`\o7Vz˒S)IKyz3*vC5r-(3b }($/ /t<'gIJǍ.p8C?W~}2=Io%=u西~5`Lrla0;F[f XS|}y֬\lɣ wDp~ջ`g7:+w0Ozߎ KCof|x}~/E(aؤc>S4&L|!o@|лv55˗.g>p7>ٰY]ݥMfz[''r=RϽoޓhmB፡__L@s2 b~_/ݻG}jCkVUwcùyC+{ 6Io+鍰2gäWzRx^ClI0fRm9x—I0&z:hSXùQ_\\^=AziޒRuMo %z} +&`ؘٰ̄Y&W zXOgoB:'{WZQrȒ"Z\vH}z;y7q=. c›xGx/kk%Z ,bjLǂ0/Og|ޭWΓƏ]:VyvLfz魗=ؤқAWxO7$z2`̄ &C^_ʯ8Y}³I:O6${"n~#5+<ÛoTWu뎯`S {`cܰYK×u{ً H޵k<{ΐ^\BLo?J,,lz?{7AE M['?7Fk+K†8Gd*'/J!ܿ}{gq8WP?hG +_Kb78ۢSq^Wu :5^[_, –bv̀_/"%oWH/>{7 +3W;+9u/J/%>Wqz/Oez{epxz obgxuxw9[|K+Npք xx6b+zгp^Ch\f5gV _"<[HoAl^K{z_xgα»YOElux|~`MDiH@̀_>AzGzp~N5؏ +L/Hy6W ~,f#ǜݾ?|3;2Cwx}{nl׏l!uM)~ +}M?+p^ +*{Ho4KX=.~]/[i7p7_|4޵>=n:!fӮWW {;s܊`K|ϝہ^a ny8[ O7\b! ($- Yԑ޿wzKdzs<4Iov9[E`U3>^0z +a/a&cW9cz3_OY^gcD EҸdDe1dZM͘cnifh&XQDW_V /&&i +ָD4Kv8s/.OsWOsI^^_}W}خY^~0P/{MRCUzE%)t*W3xCIx:ݼex-T/rKa4BD €ěLe%љ&@禎P{\+./rf1 RcW/.-J꽭c@Ͳzw[՛MV;]W ';w:OrƂxxs4qV:*^;{ߕ^/, $ʡ< a¯Eg^T>#P/5MqP/zd=kQNPab^4~F8x.YĻq&B,^?%=qI%K̓};&~e19"w6΂O. {[!8T} RމA4˱zIR+٧WIjÐ^tz=mQo97_S\Sx3uD[ +v!]B=1O!USTyׂ !Y!Xɗ_"Pw~PvޗR/n="}D<1^SSjӃӇs 8|80 +16zgz;A@lxx7hU@[Cۍ 0-!^%5 }}ml8g!XO> ~K!BՋ` VoQ"z#އa;ꕂ :?Po^vz݃ʑwx^tdFzDx0MxJx+xOR^xQzEo*kCe~e|A}Fk/H͆zwX՛dS/@ F(W{z/IeS -ջe&4^|z'O2/ ExU]FŻN/^oMyWdY+ +_] ^^W~0sXWWjpe7_W/mLskh^ޡTIUzv}< f\>-BU A\ ꅳ;eԫ;#|dD|HxӹxŻ"1!sTWy^B׆ƮJ_0+%C-ԻWt7Ignz-Z?Ի[h^Hy@W׮2EݥwlP% zsWGze 5`5xxW >/&b%Q,=$$}f ^ .Z `mW?F/ [*׶wVꍰz3So'R U8YwBlA=Z"^4_'Tk4ҳ&7#(^S,5-w/ +@Yx-%[( L+ ޯ p~qz_wy5M77U*; V9T}e^mr=Ի"#m7=PSx/AV?Gī,GKi3 ^ +B 5еkwJzY맭OB  ꕺm՛dSvbC$Jl=hbꕃ3; rs 0NѻVr5 A2SzcꝄ'hE;ȑwuU@j;Z _ vvb {I?UH{@9tE=bw"fԛ _}lg{Շvs%z:sщ|PZwWsHӖ=t1iIfg9{x,+V^]AVuGZ\yIl4vd] W 2z>(RoP@xwKAz_*zYfc^ ^~z{loAEOz_!VP9z1^o&CCxǰ x&M HCXM6y˿xUB6}nfyJ%*ud8'JYS`[AԻ"*Q~uJg;7щwԋCK)\~ϡq`~7L\\l5W|❂0-OX@gSge;sJJTT546w!o.n8+k7Dm8zJ^5WL]n\ $R8{ +Uv ÏR#8czpv xYn>s3=ZHh+, #GHOIJč#vPlSwᵤq2u]9b/XdiҲH6lŋ.$޷|ʚGك'/.R%+>Ԇ (]H{ZH,@Fz+W^R:GmSxoC84Ђ&wM&WHYi㈋;k&:{SơMnP|<ǓϹѱ/JHLNMZ/t<+jiT'Ix,5ԫ"@nW?鯭[a2# LzεvZ{_^Lo8!xrqA@]2#-5<9IhqXqxxGgΖngL-iˑxqmٸI-܅ogr;"5wMW@!x#i`v9^?@_,4z*G[.ݲDw F cmM7#*]+ ΢*B ɡ WiX9kzөzQx' 8LxOo⍜Sy:LZt: ѭfQyMxzq Zaf{n#ꦤƆCՕ@"y} B  !E FnvW/?w^ܺ ozOEj PLOMnn298zy@ q z۩_Q!53_εrԌ/g*S=~Wc#+ _wG[ *?H1țo)e/hVx^B?PCcSk;V/@gןg¡s|q3o0982Sp㈶5N^Kj~ +J3f~Θ .Y2N7IRsA!J>؃g#U^^E@]+ywmK]ޛĹYJ87WW,/H P/3OǤ6WdLc{MSMAܣI\jgijb\p4*. (wR5DqKX]֥}w;|V߫s{y~o_ON7(6D^n~q&z9|JZ{6xre8 +q,Ucn6grߋ*[sk=v~G%[{ZĤDz5OK֜<5{:U fC/_g +Pkg7^S݌7ﮬ(oPR\TB S2 mx3HxonѻZ[q7-%|ի 79כc\$#&q47fcp zݧoɃ`cƽmgK +5s%xi"=0Ezm|=G5 x9zׂK+޼9YéAoax)@Л9@`U '6(z xoym[yN"o,\{=j~6txrGirp\o14oڍWGko 5xo Z3 C($ 15[s6%ymoFz -T{wנkv"^Z}~ + śU"YH[ E M^X"P +ӍK˶عgGz _o+׆WΞ.{v7oFo^Y7_O{s#G4k#ËsFsnyϚ5g5O4֜EּYM]y@Pw~w4̮+^nݶ?liʛhobH'@ZFM:XPZV#ʈ3"WbvŚmxһ^qQA7c oNFoqhfx}k@k[$c\G7+OrKG7IgO"xv+ϳ`o+ۛ؛);w^ʀ !V5* FܾpX_W7xy;7GbdĒ5֜`Ysǚg5/]UPT\aV[xSṩ|-~mwn߶v +=Q}LW];Co^AHoHo~"zEo{ڣrأFwuum[6_0_yp'-xӚws`ܭDCWy}o[Z*vo8'{8‹Gիrћ7O"w[TU˰؟{> zk`A_G/0̃ ȡ PcWP.21L0\HY sprcG789GB|esxs䕷5 YKײ׫2%VI\ycY Oig*x\9k ~_&n\ ]RyyE۳ lUݰδKo/ы˔[p/+dDjzWuUQs }٣!މXzg 4p=\t ^p8{3w =]zerx~鍠>MӆSK} rTyy !(:oӆ[|ʞ4eaGY?LLU_+ [SxMWHJ#/Gn>u}4$=c( ӦASntY3.]*7lx=΢޻x`r2'kMU5T2T~I)#sOBE99rJ^T*axԞ ̭k6d{=a]dQys^nkmT +O7 !jFo"Fo&D/,oށ1+ksA!Tp4EF>j)v ,ը,o~+y]gq(:{6ufɝ0go /iJj)UQ%ѱ轠LG[?^ONRW%m谑ȡ$xPjxq{YkzӹV ?O_OUwS4cu]41NŽ((" n/ED uKRVSƺ(XG3jLtڦFoy\jg7o|9ҚmnYW]VVe% +ggtKf7x^oq%q@].;| giQRڔ_V$ + cd[3 P_^:O(WOgϓr0z=W1z;OI hN·; x{J呢..:騡~?:hS-!Z3[|iYɂٳ2ҧN0![ӭ;zTzFfvȃ22#\EEݘ]Pإu*w=Yg/":+ۥ(x{u)=Yrb'&aə'%^g%?x\PCIk.^*Uf8vR_fc> ^Tig] û +-xfgfOMM8a|tdXtC |EP;z@OLJI6}fVN^,[zU=~ҦWA9E[1;A3W+ R/')FtI@LB4B#^znBY(G/I)90Q.;)JS1.:/az~cY l]] ״O$x73޹srs23 1a Egu9+)sm}=j"/%zqi|_"X3!cWfzPYxoAx?9z6/[uACh q14P+ .bx7xy8rNJ1z_>7a!mA5 o7-9)1~|LT1d t Nמn{]Tq{Te;d*Ɨ\_=e'. +g/ Rg.tgouS+:#*΃ QJaѱq i3ff&xmJBǁތg%I):Vy|=5׾w>;=s|HbkhAwÛ9Sxt9b!g[ 0q2jVy\PqѠ؟OR ]ʮB[0?;re^gʽZxy s7tK8Y2om9tJ*:Xq>ZkR$=Ȃi밠#?ޅ +ii)I 0cv .EoxTIɩSgdf)@-?{+bzyI[,|H.FjᾦGؑC{WC}-n^ ϳ) o@{1>ndFZU]Gd 赮$u3)E3ZQ0ͳ?g=GOhU5y9YXw(! Iwv.z9ѦХa&+]|UEMlul7 c+L~D ?fnA6*Z8aWV߫[cuZ+8x ISmxiVjxFr Gdm2әEzςiZO> ]ܻ+d-AL`xG,!X0T[,n~qPb z#OH_e;itJ ke +7] +^]Y@njQ-JVnxWHY"'"-Gx7m^Maݛ]*kzJ2/Rt= Dp>&@dK3` XٲwJd7o_xCЂȂ?,E=TqOLJN#y׮ٻ9 +ו8~Y~gꦄUWW}{vrk2uB/K/d[V;OFj_>vՑh@Lfvn8yт5,ޑÆ$Ͳ`? zrU:c8/⼲ggau&cq,0x Jtc1|0x܈m۲[Wʥy9{]P.`%zx+cxip!poVEn L(ȟU=hr0 ʁZpW:/$x'FGzÂ4ݴ۩k9+*f||ԩ8  R |_4rY u n_w7y2i`o4Tmۼqը\ *+kN^M>Ro`ތCq^!zՑ+iGyϪ{@A`v֌m<'xݏ^dtEDOLJI9sqɢ%ynEWn+*ZD0{D7(нJ{W \SC}mu֭YbTo^`}=|l)nu7o$uB٥1KG53JMm02@4[ݷ:dWX$*wQ-dVlpn q V?5U5-]P4 O[01PJ +^(qRg@qVL:&;k|%]`kDuʆp.3w]zJX,T.5ʽFxI_a-ZPnCt_%&Ic($e "j*D@@D +(,Fbk.TESBczϹ~yޙw8{IO}'5Ə&?o}fkW/Z2y_#zQ uk0j߂$(.-x5X"-]Ҷp9fGnpz<%(xG6қ_ݱ7U8v+aClKߏ<4R\.+W_PmZ4>IkyHp93EO\#v7$;ԢWI<{(v7<}_KEÇr#8<]; )]9NI%wO+f|̘5gނmKKV9ee1K/_N/啾w% ƿ3S"v1XvxkZϛ=sTJ ƚ*z[S^O|B^{Խ&O|;yI@@a?pyJNb%ErRYmakVrZurokfp 88Kxr6K8/Tg竀 0.__mPwA+O'o3sg?=]$.*#w*3oFF#,IpX|j sU;TgWӁL`Scqεrc.!_%9%xMrCC!_ۼZl̼:}J&W×SKC}g j螵 +j{k#>^ټQ 7ӟC*"=`;"zi88 }a.X]ܻ=+OL`Xr#8y.F N,\yU;k.G/ fɦ-[=zyAQ_ǯo|_>K}RtL2%T殧kcvmndR2yUwXF/Y6 96 'w~ ̼X2M7м-b޼ׄUs/h_vK. +? Hu%<9ݏm'JI"1-oy%xs$H)k]$[=do`(0*L$F$wįmݢV6\c;l^6^F^ѫ95r&._\\\~b\ӟ qOsJCMDbff^/y<Zd->oނª" +̽IB<#&2>O%:ȅ1i%VrJqֻdqHFҿ4:#z/^jT{*>Q__П PccT g[ZY&m&`~AP`]-4/՘_ݒg]V,_wzg2)a23r{ĺ_]yˣz<(Q+rF,_/YG+l.AtQVڃm[XuP*𙹳eyi΃W~ps B˼,/hx!$&yH{@Ce#, +-{o$9[ m([jy65M ݋NRj`_gd |Eƴv/~%^h(?$:7p*eA =8erG J[s^Ɓ6clV砳vb Lw&N1nsmuۼaBr{)Us//}5moU(4m0 HJ*J4R?ޙ53{>g{ϹUr5xV@.9f?C=rc˹Ŀ gO2Z}Lr}:0_m -VoƳ޽Nһx^h>{Hx*xyfi.O~.l,vn@M>\'fNa8+ T飈LXC~,50Zbp9@B'G|<|lM>/m +^?!nk zhB×7v6R59x)3Qpːk^WjH/& }|YBKlAԝ] +濊!Gқg~zj~h6?n ۏn7_634No*ք>тhh/cOh`͙ 4F p ݴn85>_6y'qOAK/7` + 2[ ~%m| Կ;F(>* +-WL?_h>/t{DiP-=rnqrCbp.s˟DJ$S,"LW)w/rz+zǹ h$sDlvT+,%̖Vv5ݽ#=Co~/T@}(z\6ϟgD>pˇ0մ0=!o4)_η˦RӐa<\Z=Olg +UL`,Nj`w0#>ꍯ`ܾoRb =h[koWF^٫w/Vt:㢐ggiN5Nb4@iܵ%]#wJnknz)~5B/"=G"S䗩"`,e+mWr-གzZ } o`eW&_VT8yas#T*Ⳉ})p77sr/a'e\_P҅0t40=룠`cj+ٛ[勦;MNUcDpInP=ܚ<G4fH)1(`I0q%BK|eQBo +KA>zC|ձjjysw~nV޻Ǧևlvjgoٵiμ_5DVEn[8rzskFsF><"o>T5Vɂs国,(a~Zgϐ'٭V00~-l蚦wG5w4umƗ^ȯsMTmSpJr V>Z[S$p53sF?YZOP5`,uD#D>ay< pT-yViޏ8LUqU&+ԻfmSpKnam93!"`0qeLlw>֏6_ hÏ *m[>6Xkx ùgz'&|;d*@Vr9 k_&*k_D/ +TJX+e`+=GA>#Pg@~mmWvۯp6de]aX&U^rx6ޞ@@Dn`@%r%rkq 2NqU@u< t +Vfһ%^Vo_ʶj6խrnhɵZ\Jo4O"XLT+*;pw/F +XA?iTGH 6~D>;/S6&e"oV[ +1l| pgo!'Ob`JP*ceVVw-/g]Ispu&϶>6~[ +}Uӛ-o#T7X䖙ܵ:s\3)_%ϡ%2%D2WA[@ LŠ4'7h.ot ^ KoE5.m[Ψ)8%䮶&oC5 +oY7LD!JY)A*hq˅ ͥ%M-GŁ +ʣf=+G+VMBkm>nVrqVW"_t(P˯ S*Tdݵ^L!({$-~sVN@+٦ӯA} +ogo-,|mmU.KL_r{78k镯/}-JH@V5W'$/y'Yp? >)ק>(أ+rue[_mn[p.]Jr72q0O.BTSTU^xkyhyg\b O'kzG \ztmj.f2P.p "zgo- N_|Rb + +!.vよwEla!3w9&K}4Xz1xmֳ&} Un!!7ߞ'טfiɤ鵗o/xj~(JU +XZ_'8A|h Łb<[30>ji@K[m |;v +獋3CJn gaʸ P7%af + +6MlwRsB!%w@yY}Q,^ݞ-=ۉ/W"7لF[#fA|s( @1Fv9Bt=ccN@~IyFۧw$so- +7SpSr3Kn ܷ -Sx:J"Ă5wWf4'}V onoOo:vub,p޹nhɭSz-LhZ|5L)3Tz"n $OiqO#~VGcW%[>z.,MGq; /`_i@Řq8Ӏ)"u9|d׏yQ:rk}lb]p;:(Wæ`03BWLSLi@ +j\U)V >lt󱀣6=mFM^"Fpf\ݹM 1&jzݷp45`NVhw}/ ΨG}n>WQjyd \-\j܇H #c܄7q.䰓 3?\ŭvsq.HA !dt햺֌f4ڻ_Ա7!eڧ _s3b UXXi//~<ï[֋.ߥ%G4%\Lchu.>uRҼVSޒ/ Ӈ_򯶮O?z]]<̜`Rlϡ}uּXSޒ3# >{\J/p8::UscI\]o!/XjZkO +ΫӚ% ?\\z_$%. xc/Ņpq|s1K-D]lƨ]q=4L~wzkR_g{C^kE 7O&6U*77^t ;^*Vlul~?suĻ\ᗼ:?Z{& S59?0E3Zf7J'/!=R/G\l>wUrdt7'W^|Lg4>PkX|U֐y [ᦽGs (?۟yN˼|>ŝ\Qsr]f2BSUT@~R'(_/1_p&{BaNbYoTI v>Q0d1H3Pi(X/7_q7h2fu./ FJ[/\Q`|93,}|ݧл 3;|R6 P"@Qޜ.4^$J"& S l {H IXL}!?ߟ:`cM>c ~S\BNgZU{6>S_/ +7DkdM,7~ т(4AE.7xb~i1 ݭ$jt<3̿xAe{h +#QJA| П8 +|6.:3+LD& XfЉ;VޕG0>_/ -S[#6iTZHfԉ;VKB0>_VwKts[%1iU:NfԉpԿlv,𙬺,:&7W\<_gҩ 6$_;eo| |\&cuC+zD&Qfb)_p>]D;xtu0Mz%ֹ]R& +{%ٵV0'L] F=HMCE,MgNLCOewB~id]%/ Meo_J%3oWFb;X4nJs<$RT!=T~LDx2Wш<2"IJy_Jр`(GCv̀kّݕ)4р^GoQˎ/݆3WXdA$;9*pcw"af1јxNE u&7ة+4WXLXw|$ @IvDx}5+2!(;IOo6;:6WHydCHDDI;HnV&O=糅GûDsc<Ri=/5A߰Qg|'T:ko^sYS>q;G}wA6TN@8G8[wTk] Hqtj79?̥҄6!;U9сECt z o?ʹ0ڕҝI `5vtctJmb)[]ZF{\hFW5׉1"fF5׋L*c\g}Qs((((((((( IX@ endstream endobj 1187 0 obj <>stream +UUU endstream endobj 1184 0 obj <> endobj 1188 0 obj <> endobj 1189 0 obj [0.0 0.0 0.0] endobj 1190 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream +q +/GS0 gs +957 0 0 866 166.9998627 144.0001221 cm +/Im0 Do +Q + endstream endobj 1191 0 obj <> endobj 1192 0 obj <>/Filter/FlateDecode/Height 866/Intent/RelativeColorimetric/Length 60743/Name/X/Subtype/Image/Type/XObject/Width 957>>stream +H{Ua-B $@CA&0I "(Xl +%L) wX^{8!&.$ c'&r?*w` kOD/gԽˮ]GWe]'ԧQ`o׎ozE]]hk_4r0LZV:}}fůίu+Λ3ጺ*d6o݀kAP~QBfЋzң9kמfvbַХk[QRsG26Y2owvw;ӹSm-D^o78c7K\YnQ阦滛 `,lg_;:ogs:^ԅ5럻|2ؘˣK2֭eǹQI!3aXXg߀Y^@/gԝeڜ]ǮkGVȞ4r?aogw:ЛV--tɮ+kVВ֯Bf"_u~=_+{pF]Z5evdҕt*\uj)K `L ,sw.;/_=zmYG.I쾿m]v ]]KKp-%g9>*c%̀iye |ӹF/gu?xK~==\#[FK\'̆I0|'bwJ-ጺofks\Z\KnESSSab&Lyyecr:6y#4ʇ7~C__݀sY.MlKgV̄I0Ve|UΤwѻpF]oԮ]O|)3\vje{q>b!L0_7w:'zKohf\!]˓p-%W\ɿ0V_ycA/gu o]/f'̮^)]KK{+nYիר$'}dX3`7ogE˽=xvs׽vb6t 2[{ݔI_7dz1c%̂iy_$ۙǗNg}z^ΨK+UC.ڥ務fCɥK-eۿrIOČ0 f7K ;z:^MgE˿xxvsNf}Lo]kGȽN{n-qsܿ$'}bB `ۙWOgzޝًuUUG3 ݑ.5+k +\rhݻw-?3oh=sng_=EY7&p^| o|4{YOsWN'b6еryqcg0c!ٯ_3r;830z˹ًE˿TЛyἦRog Ikv?ܝ;}Y޺7nz}tnԳ snn3ᇳ<<*_:,{Ρ^y[}8czr,3+oLvwDv9zLKW`6+pgϟx0X=,Ϸn\_9ݣzGDo= ox4/v:M'ZsɌ Ȕ`.(*r\p[Ebkkkp_1GϬgwwjgw:dz#^@p g^sh&AKClv\b2v̬=E"]!¶6444666ûa|LX 2\zW}617,4wtwp65絛^f88$4<"*ڇ`sWkݓo+rۺzR|b>A1k~%U;C^ٽzF<~3׎:xKv#cn]]If]h7[WХt\Wmiimmkk;Z[ q34 5!_Ig*)gЛHz"I/gTFusw 1q KdW$3.[WХtIKlOloo8:|b -~5%E|%Aoɤ76&*"}ɨלox_4u ިenveqR5"]Kvھ39q/D /=v0Yo5|zW +)IKܳwJ8..y176.!1$v`-+g1ХtOܞӂY9u|~Ty}]$7R^ps;ϥ?ͯ] ^+X4)9eŻӲd..)UڭtY4nܹay"Ń +`W[_WS}\[V<-,O񙽓Ywt5MI%9xnQ.z%…@ %M 5/olf_c7xgfk]׬]fW'hD t5CЎ|d###+PJ:>YKzRg^sUѼьnF]HfYu&oq9::z`TY/hoke;tC5{]p65{QxV4+v7oUUm=~\^|ʕpWrŠ_uӛݲIѫyg+25~nlk{7x_"Ѽ4g>e27v\^:6v7>>.cccj~ӽ]l\nFz}f,lkE4J4h^~{H'J(W-~ ]NA0Vtwv|-z: +dso8OV+Fx'Lxohl^i dbWYf0Ѕt1ƍ7'&wnbbMA ~EwL65X y7nޘ={p^٨fE4/>9x2|حdE1;*r`{۷-" W;tN+\Wcfmߺyk"u8zlkγ7xhZkGkOv2s u3WkvD(fAW;NNwܽ{{wa{ف~צE];o]3{^sE>wQ9\%6@/9'1x7n޺#-=+;'p]IݯGKn tSWv| _Mo9[gwƮ0{pzӨwQ9uG[!afGk1xnߙ;'p_q遃j"-27\b_qa ~5Kha,~Eoޢ{20{XV/pzrU^s^(FWE;weޓWDحeWe.Ç?~gO0 i`۬vEYi;ULJ8GF*VzyfĻ /\q ={nIDܺ [2w/)?ɯwL^۽Ǐ>T^_a^Nvfk|RBzzyG~o x]Ѽ n[TRvXUڻ]vQ* %=c'"`>N^Lz-zI}gwIТ;Ϩלw/]hūyæ-z/+<: Z +]M/~UcR&'ΐ'j9|@IklfM^s^/? "EN4oٶC*kln%¿Z*|'ULzϪJzUVݝjW8GGF/ +\p&=x_#oX x#DV4tGsvN~ #ǪZ::߸)񁠫KpgϞ:<0~5|iz55UG+y c;c"CC@^sI!.KV^66~h(^sKk;gW/_&$<*&>1%5#;76]gw{.%3h e䮬<=! 27oH{p r2%i#‚=\m, P o@fVN.>~Aaq I N?4< +;؅s>za_,^pOzG𳷲\بPZ`gciWWױw WքGjY4Wpx0.%3.+?Jc/ȗʥD;vhdhކ: +|q1aA~>.N=BbGw5? ($,2&>!95# <8rx|BfR2+@췸'0z /×;7#c sZJ66*"Tpsv$:+oXV6v(^?U&4":V ќɢU͓vt\;y ae BﱣG Sc"C}]lA P)nb,]$^'W:($ě\$E CcG&Yfi~{"饻wǎJgy9Yq*?oORwPo KB4hnh/{ٯ/0vd6@Eje5Nxvur8zR@Q^/W%wWVRR[x_5V. ^KZ M_\E ьQ8x%v1vee"@hO҇F>ap{g/粒\Por7,80hK}]W̄&x`Gx#Aɩ ^J%ٽn] ]g=`_tD/5 gPo^N&W ՠz=~Yz#+rx7{98xUjM(WěWXrYf:xངx2b0srڿ#e||^g)~p*/fgzc"Â|z-@_M^1SZ x@1( ުV^f~"__^%z-5,To\47Pk\WD_9 K@xZݽJ4/{"6̀.K'L}{{y;{phVW@fzA^'{Vz^mL1ڢxHQ$ouhXfmήݧ̺D.qO'X—ҙyyY^i}&Poyi79AQPoxT$ToiyU<\4 KpvJb;..Poc0/7 +ԫ2PgBbLěWXml F|2vaR2C1Ϟ=Y"K{p>xq5+R8Nn_޺ښ#wnr8de9>6:2bw"B/I>6!YCcS$.]MHLIsg堣>x|ҳ]. +2/Jը^ݿO>䊋ڼqD&!S9lva1 2 xoJNDGst4܈ބ-+gm[^sfdxgϙ]nCĖ I)|r4&G3zvP\rn9`r u]p.A&˗HN;RM/>^cf!#x'N"JNCGsNhGқc+mlg^v8#z +r)I [0 Q{/Θdz^7:xmxGxs. nD1x Mڕ%ɞfcz+={ù0?'+#-9]%;mD@/ѳex͘E]H/,+l/W+={ՇsQA^vfzjRBw#w1G[^^x] ûJJM+(BG3W:уWծ. Ox8F)#x|Xu4vOv;vYҔ| |p!!r8cz$zc(syz_}^#k}T_*&0xh>"8vt+ꥇ3t8zs23RQ5<3zzaΜ)xora&fd{ NڕؕeSU=Uꪊ2|8#zwTM@Fz} ł "o7ݝ-=Zmmv5rJvtxe;J %zc4~! syޏ>V][Amlj&Gh7. G/WEs#9+ezKf9z}MC=@/.%nA&x TVVԪfմۣ˗<{ùBw2|  ~U546KULΗ>{D$WћݢK#~JLu@/̖ %^.K]\%_/W=FgDoΔdW)zX_WS襇3DKTygF}+Dң[mGsdJ99zo-_0Gx/!%cx)J^]>]Uޭzza>V xY^YsyKgJ1LomD{ B65&ɶ6t4vy+={Շ3Gow77/;3=7腅q!wofvw7W>;YtzùKmBwa`^A^X\xs&zËvuq^mJ^gBowz0g/o q^,jùCUѻKMoTޭ{ ۬ -vx͞{[UiIDo7^80x2o-YhhKeZB@/γxRx# ۩Wy<^%Džu8 ү$x+Dvuft=:zza-=W/7l95S<魔݉r.ѥf߅JOxOmW\ow7{ozzaM=ۭW]ZpV-z_{' ljxi=,jWW@o{pYj +޶v}x^{.-: E{k腅w6-x}^Xx4x{نˁ^Xf x[|+hUnT sL{]Z zSBz_e>+^XXvxWnp:J腅bFz[)ze^V/ ,#4 YW^\Oz]z0O 9zza_HugZ/Wqzzw;{& {Wx ;^XWx/ +%V«׮)zsB0kދz0gO]K;e^sһJC@/̎3M +w ޾л;{΅rzc{G-@/,Loedfx_@/Vs + zaO3[d }}z0zBK;7Ho޿0x}Rx{ اG!za6X3^SF< +W7ސ@/ ޫexo{!=6 t-՗Zz0{_x89 Tn +^ ^f7_xh5zZz K_wއ^Xf+|$U]xS{W^Aћl޿jB1}x/4 gTN \xezϘwO$f Q"xxiϚ,Qe>3 t .UՏWgxV#zwf9^Pbzw!z‚ ;svKЛwG9 ^f'Dza];7yz rZzg@/,s{kZzW w9^= MGϽ'-zaA𾮁wotkiV;+^X\xy'j"vWz{޹"z 5@/,X3 -=/>Gƈ/;:8C(ʢ^ 5j@Ѡ`0h  `0 A]әv6NN2e眙i{۞yLpNΜysx҇˚e#s޻ezoZYw[7үyIeNW(,Kx?5RwQ /5ooҪ -wxoޘ].w{ Vr ﷽w҅›YW%O /X齏K+}MAxw~sx93^Ͻwމ}Kk !?Mރ)ëf{FUoEnO޺^ozudףZ^Ke~/'sӦMJ/ ++$!^[o]Oog՞>B饕LXx8yś%/ZM͔^Za%_ o>z/Yx^ȖG)>Wj' /kW {ɻ蟽Xbz +XAd7 2Vzk1ݛzҚXRlxᭃj2l<^JYQ"{ * Nx(ݼ(fO{+&J/ Y{ oRc/oxfxĄw /Ʃ&,MX>A饕e@gfԻkzҊ[~6>û͉[}nz'K ww@‹zkֲ +~12OxgdxN8fVRasK'8K@ӧ%+Pzi/mx? 'O"%bb/kxLӔ^Zy/ߕ/If+ nK[Ak>k5mٯ L|zY }%CxGH:պ6KI{wKoow3*y34?z,a~Ǜ4m 3ǚ -+/]w i= +RP._wxL5^ZS+"5Y#F!%7w!lPK^wK.l+W0wgk,V2}MoSzZJsL>!x)6Ufg,æp^J/+$x»zm{ޑ]LB7;X;\G^ZETxov{<彬r34.Rzi_1}3u[++r4&Pzi-X^WRx*rѥX/X  &FSDݓ3vzwSzi-Y^xƄwAZ_̊c=oN|"_9靤ҪJkfW+ruF_L1J/k*7axow^/^-&] .:e,j|5*(jRE@uf;&] NS__7o1J/R+,O$ވٓ݀+~dM +~e~Q\d|NL齇Kk΂p5rh=)X _nN7(oxdnކf7Ȯ+Jg //FһKK*J/޷҆۰Ofu1+Nk|/H"l͜)V`xj2:^Ӯ]N) /+΅;<}Ko+/|^nH?}v%]WP$~mtsKUdE‹p.r=eMV~?=GUe װ`ٵ2hu{= _CKOU^Zز>Kx# +J`>aV|FG8Vߘ6ݽ,{2׵Nf].Y`Yėqz)ʬ~ ۖ:X2`(WŝTwŗ7^H|齝K˶ oG#]].+.c{'_ɗI)*-Sx/ca'3.\p0]\8cѯ;17^KkZޣ['.fWrۣ`WE#XzOAUbņ٤=px2cvbJuddH0x738NUg TTx#ɌO].3__֊% U-op4E]] 2յQ_(OУ펙vdetQƍ6lT7 +_w*,ߊ vGm2.XS|1p:zO5{ϋB饕<{{) fն1nȑaeNf̮rׯoo_3/NgxUzG^p*jLlxG3>]8!.]m-l c/ƗJ{?.^ZIJx#z4^nP`NfȮێp׬Y [/0 |1t=-'cJR zJ؊o͔iޓ;|ش+Ug̺0'ECٖ""""a@$0! J5 2 "6ZXvYZ}眀Z.EN.YF||:3zk;TL؝Q ^ǭ_s_6z/,.?lqKǔꕉ\t)^4o԰4? g+.W &~_._ΜމH//yqsJy OaFcbi~f䣇c>Ү.lP LL;{tAUze"*^Mi;;3.ݮN]'`@0bw ×p|bj1e>{Eqƃt5#+OTAhҼWؽPn459_/t.Μ@#wvg(ί^kUW&bٿ-l>(Bv2 ]FncCC=n㣡vp|IZzC@$2T-οgE#+FfĦZv2h]@ȵlx _zCHKwq ,ΠޭTLdHa[iV/;rWe0aͅ/w ʋ8oFWfk^ cеKo^8{ꅫf-W++=Aī)sgh"wnv9nuu/ڷ3Ӌř: ,R2!o^ox43&arv9Ufs%[k;Hw|bR5*ΛKD/x11jJNvۜ-].`[^^^F?@0bw +.<0/ί'ꕉRt&ޏc[$^lV-0x{otkصDnYiii Oi)\EBuK *W)+^~wp/7R2{=wx4 ˢ4dV֭$rKLb Z|?K#V}gg(+XH.Tf +3[B585TVم_^E% p!LXhgfLx_sUgAoG8ӍCřVW&ѩxnq?_% H43v}cZeyy,yyy/[QIՙms{^QQY#nr~#+cC3jK3 0v-5U].͓KѾTVWVzeCxJ3 ^ Ue%&nNvVVHVBy.Kw[qK\W&ѷx4Ҍu++2 t3 &|;CuVKYU3R2ы>P%īf^wP؅k*6"\CFzuHZg_/ UPTL[wyQBQi 65EƂ|.#7--550[T,ot8qBq*ř~xzev=f4Di ڬ5w‚\(@.prs|AF\mz|3W)+kϹzmt/犼PP<. ^MN’ s|AzeywR~MW&ѽxׄ&Gy4uUŵ tܤ,IIIW9L*0{.Vo #+/j@(0xjUvH.x'17=#3;Gj78ZDq}T>AX?۷@]Py v3 ]@MHȓp)]π魪hRq]}TncЊ(~}A4fjs`7# "x/&ѾReWVu&&mfov݄Y`lN/獮FQ^t2Nʛۊ^jpjW./&HofV6/p0b3ud^WU ~x݃Zj-;qm,.G7...66q/7 s3zԫPxx).^7ZUW.c9+#]18^7#?{m5Nԫ_~^;pZxAJΚr4M!,pwmZ( u.ԫaT1^Lj^^~eF慨L-M$ +[USGUU0ﰼ$-$ޒb^Aޏ!#;#J\dQu^Nu;5} ,T(3c/^%iAuԑU+ɫWa_&_No +Wfqrˇj{DR Y*,fSfwwSmdҼ*x.{/eEzEq+(*֓zťtjSU MVB:xW@Fzi%r/ ^xoi٧JW)^ ';df]2kE*qD蕊3PCW% _]26ps&уWcȽ CDotLl< ZAUL޷zU=Gl5U$T]?//3R\b+֮ԫ,vz-[@ZiBeFFEKř[szVUYC[xīhT"r!~QH/={,ԫ+zGzU%(ޯ/===-"3cE]bb +/ɗˋ3f.jˠ޾@ԻԫbYϹ{ćx="CiFv|^|iɷ/VlWU ^xYx\wLo[sh4k"?|^|BqNS倓 iCswJ*sCY7o,\V5v (_={Eqz+78f }[7A2zԻ4\-<//qT5v  ^*ΑzqѲz]zyWJޥ0[xO#^tnXV%vRD/+TIނ"ޖW^EȲo+[a$ .V5v?0~^Qj3RJ0ě)J.'@}썊ԛ-7^o0Qn!J9Yxa.0}WQzpYf9g^ň\%^_>ڃEjG!|uz8GH/7[dT3ޣWwz`Sٯ 3 0Rl!Kiy& ` &((Z,ŢX,*X`DS.iDP;EδNo߻{ٳg9>sd^ f]5Zp}ùYzcuQϾϤ|N.HϞ y&WKu78ǻ{^H)?ë=Vx5zۯVڞFP}Q{ùZ^c5zѻZ˒[42{Mg=5߮& h\_<ľ&z{D"j;32v4a՗΃jлʓ3@/$zW'}' mc;>QwݍFn56wz$W{  +^hA뫷:c o!x4meՏfjAګ;Sz!#9W -ֳG3n5[{ù&kw^HyOxMkgKw i +G6wޓ@/$bww+'f [_mMj5g^ĴA`zNkkťwg@z2»^HQ^CxkΠh?ףF{C5% 5(iBjG +^{ @/7(INq/Eݭb&q$@oq" .xw)$ RG/y4ח׍ޡZ3z!QÅ"ekTwXb6 o#s"Vk7$z]B*̇n9^pVZ3yn'ޮ@o>or^p&o;ڠw޵w+aԁ,M֍]^p&69蝊]C) f:e(L{w('M@Qލ|xsSWk>Q L2޽ӻܓށ@o>2:fT{ك^z6&qzgktwz+L#;&WxIw;,z;iF}x7]/]z!Iu+^p?|mF[TPGsdH{K/a1 {. c\/]6%&ix_T +^gw CS@ @OHgcG;‚w/Tw;E'Fo_ʛ@<@l>4+A|u+.ݥsf*ЫF\Vuv4ҵ" ;o`x;tpm/^y@/Лh;25Ge36]9>Dmx KwUe%@o>ctWrzq}{ +`VkkoM fqxko^{wqF'1o ,!-AA,/o$xo'//}Yx+=-)Wjzw$,@ox[R\ѫ/0.E;zwWrzO9}KT7 &oxQ6r8ۦ[z3L0xk{iouDfz/_wFL7 +o >f5Wz?w%Л[7Ղ]w+Л$^^~w'0=}  ^wto0c xDᕚ+>;0bWo;ޗo/^=,H(޾@o:Iާx*_wŖLJӻQzuW1z"z{3Лzg + ^A7ޫ +kTz?Bb!z{I; ef7"IJM'@4 |x+Y*B}w?Ct?Kx_V^0eFNz3H>υBSJzw'7:!WBL;ZmxޚqulCIoo7 \>oo9+_yһӻGa9iTz]j; M?am K o)^K^nv;äw$Л^b +e Wg2ë4;$6xr})zTޡgq7'Nxgj.eu VZz?=dѻw>ЛAw`UwЛMwB|brMi7Iއ==[xsJh{Ѥw8-@ob `7x{Q}xkozH,g}T+ÛKz Eg >C*7/ (Ax^Yo8z1.t{Л`w E8zODxow;woAzuz\NR] xcq^B. I%^xP{^k?M$IAzd!n`}'N^(O)'&x'ûB[Xz'I&諲{'EL_u^fGI' = +Zz.@ρ M1N ûޯ +t3zM|N3]ʃw_ᕋYKzSHtxGp» O ouI7ɤN;l)Л[zA޸  x-[D*қT>1;w! + "xWѓ+^с@/Mze &=ME?G7bB".BEUH:+B/g_I$xWq?$ (xߊ $78]-Hx@o glc:8dS!C`EGymʨYH!`В.fH@(/--us󃉄 +uDX7F~~;}sssss]_KϞ j6S!E^Po%DoiRo7ƔĨz49$_ӃzA~[^i"ow0MzGl fbo_w~ +kKyv{#MzAMĻσxoNcWozNxuV?.$٧xYyD)߁x Q] c)^P/7{o%$Hz㜜sG87X{'jѠɛ+&xx!y R\'zo@^HAEHEޠx/xТ&ZnEQEFO&T9(7jP6=D7AezAxo^^TjPFU]] ^z]&*ިâxA֣xG(^Pvm*~o֕zcSmG+񪓒.z5S=G7!(ԫaj9a:/9Iz5oT&?$O1Iz5h82%oMz6cH@Y'|H?7b@^ۀxsozG~T&d/ԛe +HZ uX|>~ʼn|  +xU &v>;x +(7 zAxBot(ީjS7.xA^n p\G^ uԈwB3hv zmEKwN.ƃ8ŞOxA^;h&'c61ָwxu e GxH0❌;a֭dدfP/7Ix7"/rxoJW/7 EbZm&}M&RCxT)HgN/ԋ'⽊R;ӆx nۺZ*ޒŋx̉wBNKވFSS3!?0wxw;ϋxf;@dwpV'I3xGЃVfGx+M{[%K:Na}]/*t"DKFB]|&.+^P4x?>oS$uH˗Ν'BsjkNo,zA„<%b!x/רs,gx˘xu>.^jCo ě<ċ9Y&޷x_ċۼfQ uozs/74"#xo5a$^TD|#2ZYV$^̧"b{s7w~JW}x7ycF/(74 H˺U* a +mAx3x?W"XOyEEBY EN|jի7g/,x-&{rNB(ܹ}xtw8Nz|/Wv=a=oUŊҥKΛSE]Aפ7+P\ԛ +Q]F ^jⅮgN8vx.Z ۶nҋ/l"]|[!.-rx-z}bO+\zw@`&^CDװxQx{;uj?z@3;_KPꪊR#3 (fFqePoԫxmG3T,ix{Hڎ{/A%^U8 +FW3́u5?l]zv|_O@)V~⽫/΁*^~#}:Q ڏ>ؼ)%G]“@+Q ^Po*՛,~f`%-V +yͪK/,7pv5'8^c _wPojիxyxX!Ņ\(j,_VxQՌ$vxEz%~}b`ǥzӬ7#^wPh@_owَG[hދ2f36G ^4p5 +')@kWWͯ}^7[.͸\1˗0({Ο9}xۑ4!y-xi^@w +y>m%^)v9t7!╯fjB繎SZlދWo|5]+ռ' "UvMzu/Ǯ|5f;\_͵jP\g^^^_/ ;_'*ԛF,ތ׮J}7W3nojX/x!w5'/w^^g] o$D w5FGͮCj~\;^.]ͨ l1}d2/AN#U/o1:X}/5׋=]l-hMt y%ѓ?noz%z"_H#W>-&r4oji\gW̫tw-ҥlQ{w8G/84g?޴7^^qoF /W+z;vl?zwWzTTWO^'8xCew3U%' *zAM"ěr5k^mGZ[Whu'/n^n&52~9`;>KWd7Cf{]/^C&n ; XW_{ԛW^v5SxͫA^j>7l=y럧]UQVvH ^C^/X+ +_[$;n;湫|lVo/]x ^S^/lXe7<]޼fTjnٿoOѓ_ͬ铷6w,T0z9z_ +0?YIV%FFPxoS;:rWj&B繎SZlƭ6}nbO^\˗`x Θ>mE/1̍gh a`_G|cUo3W}{h(^]J/{gbiOɻxI_G ^j9D~ =y/ᵿ]Ϝ>qsG mߢy9yś_z2c<|t ûޖ-lU|/V8`MJ`ku7Jszo=xO^ɏ=|pߞ; xމwo7?L%p*Wͩ?eðlؓ_o|~Xez(ɞpm׉~׀w-]/vbm|[7+K~ܠbb6 9¯ί+xәEM8my[{ޛw1 +/͐^z^/g_La5 a@, 3``3N M[zқ {xq~aO.ع}F[;_{3^ZI/Ɨ_`L֎;1__F}z + +-g>}⣇"m[6wuofL/.-^/e ̊y9>$l&F~ 7]z/7i޼i/>wLxwx1l}{̑G/6b|Q0#Ӡ֌%aL_ʯo +o |pm3^?^U#ދWM~mĻωwx!ӋތW/,x%/&K 3ajrw&7>^қ AxRxt<Mxl[ƿjIo=|ȠW"8[z @ {؞b&,`/:wL(׶Sd 93O4aÇܛ ~0dkf-a, uѯʯ_[ 0Joz&X?5]pY_2y¸ѣF L{3^Z֚/`bٚ_Ɔ-akȗ z/ M(𴉦ȱJG;Jo + {Wċ+1ީ';bޗf"_X/FH<曦dKl3`Zl[˭}` 0)=cb$lfM|7ֻ:'7JgjW/Oxޢ|޼j9wH/-Ro~})Ew0)n'$[sl23FJ0f_ܞvgcuWAzH~֕޼("1W4TDGm^]a;?WE a@A8>pک1|3d`(0Lչ:|JoKdx+h~ LG`'͐ޕjqz HU|/` I1281S7!F X~/-Ϡ6˗Vgq~Oxk,grB^mu ^b>z޼eN//R8B0`c :[0 ߧ|ZЛ6{ ax+xὌxMxgyMU+0ޱsGR|%` 11*(4Nj&HKگ+wo97}_h {s!:jqz'M?vL.~{a0qlLjZT7!F$X~s,Z.?<]]މ[ ux=vI/ +/ͣ"؛)98KS&Ms/%B0FlA٘eZI1VB__X֩ٛsw_a!Oz;1 oҬk7xqK6f|MZBwZLcwJv8&twً:س75Ν=k_ܝ_+` q?rܗ-;`z23gb0 r|NoտjދQz9! ]x{ z8>h7QƌDE1,H& =DHA!PPR $ 7PJ+VjӔ9Oe<]^aػYa~?ѫof7Nٳfh:_W) +b*c݈]V䆇g)a`l4_M/W7k8j{puW/po7αstF|_eYǀ0 1˱ݨYp!vYeX`j1wZz5p6,tF|^ +LaEԃ N u|vF|m:ᛥ#ggoZ$Kң^pެ]};W,o`|5#DLr|Y. Y7>@ N[ߘom;uMg{fM={ n> +ӻTzrx GsS^գv3>ҫW/SΑ5ԻN/_lg +00  nR񛘼{0Fb%_zb;+zBoLgopZzJR魻fw>23nIg݊/35,0 bl]W&xf)a`4xvV|9xI)={+5doVzW2ozkEoכmfK^/#܎gxz_s=/^˗-ʯS00Oc7_ݏp"aFDŽ~o vu@ﱦק N1%;$OAo<yԣv3zv/ZXﺇŗ~_`a)c̛y7Vð2 2V,|B{ +z?=:%;w^.#^/Nŝ;>ukd| /ϝ#0 bLn)y7f)6,_=5ۆz3_ +6+tz_@z_[&f=zw7~3ޟ?r;J`&Xag˱QnFػY&ba6/\<||3:&"_OMC}H;3Ƿ<tN۵=z=&|6c8{hn.xf7&_mge ab1&dn^YͰ`z 6ӹy=E7NNЋx.9[:ÃޚL<-qެp7#"~8KX9_}_ 0 + " @,&r X<0C,̯;j_|]ԗݽ+=ޯTޫ%[EBA}~83O?Я`F!ncenȻDLl|Q/^^lzzO޶Q[Fo?~[-b7{73ҋg ܶX|7=1K0a"0g\C[4Vo K0 b=ثw L.ޞN{ӛz9!LeӻL} Ooۭn Y%Tzcz5/?m7L" D ż;(s+RopCE 2; Ǎvf|0 Ez6'xB~T2)azୗgoRk|u_X!XaXݭ*{+ËЛe)ae_7^>yKMo/_Ag7UH7^ݘVxzM`7vs:' n97+S00C;ѭ.{wG_閸`L̯{It6tkrA7z&a?jg:+HȯkEXx{K={;j8x}@Z8J]^7OoIuޔ a}_,N0ðc\pO-[BfYaX2 KoW|CP;zNp/W sU{ls~ yzÛ +FW|"]AXI +"bL$ox~_wY˗s^2z/p g]?x3 rPһ.OoUzx3fOޏu+,03,NݶJokxy9v)+cΟϴ8L@):iK@q!D)"B}"@F*-RZ jXNUrZ }nvc?ay}gu _\\ȹ;z܁gG;;ӛ`ދ0!K^C/~O|!G!g „Ŝ}^cgh X`>vjG!p: \x?#ouΐVHlz;ڜT͔^`:/zFAaeeb|@P6Űc 1M}bp;S|ޙxc`޽q8W1ӻ3МHx^~uzz Sx:c|-|=caD̎ż~ h#`(0|kzGV<䁂yk7LHj;̑M Esgd:;o׋R5` TLs=Í _@&$S)zJ:h̨Æ=0(p8Їn~t#W%7=;9륗OSU|)_ $ #bR̎yGWc4 0|3|k +S/chQ!ԣ.,`op؏4Ҳ9!ôNoPx[_x/^kgf|%__/VL5 LI0~-v\Z1mIJ<8>c[;9)ƛu;:~ 0 FhKǒr1X5n݂srwIJǍ~pDzܝ8WMkᜦ};{u7u=z,j0 0+j!=mb̂0_'| /Zw{g ]:bX1?{slV=`HފIoa7p8;~z%߳/0fJ7Q}vLA0|w /_w;urƎ*g/, ιpVk}{eszN +Hz%__KY ̈l[b/#a f&z* ̟3kIR^u8ߎ3VP5: ީEXHo7>&_W H KJkK<+& ۻ >|ס*;oS&g}8w3:v^ "һLw[㦷4Sk㍡ח/ւ0#fƚ{Îa F}";ml\ȼ3MgaC +Y^۷ +H|"tzqzY2yzj6_k#`ɰP%睰caY0S~/tzr^Qtqe#sgϘ^|ѽszqq;1GwhKNoFOo7z/i/U`E%Hccg$_/ng]ϙzWzlsgg1x83WϬn`\o7Vz˒S)IKyz3*vC5r-(3b }($/ /t<'gIJǍ.p8C?W~}2=Io%=u西~5`Lrla0;F[f XS|}y֬\lɣ wDp~ջ`g7:+w0Ozߎ KCof|x}~/E(aؤc>S4&L|!o@|лv55˗.g>p7>ٰY]ݥMfz[''r=RϽoޓhmB፡__L@s2 b~_/ݻG}jCkVUwcùyC+{ 6Io+鍰2gäWzRx^ClI0fRm9x—I0&z:hSXùQ_\\^=AziޒRuMo %z} +&`ؘٰ̄Y&W zXOgoB:'{WZQrȒ"Z\vH}z;y7q=. c›xGx/kk%Z ,bjLǂ0/Og|ޭWΓƏ]:VyvLfz魗=ؤқAWxO7$z2`̄ &C^_ʯ8Y}³I:O6${"n~#5+<ÛoTWu뎯`S {`cܰYK×u{ً H޵k<{ΐ^\BLo?J,,lz?{7AE M['?7Fk+K†8Gd*'/J!ܿ}{gq8WP?hG +_Kb78ۢSq^Wu :5^[_, –bv̀_/"%oWH/>{7 +3W;+9u/J/%>Wqz/Oez{epxz obgxuxw9[|K+Npք xx6b+zгp^Ch\f5gV _"<[HoAl^K{z_xgα»YOElux|~`MDiH@̀_>AzGzp~N5؏ +L/Hy6W ~,f#ǜݾ?|3;2Cwx}{nl׏l!uM)~ +}M?+p^ +*{Ho4KX=.~]/[i7p7_|4޵>=n:!fӮWW {;s܊`K|ϝہ^a ny8[ O7\b! ($- Yԑ޿wzKdzs<4Iov9[E`U3>^0z +a/a&cW9cz3_OY^gcD EҸdDe1dZM͘cnifh&XQDW_V /&&i +ָD4Kv8s/.OsWOsI^^_}W}خY^~0P/{MRCUzE%)t*W3xCIx:ݼex-T/rKa4BD €ěLe%љ&@禎P{\+./rf1 RcW/.-J꽭c@Ͳzw[՛MV;]W ';w:OrƂxxs4qV:*^;{ߕ^/, $ʡ< a¯Eg^T>#P/5MqP/zd=kQNPab^4~F8x.YĻq&B,^?%=qI%K̓};&~e19"w6΂O. {[!8T} RމA4˱zIR+٧WIjÐ^tz=mQo97_S\Sx3uD[ +v!]B=1O!USTyׂ !Y!Xɗ_"Pw~PvޗR/n="}D<1^SSjӃӇs 8|80 +16zgz;A@lxx7hU@[Cۍ 0-!^%5 }}ml8g!XO> ~K!BՋ` VoQ"z#އa;ꕂ :?Po^vz݃ʑwx^tdFzDx0MxJx+xOR^xQzEo*kCe~e|A}Fk/H͆zwX՛dS/@ F(W{z/IeS -ջe&4^|z'O2/ ExU]FŻN/^oMyWdY+ +_] ^^W~0sXWWjpe7_W/mLskh^ޡTIUzv}< f\>-BU A\ ꅳ;eԫ;#|dD|HxӹxŻ"1!sTWy^B׆ƮJ_0+%C-ԻWt7Ignz-Z?Ի[h^Hy@W׮2EݥwlP% zsWGze 5`5xxW >/&b%Q,=$$}f ^ .Z `mW?F/ [*׶wVꍰz3So'R U8YwBlA=Z"^4_'Tk4ҳ&7#(^S,5-w/ +@Yx-%[( L+ ޯ p~qz_wy5M77U*; V9T}e^mr=Ի"#m7=PSx/AV?Gī,GKi3 ^ +B 5еkwJzY맭OB  ꕺm՛dSvbC$Jl=hbꕃ3; rs 0NѻVr5 A2SzcꝄ'hE;ȑwuU@j;Z _ vvb {I?UH{@9tE=bw"fԛ _}lg{Շvs%z:sщ|PZwWsHӖ=t1iIfg9{x,+V^]AVuGZ\yIl4vd] W 2z>(RoP@xwKAz_*zYfc^ ^~z{loAEOz_!VP9z1^o&CCxǰ x&M HCXM6y˿xUB6}nfyJ%*ud8'JYS`[AԻ"*Q~uJg;7щwԋCK)\~ϡq`~7L\\l5W|❂0-OX@gSge;sJJTT546w!o.n8+k7Dm8zJ^5WL]n\ $R8{ +Uv ÏR#8czpv xYn>s3=ZHh+, #GHOIJč#vPlSwᵤq2u]9b/XdiҲH6lŋ.$޷|ʚGك'/.R%+>Ԇ (]H{ZH,@Fz+W^R:GmSxoC84Ђ&wM&WHYi㈋;k&:{SơMnP|<ǓϹѱ/JHLNMZ/t<+jiT'Ix,5ԫ"@nW?鯭[a2# LzεvZ{_^Lo8!xrqA@]2#-5<9IhqXqxxGgΖngL-iˑxqmٸI-܅ogr;"5wMW@!x#i`v9^?@_,4z*G[.ݲDw F cmM7#*]+ ΢*B ɡ WiX9kzөzQx' 8LxOo⍜Sy:LZt: ѭfQyMxzq Zaf{n#ꦤƆCՕ@"y} B  !E FnvW/?w^ܺ ozOEj PLOMnn298zy@ q z۩_Q!53_εrԌ/g*S=~Wc#+ _wG[ *?H1țo)e/hVx^B?PCcSk;V/@gןg¡s|q3o0982Sp㈶5N^Kj~ +J3f~Θ .Y2N7IRsA!J>؃g#U^^E@]+ywmK]ޛĹYJ87WW,/H P/3OǤ6WdLc{MSMAܣI\jgijb\p4*. (wR5DqKX]֥}w;|V߫s{y~o_ON7(6D^n~q&z9|JZ{6xre8 +q,Ucn6grߋ*[sk=v~G%[{ZĤDz5OK֜<5{:U fC/_g +Pkg7^S݌7ﮬ(oPR\TB S2 mx3HxonѻZ[q7-%|ի 79כc\$#&q47fcp zݧoɃ`cƽmgK +5s%xi"=0Ezm|=G5 x9zׂK+޼9YéAoax)@Л9@`U '6(z xoym[yN"o,\{=j~6txrGirp\o14oڍWGko 5xo Z3 C($ 15[s6%ymoFz -T{wנkv"^Z}~ + śU"YH[ E M^X"P +ӍK˶عgGz _o+׆WΞ.{v7oFo^Y7_O{s#G4k#ËsFsnyϚ5g5O4֜EּYM]y@Pw~w4̮+^nݶ?liʛhobH'@ZFM:XPZV#ʈ3"WbvŚmxһ^qQA7c oNFoqhfx}k@k[$c\G7+OrKG7IgO"xv+ϳ`o+ۛ؛);w^ʀ !V5* FܾpX_W7xy;7GbdĒ5֜`Ysǚg5/]UPT\aV[xSṩ|-~mwn߶v +=Q}LW];Co^AHoHo~"zEo{ڣrأFwuum[6_0_yp'-xӚws`ܭDCWy}o[Z*vo8'{8‹Gիrћ7O"w[TU˰؟{> zk`A_G/0̃ ȡ PcWP.21L0\HY sprcG789GB|esxs䕷5 YKײ׫2%VI\ycY Oig*x\9k ~_&n\ ]RyyE۳ lUݰδKo/ы˔[p/+dDjzWuUQs }٣!މXzg 4p=\t ^p8{3w =]zerx~鍠>MӆSK} rTyy !(:oӆ[|ʞ4eaGY?LLU_+ [SxMWHJ#/Gn>u}4$=c( ӦASntY3.]*7lx=΢޻x`r2'kMU5T2T~I)#sOBE99rJ^T*axԞ ̭k6d{=a]dQys^nkmT +O7 !jFo"Fo&D/,oށ1+ksA!Tp4EF>j)v ,ը,o~+y]gq(:{6ufɝ0go /iJj)UQ%ѱ轠LG[?^ONRW%m谑ȡ$xPjxq{YkzӹV ?O_OUwS4cu]41NŽ((" n/ED uKRVSƺ(XG3jLtڦFoy\jg7o|9ҚmnYW]VVe% +ggtKf7x^oq%q@].;| giQRڔ_V$ + cd[3 P_^:O(WOgϓr0z=W1z;OI hN·; x{J呢..:騡~?:hS-!Z3[|iYɂٳ2ҧN0![ӭ;zTzFfvȃ22#\EEݘ]Pإu*w=Yg/":+ۥ(x{u)=Yrb'&aə'%^g%?x\PCIk.^*Uf8vR_fc> ^Tig] û +-xfgfOMM8a|tdXtC |EP;z@OLJI6}fVN^,[zU=~ҦWA9E[1;A3W+ R/')FtI@LB4B#^znBY(G/I)90Q.;)JS1.:/az~cY l]] ״O$x73޹srs23 1a Egu9+)sm}=j"/%zqi|_"X3!cWfzPYxoAx?9z6/[uACh q14P+ .bx7xy8rNJ1z_>7a!mA5 o7-9)1~|LT1d t Nמn{]Tq{Te;d*Ɨ\_=e'. +g/ Rg.tgouS+:#*΃ QJaѱq i3ff&xmJBǁތg%I):Vy|=5׾w>;=s|HbkhAwÛ9Sxt9b!g[ 0q2jVy\PqѠ؟OR ]ʮB[0?;re^gʽZxy s7tK8Y2om9tJ*:Xq>ZkR$=Ȃi밠#?ޅ +ii)I 0cv .EoxTIɩSgdf)@-?{+bzyI[,|H.FjᾦGؑC{WC}-n^ ϳ) o@{1>ndFZU]Gd 赮$u3)E3ZQ0ͳ?g=GOhU5y9YXw(! Iwv.z9ѦХa&+]|UEMlul7 c+L~D ?fnA6*Z8aWV߫[cuZ+8x ISmxiVjxFr Gdm2әEzςiZO> ]ܻ+d-AL`xG,!X0T[,n~qPb z#OH_e;itJ ke +7] +^]Y@njQ-JVnxWHY"'"-Gx7m^Maݛ]*kzJ2/Rt= Dp>&@dK3` XٲwJd7o_xCЂȂ?,E=TqOLJN#y׮ٻ9 +ו8~Y~gꦄUWW}{vrk2uB/K/d[V;OFj_>vՑh@Lfvn8yт5,ޑÆ$Ͳ`? zrU:c8/⼲ggau&cq,0x Jtc1|0x܈m۲[Wʥy9{]P.`%zx+cxip!poVEn L(ȟU=hr0 ʁZpW:/$x'FGzÂ4ݴ۩k9+*f||ԩ8  R |_4rY u n_w7y2i`o4Tmۼqը\ *+kN^M>Ro`ތCq^!zՑ+iGyϪ{@A`v֌m<'xݏ^dtEDOLJI9sqɢ%ynEWn+*ZD0{D7(нJ{W \SC}mu֭YbTo^`}=|l)nu7o$uB٥1KG53JMm02@4[ݷ:dWX$*wQ-dVlpn q V?5U5-]P4 O[01PJ +^(qRg@qVL:&;k|%]`kDuʆp.3w]zJX,T.5ʽFxI_a-ZPnCt_%&Ic($e "j*D@@D +(,Fbk.TESBczϹ~yޙw8{IO}'5Ə&?o}fkW/Z2y_#zQ uk0j߂$(.-x5X"-]Ҷp9fGnpz<%(xG6қ_ݱ7U8v+aClKߏ<4R\.+W_PmZ4>IkyHp93EO\#v7$;ԢWI<{(v7<}_KEÇr#8<]; )]9NI%wO+f|̘5gނmKKV9ee1K/_N/啾w% ƿ3S"v1XvxkZϛ=sTJ ƚ*z[S^O|B^{Խ&O|;yI@@a?pyJNb%ErRYmakVrZurokfp 88Kxr6K8/Tg竀 0.__mPwA+O'o3sg?=]$.*#w*3oFF#,IpX|j sU;TgWӁL`Scqεrc.!_%9%xMrCC!_ۼZl̼:}J&W×SKC}g j螵 +j{k#>^ټQ 7ӟC*"=`;"zi88 }a.X]ܻ=+OL`Xr#8y.F N,\yU;k.G/ fɦ-[=zyAQ_ǯo|_>K}RtL2%T殧kcvmndR2yUwXF/Y6 96 'w~ ̼X2M7м-b޼ׄUs/h_vK. +? Hu%<9ݏm'JI"1-oy%xs$H)k]$[=do`(0*L$F$wįmݢV6\c;l^6^F^ѫ95r&._\\\~b\ӟ qOsJCMDbff^/y<Zd->oނª" +̽IB<#&2>O%:ȅ1i%VrJqֻdqHFҿ4:#z/^jT{*>Q__П PccT g[ZY&m&`~AP`]-4/՘_ݒg]V,_wzg2)a23r{ĺ_]yˣz<(Q+rF,_/YG+l.AtQVڃm[XuP*𙹳eyi΃W~ps B˼,/hx!$&yH{@Ce#, +-{o$9[ m([jy65M ݋NRj`_gd |Eƴv/~%^h(?$:7p*eA =8erG J[s^Ɓ6clV砳vb Lw&N1nsmuۼaBr{)Us//}5moU(4m0 HJ*J4R?ޙ53{>g{ϹUr5xV@.9f?C=rc˹Ŀ gO2Z}Lr}:0_m -VoƳ޽Nһx^h>{Hx*xyfi.O~.l,vn@M>\'fNa8+ T飈LXC~,50Zbp9@B'G|<|lM>/m +^?!nk zhB×7v6R59x)3Qpːk^WjH/& }|YBKlAԝ] +濊!Gқg~zj~h6?n ۏn7_634No*ք>тhh/cOh`͙ 4F p ݴn85>_6y'qOAK/7` + 2[ ~%m| Կ;F(>* +-WL?_h>/t{DiP-=rnqrCbp.s˟DJ$S,"LW)w/rz+zǹ h$sDlvT+,%̖Vv5ݽ#=Co~/T@}(z\6ϟgD>pˇ0մ0=!o4)_η˦RӐa<\Z=Olg +UL`,Nj`w0#>ꍯ`ܾoRb =h[koWF^٫w/Vt:㢐ggiN5Nb4@iܵ%]#wJnknz)~5B/"=G"S䗩"`,e+mWr-གzZ } o`eW&_VT8yas#T*Ⳉ})p77sr/a'e\_P҅0t40=룠`cj+ٛ[勦;MNUcDpInP=ܚ<G4fH)1(`I0q%BK|eQBo +KA>zC|ձjjysw~nV޻Ǧևlvjgoٵiμ_5DVEn[8rzskFsF><"o>T5Vɂs国,(a~Zgϐ'٭V00~-l蚦wG5w4umƗ^ȯsMTmSpJr V>Z[S$p53sF?YZOP5`,uD#D>ay< pT-yViޏ8LUqU&+ԻfmSpKnam93!"`0qeLlw>֏6_ hÏ *m[>6Xkx ùgz'&|;d*@Vr9 k_&*k_D/ +TJX+e`+=GA>#Pg@~mmWvۯp6de]aX&U^rx6ޞ@@Dn`@%r%rkq 2NqU@u< t +Vfһ%^Vo_ʶj6խrnhɵZ\Jo4O"XLT+*;pw/F +XA?iTGH 6~D>;/S6&e"oV[ +1l| pgo!'Ob`JP*ceVVw-/g]Ispu&϶>6~[ +}Uӛ-o#T7X䖙ܵ:s\3)_%ϡ%2%D2WA[@ LŠ4'7h.ot ^ KoE5.m[Ψ)8%䮶&oC5 +oY7LD!JY)A*hq˅ ͥ%M-GŁ +ʣf=+G+VMBkm>nVrqVW"_t(P˯ S*Tdݵ^L!({$-~sVN@+٦ӯA} +ogo-,|mmU.KL_r{78k镯/}-JH@V5W'$/y'Yp? >)ק>(أ+rue[_mn[p.]Jr72q0O.BTSTU^xkyhyg\b O'kzG \ztmj.f2P.p "zgo- N_|Rb + +!.vよwEla!3w9&K}4Xz1xmֳ&} Un!!7ߞ'טfiɤ鵗o/xj~(JU +XZ_'8A|h Łb<[30>ji@K[m |;v +獋3CJn gaʸ P7%af + +6MlwRsB!%w@yY}Q,^ݞ-=ۉ/W"7لF[#fA|s( @1Fv9Bt=ccN@~IyFۧw$so- +7SpSr3Kn ܷ -Sx:J"Ă5wWf4'}V onoOo:vub,p޹nhɭSz-LhZ|5L)3Tz"n $OiqO#~VGcW%[>z.,MGq; /`_i@Řq8Ӏ)"u9|d׏yQ:rk}lb]p;:(Wæ`03BWLSLi@ +j\U)V >lt󱀣6=mFM^"Fpf\ݹM 1&jzݷp45`NVhw}/ ΨG}n>WQjyd \-\j܇H #c܄7q.䰓 3?\ŭvsq.HA !dt햺֌f4ڻ_Ա7!eڧ _s3b UXXi//~<ï[֋.ߥ%G4%\Lchu.>uRҼVSޒ/ Ӈ_򯶮O?z]]<̜`Rlϡ}uּXSޒ3# >{\J/p8::UscI\]o!/XjZkO +ΫӚ% ?\\z_$%. xc/Ņpq|s1K-D]lƨ]q=4L~wzkR_g{C^kE 7O&6U*77^t ;^*Vlul~?suĻ\ᗼ:?Z{& S59?0E3Zf7J'/!=R/G\l>wUrdt7'W^|Lg4>PkX|U֐y [ᦽGs (?۟yN˼|>ŝ\Qsr]f2BSUT@~R'(_/1_p&{BaNbYoTI v>Q0d1H3Pi(X/7_q7h2fu./ FJ[/\Q`|93,}|ݧл 3;|R6 P"@Qޜ.4^$J"& S l {H IXL}!?ߟ:`cM>c ~S\BNgZU{6>S_/ +7DkdM,7~ т(4AE.7xb~i1 ݭ$jt<3̿xAe{h +#QJA| П8 +|6.:3+LD& XfЉ;VޕG0>_/ -S[#6iTZHfԉ;VKB0>_VwKts[%1iU:NfԉpԿlv,𙬺,:&7W\<_gҩ 6$_;eo| |\&cuC+zD&Qfb)_p>]D;xtu0Mz%ֹ]R& +{%ٵV0'L] F=HMCE,MgNLCOewB~id]%/ Meo_J%3oWFb;X4nJs<$RT!=T~LDx2Wш<2"IJy_Jр`(GCv̀kّݕ)4р^GoQˎ/݆3WXdA$;9*pcw"af1јxNE u&7ة+4WXLXw|$ @IvDx}5+2!(;IOo6;:6WHydCHDDI;HnV&O=糅GûDsc<Ri=/5A߰Qg|'T:ko^sYS>q;G}wA6TN@8G8[wTk] Hqtj79?̥҄6!;U9сECt z o?ʹ0ڕҝI `5vtctJmb)[]ZF{\hFW5׉1"fF5׋L*c\g}Qs((((((((( IX@ endstream endobj 1181 0 obj <> endobj 1180 0 obj [/ICCBased 1114 0 R] endobj 5 0 obj <> endobj 115 0 obj <> endobj 247 0 obj <> endobj 366 0 obj <> endobj 513 0 obj <> endobj 657 0 obj <> endobj 807 0 obj <> endobj 944 0 obj <> endobj 994 0 obj [/View/Design] endobj 995 0 obj <>>> endobj 860 0 obj [/View/Design] endobj 861 0 obj <>>> endobj 711 0 obj [/View/Design] endobj 712 0 obj <>>> endobj 565 0 obj [/View/Design] endobj 566 0 obj <>>> endobj 421 0 obj [/View/Design] endobj 422 0 obj <>>> endobj 286 0 obj [/View/Design] endobj 287 0 obj <>>> endobj 168 0 obj [/View/Design] endobj 169 0 obj <>>> endobj 54 0 obj [/View/Design] endobj 55 0 obj <>>> endobj 1076 0 obj [1075 0 R] endobj 1193 0 obj <> endobj xref 0 1194 0000000004 65535 f +0000000016 00000 n +0000000277 00000 n +0000045727 00000 n +0000000006 00000 f +0001018081 00000 n +0000000011 00000 f +0000045829 00000 n +0000046329 00000 n +0000046789 00000 n +0000047250 00000 n +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000015 00000 f +0000000016 00000 f +0000000017 00000 f +0000000018 00000 f +0000000019 00000 f +0000000020 00000 f +0000000021 00000 f +0000000022 00000 f +0000000023 00000 f +0000000024 00000 f +0000000025 00000 f +0000000026 00000 f +0000000027 00000 f +0000000028 00000 f +0000000029 00000 f +0000000030 00000 f +0000000031 00000 f +0000000032 00000 f +0000000033 00000 f +0000000034 00000 f +0000000035 00000 f +0000000036 00000 f +0000000037 00000 f +0000000038 00000 f +0000000039 00000 f +0000000040 00000 f +0000000041 00000 f +0000000042 00000 f +0000000043 00000 f +0000000044 00000 f +0000000045 00000 f +0000000046 00000 f +0000000047 00000 f +0000000048 00000 f +0000000049 00000 f +0000000050 00000 f +0000000051 00000 f +0000000052 00000 f +0000000053 00000 f +0000000056 00000 f +0001019495 00000 n +0001019526 00000 n +0000000057 00000 f +0000000058 00000 f +0000000059 00000 f +0000000060 00000 f +0000000061 00000 f +0000000062 00000 f +0000000063 00000 f +0000000064 00000 f +0000000065 00000 f +0000000066 00000 f +0000000067 00000 f +0000000068 00000 f +0000000069 00000 f +0000000070 00000 f +0000000071 00000 f +0000000072 00000 f +0000000073 00000 f +0000000074 00000 f +0000000075 00000 f +0000000076 00000 f +0000000077 00000 f +0000000078 00000 f +0000000079 00000 f +0000000080 00000 f +0000000081 00000 f +0000000082 00000 f +0000000083 00000 f +0000000084 00000 f +0000000085 00000 f +0000000086 00000 f +0000000087 00000 f +0000000088 00000 f +0000000089 00000 f +0000000090 00000 f +0000000091 00000 f +0000000092 00000 f +0000000093 00000 f +0000000094 00000 f +0000000095 00000 f +0000000096 00000 f +0000000097 00000 f +0000000098 00000 f +0000000099 00000 f +0000000100 00000 f +0000000101 00000 f +0000000102 00000 f +0000000103 00000 f +0000000104 00000 f +0000000105 00000 f +0000000106 00000 f +0000000107 00000 f +0000000108 00000 f +0000000109 00000 f +0000000110 00000 f +0000000111 00000 f +0000000112 00000 f +0000000113 00000 f +0000000114 00000 f +0000000116 00000 f +0001018151 00000 n +0000000118 00000 f +0000047703 00000 n +0000000119 00000 f +0000000120 00000 f +0000000121 00000 f +0000000122 00000 f +0000000123 00000 f +0000000124 00000 f +0000000125 00000 f +0000000126 00000 f +0000000127 00000 f +0000000128 00000 f +0000000129 00000 f +0000000130 00000 f +0000000131 00000 f +0000000132 00000 f +0000000133 00000 f +0000000134 00000 f +0000000135 00000 f +0000000136 00000 f +0000000137 00000 f +0000000138 00000 f +0000000139 00000 f +0000000140 00000 f +0000000141 00000 f +0000000142 00000 f +0000000143 00000 f +0000000144 00000 f +0000000145 00000 f +0000000146 00000 f +0000000147 00000 f +0000000148 00000 f +0000000149 00000 f +0000000150 00000 f +0000000151 00000 f +0000000152 00000 f +0000000153 00000 f +0000000154 00000 f +0000000155 00000 f +0000000156 00000 f +0000000157 00000 f +0000000158 00000 f +0000000159 00000 f +0000000160 00000 f +0000000161 00000 f +0000000162 00000 f +0000000163 00000 f +0000000164 00000 f +0000000165 00000 f +0000000166 00000 f +0000000167 00000 f +0000000170 00000 f +0001019377 00000 n +0001019409 00000 n +0000000171 00000 f +0000000172 00000 f +0000000173 00000 f +0000000174 00000 f +0000000175 00000 f +0000000176 00000 f +0000000177 00000 f +0000000178 00000 f +0000000179 00000 f +0000000180 00000 f +0000000181 00000 f +0000000182 00000 f +0000000183 00000 f +0000000184 00000 f +0000000185 00000 f +0000000186 00000 f +0000000187 00000 f +0000000188 00000 f +0000000189 00000 f +0000000190 00000 f +0000000191 00000 f +0000000192 00000 f +0000000193 00000 f +0000000194 00000 f +0000000195 00000 f +0000000196 00000 f +0000000197 00000 f +0000000198 00000 f +0000000199 00000 f +0000000200 00000 f +0000000201 00000 f +0000000202 00000 f +0000000203 00000 f +0000000204 00000 f +0000000205 00000 f +0000000206 00000 f +0000000207 00000 f +0000000208 00000 f +0000000209 00000 f +0000000210 00000 f +0000000211 00000 f +0000000212 00000 f +0000000213 00000 f +0000000214 00000 f +0000000215 00000 f +0000000216 00000 f +0000000217 00000 f +0000000218 00000 f +0000000219 00000 f +0000000220 00000 f +0000000221 00000 f +0000000222 00000 f +0000000223 00000 f +0000000224 00000 f +0000000225 00000 f +0000000226 00000 f +0000000227 00000 f +0000000228 00000 f +0000000229 00000 f +0000000230 00000 f +0000000231 00000 f +0000000232 00000 f +0000000233 00000 f +0000000234 00000 f +0000000235 00000 f +0000000236 00000 f +0000000237 00000 f +0000000238 00000 f +0000000239 00000 f +0000000240 00000 f +0000000241 00000 f +0000000242 00000 f +0000000243 00000 f +0000000244 00000 f +0000000245 00000 f +0000000246 00000 f +0000000248 00000 f +0001018225 00000 n +0000000249 00000 f +0000000250 00000 f +0000000251 00000 f +0000000252 00000 f +0000000253 00000 f +0000000254 00000 f +0000000255 00000 f +0000000256 00000 f +0000000257 00000 f +0000000258 00000 f +0000000259 00000 f +0000000260 00000 f +0000000261 00000 f +0000000262 00000 f +0000000263 00000 f +0000000264 00000 f +0000000265 00000 f +0000000266 00000 f +0000000267 00000 f +0000000268 00000 f +0000000269 00000 f +0000000270 00000 f +0000000271 00000 f +0000000272 00000 f +0000000273 00000 f +0000000274 00000 f +0000000275 00000 f +0000000276 00000 f +0000000277 00000 f +0000000278 00000 f +0000000279 00000 f +0000000280 00000 f +0000000281 00000 f +0000000282 00000 f +0000000283 00000 f +0000000284 00000 f +0000000285 00000 f +0000000288 00000 f +0001019259 00000 n +0001019291 00000 n +0000000289 00000 f +0000000290 00000 f +0000000291 00000 f +0000000292 00000 f +0000000293 00000 f +0000000294 00000 f +0000000295 00000 f +0000000296 00000 f +0000000297 00000 f +0000000298 00000 f +0000000299 00000 f +0000000300 00000 f +0000000301 00000 f +0000000302 00000 f +0000000303 00000 f +0000000304 00000 f +0000000305 00000 f +0000000306 00000 f +0000000307 00000 f +0000000308 00000 f +0000000309 00000 f +0000000310 00000 f +0000000311 00000 f +0000000312 00000 f +0000000313 00000 f +0000000314 00000 f +0000000315 00000 f +0000000316 00000 f +0000000317 00000 f +0000000318 00000 f +0000000319 00000 f +0000000320 00000 f +0000000321 00000 f +0000000322 00000 f +0000000323 00000 f +0000000324 00000 f +0000000325 00000 f +0000000326 00000 f +0000000327 00000 f +0000000328 00000 f +0000000329 00000 f +0000000330 00000 f +0000000331 00000 f +0000000332 00000 f +0000000333 00000 f +0000000334 00000 f +0000000335 00000 f +0000000336 00000 f +0000000337 00000 f +0000000338 00000 f +0000000339 00000 f +0000000340 00000 f +0000000341 00000 f +0000000342 00000 f +0000000343 00000 f +0000000344 00000 f +0000000345 00000 f +0000000346 00000 f +0000000347 00000 f +0000000348 00000 f +0000000349 00000 f +0000000350 00000 f +0000000351 00000 f +0000000352 00000 f +0000000353 00000 f +0000000354 00000 f +0000000355 00000 f +0000000356 00000 f +0000000357 00000 f +0000000358 00000 f +0000000359 00000 f +0000000360 00000 f +0000000361 00000 f +0000000362 00000 f +0000000363 00000 f +0000000364 00000 f +0000000365 00000 f +0000000367 00000 f +0001018299 00000 n +0000000371 00000 f +0000048179 00000 n +0000048616 00000 n +0000049044 00000 n +0000000372 00000 f +0000000373 00000 f +0000000374 00000 f +0000000375 00000 f +0000000376 00000 f +0000000377 00000 f +0000000378 00000 f +0000000379 00000 f +0000000380 00000 f +0000000381 00000 f +0000000382 00000 f +0000000383 00000 f +0000000384 00000 f +0000000385 00000 f +0000000386 00000 f +0000000387 00000 f +0000000388 00000 f +0000000389 00000 f +0000000390 00000 f +0000000391 00000 f +0000000392 00000 f +0000000393 00000 f +0000000394 00000 f +0000000395 00000 f +0000000396 00000 f +0000000397 00000 f +0000000398 00000 f +0000000399 00000 f +0000000400 00000 f +0000000401 00000 f +0000000402 00000 f +0000000403 00000 f +0000000404 00000 f +0000000405 00000 f +0000000406 00000 f +0000000407 00000 f +0000000408 00000 f +0000000409 00000 f +0000000410 00000 f +0000000411 00000 f +0000000412 00000 f +0000000413 00000 f +0000000414 00000 f +0000000415 00000 f +0000000416 00000 f +0000000417 00000 f +0000000418 00000 f +0000000419 00000 f +0000000420 00000 f +0000000423 00000 f +0001019141 00000 n +0001019173 00000 n +0000000424 00000 f +0000000425 00000 f +0000000426 00000 f +0000000427 00000 f +0000000428 00000 f +0000000429 00000 f +0000000430 00000 f +0000000431 00000 f +0000000432 00000 f +0000000433 00000 f +0000000434 00000 f +0000000435 00000 f +0000000436 00000 f +0000000437 00000 f +0000000438 00000 f +0000000439 00000 f +0000000440 00000 f +0000000441 00000 f +0000000442 00000 f +0000000443 00000 f +0000000444 00000 f +0000000445 00000 f +0000000446 00000 f +0000000447 00000 f +0000000448 00000 f +0000000449 00000 f +0000000450 00000 f +0000000451 00000 f +0000000452 00000 f +0000000453 00000 f +0000000454 00000 f +0000000455 00000 f +0000000456 00000 f +0000000457 00000 f +0000000458 00000 f +0000000459 00000 f +0000000460 00000 f +0000000461 00000 f +0000000462 00000 f +0000000463 00000 f +0000000464 00000 f +0000000465 00000 f +0000000466 00000 f +0000000467 00000 f +0000000468 00000 f +0000000469 00000 f +0000000470 00000 f +0000000471 00000 f +0000000472 00000 f +0000000473 00000 f +0000000474 00000 f +0000000475 00000 f +0000000476 00000 f +0000000477 00000 f +0000000478 00000 f +0000000479 00000 f +0000000480 00000 f +0000000481 00000 f +0000000482 00000 f +0000000483 00000 f +0000000484 00000 f +0000000485 00000 f +0000000486 00000 f +0000000487 00000 f +0000000488 00000 f +0000000489 00000 f +0000000490 00000 f +0000000491 00000 f +0000000492 00000 f +0000000493 00000 f +0000000494 00000 f +0000000495 00000 f +0000000496 00000 f +0000000497 00000 f +0000000498 00000 f +0000000499 00000 f +0000000500 00000 f +0000000501 00000 f +0000000502 00000 f +0000000503 00000 f +0000000504 00000 f +0000000505 00000 f +0000000506 00000 f +0000000507 00000 f +0000000508 00000 f +0000000509 00000 f +0000000510 00000 f +0000000511 00000 f +0000000512 00000 f +0000000514 00000 f +0001018373 00000 n +0000000515 00000 f +0000000516 00000 f +0000000517 00000 f +0000000518 00000 f +0000000519 00000 f +0000000520 00000 f +0000000521 00000 f +0000000522 00000 f +0000000523 00000 f +0000000524 00000 f +0000000525 00000 f +0000000526 00000 f +0000000527 00000 f +0000000528 00000 f +0000000529 00000 f +0000000530 00000 f +0000000531 00000 f +0000000532 00000 f +0000000533 00000 f +0000000534 00000 f +0000000535 00000 f +0000000536 00000 f +0000000537 00000 f +0000000538 00000 f +0000000539 00000 f +0000000540 00000 f +0000000541 00000 f +0000000542 00000 f +0000000543 00000 f +0000000544 00000 f +0000000545 00000 f +0000000546 00000 f +0000000547 00000 f +0000000548 00000 f +0000000549 00000 f +0000000550 00000 f +0000000551 00000 f +0000000552 00000 f +0000000553 00000 f +0000000554 00000 f +0000000555 00000 f +0000000556 00000 f +0000000557 00000 f +0000000558 00000 f +0000000559 00000 f +0000000560 00000 f +0000000561 00000 f +0000000562 00000 f +0000000563 00000 f +0000000564 00000 f +0000000567 00000 f +0001019023 00000 n +0001019055 00000 n +0000000568 00000 f +0000000569 00000 f +0000000570 00000 f +0000000571 00000 f +0000000572 00000 f +0000000573 00000 f +0000000574 00000 f +0000000575 00000 f +0000000576 00000 f +0000000577 00000 f +0000000578 00000 f +0000000579 00000 f +0000000580 00000 f +0000000581 00000 f +0000000582 00000 f +0000000583 00000 f +0000000584 00000 f +0000000585 00000 f +0000000586 00000 f +0000000587 00000 f +0000000588 00000 f +0000000589 00000 f +0000000590 00000 f +0000000591 00000 f +0000000592 00000 f +0000000593 00000 f +0000000594 00000 f +0000000595 00000 f +0000000596 00000 f +0000000597 00000 f +0000000598 00000 f +0000000599 00000 f +0000000600 00000 f +0000000601 00000 f +0000000602 00000 f +0000000603 00000 f +0000000604 00000 f +0000000605 00000 f +0000000606 00000 f +0000000607 00000 f +0000000608 00000 f +0000000609 00000 f +0000000610 00000 f +0000000611 00000 f +0000000612 00000 f +0000000613 00000 f +0000000614 00000 f +0000000615 00000 f +0000000616 00000 f +0000000617 00000 f +0000000618 00000 f +0000000619 00000 f +0000000620 00000 f +0000000621 00000 f +0000000622 00000 f +0000000623 00000 f +0000000624 00000 f +0000000625 00000 f +0000000626 00000 f +0000000627 00000 f +0000000628 00000 f +0000000629 00000 f +0000000630 00000 f +0000000631 00000 f +0000000632 00000 f +0000000633 00000 f +0000000634 00000 f +0000000635 00000 f +0000000636 00000 f +0000000637 00000 f +0000000638 00000 f +0000000639 00000 f +0000000640 00000 f +0000000641 00000 f +0000000642 00000 f +0000000643 00000 f +0000000644 00000 f +0000000645 00000 f +0000000646 00000 f +0000000647 00000 f +0000000648 00000 f +0000000649 00000 f +0000000650 00000 f +0000000651 00000 f +0000000652 00000 f +0000000653 00000 f +0000000654 00000 f +0000000655 00000 f +0000000656 00000 f +0000000658 00000 f +0001018447 00000 n +0000000659 00000 f +0000000660 00000 f +0000000661 00000 f +0000000662 00000 f +0000000663 00000 f +0000000664 00000 f +0000000665 00000 f +0000000666 00000 f +0000000667 00000 f +0000000668 00000 f +0000000669 00000 f +0000000670 00000 f +0000000671 00000 f +0000000672 00000 f +0000000673 00000 f +0000000674 00000 f +0000000675 00000 f +0000000676 00000 f +0000000677 00000 f +0000000678 00000 f +0000000679 00000 f +0000000680 00000 f +0000000681 00000 f +0000000682 00000 f +0000000683 00000 f +0000000684 00000 f +0000000685 00000 f +0000000686 00000 f +0000000687 00000 f +0000000688 00000 f +0000000689 00000 f +0000000690 00000 f +0000000691 00000 f +0000000692 00000 f +0000000693 00000 f +0000000694 00000 f +0000000695 00000 f +0000000696 00000 f +0000000697 00000 f +0000000698 00000 f +0000000699 00000 f +0000000700 00000 f +0000000701 00000 f +0000000702 00000 f +0000000703 00000 f +0000000704 00000 f +0000000705 00000 f +0000000706 00000 f +0000000707 00000 f +0000000708 00000 f +0000000709 00000 f +0000000710 00000 f +0000000713 00000 f +0001018905 00000 n +0001018937 00000 n +0000000714 00000 f +0000000715 00000 f +0000000716 00000 f +0000000717 00000 f +0000000718 00000 f +0000000719 00000 f +0000000720 00000 f +0000000721 00000 f +0000000722 00000 f +0000000723 00000 f +0000000724 00000 f +0000000725 00000 f +0000000726 00000 f +0000000727 00000 f +0000000728 00000 f +0000000729 00000 f +0000000730 00000 f +0000000731 00000 f +0000000732 00000 f +0000000733 00000 f +0000000734 00000 f +0000000735 00000 f +0000000736 00000 f +0000000737 00000 f +0000000738 00000 f +0000000739 00000 f +0000000740 00000 f +0000000741 00000 f +0000000742 00000 f +0000000743 00000 f +0000000744 00000 f +0000000745 00000 f +0000000746 00000 f +0000000747 00000 f +0000000748 00000 f +0000000749 00000 f +0000000750 00000 f +0000000751 00000 f +0000000752 00000 f +0000000753 00000 f +0000000754 00000 f +0000000755 00000 f +0000000756 00000 f +0000000757 00000 f +0000000758 00000 f +0000000759 00000 f +0000000760 00000 f +0000000761 00000 f +0000000762 00000 f +0000000763 00000 f +0000000764 00000 f +0000000765 00000 f +0000000766 00000 f +0000000767 00000 f +0000000768 00000 f +0000000769 00000 f +0000000770 00000 f +0000000771 00000 f +0000000772 00000 f +0000000773 00000 f +0000000774 00000 f +0000000775 00000 f +0000000776 00000 f +0000000777 00000 f +0000000778 00000 f +0000000779 00000 f +0000000780 00000 f +0000000781 00000 f +0000000782 00000 f +0000000783 00000 f +0000000784 00000 f +0000000785 00000 f +0000000786 00000 f +0000000787 00000 f +0000000788 00000 f +0000000789 00000 f +0000000790 00000 f +0000000791 00000 f +0000000792 00000 f +0000000793 00000 f +0000000794 00000 f +0000000795 00000 f +0000000796 00000 f +0000000797 00000 f +0000000798 00000 f +0000000799 00000 f +0000000800 00000 f +0000000801 00000 f +0000000802 00000 f +0000000803 00000 f +0000000804 00000 f +0000000805 00000 f +0000000806 00000 f +0000000808 00000 f +0001018521 00000 n +0000000809 00000 f +0000000810 00000 f +0000000811 00000 f +0000000812 00000 f +0000000813 00000 f +0000000814 00000 f +0000000815 00000 f +0000000816 00000 f +0000000817 00000 f +0000000818 00000 f +0000000819 00000 f +0000000820 00000 f +0000000821 00000 f +0000000822 00000 f +0000000823 00000 f +0000000824 00000 f +0000000825 00000 f +0000000826 00000 f +0000000827 00000 f +0000000828 00000 f +0000000829 00000 f +0000000830 00000 f +0000000831 00000 f +0000000832 00000 f +0000000833 00000 f +0000000834 00000 f +0000000835 00000 f +0000000836 00000 f +0000000837 00000 f +0000000838 00000 f +0000000839 00000 f +0000000840 00000 f +0000000841 00000 f +0000000842 00000 f +0000000843 00000 f +0000000844 00000 f +0000000845 00000 f +0000000846 00000 f +0000000847 00000 f +0000000848 00000 f +0000000849 00000 f +0000000850 00000 f +0000000851 00000 f +0000000852 00000 f +0000000853 00000 f +0000000854 00000 f +0000000855 00000 f +0000000856 00000 f +0000000857 00000 f +0000000858 00000 f +0000000859 00000 f +0000000862 00000 f +0001018787 00000 n +0001018819 00000 n +0000000863 00000 f +0000000864 00000 f +0000000865 00000 f +0000000866 00000 f +0000000867 00000 f +0000000868 00000 f +0000000869 00000 f +0000000870 00000 f +0000000871 00000 f +0000000872 00000 f +0000000873 00000 f +0000000874 00000 f +0000000875 00000 f +0000000876 00000 f +0000000877 00000 f +0000000878 00000 f +0000000879 00000 f +0000000880 00000 f +0000000881 00000 f +0000000882 00000 f +0000000883 00000 f +0000000884 00000 f +0000000885 00000 f +0000000886 00000 f +0000000887 00000 f +0000000888 00000 f +0000000889 00000 f +0000000890 00000 f +0000000891 00000 f +0000000892 00000 f +0000000893 00000 f +0000000894 00000 f +0000000895 00000 f +0000000896 00000 f +0000000897 00000 f +0000000898 00000 f +0000000899 00000 f +0000000900 00000 f +0000000901 00000 f +0000000902 00000 f +0000000903 00000 f +0000000904 00000 f +0000000905 00000 f +0000000906 00000 f +0000000907 00000 f +0000000908 00000 f +0000000909 00000 f +0000000910 00000 f +0000000911 00000 f +0000000912 00000 f +0000000913 00000 f +0000000914 00000 f +0000000915 00000 f +0000000916 00000 f +0000000917 00000 f +0000000918 00000 f +0000000919 00000 f +0000000920 00000 f +0000000921 00000 f +0000000922 00000 f +0000000923 00000 f +0000000924 00000 f +0000000925 00000 f +0000000926 00000 f +0000000927 00000 f +0000000928 00000 f +0000000929 00000 f +0000000930 00000 f +0000000931 00000 f +0000000932 00000 f +0000000933 00000 f +0000000934 00000 f +0000000935 00000 f +0000000936 00000 f +0000000937 00000 f +0000000938 00000 f +0000000939 00000 f +0000000940 00000 f +0000000941 00000 f +0000000942 00000 f +0000000943 00000 f +0000000000 00000 f +0001018595 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0001018669 00000 n +0001018701 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000053412 00000 n +0001019611 00000 n +0000839529 00000 n +0000839834 00000 n +0000053734 00000 n +0000050360 00000 n +0000050245 00000 n +0000053609 00000 n +0000680670 00000 n +0000680305 00000 n +0000839900 00000 n +0000840274 00000 n +0000694482 00000 n +0000694789 00000 n +0000694855 00000 n +0000695224 00000 n +0000680827 00000 n +0000681126 00000 n +0000681192 00000 n +0000681546 00000 n +0000671159 00000 n +0000671458 00000 n +0000671524 00000 n +0000671878 00000 n +0000670319 00000 n +0000670620 00000 n +0000053049 00000 n +0000670686 00000 n +0000669481 00000 n +0000669773 00000 n +0000669839 00000 n +0000668671 00000 n +0000668964 00000 n +0000669030 00000 n +0000049472 00000 n +0000049761 00000 n +0000049827 00000 n +0000668632 00000 n +0000050180 00000 n +0000050399 00000 n +0000053198 00000 n +0000053297 00000 n +0000053489 00000 n +0000053522 00000 n +0000053812 00000 n +0000054213 00000 n +0000055505 00000 n +0000074285 00000 n +0000139875 00000 n +0000143912 00000 n +0000209502 00000 n +0000275092 00000 n +0000340682 00000 n +0000406272 00000 n +0000471862 00000 n +0000537452 00000 n +0000603042 00000 n +0000669442 00000 n +0000669377 00000 n +0000670280 00000 n +0000670215 00000 n +0000671120 00000 n +0000671055 00000 n +0000680788 00000 n +0000680240 00000 n +0000672178 00000 n +0000673904 00000 n +0000676827 00000 n +0000672243 00000 n +0000673954 00000 n +0000676692 00000 n +0000676945 00000 n +0000677014 00000 n +0000677046 00000 n +0000677311 00000 n +0000680126 00000 n +0000677388 00000 n +0000680454 00000 n +0000680553 00000 n +0000694443 00000 n +0000694378 00000 n +0000681852 00000 n +0000684598 00000 n +0000689303 00000 n +0000681917 00000 n +0000684648 00000 n +0000689156 00000 n +0000689421 00000 n +0000689490 00000 n +0000689522 00000 n +0000689793 00000 n +0000689870 00000 n +0000839490 00000 n +0000839425 00000 n +0000695550 00000 n +0000738272 00000 n +0000788649 00000 n +0000695615 00000 n +0000738322 00000 n +0000788511 00000 n +0000788767 00000 n +0000788836 00000 n +0000788868 00000 n +0000789159 00000 n +0000789236 00000 n +0001018042 00000 n +0001017977 00000 n +0000840598 00000 n +0000895203 00000 n +0000956396 00000 n +0000840663 00000 n +0000895253 00000 n +0000956249 00000 n +0000956514 00000 n +0000956583 00000 n +0000956615 00000 n +0000956904 00000 n +0000956981 00000 n +0001019640 00000 n +trailer <<80D9520452D646809F99B7B281FBDA99>]>> startxref 1019828 %%EOF \ No newline at end of file diff --git a/Artwork/Icon.sketch b/Artwork/Icon.sketch deleted file mode 100644 index e95875a..0000000 Binary files a/Artwork/Icon.sketch and /dev/null differ diff --git a/Cores/DeltaCore b/Cores/DeltaCore index 99da200..d721326 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit 99da200c440a8dad93d9b92314f91b933b659bf8 +Subproject commit d7213260852683ea5a3f6c2274733bbd65d2ec92 diff --git a/Cores/GBADeltaCore b/Cores/GBADeltaCore index ae5ab38..7babfcf 160000 --- a/Cores/GBADeltaCore +++ b/Cores/GBADeltaCore @@ -1 +1 @@ -Subproject commit ae5ab38dbe6a5fc995f4f3a8cb7075dad3f8f6d5 +Subproject commit 7babfcf93a32916ad06989c9a63681acf7f07d50 diff --git a/Cores/GBCDeltaCore b/Cores/GBCDeltaCore new file mode 160000 index 0000000..9d71425 --- /dev/null +++ b/Cores/GBCDeltaCore @@ -0,0 +1 @@ +Subproject commit 9d714254ace7bd5d63805d434f4ccd1f2a947951 diff --git a/Cores/SNESDeltaCore b/Cores/SNESDeltaCore index e49d318..a354c37 160000 --- a/Cores/SNESDeltaCore +++ b/Cores/SNESDeltaCore @@ -1 +1 @@ -Subproject commit e49d318e2e18034b2bccea34047800956298de4a +Subproject commit a354c3700fc4576bbefb6a8324bcd7a121d9b934 diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 4834848..d88a93e 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -27,12 +27,12 @@ BF0418151D01E93400E85BCF /* GBADeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF0418131D01E93400E85BCF /* GBADeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF04E6FF1DB8625C000F35D3 /* ControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF04E6FE1DB8625C000F35D3 /* ControllerSkinsViewController.swift */; }; BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF107EC31BF413F000E0C32C /* GamesViewController.swift */; }; - BF11734D1DA32A5200047DF8 /* GameType+Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF11734C1DA32A5200047DF8 /* GameType+Localization.swift */; }; BF1173501DA32CF600047DF8 /* ControllersSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */; }; BF13A7561D5D29B0000BB055 /* PreviewGameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF13A7551D5D29B0000BB055 /* PreviewGameViewController.swift */; }; BF13A7581D5D2FD9000BB055 /* EmulatorCore+Cheats.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */; }; + BF15AF841F54B43B009B6AAB /* ActionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF15AF831F54B43B009B6AAB /* ActionInput.swift */; }; BF18B61F1E2985F900F70067 /* UIAlertController+Importing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */; }; - BF1DAD5D1D9F576000E752A7 /* GameTypeControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1DAD5C1D9F576000E752A7 /* GameTypeControllerSkinsViewController.swift */; }; + BF1DAD5D1D9F576000E752A7 /* SystemControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */; }; BF27CC8E1BC9FEA200A20D89 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF6BB2451BB73FE800CCF94A /* Assets.xcassets */; }; BF2B98E61C97E32F00F6D57D /* SaveStatesCollectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF2B98E51C97E32F00F6D57D /* SaveStatesCollectionHeaderView.swift */; }; BF31878B1D489AAA00BD020D /* CheatValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF31878A1D489AAA00BD020D /* CheatValidator.swift */; }; @@ -40,19 +40,20 @@ BF34FA111CF1899D006624C7 /* CheatTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF34FA101CF1899D006624C7 /* CheatTextView.swift */; }; BF353FF21C5D7FB000C1184C /* PauseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF11C5D7FB000C1184C /* PauseViewController.swift */; }; BF353FF61C5D837600C1184C /* PauseMenu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF353FF41C5D837600C1184C /* PauseMenu.storyboard */; }; - BF353FF91C5D870B00C1184C /* PauseItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF81C5D870B00C1184C /* PauseItem.swift */; }; + BF353FF91C5D870B00C1184C /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FF81C5D870B00C1184C /* MenuItem.swift */; }; BF353FFF1C5DA3C500C1184C /* PausePresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */; }; BF3540001C5DA3C500C1184C /* PausePresentationControllerContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */; }; BF3540021C5DA3D500C1184C /* PauseStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */; }; BF3540081C5DAFAD00C1184C /* PauseTransitionCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540071C5DAFAD00C1184C /* PauseTransitionCoordinator.swift */; }; - BF59425C1E09BB810051894B /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942581E09BB810051894B /* Action.swift */; }; + BF4828841F9027B600028B97 /* Delta.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = BF4828811F9027B600028B97 /* Delta.xcdatamodeld */; }; + BF4828861F9028F500028B97 /* System.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF4828851F9028F500028B97 /* System.swift */; }; + BF4828881F90290F00028B97 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF4828871F90290F00028B97 /* Action.swift */; }; BF5942641E09BBB10051894B /* LoadControllerSkinImageOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942611E09BBB10051894B /* LoadControllerSkinImageOperation.swift */; }; BF5942661E09BBB10051894B /* LoadImageURLOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942631E09BBB10051894B /* LoadImageURLOperation.swift */; }; BF59426A1E09BBD00051894B /* GridCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942681E09BBD00051894B /* GridCollectionViewCell.swift */; }; BF59426B1E09BBD00051894B /* GridCollectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942691E09BBD00051894B /* GridCollectionViewLayout.swift */; }; BF59426F1E09BC5D0051894B /* DatabaseManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF59426D1E09BC5D0051894B /* DatabaseManager.swift */; }; BF5942701E09BC5D0051894B /* GamesDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF59426E1E09BC5D0051894B /* GamesDatabase.swift */; }; - BF5942731E09BC700051894B /* Model.xcdatamodel in Sources */ = {isa = PBXBuildFile; fileRef = BF5942721E09BC700051894B /* Model.xcdatamodel */; }; BF59427C1E09BC830051894B /* Cheat.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942771E09BC830051894B /* Cheat.swift */; }; BF59427D1E09BC830051894B /* ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942781E09BC830051894B /* ControllerSkin.swift */; }; BF59427E1E09BC830051894B /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942791E09BC830051894B /* Game.swift */; }; @@ -69,13 +70,26 @@ BF5942951E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */; }; BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */; }; BF5E7F461B9A652600AE44F8 /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF5E7F451B9A652600AE44F8 /* Settings.storyboard */; }; + BF6424831F5B8F3F00D6AB44 /* ListMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6424821F5B8F3F00D6AB44 /* ListMenuViewController.swift */; }; + BF6424851F5CBDC900D6AB44 /* UIView+ParentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6424841F5CBDC900D6AB44 /* UIView+ParentViewController.swift */; }; BF6866171DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6866161DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift */; }; BF696B801D9B2B02009639E0 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF696B7F1D9B2B02009639E0 /* Theme.swift */; }; + BF6BF3131EB7E47F008E83CD /* ImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3121EB7E47F008E83CD /* ImportOption.swift */; }; + BF6BF3181EB82111008E83CD /* iTunesImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3171EB82111008E83CD /* iTunesImportOption.swift */; }; + BF6BF31A1EB82146008E83CD /* ClipboardImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3191EB82146008E83CD /* ClipboardImportOption.swift */; }; + BF6BF31C1EB821A0008E83CD /* GamesDatabaseImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF31B1EB821A0008E83CD /* GamesDatabaseImportOption.swift */; }; + BF6BF3211EB82362008E83CD /* GamesDatabase.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF6BF31F1EB82362008E83CD /* GamesDatabase.storyboard */; }; + BF6BF3271EB87EB8008E83CD /* PhotoLibraryImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3261EB87EB8008E83CD /* PhotoLibraryImportOption.swift */; }; + BF6EE5E91F7C5F860051AD6C /* _GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6EE5E81F7C5F860051AD6C /* _GameControllerInputMapping.swift */; }; + BF6EE5EB1F7C5F8F0051AD6C /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6EE5EA1F7C5F8F0051AD6C /* GameControllerInputMapping.swift */; }; BF70798C1B6B464B0019077C /* ZipZap.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF70798B1B6B464B0019077C /* ZipZap.framework */; }; BF70798D1B6B464B0019077C /* ZipZap.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF70798B1B6B464B0019077C /* ZipZap.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */; }; - BF7AE8081C2E858400B1B5BC /* PauseMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */; }; + BF7AE8081C2E858400B1B5BC /* GridMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */; }; BF7AE80A1C2E8C7600B1B5BC /* UIColor+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */; }; + BF80E1D21F13117000847008 /* ControllerInputsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */; }; + BF8CA9361F5F651900499FDD /* PopoverMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF8CA9351F5F651900499FDD /* PopoverMenuController.swift */; }; + BF8DDD241F4F6C880088A21B /* InputCalloutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF8DDD231F4F6C880088A21B /* InputCalloutView.swift */; }; BF95E2771E4977BF0030E7AD /* GameMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF95E2761E4977BF0030E7AD /* GameMetadata.swift */; }; BF95E2791E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF95E2781E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift */; }; BF99A5971DC2F9C400468E9E /* ControllerSkinTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF99A5961DC2F9C400468E9E /* ControllerSkinTableViewCell.swift */; }; @@ -85,14 +99,21 @@ BF9F4FD01AAD7B87004C9500 /* DeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF9F4FCE1AAD7B87004C9500 /* DeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BFA0D1271D3AE1F600565894 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF63BDE91D389EEB00FCB040 /* GameViewController.swift */; }; BFAA1FED1B8AA4FA00495943 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFAA1FEC1B8AA4FA00495943 /* Settings.swift */; }; - BFC314771E0C8CFC0056E3A8 /* GameType+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC314761E0C8CFC0056E3A8 /* GameType+Delta.swift */; }; + BFBAB2E31EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */; }; + BFC6F7B81F435BC500221B96 /* Input+Display.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC6F7B71F435BC500221B96 /* Input+Display.swift */; }; BFC9B7391CEFCD34008629BB /* CheatsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC9B7381CEFCD34008629BB /* CheatsViewController.swift */; }; BFCEA67E1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */; }; BFD097211D3A01B8005A44C2 /* SaveStatesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540041C5DA70400C1184C /* SaveStatesViewController.swift */; }; + BFDC7B9F1F7DE0CF0052A7C5 /* Delta.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BFDC7B9E1F7DE0CF0052A7C5 /* Delta.xcmappingmodel */; }; BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */; }; + BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */; }; BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */; }; BFEC732D1AAECC4A00650035 /* Roxas.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFEC732C1AAECC4A00650035 /* Roxas.framework */; }; BFEC732E1AAECC4A00650035 /* Roxas.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFEC732C1AAECC4A00650035 /* Roxas.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */; }; + BFF0742C1E9DC17500ACDF4A /* GBCDeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */; }; + BFF0742D1E9DC17500ACDF4A /* GBCDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */; }; BFF93AA01E0FB036005EC865 /* InputStreamOutputWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF93A9F1E0FB036005EC865 /* InputStreamOutputWriter.swift */; }; BFFA4C091E8A24D600D87934 /* GameMetadataTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA4C081E8A24D600D87934 /* GameMetadataTableViewCell.swift */; }; BFFA71DD1AAC406100EE9DD1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA71DC1AAC406100EE9DD1 /* AppDelegate.swift */; }; @@ -113,6 +134,7 @@ dstSubfolderSpec = 10; files = ( BF9F4FD01AAD7B87004C9500 /* DeltaCore.framework in Embed Frameworks */, + BFF0742D1E9DC17500ACDF4A /* GBCDeltaCore.framework in Embed Frameworks */, BFEC732E1AAECC4A00650035 /* Roxas.framework in Embed Frameworks */, BF70798D1B6B464B0019077C /* ZipZap.framework in Embed Frameworks */, BF0418151D01E93400E85BCF /* GBADeltaCore.framework in Embed Frameworks */, @@ -129,88 +151,109 @@ A19FF50F55441BC2B2248241 /* Pods-Delta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Delta.release.xcconfig"; path = "Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig"; sourceTree = ""; }; BF02D5D91DDEBB3000A5E131 /* openvgdb.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = openvgdb.sqlite; sourceTree = ""; }; BF0418131D01E93400E85BCF /* GBADeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GBADeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BF04E6FE1DB8625C000F35D3 /* ControllerSkinsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControllerSkinsViewController.swift; path = "Controller Skins/ControllerSkinsViewController.swift"; sourceTree = ""; }; + BF04E6FE1DB8625C000F35D3 /* ControllerSkinsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ControllerSkinsViewController.swift; sourceTree = ""; }; BF090CF11B490D8300DCAB45 /* Delta-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Delta-Bridging-Header.h"; sourceTree = ""; }; BF107EC31BF413F000E0C32C /* GamesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesViewController.swift; sourceTree = ""; }; - BF11734C1DA32A5200047DF8 /* GameType+Localization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "GameType+Localization.swift"; sourceTree = ""; }; - BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControllersSettingsViewController.swift; path = Controllers/ControllersSettingsViewController.swift; sourceTree = ""; }; + BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ControllersSettingsViewController.swift; sourceTree = ""; }; BF13A7551D5D29B0000BB055 /* PreviewGameViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreviewGameViewController.swift; sourceTree = ""; }; BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "EmulatorCore+Cheats.swift"; sourceTree = ""; }; + BF15AF831F54B43B009B6AAB /* ActionInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionInput.swift; sourceTree = ""; }; BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIAlertController+Importing.swift"; sourceTree = ""; }; - BF1DAD5C1D9F576000E752A7 /* GameTypeControllerSkinsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GameTypeControllerSkinsViewController.swift; path = "Controller Skins/GameTypeControllerSkinsViewController.swift"; sourceTree = ""; }; + BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SystemControllerSkinsViewController.swift; sourceTree = ""; }; BF27CC861BC9E3C600A20D89 /* Delta.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Delta.entitlements; sourceTree = ""; }; BF27CC8A1BC9FE4D00A20D89 /* Pods.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pods.framework; path = "Pods/../build/Debug-appletvos/Pods.framework"; sourceTree = ""; }; BF27CC941BCB7B7A00A20D89 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.0.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; }; - BF2B98E51C97E32F00F6D57D /* SaveStatesCollectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SaveStatesCollectionHeaderView.swift; path = "Pause Menu/Save States/SaveStatesCollectionHeaderView.swift"; sourceTree = ""; }; - BF31878A1D489AAA00BD020D /* CheatValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CheatValidator.swift; path = "Pause Menu/Cheats/CheatValidator.swift"; sourceTree = ""; }; - BF34FA061CF0F510006624C7 /* EditCheatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = EditCheatViewController.swift; path = "Pause Menu/Cheats/EditCheatViewController.swift"; sourceTree = ""; }; - BF34FA101CF1899D006624C7 /* CheatTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CheatTextView.swift; path = "Pause Menu/Cheats/CheatTextView.swift"; sourceTree = ""; }; - BF353FF11C5D7FB000C1184C /* PauseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseViewController.swift; path = "Pause Menu/PauseViewController.swift"; sourceTree = ""; }; + BF2B98E51C97E32F00F6D57D /* SaveStatesCollectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveStatesCollectionHeaderView.swift; sourceTree = ""; }; + BF31878A1D489AAA00BD020D /* CheatValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatValidator.swift; sourceTree = ""; }; + BF34FA061CF0F510006624C7 /* EditCheatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditCheatViewController.swift; sourceTree = ""; }; + BF34FA101CF1899D006624C7 /* CheatTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatTextView.swift; sourceTree = ""; }; + BF353FF11C5D7FB000C1184C /* PauseViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PauseViewController.swift; sourceTree = ""; }; BF353FF51C5D837600C1184C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/PauseMenu.storyboard; sourceTree = ""; }; - BF353FF81C5D870B00C1184C /* PauseItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseItem.swift; path = "Pause Menu/PauseItem.swift"; sourceTree = ""; }; - BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PausePresentationController.swift; path = "Pause Menu/Presentation Controller/PausePresentationController.swift"; sourceTree = ""; }; - BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PausePresentationControllerContentView.xib; path = "Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib"; sourceTree = ""; }; - BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseStoryboardSegue.swift; path = "Pause Menu/Segues/PauseStoryboardSegue.swift"; sourceTree = ""; }; - BF3540041C5DA70400C1184C /* SaveStatesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SaveStatesViewController.swift; path = "Pause Menu/Save States/SaveStatesViewController.swift"; sourceTree = ""; }; - BF3540071C5DAFAD00C1184C /* PauseTransitionCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseTransitionCoordinator.swift; path = "Pause Menu/Segues/PauseTransitionCoordinator.swift"; sourceTree = ""; }; - BF5942581E09BB810051894B /* Action.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Action.swift; path = Components/Action.swift; sourceTree = ""; }; - BF5942611E09BBB10051894B /* LoadControllerSkinImageOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadControllerSkinImageOperation.swift; path = Components/Loading/LoadControllerSkinImageOperation.swift; sourceTree = ""; }; - BF5942631E09BBB10051894B /* LoadImageURLOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoadImageURLOperation.swift; path = Components/Loading/LoadImageURLOperation.swift; sourceTree = ""; }; - BF5942681E09BBD00051894B /* GridCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GridCollectionViewCell.swift; path = "Components/Collection View/GridCollectionViewCell.swift"; sourceTree = ""; }; - BF5942691E09BBD00051894B /* GridCollectionViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GridCollectionViewLayout.swift; path = "Components/Collection View/GridCollectionViewLayout.swift"; sourceTree = ""; }; - BF59426D1E09BC5D0051894B /* DatabaseManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DatabaseManager.swift; path = Database/DatabaseManager.swift; sourceTree = ""; }; - BF59426E1E09BC5D0051894B /* GamesDatabase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GamesDatabase.swift; path = Database/OpenVGDB/GamesDatabase.swift; sourceTree = ""; }; - BF5942721E09BC700051894B /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; name = Model.xcdatamodel; path = Database/Model/Model.xcdatamodel; sourceTree = ""; }; - BF5942771E09BC830051894B /* Cheat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Cheat.swift; path = Database/Model/Human/Cheat.swift; sourceTree = ""; }; - BF5942781E09BC830051894B /* ControllerSkin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControllerSkin.swift; path = Database/Model/Human/ControllerSkin.swift; sourceTree = ""; }; - BF5942791E09BC830051894B /* Game.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Game.swift; path = Database/Model/Human/Game.swift; sourceTree = ""; }; - BF59427A1E09BC830051894B /* GameCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GameCollection.swift; path = Database/Model/Human/GameCollection.swift; sourceTree = ""; }; - BF59427B1E09BC830051894B /* SaveState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SaveState.swift; path = Database/Model/Human/SaveState.swift; sourceTree = ""; }; - BF5942811E09BC8B0051894B /* _Cheat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = _Cheat.swift; path = Database/Model/Machine/_Cheat.swift; sourceTree = ""; }; - BF5942821E09BC8B0051894B /* _ControllerSkin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = _ControllerSkin.swift; path = Database/Model/Machine/_ControllerSkin.swift; sourceTree = ""; }; - BF5942831E09BC8B0051894B /* _Game.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = _Game.swift; path = Database/Model/Machine/_Game.swift; sourceTree = ""; }; - BF5942841E09BC8B0051894B /* _GameCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = _GameCollection.swift; path = Database/Model/Machine/_GameCollection.swift; sourceTree = ""; }; - BF5942851E09BC8B0051894B /* _SaveState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = _SaveState.swift; path = Database/Model/Machine/_SaveState.swift; sourceTree = ""; }; - BF59428B1E09BC930051894B /* ControllerSkinConfigurations.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ControllerSkinConfigurations.h; path = Database/Model/Misc/ControllerSkinConfigurations.h; sourceTree = ""; }; - BF59428D1E09BCFB0051894B /* ImportController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ImportController.swift; path = Components/Importing/ImportController.swift; sourceTree = ""; }; + BF353FF81C5D870B00C1184C /* MenuItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = ""; }; + BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PausePresentationController.swift; sourceTree = ""; }; + BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PausePresentationControllerContentView.xib; path = Delta/Base.lproj/PausePresentationControllerContentView.xib; sourceTree = SOURCE_ROOT; }; + BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PauseStoryboardSegue.swift; sourceTree = ""; }; + BF3540041C5DA70400C1184C /* SaveStatesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveStatesViewController.swift; sourceTree = ""; }; + BF3540071C5DAFAD00C1184C /* PauseTransitionCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PauseTransitionCoordinator.swift; sourceTree = ""; }; + BF4828821F9027B600028B97 /* Delta 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Delta 2.xcdatamodel"; sourceTree = ""; }; + BF4828831F9027B600028B97 /* Delta.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Delta.xcdatamodel; sourceTree = ""; }; + BF4828851F9028F500028B97 /* System.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = System.swift; sourceTree = ""; }; + BF4828871F90290F00028B97 /* Action.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Action.swift; sourceTree = ""; }; + BF5942611E09BBB10051894B /* LoadControllerSkinImageOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadControllerSkinImageOperation.swift; sourceTree = ""; }; + BF5942631E09BBB10051894B /* LoadImageURLOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadImageURLOperation.swift; sourceTree = ""; }; + BF5942681E09BBD00051894B /* GridCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridCollectionViewCell.swift; sourceTree = ""; }; + BF5942691E09BBD00051894B /* GridCollectionViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridCollectionViewLayout.swift; sourceTree = ""; }; + BF59426D1E09BC5D0051894B /* DatabaseManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseManager.swift; sourceTree = ""; }; + BF59426E1E09BC5D0051894B /* GamesDatabase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesDatabase.swift; sourceTree = ""; }; + BF5942771E09BC830051894B /* Cheat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Cheat.swift; sourceTree = ""; }; + BF5942781E09BC830051894B /* ControllerSkin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ControllerSkin.swift; sourceTree = ""; }; + BF5942791E09BC830051894B /* Game.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Game.swift; sourceTree = ""; }; + BF59427A1E09BC830051894B /* GameCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameCollection.swift; sourceTree = ""; }; + BF59427B1E09BC830051894B /* SaveState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveState.swift; sourceTree = ""; }; + BF5942811E09BC8B0051894B /* _Cheat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _Cheat.swift; sourceTree = ""; }; + BF5942821E09BC8B0051894B /* _ControllerSkin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _ControllerSkin.swift; sourceTree = ""; }; + BF5942831E09BC8B0051894B /* _Game.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _Game.swift; sourceTree = ""; }; + BF5942841E09BC8B0051894B /* _GameCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _GameCollection.swift; sourceTree = ""; }; + BF5942851E09BC8B0051894B /* _SaveState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _SaveState.swift; sourceTree = ""; }; + BF59428B1E09BC930051894B /* ControllerSkinConfigurations.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ControllerSkinConfigurations.h; sourceTree = ""; }; + BF59428D1E09BCFB0051894B /* ImportController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportController.swift; sourceTree = ""; }; BF59428F1E09BD1A0051894B /* NSFetchedResultsController+Conveniences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFetchedResultsController+Conveniences.h"; sourceTree = ""; }; BF5942901E09BD1A0051894B /* NSFetchedResultsController+Conveniences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFetchedResultsController+Conveniences.m"; sourceTree = ""; }; BF5942911E09BD1A0051894B /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Conveniences.swift"; sourceTree = ""; }; BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; - BF5E7F451B9A652600AE44F8 /* Settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = ""; }; + BF5E7F451B9A652600AE44F8 /* Settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Settings.storyboard; path = Delta/Base.lproj/Settings.storyboard; sourceTree = SOURCE_ROOT; }; + BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerInputsViewController.swift; sourceTree = ""; }; BF63BDE91D389EEB00FCB040 /* GameViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; + BF6424821F5B8F3F00D6AB44 /* ListMenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListMenuViewController.swift; sourceTree = ""; }; + BF6424841F5CBDC900D6AB44 /* UIView+ParentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+ParentViewController.swift"; sourceTree = ""; }; BF6866161DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ControllerSkin+Configuring.swift"; sourceTree = ""; }; - BF696B7F1D9B2B02009639E0 /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Theme.swift; path = Theming/Theme.swift; sourceTree = ""; }; + BF696B7F1D9B2B02009639E0 /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; + BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameControllerInputMappingTransformer.swift; sourceTree = ""; }; BF6BB2451BB73FE800CCF94A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + BF6BF3121EB7E47F008E83CD /* ImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportOption.swift; sourceTree = ""; }; + BF6BF3171EB82111008E83CD /* iTunesImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = iTunesImportOption.swift; sourceTree = ""; }; + BF6BF3191EB82146008E83CD /* ClipboardImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClipboardImportOption.swift; sourceTree = ""; }; + BF6BF31B1EB821A0008E83CD /* GamesDatabaseImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesDatabaseImportOption.swift; sourceTree = ""; }; + BF6BF3201EB82362008E83CD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/GamesDatabase.storyboard; sourceTree = ""; }; + BF6BF3261EB87EB8008E83CD /* PhotoLibraryImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhotoLibraryImportOption.swift; sourceTree = ""; }; + BF6EE5E81F7C5F860051AD6C /* _GameControllerInputMapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = _GameControllerInputMapping.swift; sourceTree = ""; }; + BF6EE5EA1F7C5F8F0051AD6C /* GameControllerInputMapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameControllerInputMapping.swift; sourceTree = ""; }; BF70798B1B6B464B0019077C /* ZipZap.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZipZap.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UILabel+FontSize.swift"; sourceTree = ""; }; - BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PauseMenuViewController.swift; path = "Pause Menu/PauseMenuViewController.swift"; sourceTree = ""; }; + BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridMenuViewController.swift; sourceTree = ""; }; BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+Delta.swift"; sourceTree = ""; }; - BF95E2761E4977BF0030E7AD /* GameMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GameMetadata.swift; path = Database/OpenVGDB/GameMetadata.swift; sourceTree = ""; }; - BF95E2781E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GamesDatabaseBrowserViewController.swift; path = Database/OpenVGDB/GamesDatabaseBrowserViewController.swift; sourceTree = ""; }; - BF99A5961DC2F9C400468E9E /* ControllerSkinTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ControllerSkinTableViewCell.swift; path = "Controller Skins/ControllerSkinTableViewCell.swift"; sourceTree = ""; }; + BF8CA9351F5F651900499FDD /* PopoverMenuController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverMenuController.swift; sourceTree = ""; }; + BF8DDD231F4F6C880088A21B /* InputCalloutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputCalloutView.swift; sourceTree = ""; }; + BF95E2761E4977BF0030E7AD /* GameMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameMetadata.swift; sourceTree = ""; }; + BF95E2781E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesDatabaseBrowserViewController.swift; sourceTree = ""; }; + BF99A5961DC2F9C400468E9E /* ControllerSkinTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ControllerSkinTableViewCell.swift; sourceTree = ""; }; BF9F4FCE1AAD7B87004C9500 /* DeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFAA1FEC1B8AA4FA00495943 /* Settings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; }; + BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DeltaCoreProtocol+Delta.swift"; sourceTree = ""; }; BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SNESDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFC314761E0C8CFC0056E3A8 /* GameType+Delta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "GameType+Delta.swift"; sourceTree = ""; }; - BFC9B7381CEFCD34008629BB /* CheatsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CheatsViewController.swift; path = "Pause Menu/Cheats/CheatsViewController.swift"; sourceTree = ""; }; + BFC6F7B71F435BC500221B96 /* Input+Display.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Input+Display.swift"; sourceTree = ""; }; + BFC9B7381CEFCD34008629BB /* CheatsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatsViewController.swift; sourceTree = ""; }; BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewControllerContextTransitioning+Conveniences.swift"; sourceTree = ""; }; + BFDC7B9E1F7DE0CF0052A7C5 /* Delta.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Delta.xcmappingmodel; sourceTree = ""; }; BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameCollectionViewController.swift; sourceTree = ""; }; - BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SaveStatesStoryboardSegue.swift; path = Segues/SaveStatesStoryboardSegue.swift; sourceTree = ""; }; + BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverMenuButton.swift; sourceTree = ""; }; + BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveStatesStoryboardSegue.swift; sourceTree = ""; }; BFEC732C1AAECC4A00650035 /* Roxas.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Roxas.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFF93A9F1E0FB036005EC865 /* InputStreamOutputWriter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = InputStreamOutputWriter.swift; path = Components/Importing/InputStreamOutputWriter.swift; sourceTree = ""; }; - BFFA4C081E8A24D600D87934 /* GameMetadataTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GameMetadataTableViewCell.swift; path = Database/OpenVGDB/GameMetadataTableViewCell.swift; sourceTree = ""; }; + BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveStateMigrationPolicy.swift; sourceTree = ""; }; + BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GBCDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFF93A9F1E0FB036005EC865 /* InputStreamOutputWriter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InputStreamOutputWriter.swift; sourceTree = ""; }; + BFFA4C081E8A24D600D87934 /* GameMetadataTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameMetadataTableViewCell.swift; sourceTree = ""; }; BFFA71D71AAC406100EE9DD1 /* Delta.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Delta.app; sourceTree = BUILT_PRODUCTS_DIR; }; BFFA71DB1AAC406100EE9DD1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; BFFA71DC1AAC406100EE9DD1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; BFFA71E11AAC406100EE9DD1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - BFFC461B1D59823500AF2CC6 /* GamesPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GamesPresentationController.swift; path = Segues/GamesPresentationController.swift; sourceTree = ""; }; - BFFC461C1D59823500AF2CC6 /* GamesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GamesStoryboardSegue.swift; path = Segues/GamesStoryboardSegue.swift; sourceTree = ""; }; - BFFC461D1D59823500AF2CC6 /* InitialGamesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = InitialGamesStoryboardSegue.swift; path = Segues/InitialGamesStoryboardSegue.swift; sourceTree = ""; }; - BFFC46221D5984A000AF2CC6 /* LaunchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LaunchViewController.swift; path = Launch/LaunchViewController.swift; sourceTree = ""; }; + BFFC461B1D59823500AF2CC6 /* GamesPresentationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesPresentationController.swift; sourceTree = ""; }; + BFFC461C1D59823500AF2CC6 /* GamesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GamesStoryboardSegue.swift; sourceTree = ""; }; + BFFC461D1D59823500AF2CC6 /* InitialGamesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InitialGamesStoryboardSegue.swift; sourceTree = ""; }; + BFFC46221D5984A000AF2CC6 /* LaunchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LaunchViewController.swift; sourceTree = ""; }; BFFC46451D59861000AF2CC6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - BFFC464B1D5998D600AF2CC6 /* CheatTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CheatTableViewCell.swift; path = "Pause Menu/Cheats/CheatTableViewCell.swift"; sourceTree = ""; }; + BFFC464B1D5998D600AF2CC6 /* CheatTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatTableViewCell.swift; sourceTree = ""; }; C786AF1D2DDB6223BE2063CC /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Delta.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -224,6 +267,7 @@ BF99C6941D0A9AA600BA92BC /* SNESDeltaCore.framework in Frameworks */, BF70798C1B6B464B0019077C /* ZipZap.framework in Frameworks */, BF0418141D01E93400E85BCF /* GBADeltaCore.framework in Frameworks */, + BFF0742C1E9DC17500ACDF4A /* GBCDeltaCore.framework in Frameworks */, 4FE8465FD28810191C3E5212 /* Pods_Delta.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -238,14 +282,15 @@ BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */, BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */, BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */, - BF11734C1DA32A5200047DF8 /* GameType+Localization.swift */, BF6866161DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift */, BF59428F1E09BD1A0051894B /* NSFetchedResultsController+Conveniences.h */, BF5942901E09BD1A0051894B /* NSFetchedResultsController+Conveniences.m */, BF5942911E09BD1A0051894B /* NSManagedObject+Conveniences.swift */, BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */, - BFC314761E0C8CFC0056E3A8 /* GameType+Delta.swift */, + BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */, BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */, + BFC6F7B71F435BC500221B96 /* Input+Display.swift */, + BF6424841F5CBDC900D6AB44 /* UIView+ParentViewController.swift */, ); path = Extensions; sourceTree = ""; @@ -254,18 +299,20 @@ isa = PBXGroup; children = ( BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */, + BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */, + BF8DDD231F4F6C880088A21B /* InputCalloutView.swift */, ); - name = Controllers; + path = Controllers; sourceTree = ""; }; BF1DAD5B1D9F574900E752A7 /* Controller Skins */ = { isa = PBXGroup; children = ( - BF1DAD5C1D9F576000E752A7 /* GameTypeControllerSkinsViewController.swift */, + BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */, BF04E6FE1DB8625C000F35D3 /* ControllerSkinsViewController.swift */, BF99A5961DC2F9C400468E9E /* ControllerSkinTableViewCell.swift */, ); - name = "Controller Skins"; + path = "Controller Skins"; sourceTree = ""; }; BF353FFB1C5DA2F600C1184C /* Presentation Controller */ = { @@ -274,7 +321,7 @@ BF353FFD1C5DA3C500C1184C /* PausePresentationController.swift */, BF353FFE1C5DA3C500C1184C /* PausePresentationControllerContentView.xib */, ); - name = "Presentation Controller"; + path = "Presentation Controller"; sourceTree = ""; }; BF3540031C5DA6D800C1184C /* Save States */ = { @@ -283,7 +330,7 @@ BF3540041C5DA70400C1184C /* SaveStatesViewController.swift */, BF2B98E51C97E32F00F6D57D /* SaveStatesCollectionHeaderView.swift */, ); - name = "Save States"; + path = "Save States"; sourceTree = ""; }; BF46894D1AAC469800A2586D /* Game Selection */ = { @@ -299,12 +346,12 @@ BF5942571E09BB5D0051894B /* Components */ = { isa = PBXGroup; children = ( - BF5942581E09BB810051894B /* Action.swift */, - BF59428C1E09BCE50051894B /* Importing */, + BF4828871F90290F00028B97 /* Action.swift */, + BFE0229C1F5B56840052D888 /* Popover Menu */, BF5942671E09BBB70051894B /* Collection View */, BF5942601E09BBA80051894B /* Loading */, ); - name = Components; + path = Components; sourceTree = ""; }; BF5942601E09BBA80051894B /* Loading */ = { @@ -313,7 +360,7 @@ BF5942631E09BBB10051894B /* LoadImageURLOperation.swift */, BF5942611E09BBB10051894B /* LoadControllerSkinImageOperation.swift */, ); - name = Loading; + path = Loading; sourceTree = ""; }; BF5942671E09BBB70051894B /* Collection View */ = { @@ -322,28 +369,31 @@ BF5942681E09BBD00051894B /* GridCollectionViewCell.swift */, BF5942691E09BBD00051894B /* GridCollectionViewLayout.swift */, ); - name = "Collection View"; + path = "Collection View"; sourceTree = ""; }; BF59426C1E09BC450051894B /* Database */ = { isa = PBXGroup; children = ( BF59426D1E09BC5D0051894B /* DatabaseManager.swift */, + BFF93A9F1E0FB036005EC865 /* InputStreamOutputWriter.swift */, BF5942711E09BC690051894B /* Model */, BF95E2751E49763D0030E7AD /* OpenVGDB */, ); - name = Database; + path = Database; sourceTree = ""; }; BF5942711E09BC690051894B /* Model */ = { isa = PBXGroup; children = ( - BF5942721E09BC700051894B /* Model.xcdatamodel */, + BF4828811F9027B600028B97 /* Delta.xcdatamodeld */, BF5942741E09BC740051894B /* Human */, BF5942751E09BC780051894B /* Machine */, + BF6B82A31F7CC29A00042BFB /* Transformers */, + BFEF24F01F7DD4B600454C62 /* Migrations */, BF5942761E09BC7C0051894B /* Misc */, ); - name = Model; + path = Model; sourceTree = ""; }; BF5942741E09BC740051894B /* Human */ = { @@ -353,9 +403,10 @@ BF5942781E09BC830051894B /* ControllerSkin.swift */, BF5942791E09BC830051894B /* Game.swift */, BF59427A1E09BC830051894B /* GameCollection.swift */, + BF6EE5EA1F7C5F8F0051AD6C /* GameControllerInputMapping.swift */, BF59427B1E09BC830051894B /* SaveState.swift */, ); - name = Human; + path = Human; sourceTree = ""; }; BF5942751E09BC780051894B /* Machine */ = { @@ -365,9 +416,10 @@ BF5942821E09BC8B0051894B /* _ControllerSkin.swift */, BF5942831E09BC8B0051894B /* _Game.swift */, BF5942841E09BC8B0051894B /* _GameCollection.swift */, + BF6EE5E81F7C5F860051AD6C /* _GameControllerInputMapping.swift */, BF5942851E09BC8B0051894B /* _SaveState.swift */, ); - name = Machine; + path = Machine; sourceTree = ""; }; BF5942761E09BC7C0051894B /* Misc */ = { @@ -375,16 +427,17 @@ children = ( BF59428B1E09BC930051894B /* ControllerSkinConfigurations.h */, ); - name = Misc; + path = Misc; sourceTree = ""; }; BF59428C1E09BCE50051894B /* Importing */ = { isa = PBXGroup; children = ( BF59428D1E09BCFB0051894B /* ImportController.swift */, - BFF93A9F1E0FB036005EC865 /* InputStreamOutputWriter.swift */, + BF6BF3121EB7E47F008E83CD /* ImportOption.swift */, + BF6BF3161EB820F4008E83CD /* Import Options */, ); - name = Importing; + path = Importing; sourceTree = ""; }; BF696B7E1D9B2AE6009639E0 /* Theming */ = { @@ -392,7 +445,26 @@ children = ( BF696B7F1D9B2B02009639E0 /* Theme.swift */, ); - name = Theming; + path = Theming; + sourceTree = ""; + }; + BF6B82A31F7CC29A00042BFB /* Transformers */ = { + isa = PBXGroup; + children = ( + BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */, + ); + path = Transformers; + sourceTree = ""; + }; + BF6BF3161EB820F4008E83CD /* Import Options */ = { + isa = PBXGroup; + children = ( + BF6BF3171EB82111008E83CD /* iTunesImportOption.swift */, + BF6BF3191EB82146008E83CD /* ClipboardImportOption.swift */, + BF6BF3261EB87EB8008E83CD /* PhotoLibraryImportOption.swift */, + BF6BF31B1EB821A0008E83CD /* GamesDatabaseImportOption.swift */, + ); + path = "Import Options"; sourceTree = ""; }; BF7AE7FA1C2E851F00B1B5BC /* Pause Menu */ = { @@ -400,14 +472,14 @@ children = ( BF353FF41C5D837600C1184C /* PauseMenu.storyboard */, BF353FF11C5D7FB000C1184C /* PauseViewController.swift */, - BF7AE8041C2E858400B1B5BC /* PauseMenuViewController.swift */, - BF353FF81C5D870B00C1184C /* PauseItem.swift */, + BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */, + BF353FF81C5D870B00C1184C /* MenuItem.swift */, BF3540031C5DA6D800C1184C /* Save States */, BFC9B7371CEFCD08008629BB /* Cheats */, BF353FFB1C5DA2F600C1184C /* Presentation Controller */, BF912E481C5CB5D50041527C /* Segues */, ); - name = "Pause Menu"; + path = "Pause Menu"; sourceTree = ""; }; BF912E481C5CB5D50041527C /* Segues */ = { @@ -416,23 +488,33 @@ BF3540011C5DA3D500C1184C /* PauseStoryboardSegue.swift */, BF3540071C5DAFAD00C1184C /* PauseTransitionCoordinator.swift */, ); - name = Segues; + path = Segues; + sourceTree = ""; + }; + BF930FFB1EB6D6EC00E8DBA0 /* Systems */ = { + isa = PBXGroup; + children = ( + BF4828851F9028F500028B97 /* System.swift */, + ); + path = Systems; sourceTree = ""; }; BF95E2751E49763D0030E7AD /* OpenVGDB */ = { isa = PBXGroup; children = ( + BF6BF31F1EB82362008E83CD /* GamesDatabase.storyboard */, BF59426E1E09BC5D0051894B /* GamesDatabase.swift */, BF95E2761E4977BF0030E7AD /* GameMetadata.swift */, BF95E2781E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift */, BFFA4C081E8A24D600D87934 /* GameMetadataTableViewCell.swift */, ); - name = OpenVGDB; + path = OpenVGDB; sourceTree = ""; }; BF9F4FCD1AAD7B25004C9500 /* Frameworks */ = { isa = PBXGroup; children = ( + BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */, BF0418131D01E93400E85BCF /* GBADeltaCore.framework */, BF27CC941BCB7B7A00A20D89 /* GameController.framework */, BF27CC8A1BC9FE4D00A20D89 /* Pods.framework */, @@ -467,7 +549,17 @@ BF34FA101CF1899D006624C7 /* CheatTextView.swift */, BF31878A1D489AAA00BD020D /* CheatValidator.swift */, ); - name = Cheats; + path = Cheats; + sourceTree = ""; + }; + BFE0229C1F5B56840052D888 /* Popover Menu */ = { + isa = PBXGroup; + children = ( + BF8CA9351F5F651900499FDD /* PopoverMenuController.swift */, + BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */, + BF6424821F5B8F3F00D6AB44 /* ListMenuViewController.swift */, + ); + path = "Popover Menu"; sourceTree = ""; }; BFEC732F1AAECCBD00650035 /* Resources */ = { @@ -479,12 +571,29 @@ path = Resources; sourceTree = ""; }; + BFEF24F01F7DD4B600454C62 /* Migrations */ = { + isa = PBXGroup; + children = ( + BFDC7B9E1F7DE0CF0052A7C5 /* Delta.xcmappingmodel */, + BFEF24F11F7DD4BE00454C62 /* Policies */, + ); + path = Migrations; + sourceTree = ""; + }; + BFEF24F11F7DD4BE00454C62 /* Policies */ = { + isa = PBXGroup; + children = ( + BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */, + ); + path = Policies; + sourceTree = ""; + }; BFFA71CE1AAC406100EE9DD1 = { isa = PBXGroup; children = ( BFFA71D91AAC406100EE9DD1 /* Delta */, - BFEC732F1AAECCBD00650035 /* Resources */, BF9F4FCD1AAD7B25004C9500 /* Frameworks */, + BFEC732F1AAECCBD00650035 /* Resources */, BFFA71D81AAC406100EE9DD1 /* Products */, FD1E8AE87FA2DB8793F7B937 /* Pods */, ); @@ -509,6 +618,8 @@ BF7AE7FA1C2E851F00B1B5BC /* Pause Menu */, BFAA1FEB1B8AA4E800495943 /* Settings */, BF59426C1E09BC450051894B /* Database */, + BF59428C1E09BCE50051894B /* Importing */, + BF930FFB1EB6D6EC00E8DBA0 /* Systems */, BF5942571E09BB5D0051894B /* Components */, BF696B7E1D9B2AE6009639E0 /* Theming */, BF090CEE1B490C1A00DCAB45 /* Extensions */, @@ -532,6 +643,7 @@ children = ( BF63BDE91D389EEB00FCB040 /* GameViewController.swift */, BF13A7551D5D29B0000BB055 /* PreviewGameViewController.swift */, + BF15AF831F54B43B009B6AAB /* ActionInput.swift */, ); path = Emulation; sourceTree = ""; @@ -544,7 +656,7 @@ BFFC461B1D59823500AF2CC6 /* GamesPresentationController.swift */, BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */, ); - name = Segues; + path = Segues; sourceTree = ""; }; BFFC46211D59848000AF2CC6 /* Launch */ = { @@ -553,7 +665,7 @@ BFFC46441D59861000AF2CC6 /* LaunchScreen.storyboard */, BFFC46221D5984A000AF2CC6 /* LaunchViewController.swift */, ); - name = Launch; + path = Launch; sourceTree = ""; }; FD1E8AE87FA2DB8793F7B937 /* Pods */ = { @@ -579,6 +691,7 @@ BF9F4FCC1AAD7AEE004C9500 /* Embed Frameworks */, B444B2BB31CBCEE7D86E943D /* [CP] Embed Pods Frameworks */, 3521C8FA1BB6004A6E9FE324 /* [CP] Copy Pods Resources */, + BF6BF3281EB897F6008E83CD /* Fabric */, ); buildRules = ( ); @@ -596,7 +709,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0820; + LastUpgradeCheck = 0910; ORGANIZATIONNAME = "Riley Testut"; TargetAttributes = { BF14D8941DE7A512002CA1BE = { @@ -607,7 +720,8 @@ BFFA71D61AAC406100EE9DD1 = { CreatedOnToolsVersion = 6.3; DevelopmentTeam = 6XVY5G3U44; - LastSwiftMigration = 0800; + LastSwiftMigration = 0900; + ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.iCloud = { enabled = 1; @@ -641,6 +755,7 @@ buildActionMask = 2147483647; files = ( BFFA71E21AAC406100EE9DD1 /* Main.storyboard in Resources */, + BF6BF3211EB82362008E83CD /* GamesDatabase.storyboard in Resources */, BF3540001C5DA3C500C1184C /* PausePresentationControllerContentView.xib in Resources */, BF5E7F461B9A652600AE44F8 /* Settings.storyboard in Resources */, BF02D5DA1DDEBB3000A5E131 /* openvgdb.sqlite in Resources */, @@ -697,6 +812,20 @@ shellPath = /bin/sh; shellScript = "/usr/local/bin/mogenerator -m \"Delta/Database/Model/Model.xcdatamodel\" --human-dir \"Delta/Database/Model/Human\" --machine-dir \"Delta/Database/Model/Machine\" --swift --template-var scalarsWhenNonOptional=true --template-path \"Delta/Database/Model/mogenerator/templates\""; }; + BF6BF3281EB897F6008E83CD /* Fabric */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = Fabric; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Fabric/run\" d542629b4f6625cfd5564d27318550321272076d 333118df9345dcec21e4ba0bb7fa8f6c67c4eb41734374e24f6c71a8dcd5c870"; + }; DBD91E7D7EC2729786B4C5B1 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -709,7 +838,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -719,8 +848,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + BFC6F7B81F435BC500221B96 /* Input+Display.swift in Sources */, BF59426A1E09BBD00051894B /* GridCollectionViewCell.swift in Sources */, + BF6BF3181EB82111008E83CD /* iTunesImportOption.swift in Sources */, + BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */, BF59427C1E09BC830051894B /* Cheat.swift in Sources */, + BFBAB2E31EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift in Sources */, BF3540081C5DAFAD00C1184C /* PauseTransitionCoordinator.swift in Sources */, BF59427E1E09BC830051894B /* Game.swift in Sources */, BFAA1FED1B8AA4FA00495943 /* Settings.swift in Sources */, @@ -729,27 +862,34 @@ BF5942801E09BC830051894B /* SaveState.swift in Sources */, BF59428E1E09BCFB0051894B /* ImportController.swift in Sources */, BF13A7581D5D2FD9000BB055 /* EmulatorCore+Cheats.swift in Sources */, + BF6424831F5B8F3F00D6AB44 /* ListMenuViewController.swift in Sources */, + BF6BF3131EB7E47F008E83CD /* ImportOption.swift in Sources */, BF31878B1D489AAA00BD020D /* CheatValidator.swift in Sources */, BFFC46201D59823500AF2CC6 /* InitialGamesStoryboardSegue.swift in Sources */, - BF5942731E09BC700051894B /* Model.xcdatamodel in Sources */, + BF15AF841F54B43B009B6AAB /* ActionInput.swift in Sources */, + BF4828841F9027B600028B97 /* Delta.xcdatamodeld in Sources */, BF5942951E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift in Sources */, - BF353FF91C5D870B00C1184C /* PauseItem.swift in Sources */, + BF353FF91C5D870B00C1184C /* MenuItem.swift in Sources */, BF18B61F1E2985F900F70067 /* UIAlertController+Importing.swift in Sources */, BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */, BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */, BFFA71DD1AAC406100EE9DD1 /* AppDelegate.swift in Sources */, BF59426B1E09BBD00051894B /* GridCollectionViewLayout.swift in Sources */, + BF6424851F5CBDC900D6AB44 /* UIView+ParentViewController.swift in Sources */, + BFDC7B9F1F7DE0CF0052A7C5 /* Delta.xcmappingmodel in Sources */, BF04E6FF1DB8625C000F35D3 /* ControllerSkinsViewController.swift in Sources */, BF5942891E09BC8B0051894B /* _GameCollection.swift in Sources */, BF34FA111CF1899D006624C7 /* CheatTextView.swift in Sources */, - BF1DAD5D1D9F576000E752A7 /* GameTypeControllerSkinsViewController.swift in Sources */, + BF1DAD5D1D9F576000E752A7 /* SystemControllerSkinsViewController.swift in Sources */, + BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */, + BF6BF31C1EB821A0008E83CD /* GamesDatabaseImportOption.swift in Sources */, BFFA4C091E8A24D600D87934 /* GameMetadataTableViewCell.swift in Sources */, BFFC46231D5984A000AF2CC6 /* LaunchViewController.swift in Sources */, + BF8DDD241F4F6C880088A21B /* InputCalloutView.swift in Sources */, BF5942701E09BC5D0051894B /* GamesDatabase.swift in Sources */, BF34FA071CF0F510006624C7 /* EditCheatViewController.swift in Sources */, BF5942881E09BC8B0051894B /* _Game.swift in Sources */, BF95E2771E4977BF0030E7AD /* GameMetadata.swift in Sources */, - BF11734D1DA32A5200047DF8 /* GameType+Localization.swift in Sources */, BFFC461F1D59823500AF2CC6 /* GamesStoryboardSegue.swift in Sources */, BF2B98E61C97E32F00F6D57D /* SaveStatesCollectionHeaderView.swift in Sources */, BFC9B7391CEFCD34008629BB /* CheatsViewController.swift in Sources */, @@ -758,14 +898,17 @@ BF5942941E09BD1A0051894B /* NSManagedObject+Conveniences.swift in Sources */, BF7AE80A1C2E8C7600B1B5BC /* UIColor+Delta.swift in Sources */, BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */, + BF80E1D21F13117000847008 /* ControllerInputsViewController.swift in Sources */, BF5942641E09BBB10051894B /* LoadControllerSkinImageOperation.swift in Sources */, + BF6EE5E91F7C5F860051AD6C /* _GameControllerInputMapping.swift in Sources */, BF5942871E09BC8B0051894B /* _ControllerSkin.swift in Sources */, BF95E2791E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift in Sources */, BFD097211D3A01B8005A44C2 /* SaveStatesViewController.swift in Sources */, + BF6EE5EB1F7C5F8F0051AD6C /* GameControllerInputMapping.swift in Sources */, BF3540021C5DA3D500C1184C /* PauseStoryboardSegue.swift in Sources */, - BFC314771E0C8CFC0056E3A8 /* GameType+Delta.swift in Sources */, BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */, BF59426F1E09BC5D0051894B /* DatabaseManager.swift in Sources */, + BF4828861F9028F500028B97 /* System.swift in Sources */, BF13A7561D5D29B0000BB055 /* PreviewGameViewController.swift in Sources */, BF6866171DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift in Sources */, BF59427D1E09BC830051894B /* ControllerSkin.swift in Sources */, @@ -775,12 +918,16 @@ BF99A5971DC2F9C400468E9E /* ControllerSkinTableViewCell.swift in Sources */, BF5942861E09BC8B0051894B /* _Cheat.swift in Sources */, BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */, + BF8CA9361F5F651900499FDD /* PopoverMenuController.swift in Sources */, + BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */, BF5942931E09BD1A0051894B /* NSFetchedResultsController+Conveniences.m in Sources */, + BF4828881F90290F00028B97 /* Action.swift in Sources */, + BF6BF3271EB87EB8008E83CD /* PhotoLibraryImportOption.swift in Sources */, BF5942661E09BBB10051894B /* LoadImageURLOperation.swift in Sources */, BF353FF21C5D7FB000C1184C /* PauseViewController.swift in Sources */, - BF59425C1E09BB810051894B /* Action.swift in Sources */, BF696B801D9B2B02009639E0 /* Theme.swift in Sources */, - BF7AE8081C2E858400B1B5BC /* PauseMenuViewController.swift in Sources */, + BF7AE8081C2E858400B1B5BC /* GridMenuViewController.swift in Sources */, + BF6BF31A1EB82146008E83CD /* ClipboardImportOption.swift in Sources */, BFF93AA01E0FB036005EC865 /* InputStreamOutputWriter.swift in Sources */, BF59427F1E09BC830051894B /* GameCollection.swift in Sources */, ); @@ -795,7 +942,17 @@ BF353FF51C5D837600C1184C /* Base */, ); name = PauseMenu.storyboard; - sourceTree = ""; + path = Delta; + sourceTree = SOURCE_ROOT; + }; + BF6BF31F1EB82362008E83CD /* GamesDatabase.storyboard */ = { + isa = PBXVariantGroup; + children = ( + BF6BF3201EB82362008E83CD /* Base */, + ); + name = GamesDatabase.storyboard; + path = Delta; + sourceTree = SOURCE_ROOT; }; BFFA71E01AAC406100EE9DD1 /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -803,8 +960,8 @@ BFFA71E11AAC406100EE9DD1 /* Base */, ); name = Main.storyboard; - path = .; - sourceTree = ""; + path = Delta; + sourceTree = SOURCE_ROOT; }; BFFC46441D59861000AF2CC6 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; @@ -812,7 +969,8 @@ BFFC46451D59861000AF2CC6 /* Base */, ); name = LaunchScreen.storyboard; - sourceTree = ""; + path = Delta; + sourceTree = SOURCE_ROOT; }; /* End PBXVariantGroup section */ @@ -841,20 +999,26 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -891,14 +1055,20 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -934,12 +1104,17 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "Delta/Supporting Files/Delta.entitlements"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = 6XVY5G3U44; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Delta/Supporting Files/Delta-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -950,12 +1125,18 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "Delta/Supporting Files/Delta.entitlements"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEVELOPMENT_TEAM = 6XVY5G3U44; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Delta/Supporting Files/Delta-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Off; + SWIFT_VERSION = 4.0; }; name = Release; }; @@ -990,6 +1171,20 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + BF4828811F9027B600028B97 /* Delta.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + BF4828821F9027B600028B97 /* Delta 2.xcdatamodel */, + BF4828831F9027B600028B97 /* Delta.xcdatamodel */, + ); + currentVersion = BF4828821F9027B600028B97 /* Delta 2.xcdatamodel */; + path = Delta.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ }; rootObject = BFFA71CF1AAC406100EE9DD1 /* Project object */; } diff --git a/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme b/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme index 17d2b36..e367740 100644 --- a/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme +++ b/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme @@ -1,6 +1,6 @@ + + + + @@ -101,6 +116,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/Delta.xcworkspace/contents.xcworkspacedata b/Delta.xcworkspace/contents.xcworkspacedata index 6e7a98d..f51f87a 100644 --- a/Delta.xcworkspace/contents.xcworkspacedata +++ b/Delta.xcworkspace/contents.xcworkspacedata @@ -13,6 +13,9 @@ + + diff --git a/Delta/AppDelegate.swift b/Delta/AppDelegate.swift index 73ec644..ac4ce6a 100644 --- a/Delta/AppDelegate.swift +++ b/Delta/AppDelegate.swift @@ -9,8 +9,9 @@ import UIKit import DeltaCore -import SNESDeltaCore -import GBADeltaCore + +import Fabric +import Crashlytics @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate @@ -19,10 +20,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + Fabric.with([Crashlytics.self]) + Settings.registerDefaults() - Delta.register(SNES.core) - Delta.register(GBA.core) + System.supportedSystems.forEach { Delta.register($0.deltaCore) } self.configureAppearance() @@ -38,7 +40,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate } // Controllers - ExternalControllerManager.shared.startMonitoringExternalControllers() + ExternalGameControllerManager.shared.startMonitoring() return true } @@ -77,7 +79,7 @@ extension AppDelegate { self.window?.tintColor = UIColor.deltaPurple - UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes[NSForegroundColorAttributeName] = UIColor.white + UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes[NSAttributedStringKey.foregroundColor.rawValue] = UIColor.white } } @@ -88,12 +90,11 @@ extension AppDelegate return self.openURL(url) } - @discardableResult fileprivate func openURL(_ url: URL) -> Bool + @discardableResult private func openURL(_ url: URL) -> Bool { guard url.isFileURL else { return false } - let gameType = GameType.gameType(forFileExtension: url.pathExtension) - if gameType != .unknown || url.pathExtension.lowercased() == "zip" + if GameType(fileExtension: url.pathExtension) != nil || url.pathExtension.lowercased() == "zip" { return self.importGame(at: url) } diff --git a/Delta/Base.lproj/GamesDatabase.storyboard b/Delta/Base.lproj/GamesDatabase.storyboard new file mode 100644 index 0000000..28aeae1 --- /dev/null +++ b/Delta/Base.lproj/GamesDatabase.storyboard @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Delta/Base.lproj/LaunchScreen.storyboard b/Delta/Base.lproj/LaunchScreen.storyboard index 03c5dd3..cb2a624 100644 --- a/Delta/Base.lproj/LaunchScreen.storyboard +++ b/Delta/Base.lproj/LaunchScreen.storyboard @@ -1,11 +1,11 @@ - + - + @@ -47,6 +47,6 @@ - + diff --git a/Delta/Base.lproj/Main.storyboard b/Delta/Base.lproj/Main.storyboard index 95ac3a9..69f0d72 100644 --- a/Delta/Base.lproj/Main.storyboard +++ b/Delta/Base.lproj/Main.storyboard @@ -1,12 +1,11 @@ - + - - + @@ -32,13 +31,13 @@ - + - + @@ -49,91 +48,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -161,7 +85,6 @@ - @@ -260,12 +183,11 @@ - + - @@ -290,7 +212,7 @@ - + @@ -314,31 +236,11 @@ - - - - - - - - - - - - - - - - - - - - + - diff --git a/Delta/Base.lproj/PauseMenu.storyboard b/Delta/Base.lproj/PauseMenu.storyboard index 93db1ba..e6ced72 100644 --- a/Delta/Base.lproj/PauseMenu.storyboard +++ b/Delta/Base.lproj/PauseMenu.storyboard @@ -1,11 +1,15 @@ - - + + - - + + + + Menlo-Regular + + @@ -16,15 +20,17 @@ - + + - + + @@ -63,7 +69,7 @@ - + @@ -78,9 +84,9 @@ - - - + + + @@ -91,7 +97,7 @@ - + @@ -128,7 +134,7 @@ - + @@ -139,7 +145,7 @@ - + @@ -148,7 +154,7 @@ - + @@ -174,22 +180,22 @@ - + - + - + - + - + @@ -198,8 +204,9 @@ + - + @@ -245,20 +252,21 @@ - + - + - + + @@ -280,13 +288,14 @@ - + - + + @@ -308,13 +317,14 @@ - + - + + diff --git a/Delta/Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib b/Delta/Base.lproj/PausePresentationControllerContentView.xib similarity index 83% rename from Delta/Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib rename to Delta/Base.lproj/PausePresentationControllerContentView.xib index 08bf7a7..3fb392a 100644 --- a/Delta/Pause Menu/Presentation Controller/PausePresentationControllerContentView.xib +++ b/Delta/Base.lproj/PausePresentationControllerContentView.xib @@ -1,7 +1,12 @@ - - + + + + + - + + + @@ -13,14 +18,14 @@ - + - + - + @@ -28,9 +33,9 @@ diff --git a/Delta/Settings/Settings.storyboard b/Delta/Base.lproj/Settings.storyboard similarity index 71% rename from Delta/Settings/Settings.storyboard rename to Delta/Base.lproj/Settings.storyboard index 52357dc..ebcf37a 100644 --- a/Delta/Settings/Settings.storyboard +++ b/Delta/Base.lproj/Settings.storyboard @@ -1,11 +1,11 @@ - + - + @@ -21,15 +21,15 @@ - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -240,14 +329,14 @@ - - - @@ -267,16 +353,18 @@ + + + - - + @@ -399,7 +487,7 @@ - + @@ -411,5 +499,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Delta/Components/Collection View/GridCollectionViewCell.swift b/Delta/Components/Collection View/GridCollectionViewCell.swift index df6638b..f88bc2b 100644 --- a/Delta/Components/Collection View/GridCollectionViewCell.swift +++ b/Delta/Components/Collection View/GridCollectionViewCell.swift @@ -45,15 +45,15 @@ class GridCollectionViewCell: UICollectionViewCell } } - fileprivate var vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .dark))) + private var vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .dark))) - fileprivate var imageViewWidthConstraint: NSLayoutConstraint! - fileprivate var imageViewHeightConstraint: NSLayoutConstraint! + private var imageViewWidthConstraint: NSLayoutConstraint! + private var imageViewHeightConstraint: NSLayoutConstraint! - fileprivate var textLabelBottomAnchorConstraint: NSLayoutConstraint! + private var textLabelBottomAnchorConstraint: NSLayoutConstraint! - fileprivate var textLabelVerticalSpacingConstraint: NSLayoutConstraint! - fileprivate var textLabelFocusedVerticalSpacingConstraint: NSLayoutConstraint? + private var textLabelVerticalSpacingConstraint: NSLayoutConstraint! + private var textLabelFocusedVerticalSpacingConstraint: NSLayoutConstraint? override init(frame: CGRect) { diff --git a/Delta/Components/Importing/ImportController.swift b/Delta/Components/Importing/ImportController.swift deleted file mode 100644 index ae3864d..0000000 --- a/Delta/Components/Importing/ImportController.swift +++ /dev/null @@ -1,184 +0,0 @@ -// -// ImportController.swift -// Delta -// -// Created by Riley Testut on 10/10/15. -// Copyright © 2015 Riley Testut. All rights reserved. -// - -import UIKit -import ObjectiveC - -import DeltaCore - -import MobileCoreServices - -protocol ImportControllerDelegate -{ - func importController(_ importController: ImportController, didImport games: Set, with errors: Set) - func importController(_ importController: ImportController, didImport controllerSkins: Set, with errors: Set) - - /** Optional **/ - func importControllerDidCancel(_ importController: ImportController) -} - -extension ImportControllerDelegate -{ - func importControllerDidCancel(_ importController: ImportController) - { - // Empty Implementation - } -} - -class ImportController: NSObject -{ - var delegate: ImportControllerDelegate? - - fileprivate weak var presentingViewController: UIViewController? - - fileprivate func presentImportController(from presentingViewController: UIViewController, animated: Bool, completion: ((Void) -> Void)?) - { - self.presentingViewController = presentingViewController - - var documentTypes = GameType.supportedTypes.map { $0.rawValue } - documentTypes.append(kUTTypeDeltaControllerSkin as String) - documentTypes.append(kUTTypeZipArchive as String) - - // Add GBA4iOS's exported UTIs in case user has GBA4iOS installed (which may override Delta's UTI declarations) - documentTypes.append("com.rileytestut.gba") - documentTypes.append("com.rileytestut.gbc") - documentTypes.append("com.rileytestut.gb") - - #if os(iOS) - let documentMenuController = UIDocumentMenuViewController(documentTypes: documentTypes, in: .import) - documentMenuController.delegate = self - documentMenuController.addOption(withTitle: NSLocalizedString("iTunes", comment: ""), image: nil, order: .first) { self.importFromiTunes(nil) } - self.presentingViewController?.present(documentMenuController, animated: true, completion: nil) - #else - self.importFromiTunes(completion) - #endif - } - - private func importFromiTunes(_ completion: ((Void) -> Void)?) - { - let alertController = UIAlertController(title: NSLocalizedString("Import from iTunes?", comment: ""), message: NSLocalizedString("Delta will import the games and controller skins copied over via iTunes.", comment: ""), preferredStyle: .alert) - - let importAction = UIAlertAction(title: NSLocalizedString("Import", comment: ""), style: .default) { action in - - let documentsDirectoryURL = DatabaseManager.defaultDirectoryURL().deletingLastPathComponent() - - do - { - let contents = try FileManager.default.contentsOfDirectory(at: documentsDirectoryURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles) - - DatabaseManager.shared.performBackgroundTask { (context) in - let controllerSkinURLs = contents.filter { $0.pathExtension.lowercased() == "deltaskin" } - self.importControllerSkins(at: Set(controllerSkinURLs)) - - let gameURLs = contents.filter { GameType.gameType(forFileExtension: $0.pathExtension) != .unknown || $0.pathExtension.lowercased() == "zip" } - self.importGames(at: Set(gameURLs)) - } - - } - catch let error as NSError - { - print(error) - } - - self.presentingViewController?.importController = nil - - } - alertController.addAction(importAction) - - let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel) { action in - self.delegate?.importControllerDidCancel(self) - self.presentingViewController?.importController = nil - } - alertController.addAction(cancelAction) - - self.presentingViewController?.present(alertController, animated: true, completion: completion) - } - - fileprivate func importGames(at urls: Set) - { - DatabaseManager.shared.importGames(at: urls) { (games, errors) in - self.delegate?.importController(self, didImport: games, with: errors) - } - } - - fileprivate func importControllerSkins(at urls: Set) - { - DatabaseManager.shared.importControllerSkins(at: urls) { (controllerSkins, errors) in - self.delegate?.importController(self, didImport: controllerSkins, with: errors) - } - } -} - -#if os(iOS) - - extension ImportController: UIDocumentMenuDelegate - { - func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) - { - documentPicker.delegate = self - self.presentingViewController?.present(documentPicker, animated: true, completion: nil) - } - - func documentMenuWasCancelled(_ documentMenu: UIDocumentMenuViewController) - { - self.delegate?.importControllerDidCancel(self) - - self.presentingViewController?.importController = nil - } - - } - - extension ImportController: UIDocumentPickerDelegate - { - func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) - { - if url.pathExtension.lowercased() == "deltaskin" - { - self.importControllerSkins(at: [url]) - } - else - { - self.importGames(at: [url]) - } - - self.presentingViewController?.importController = nil - } - - func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) - { - self.delegate?.importControllerDidCancel(self) - - self.presentingViewController?.importController = nil - } - } - -#endif - -private var ImportControllerKey: UInt8 = 0 - -extension UIViewController -{ - fileprivate(set) var importController: ImportController? - { - set - { - objc_setAssociatedObject(self, &ImportControllerKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - get - { - return objc_getAssociatedObject(self, &ImportControllerKey) as? ImportController - } - } - - func present(_ importController: ImportController, animated: Bool, completion: ((Void) -> Void)?) - { - self.importController = importController - - importController.presentImportController(from: self, animated: animated, completion: completion) - } -} diff --git a/Delta/Components/Loading/LoadImageURLOperation.swift b/Delta/Components/Loading/LoadImageURLOperation.swift index 090b9f6..c05a9df 100644 --- a/Delta/Components/Loading/LoadImageURLOperation.swift +++ b/Delta/Components/Loading/LoadImageURLOperation.swift @@ -45,6 +45,11 @@ class LoadImageURLOperation: RSTLoadOperation super.cancel() self.downloadOperation?.cancel() + + if self.isAsynchronous + { + self.finish() + } } override func loadResult(completion: @escaping (UIImage?, Swift.Error?) -> Void) @@ -74,14 +79,12 @@ class LoadImageURLOperation: RSTLoadOperation private func loadLocalImage(completion: @escaping (UIImage?, Error?) -> Void) { - let options: NSDictionary = [kCGImageSourceShouldCache as NSString: true] - - guard let imageSource = CGImageSourceCreateWithURL(self.url as CFURL, options) else { + guard let imageSource = CGImageSourceCreateWithURL(self.url as CFURL, nil) else { completion(nil, .doesNotExist) return } - guard let quartzImage = CGImageSourceCreateImageAtIndex(imageSource, 0, options) else { + guard let quartzImage = CGImageSourceCreateImageAtIndex(imageSource, 0, nil) else { completion(nil, .invalid) return } diff --git a/Delta/Components/Popover Menu/ListMenuViewController.swift b/Delta/Components/Popover Menu/ListMenuViewController.swift new file mode 100644 index 0000000..6129d47 --- /dev/null +++ b/Delta/Components/Popover Menu/ListMenuViewController.swift @@ -0,0 +1,64 @@ +// +// PopoverMenuViewController.swift +// Delta +// +// Created by Riley Testut on 9/2/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +import Roxas + +class ListMenuViewController: UITableViewController +{ + var items: [MenuItem] { + get { return self.dataSource.items } + set { self.dataSource.items = newValue } + } + + private let dataSource = RSTArrayTableViewDataSource(items: []) + + override var preferredContentSize: CGSize { + get { + let navigationBarHeight = self.navigationController?.navigationBar.bounds.height ?? 0.0 + return CGSize(width: 0, height: (self.tableView.rowHeight * CGFloat(self.items.count)) + navigationBarHeight) + } + set {} + } + + init() + { + super.init(style: .plain) + + self.dataSource.cellConfigurationHandler = { (cell, item, indexPath) in + cell.textLabel?.text = item.text + cell.accessoryType = item.isSelected ? .checkmark : .none + } + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() + { + super.viewDidLoad() + + self.tableView.dataSource = self.dataSource + self.tableView.rowHeight = 44 + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: RSTCellContentGenericCellIdentifier) + } +} + +extension ListMenuViewController +{ + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) + { + let item = self.dataSource.item(at: indexPath) + item.isSelected = !item.isSelected + item.action(item) + + self.tableView.reloadData() + } +} diff --git a/Delta/Components/Popover Menu/PopoverMenuButton.swift b/Delta/Components/Popover Menu/PopoverMenuButton.swift new file mode 100644 index 0000000..e242765 --- /dev/null +++ b/Delta/Components/Popover Menu/PopoverMenuButton.swift @@ -0,0 +1,121 @@ +// +// PopoverMenuButton.swift +// Delta +// +// Created by Riley Testut on 9/2/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +extension UINavigationBar +{ + fileprivate var defaultTitleTextAttributes: [NSAttributedStringKey: Any]? { + if let textAttributes = self._defaultTitleTextAttributes + { + return textAttributes + } + + // Make "copy" of self. + let navigationBar = UINavigationBar(frame: .zero) + navigationBar.barStyle = self.barStyle + + // Set item with title so we can retrieve default text attributes. + let navigationItem = UINavigationItem(title: "Testut") + navigationBar.items = [navigationItem] + navigationBar.isHidden = true + + // Must be added to window hierarchy for it to create title UILabel. + self.addSubview(navigationBar) + defer { navigationBar.removeFromSuperview() } + + navigationBar.layoutIfNeeded() + + let textAttributes = navigationBar._defaultTitleTextAttributes + return textAttributes + } + + private var _defaultTitleTextAttributes: [NSAttributedStringKey: Any]? { + guard self.titleTextAttributes == nil else { return self.titleTextAttributes } + + guard + let contentView = self.subviews.first(where: { NSStringFromClass(type(of: $0)).contains("ContentView") || NSStringFromClass(type(of: $0)).contains("ItemView") }), + let titleLabel = contentView.subviews.first(where: { $0 is UILabel }) as? UILabel + else { return nil } + + let textAttributes = titleLabel.attributedText?.attributes(at: 0, effectiveRange: nil) + return textAttributes + } +} + +class PopoverMenuButton: UIControl +{ + var title: String { + get { return self.textLabel.text ?? "" } + set { + self.textLabel.text = newValue + self.updateTextAttributes() + self.invalidateIntrinsicContentSize() + } + } + + private let textLabel: UILabel + private let arrowLabel: UILabel + private let stackView: UIStackView + + private var parentNavigationBar: UINavigationBar? { + guard let navigationController = self.parentViewController as? UINavigationController ?? self.parentViewController?.navigationController else { return nil } + guard self.isDescendant(of: navigationController.navigationBar) else { return nil } + + return navigationController.navigationBar + } + + override var intrinsicContentSize: CGSize { + return self.stackView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) + } + + init() + { + self.textLabel = UILabel() + self.textLabel.textColor = .black + + self.arrowLabel = UILabel() + self.arrowLabel.text = "▾" + self.arrowLabel.textColor = .black + + self.stackView = UIStackView(arrangedSubviews: [self.textLabel, self.arrowLabel]) + self.stackView.axis = .horizontal + self.stackView.distribution = .fillProportionally + self.stackView.alignment = .center + self.stackView.spacing = 4.0 + self.stackView.isUserInteractionEnabled = false + + let intrinsicContentSize = self.stackView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) + super.init(frame: CGRect(origin: .zero, size: intrinsicContentSize)) + + self.addSubview(self.stackView, pinningEdgesWith: .zero) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func didMoveToSuperview() + { + self.updateTextAttributes() + } +} + +private extension PopoverMenuButton +{ + func updateTextAttributes() + { + guard let parentNavigationBar = self.parentNavigationBar else { return } + guard let textAttributes = parentNavigationBar.defaultTitleTextAttributes else { return } + + for label in [self.textLabel, self.arrowLabel] + { + label.attributedText = NSAttributedString(string: label.text ?? "", attributes: textAttributes) + } + } +} diff --git a/Delta/Components/Popover Menu/PopoverMenuController.swift b/Delta/Components/Popover Menu/PopoverMenuController.swift new file mode 100644 index 0000000..d90478e --- /dev/null +++ b/Delta/Components/Popover Menu/PopoverMenuController.swift @@ -0,0 +1,102 @@ +// +// PopoverMenuController.swift +// Delta +// +// Created by Riley Testut on 9/5/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +private var popoverMenuControllerKey: UInt8 = 0 + +extension UINavigationItem +{ + var popoverMenuController: PopoverMenuController? { + get { return objc_getAssociatedObject(self, &popoverMenuControllerKey) as? PopoverMenuController } + set { + self.titleView = newValue?.popoverMenuButton + objc_setAssociatedObject(self, &popoverMenuControllerKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } +} + +class PopoverMenuController: NSObject +{ + let popoverViewController: UIViewController + + let popoverMenuButton: PopoverMenuButton + + var isActive: Bool = false { + willSet { + guard newValue != self.isActive else { return } + + if newValue + { + self.presentPopoverViewController() + } + else + { + self.dismissPopoverViewController() + } + } + } + + init(popoverViewController: UIViewController) + { + self.popoverViewController = popoverViewController + + self.popoverMenuButton = PopoverMenuButton() + + super.init() + + self.popoverMenuButton.addTarget(self, action: #selector(PopoverMenuController.pressedPopoverMenuButton(_:)), for: .touchUpInside) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + +private extension PopoverMenuController +{ + @objc func pressedPopoverMenuButton(_ button: PopoverMenuButton) + { + self.isActive = !self.isActive + } + + func presentPopoverViewController() + { + guard !self.isActive else { return } + + guard let presentingViewController = self.popoverMenuButton.parentViewController else { return } + + self.popoverViewController.modalPresentationStyle = .popover + self.popoverViewController.popoverPresentationController?.delegate = self + self.popoverViewController.popoverPresentationController?.sourceView = self.popoverMenuButton.superview + self.popoverViewController.popoverPresentationController?.sourceRect = self.popoverMenuButton.frame + + presentingViewController.present(self.popoverViewController, animated: true, completion: nil) + } + + func dismissPopoverViewController() + { + guard self.isActive else { return } + + self.popoverViewController.dismiss(animated: true, completion: nil) + } +} + +extension PopoverMenuController: UIPopoverPresentationControllerDelegate +{ + func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle + { + // Force popover presentation, regardless of trait collection. + return .none + } + + func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) + { + self.isActive = false + } +} diff --git a/Delta/Components/Popover Menu/PopoverMenuViewController.swift b/Delta/Components/Popover Menu/PopoverMenuViewController.swift new file mode 100644 index 0000000..78c8ae8 --- /dev/null +++ b/Delta/Components/Popover Menu/PopoverMenuViewController.swift @@ -0,0 +1,68 @@ +// +// PopoverMenuViewController.swift +// Delta +// +// Created by Riley Testut on 9/2/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +import Roxas + +class ListMenuViewController: UITableViewController +{ + var items: [MenuItem] { + get { return self.dataSource.items } + set { self.dataSource.items = newValue; } + } + + fileprivate let dataSource = RSTArrayTableViewDataSource(items: []) + + override var preferredContentSize: CGSize { + get { + let navigationBarHeight = self.navigationController?.navigationBar.bounds.height ?? 0.0 + return CGSize(width: 0, height: (self.tableView.rowHeight * CGFloat(self.items.count)) + navigationBarHeight) + } + set {} + } + + init() + { + super.init(style: .plain) + + self.dataSource.cellConfigurationHandler = { (cell, item, indexPath) in + cell.textLabel?.text = item.text + cell.accessoryType = item.isSelected ? .checkmark : .none + } + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() + { + super.viewDidLoad() + + self.tableView.dataSource = self.dataSource + self.tableView.rowHeight = 44 + self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: RSTCellContentGenericCellIdentifier) + } +} + +extension ListMenuViewController +{ + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) + { + self.items.forEach { $0.isSelected = false } + + let item = self.dataSource.item(at: indexPath) + item.isSelected = true + item.action(item) + + self.tableView.reloadData() + + self.dismiss(animated: true, completion: nil) + } +} diff --git a/Delta/Database/DatabaseManager.swift b/Delta/Database/DatabaseManager.swift index 2db6281..d5aa731 100644 --- a/Delta/Database/DatabaseManager.swift +++ b/Delta/Database/DatabaseManager.swift @@ -22,6 +22,7 @@ extension DatabaseManager { case doesNotExist(URL) case invalid(URL) + case unsupported(URL) case unknown(URL, NSError) case saveFailed(Set, NSError) @@ -30,8 +31,9 @@ extension DatabaseManager { case .doesNotExist: return 0 case .invalid: return 1 - case .unknown: return 2 - case .saveFailed: return 3 + case .unsupported: return 2 + case .unknown: return 3 + case .saveFailed: return 4 } } @@ -41,15 +43,16 @@ extension DatabaseManager { case (let .doesNotExist(url1), let .doesNotExist(url2)) where url1 == url2: return true case (let .invalid(url1), let .invalid(url2)) where url1 == url2: return true + case (let .unsupported(url1), let .unsupported(url2)) where url1 == url2: return true case (let .unknown(url1, error1), let .unknown(url2, error2)) where url1 == url2 && error1 == error2: return true case (let .saveFailed(urls1, error1), let .saveFailed(urls2, error2)) where urls1 == urls2 && error1 == error2: return true case (.doesNotExist, _): return false case (.invalid, _): return false + case (.unsupported, _): return false case (.unknown, _): return false case (.saveFailed, _): return false } } - } } @@ -57,16 +60,15 @@ final class DatabaseManager: NSPersistentContainer { static let shared = DatabaseManager() - fileprivate var gamesDatabase: GamesDatabase? = nil + private var gamesDatabase: GamesDatabase? = nil private init() { guard - let modelURL = Bundle(for: DatabaseManager.self).url(forResource: "Model", withExtension: "mom"), + let modelURL = Bundle(for: DatabaseManager.self).url(forResource: "Delta", withExtension: "momd"), let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL) else { fatalError("Core Data model cannot be found. Aborting.") } - super.init(name: "Delta", managedObjectModel: managedObjectModel) self.viewContext.automaticallyMergesChangesFromParent = true @@ -95,13 +97,13 @@ extension DatabaseManager //MARK: - Preparation - private extension DatabaseManager { - func prepareDatabase(completion: @escaping (Void) -> Void) + func prepareDatabase(completion: @escaping () -> Void) { self.performBackgroundTask { (context) in - for gameType in GameType.supportedTypes + for system in System.supportedSystems { - guard let deltaControllerSkin = DeltaCore.ControllerSkin.standardControllerSkin(for: gameType) else { continue } + guard let deltaControllerSkin = DeltaCore.ControllerSkin.standardControllerSkin(for: system.gameType) else { continue } let controllerSkin = ControllerSkin(context: context) controllerSkin.isStandard = true @@ -173,21 +175,27 @@ extension DatabaseManager continue } - let identifier = FileHash.sha1HashOfFile(atPath: url.path) as String + guard let gameType = GameType(fileExtension: url.pathExtension), let system = System(gameType: gameType) else { + errors.insert(.unsupported(url)) + continue + } + let identifier = FileHash.sha1HashOfFile(atPath: url.path) as String let filename = identifier + "." + url.pathExtension - let game = Game.insertIntoManagedObjectContext(context) + let game = Game(context: context) game.identifier = identifier + game.type = gameType game.filename = filename let databaseMetadata = self.gamesDatabase?.metadata(for: game) game.name = databaseMetadata?.name ?? url.deletingPathExtension().lastPathComponent game.artworkURL = databaseMetadata?.artworkURL - - let gameCollection = GameCollection.gameSystemCollectionForPathExtension(url.pathExtension, inManagedObjectContext: context) - game.type = GameType(rawValue: gameCollection.identifier) - game.gameCollections.insert(gameCollection) + + let gameCollection = GameCollection(context: context) + gameCollection.identifier = gameType.rawValue + gameCollection.index = Int16(system.year) + gameCollection.games.insert(game) do { @@ -212,7 +220,6 @@ extension DatabaseManager errors.insert(.unknown(url, error)) } - } do @@ -328,9 +335,8 @@ extension DatabaseManager guard !entry.fileName.contains("/") else { continue } let fileExtension = (entry.fileName as NSString).pathExtension - let gameType = GameType.gameType(forFileExtension: fileExtension) - - guard gameType != .unknown else { continue } + + guard GameType(fileExtension: fileExtension) != nil else { continue } // At least one entry is a valid game file, so we set archiveContainsValidGameFile to true // This will result in this archive being considered valid, and thus we will not return an ImportError.invalid error for the archive @@ -486,6 +492,14 @@ extension DatabaseManager return gameTypeDirectoryURL } + + class func artworkURL(for game: Game) -> URL + { + let gameURL = game.fileURL + + let artworkURL = gameURL.deletingPathExtension().appendingPathExtension("jpg") + return artworkURL + } } //MARK: - Private - diff --git a/Delta/Components/Importing/InputStreamOutputWriter.swift b/Delta/Database/InputStreamOutputWriter.swift similarity index 97% rename from Delta/Components/Importing/InputStreamOutputWriter.swift rename to Delta/Database/InputStreamOutputWriter.swift index 76e4cb3..5ed98d8 100644 --- a/Delta/Components/Importing/InputStreamOutputWriter.swift +++ b/Delta/Database/InputStreamOutputWriter.swift @@ -15,9 +15,9 @@ class InputStreamOutputWriter: NSObject let inputStream: InputStream let outputStream: OutputStream - fileprivate var completion: ((Error?) -> Void)? + private var completion: ((Error?) -> Void)? - fileprivate var dataBuffer = Data(capacity: MaximumBufferLength * 2) + private var dataBuffer = Data(capacity: MaximumBufferLength * 2) init(inputStream: InputStream, outputStream: OutputStream) { diff --git a/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..fe94d29 --- /dev/null +++ b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Delta 2.xcdatamodel + + diff --git a/Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel/contents b/Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel/contents new file mode 100644 index 0000000..3fad047 --- /dev/null +++ b/Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel/contents @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Delta/Database/Model/Model.xcdatamodel/contents b/Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel/contents similarity index 82% rename from Delta/Database/Model/Model.xcdatamodel/contents rename to Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel/contents index b009f69..6e519be 100644 --- a/Delta/Database/Model/Model.xcdatamodel/contents +++ b/Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -79,6 +79,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -107,6 +132,7 @@ + \ No newline at end of file diff --git a/Delta/Database/Model/Human/ControllerSkin.swift b/Delta/Database/Model/Human/ControllerSkin.swift index 48ea7e0..bfbc6fe 100644 --- a/Delta/Database/Model/Human/ControllerSkin.swift +++ b/Delta/Database/Model/Human/ControllerSkin.swift @@ -61,7 +61,7 @@ public class ControllerSkin: _ControllerSkin return self.controllerSkin?.isDebugModeEnabled ?? false } - fileprivate lazy var controllerSkin: DeltaCore.ControllerSkin? = { + private lazy var controllerSkin: DeltaCore.ControllerSkin? = { let controllerSkin = self.isStandard ? DeltaCore.ControllerSkin.standardControllerSkin(for: self.gameType) : DeltaCore.ControllerSkin(fileURL: self.fileURL) return controllerSkin }() @@ -88,9 +88,9 @@ extension ControllerSkin: ControllerSkinProtocol return self.controllerSkin?.image(for: traits, preferredSize: preferredSize) } - public func inputs(for traits: DeltaCore.ControllerSkin.Traits, point: CGPoint) -> [Input]? + public func inputs(for traits: DeltaCore.ControllerSkin.Traits, at point: CGPoint) -> [Input]? { - return self.controllerSkin?.inputs(for: traits, point: point) + return self.controllerSkin?.inputs(for: traits, at: point) } public func items(for traits: DeltaCore.ControllerSkin.Traits) -> [DeltaCore.ControllerSkin.Item]? diff --git a/Delta/Database/Model/Human/Game.swift b/Delta/Database/Model/Human/Game.swift index 7234bb6..ad8879b 100644 --- a/Delta/Database/Model/Human/Game.swift +++ b/Delta/Database/Model/Human/Game.swift @@ -22,6 +22,37 @@ public class Game: _Game, GameProtocol return fileURL } + + public override var artworkURL: URL? { + get { + self.willAccessValue(forKey: #keyPath(Game.artworkURL)) + var artworkURL = self.primitiveValue(forKey: #keyPath(Game.artworkURL)) as? URL + self.didAccessValue(forKey: #keyPath(Game.artworkURL)) + + if let unwrappedArtworkURL = artworkURL, unwrappedArtworkURL.isFileURL + { + // Recreate the stored URL relative to current sandbox location. + artworkURL = URL(fileURLWithPath: unwrappedArtworkURL.relativePath, relativeTo: DatabaseManager.gamesDirectoryURL) + } + + return artworkURL + } + set { + self.willChangeValue(forKey: #keyPath(Game.artworkURL)) + + var artworkURL = newValue + + if let newValue = newValue, newValue.isFileURL + { + // Store a relative URL, since the sandbox location changes. + artworkURL = URL(fileURLWithPath: newValue.lastPathComponent, relativeTo: DatabaseManager.gamesDirectoryURL) + } + + self.setPrimitiveValue(artworkURL, forKey: #keyPath(Game.artworkURL)) + + self.didChangeValue(forKey: #keyPath(Game.artworkURL)) + } + } } extension Game diff --git a/Delta/Database/Model/Human/GameCollection.swift b/Delta/Database/Model/Human/GameCollection.swift index bfa5635..6e5fca4 100644 --- a/Delta/Database/Model/Human/GameCollection.swift +++ b/Delta/Database/Model/Human/GameCollection.swift @@ -9,48 +9,22 @@ import CoreData import DeltaCore -import SNESDeltaCore -import GBADeltaCore @objc(GameCollection) -public class GameCollection: _GameCollection +public class GameCollection: _GameCollection { - var name: String - { - let gameType = GameType(rawValue: self.identifier) - return gameType.localizedName + var name: String { + return self.system?.localizedName ?? NSLocalizedString("Unknown", comment: "") } - var shortName: String - { - let gameType = GameType(rawValue: self.identifier) - return gameType.localizedShortName + var shortName: String { + return self.system?.localizedShortName ?? NSLocalizedString("Unknown", comment: "") } - class func gameSystemCollectionForPathExtension(_ pathExtension: String?, inManagedObjectContext managedObjectContext: NSManagedObjectContext) -> GameCollection - { - let gameType = GameType.gameType(forFileExtension: pathExtension ?? "") - let identifier = gameType.rawValue + var system: System? { + let gameType = GameType(rawValue: self.identifier) - let index: Int16 - - switch gameType - { - case GameType.snes: index = 1990 - case GameType.gba: index = 2001 - default: index = Int16(INT16_MAX) - } - - let predicate = NSPredicate(format: "%K == %@", #keyPath(GameCollection.identifier), identifier) - - var gameCollection = GameCollection.instancesWithPredicate(predicate, inManagedObjectContext: managedObjectContext, type: GameCollection.self).first - if gameCollection == nil - { - gameCollection = GameCollection.insertIntoManagedObjectContext(managedObjectContext) - gameCollection?.identifier = identifier - gameCollection?.index = index - } - - return gameCollection! + let system = System(gameType: gameType) + return system } } diff --git a/Delta/Database/Model/Human/GameControllerInputMapping.swift b/Delta/Database/Model/Human/GameControllerInputMapping.swift new file mode 100644 index 0000000..0a71b27 --- /dev/null +++ b/Delta/Database/Model/Human/GameControllerInputMapping.swift @@ -0,0 +1,77 @@ +// +// GameControllerInputMapping.swift +// Delta +// +// Created by Riley Testut on 8/30/16. +// Copyright (c) 2016 Riley Testut. All rights reserved. +// + +import Foundation + +import DeltaCore + +@objc(GameControllerInputMapping) +public class GameControllerInputMapping: _GameControllerInputMapping +{ + private var inputMapping: DeltaCore.GameControllerInputMapping { + get { return self.deltaCoreInputMapping as! DeltaCore.GameControllerInputMapping } + set { self.deltaCoreInputMapping = newValue } + } + + public convenience init(inputMapping: DeltaCore.GameControllerInputMapping, context: NSManagedObjectContext) + { + self.init(entity: GameControllerInputMapping.entity(), insertInto: context) + + self.inputMapping = inputMapping + } +} + +extension GameControllerInputMapping +{ + class func inputMapping(for gameController: GameController, gameType: GameType, in managedObjectContext: NSManagedObjectContext) -> GameControllerInputMapping? + { + guard let playerIndex = gameController.playerIndex else { + return nil + } + + let fetchRequest: NSFetchRequest = GameControllerInputMapping.fetchRequest() + fetchRequest.returnsObjectsAsFaults = false + fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == %@ AND %K == %d", #keyPath(GameControllerInputMapping.gameControllerInputType), gameController.inputType.rawValue, #keyPath(GameControllerInputMapping.gameType), gameType.rawValue, #keyPath(GameControllerInputMapping.playerIndex), playerIndex) + + do + { + let inputMappings = try managedObjectContext.fetch(fetchRequest) + + let inputMapping = inputMappings.first + return inputMapping + } + catch + { + print(error) + + return nil + } + } +} + +extension GameControllerInputMapping: GameControllerInputMappingProtocol +{ + var name: String? { + get { return self.inputMapping.name } + set { self.inputMapping.name = newValue } + } + + var supportedControllerInputs: [Input] { + return self.inputMapping.supportedControllerInputs + } + + public func input(forControllerInput controllerInput: Input) -> Input? + { + return self.inputMapping.input(forControllerInput: controllerInput) + } + + func set(_ input: Input?, forControllerInput controllerInput: Input) + { + self.inputMapping.set(input, forControllerInput: controllerInput) + } +} diff --git a/Delta/Database/Model/Human/SaveState.swift b/Delta/Database/Model/Human/SaveState.swift index acdfd55..e9c139f 100644 --- a/Delta/Database/Model/Human/SaveState.swift +++ b/Delta/Database/Model/Human/SaveState.swift @@ -13,6 +13,7 @@ import DeltaCore @objc public enum SaveStateType: Int16 { case auto + case quick case general case locked } @@ -78,4 +79,14 @@ public class SaveState: _SaveState, SaveStateProtocol print(error) } } + + class func fetchRequest(for game: Game, type: SaveStateType) -> NSFetchRequest + { + let predicate = NSPredicate(format: "%K == %@ AND %K == %d", #keyPath(SaveState.game), game, #keyPath(SaveState.type), type.rawValue) + + let fetchRequest: NSFetchRequest = SaveState.fetchRequest() + fetchRequest.predicate = predicate + + return fetchRequest + } } diff --git a/Delta/Database/Model/Machine/_GameControllerInputMapping.swift b/Delta/Database/Model/Machine/_GameControllerInputMapping.swift new file mode 100644 index 0000000..cc28acb --- /dev/null +++ b/Delta/Database/Model/Machine/_GameControllerInputMapping.swift @@ -0,0 +1,28 @@ +// DO NOT EDIT. This file is machine-generated and constantly overwritten. +// Make changes to GameControllerInputMapping.swift instead. + +import Foundation +import CoreData + +import DeltaCore + +public class _GameControllerInputMapping: NSManagedObject +{ + @nonobjc public class func fetchRequest() -> NSFetchRequest { + return NSFetchRequest(entityName: "GameControllerInputMapping") + } + + // MARK: - Properties + + @NSManaged public var deltaCoreInputMapping: Any + + @NSManaged public var gameControllerInputType: GameControllerInputType + + @NSManaged public var gameType: GameType + + @NSManaged public var playerIndex: Int16 + + // MARK: - Relationships + +} + diff --git a/Delta/Database/Model/Migrations/Delta.xcmappingmodel/xcmapping.xml b/Delta/Database/Model/Migrations/Delta.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000..f46f360 --- /dev/null +++ b/Delta/Database/Model/Migrations/Delta.xcmappingmodel/xcmapping.xml @@ -0,0 +1,282 @@ + + + + + + 134481920 + D2256298-187C-4E34-9D85-C9390A5A2A14 + 146 + + + + NSPersistenceFrameworkVersion + 754 + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + name + + + + 1 + game + + + + supportedConfigurations + + + + modifiedDate + + + + identifier + + + + creationDate + + + + name + + + + filename + + + + type + + + + 1 + previewGame + + + + identifier + + + + 1 + previewSaveState + + + + Cheat + Undefined + 6 + Cheat + 1 + + + + + + index + + + + SaveStateToSaveStateMigrationPolicy + SaveState + Undefined + 4 + SaveState + 1 + + + + + + deltaCoreInputMapping + + + + 1 + game + + + + gameType + + + + modifiedDate + + + + Delta/Database/Model/Delta.xcdatamodeld/Delta.xcdatamodel + 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1Y2tldEZvckNsYXNzZXNzdG9yYWdlVV9uYW1lXxAfWERCdWNrZXRGb3JJbnRlcmZhY2Vzd2FzRW5jb2RlZF8QHlhEQnVja2V0Rm9yRGF0YVR5cGVzd2FzRW5jb2RlZF8QEF91bmlxdWVFbGVtZW50SUSABIEEZYEEY4ABgASAAIEEZIEEZhAAgAWAA4AEgASAAFBTWUVT0wA2ADcACgA4AD8ARldOUy5rZXlzWk5TLm9iamVjdHOmADkAOgA7ADwAPQA+gAaAB4AIgAmACoALpgBAAEEAQgBDAEQARYAMgLaA8YEBH4EDvYECgoAuXxAaR2FtZUNvbnRyb2xsZXJJbnB1dE1hcHBpbmdZU2F2ZVN0YXRlVEdhbWVVQ2hlYXReQ29udHJvbGxlclNraW5eR2FtZUNvbGxlY3Rpb27fEBAATgBPAFAAUQAdAFIAUwAfAFQAVQAKACEAVgBXACQAWABZAFoAJQAlABAAXgBfAC0AJQBZAGIAOQBZAGUAZgBnXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gA6ANoAEgASAAoAPgLOABIAOgLWABoAOgLSADQgSaBzm0FdvcmRlcmVk0wA2ADcACgBrAG0ARqEAbIAQoQBugBGALl5YRF9QU3RlcmVvdHlwZdkAHQAhAHIACgAkAHMAHwBYAHQAQABsAFkAeAATACUALQBnAHxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WADIAQgA6ANYAAgAQIgBLTADYANwAKAH4AiABGqQB/AIAAgQCCAIMAhACFAIYAh4ATgBSAFYAWgBeAGIAZgBqAG6kAiQCKAIsAjACNAI4AjwCQAJGAHIAggCGAJ4AogCqALIAvgDOALl8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwCoABMAbgBnAGcAZwAtAGcArwB/AGcAZwATAGdVX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAHYAAgBEICAgIgB+AEwgIgAAI0gA3AAoAtgC3oIAe0gC5ALoAuwC8WiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjALsAvQC+V05TQXJyYXlYTlNPYmplY3TSALkAugDAAMFfEBBYRFVNTFByb3BlcnR5SW1wpADCAMMAxAC+XxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAG4AZwBnAGcALQBnAK8AgABnAGcAEwBngACAAIAAgBEICAgIgB+AFAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMA1gATAG4AZwBnAGcALQBnAK8AgQBnAGcAEwBngACAIoAAgBEICAgIgB+AFQgIgAAI0gA3AAoA5AC3oQDlgCOAHtIANwAKAOgAt6MA6QDqAOuAJIAlgCaAHl8QF2dhbWVDb250cm9sbGVySW5wdXRUeXBlWGdhbWVUeXBlW3BsYXllckluZGV43xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAG4AZwBnAGcALQBnAK8AggBnAGcAEwBngACAAIAAgBEICAgIgB+AFggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBAQATAG4AZwBnAGcALQBnAK8AgwBnAGcAEwBngACAKYAAgBEICAgIgB+AFwgIgAAI0gA3AAoBDwC3oIAe3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAG4AZwBnAGcALQBnAK8AhABnAGcAEwBngACAK4AAgBEICAgIgB+AGAgIgAAICN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATASMAEwBuAGcAZwBnAC0AZwCvAIUAZwBnABMAZ4AAgC2AAIARCAgICIAfgBkICIAACNMANgA3AAoBMQEyAEagoIAu0gC5ALoBNQE2XxATTlNNdXRhYmxlRGljdGlvbmFyeaMBNQE3AL5cTlNEaWN0aW9uYXJ53xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBOgATAG4AZwBnAGcALQBnAK8AhgBnAGcAEwBngACAMIAAgBEICAgIgB+AGggIgAAI1gAhAAoAJABYAB0AHwFIAUkAEwBnABMALYAxgDKAAAiAAF8QFFhER2VuZXJpY1JlY29yZENsYXNz0gC5ALoBTwFQXVhEVU1MQ2xhc3NJbXCmAVEBUgFTAVQBVQC+XVhEVU1MQ2xhc3NJbXBfEBJYRFVNTENsYXNzaWZpZXJJbXBfEBFYRFVNTE5hbWVzcGFjZUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVtZW50SW1w3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBWAATAG4AZwBnAGcALQBnAK8AhwBnAGcAEwBngACANIAAgBEICAgIgB+AGwgIgAAIXxAaR2FtZUNvbnRyb2xsZXJJbnB1dE1hcHBpbmfSALkAugFnAWhfEBJYRFVNTFN0ZXJlb3R5cGVJbXCnAWkBagFrAWwBbQFuAL5fEBJYRFVNTFN0ZXJlb3R5cGVJbXBdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDTADYANwAKAXABdQBGpADqAXIBcwF0gCWAN4A4gDmkAXYBdwF4AXmAOoBmgICAmoAuXxAXZ2FtZUNvbnRyb2xsZXJJbnB1dFR5cGVfEBVkZWx0YUNvcmVJbnB1dE1hcHBpbmdbcGxheWVySW5kZXjfEBIAnQCeAJ8BfwAdAKEAogGAAB8AoAGBAKMACgAhAKQApQAkAKYAEwATABMAJQBAAGcAZwGJAC0AZwBZAGcBjQDqAGcAZwGRAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAMCAiAPAiADgiAZYAlCAiAOwgS+6ggSdMANgA3AAoBlQGYAEaiAZYBl4A9gD6iAZkBmoA/gFSALl8QElhEX1BQcm9wU3RlcmVvdHlwZV8QElhEX1BBdHRfU3RlcmVvdHlwZdkAHQAhAZ8ACgAkAaAAHwBYAaEBdgGWAFkAeAATACUALQBnAalfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAOoA9gA6ANYAAgAQIgEDTADYANwAKAasBtABGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqAG1AbYBtwG4AbkBugG7AbyASYBKgEuAT4BQgFGAUoBTgC5fEBtYRF9QUFNLX2lzU3RvcmVkSW5UcnV0aEZpbGVfEBtYRF9QUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBBYRF9QUFNLX3VzZXJJbmZ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FhQBnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACAqAgICAiAH4BcCAiAAAhaZHVwbGljYXRlc9IANwAKBq4At6CAHtIAuQC6BrEGslpYRFBNRW50aXR5pwazBrQGtQa2BrcGuAC+WlhEUE1FbnRpdHldWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEBAGuga7BrwGvQAdBr4GvwAfBsAGwQAKACEGwgbDACQAWABZBsUAJQAlABAGyQBfAC0AJQBZAGIAOgBZBtAG0QBnXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgA6AyoAEgASAAoC4gLOABIAOgLWAB4AOgQO8gLcIEj8r953TADYANwAKBtUG1wBGoQBsgBChBtiAuYAu2QAdACEG2wAKACQG3AAfAFgG3QBBAGwAWQB4ABMAJQAtAGcG5V8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYC2gBCADoA1gACABAiAutMANgA3AAoG5wbxAEapAH8AgACBAIIAgwCEAIUAhgCHgBOAFIAVgBa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ICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATGPYAExizAGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgQIvgACBAioICAgIgB+AQwgIgAAI0wA2ADcAChkEGQUARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMYswBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACBAioICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGLMAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgQIqCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAExizAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIECKggICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMYswBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBAioICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATGLMAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQIqCAgICIAfgEgICIAACNkAHQAhGVMACgAkGVQAHwBYGVUJuQfKAFkAeAATACUALQBnGV1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAieA1YAOgDWAAIAECIECNtMANgA3AAoZXxlnAEanCHsIfAh9CH4IfwiACIGA5IDlgOaA54DogOmA6qcZaBlpGWoZaxlsGW0ZboECN4ECOIECOYECOoECO4ECPIECPYAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMIlAATGLQAZwBnAGcALQBnAK8IewBnAGcAEwBngACA7IAAgQI1CAgICIAfgOQICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATCq8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xgwAAMYUAADGHAAAxiQAAMYsAADGNAAAxjgAAMY8AADGRAAAxkgAAMZQAADGVAAAxlwAAMZkAADGaAAAxmwAAMZ0AADGeAAAxowAAMbAAADG1AAAxtwAAMbkAADG+AAAxwAAAMcIAADHEAAAx6QAAMg0AADI0AAAyWAAAMloAADJcAAAyXgAAMmAAADJiAAAyZAAAMmUAADJnAAAydAAAMoUAADKHAAAyiQAAMosAADKNAAAyjwAAMpEAADKTAAAylQAAMqYAADKoAAAyqgAAMqwAADKuAAAysAAAMrIAADK0AAAytgAAMrgAADL3AAAy+QAAMvsAADL9AAAy/wAAMwAAADMBAAAzAgAAMwMAADMFAAAzBwAAMwgAADMJAAAzCwAAMwwAADNLAAAzTQAAM08AADNRAAAzUwAAM1QAADNVAAAzVgAAM1cAADNZAAAzWwAAM1wAADNdAAAzXwAAM2AAADOfAAAzoQAAM6MAADOlAAAzpwAAM6gAADOpAAAzqgAAM6sAADOtAAAzrwAAM7AAADOxAAAzswAAM7QAADPBAAAzwgAAM8MAADPFAAA0BAAANAYAADQIAAA0CgAANAwAADQNAAA0DgAANA8AADQQAAA0EgAANBQAADQVAAA0FgAANBgAADQZAAA0WAAANFoAADRcAAA0XgAANGAAADRhAAA0YgAANGMAADRkAAA0ZgAANGgAADRpAAA0agAANGwAADRtAAA0rAAANK4AADSwAAA0sgAANLQAADS1AAA0tgAANLcAADS4AAA0ugAANLwAADS9AAA0vgAANMAAADTBAAA1AAAANQIAADUEAAA1BgAANQgAADUJAAA1CgAANQsAADUMAAA1DgAANRAAADURAAA1EgAANRQAADUVAAA1VAAANVYAADVYAAA1WgAANVwAADVdAAA1XgAANV8AADVgAAA1YgAANWQAADVlAAA1ZgAANWgAADVpAAA1jgAANbIAADXZAAA1/QAANf8AADYBAAA2AwAANgUAADYHAAA2CQAANgoAADYMAAA2GQAANigAADYqAAA2LAAANi4AADYwAAA2MgAANjQAADY2AAA2RQAANkcAADZJAAA2SwAANk0AADZPAAA2UQAANlMAADZVAAA2lAAANpYAADaYAAA2mgAANpwAADadAAA2ngAANp8AADagAAA2ogAANqQAADalAAA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C6wAAQu0AAELvAABC8QAAQvIAAELzAABC9AAAQvUAAEL3AABC+QAAQvoAAEL7AABC/QAAQv4AAEMLAABDDAAAQw0AAEMPAABDTgAAQ1AAAENSAABDVAAAQ1YAAENXAABDWAAAQ1kAAENaAABDXAAAQ14AAENfAABDYAAAQ2IAAENjAABDogAAQ6QAAEOmAABDqAAAQ6oAAEOrAABDrAAAQ60AAEOuAABDsAAAQ7IAAEOzAABDtAAAQ7YAAEO3AABDuAAAQ/cAAEP5AABD+wAAQ/0AAEP/AABEAAAARAEAAEQCAABEAwAARAUAAEQHAABECAAARAkAAEQLAABEDAAAREsAAERNAABETwAARFEAAERTAABEVAAARFUAAERWAABEVwAARFkAAERbAABEXAAARF0AAERfAABEYAAARJ8AAEShAABEowAARKUAAESnAABEqAAARKkAAESqAABEqwAARK0AAESvAABEsAAARLEAAESzAABEtAAARNkAAET9AABFJAAARUgAAEVKAABFTAAARU4AAEVQAABFUgAARVQAAEVVAABFVwAARWQAAEVzAABFdQAARXcAAEV5AABFewAARX0AAEV/AABFgQAARZAAAEWSAABFlAAARZYAAEWYAABFmwAARZ4AAEWhAABFowAARbUAAEXJAABF2wAARfAAAEYCAABGEQAARi4AAEZtAABGbwAARnEAAEZzAABGdQAARnYAAEZ3AABGeAAARnkAAEZ7AABGfQAARn4AAEZ/AABGgQAARoIAAEbBAABGwwAARsUAAEbHAABGyQAARsoAAEbLAABGzAAARs0AAEbPAABG0QAARtIAAEbTAABG1QAARtYAAEbYAABHFwAARxkAAEcbAABHHQAARx8AAEcgAABHIQAARyIAAEcjAABHJQAARycAAEcoAABHKQAARysAAEcsAABHawAAR20AAEdvAABHcQAAR3MAAEd0AABHdQAAR3YAAEd3AABHeQAAR3sAAEd8AABHfQAAR38AAEeAAABHwwAAR+cAAEgLAABILgAASFUAAEh1AABInAAASMMAAEjjAABJBwAASSsAAEktAABJMAAASTIAAEk0AABJNgAASTgAAEk6AABJPAAAST4AAElAAABJQgAASUQAAElHAABJSQAASUoAAElPAABJXAAASV8AAElhAABJZAAASWYAAEloAABJjQAASbEAAEnYAABJ/AAASf4AAEoAAABKAgAASgQAAEoGAABKCAAASgkAAEoLAABKGAAASisAAEotAABKLwAASjEAAEozAABKNQAASjcAAEo5AABKOwAASj0AAEpQAABKUgAASlQAAEpWAABKWAAASloAAEpcAABKXwAASmIAAEplAABKZwAASqYAAEqoAABKqgAASqwAAEquAABKrwAASrAAAEqxAABKsgAASrQAAEq2AABKtwAASrgAAEq6AABKuwAASsQAAErFAABKxwAASwYAAEsIAABLCgAASwwAAEsOAABLDwAASxAAAEsRAABLEgAASxQAAEsWAABLFwAASxgAAEsaAABLGwAAS1oAAEtcAABLXgAAS2AAAEtiAABLYwAAS2QAAEtlAABLZgAAS2gAAEtqAABLawAAS2wAAEtuAABLbwAAS3gAAEt7AABLfQAAS38AAEuIAABLiwAAS40AAEuPAABLzgAAS9AAAEvSAABL1AAAS9YAAEvXAABL2AAAS9kAAEvaAABL3AAAS94AAEvfAABL4AAAS+IAAEvjAABMIgAATCQAAEwmAABMKAAATCoAAEwrAABMLAAATC0AAEwuAABMMAAATDIAAEwzAABMNAAATDYAAEw3AABMQAAATEEAAExDAABMggAATIQAAEyGAABMiAAATIoAAEyLAABMjAAATI0AAEyOAABMkAAATJIAAEyTAABMlAAATJYAAEyXAABM1gAATNgAAEzbAABM3QAATN8AAEzgAABM4QAATOIAAEzjAABM5QAATOcAAEzoAABM6QAATOsAAEzsAABM+QAATPoAAEz7AABM/QAATTwAAE0+AABNQAAATUIAAE1EAABNRQAATUYAAE1HAABNSAAATUoAAE1MAABNTQAATU4AAE1QAABNUQAATZAAAE2SAABNlAAATZYAAE2YAABNmQAATZoAAE2bAABNnAAATZ4AAE2gAABNoQAATaIAAE2kAABNpQAATbIAAE3FAABNyAAATcsAAE3OAABN0AAATdMAAE3WAABN2AAATdoAAE3cAABN7wAATfIAAE31AABN+AAATfsAAE3+AABOAQAATgQAAE4HAABOCgAATgwAAE4TAABOJgAATjEAAE48AABOTgAATpkAAE68AABO3AAATvwAAE7+AABPAAAATwIAAE8EAABPBgAATwcAAE8IAABPCwAATwwAAE8OAABPDwAATxIAAE8VAABPFgAATxcAAE8aAABPGwAATyAAAE8tAABPMgAATzQAAE82AABPOwAATz4AAE9BAABPQwAAT2gAAE+MAABPswAAT9cAAE/aAABP3AAAT94AAE/gAABP4gAAT+QAAE/lAABP6AAAT/UAAFAGAABQCAAAUAoAAFAMAABQDgAAUBAAAFASAABQFAAAUBYAAFAnAABQKgAAUC0AAFAwAABQMwAAUDYAAFA5AABQPAAAUD8AAFBBAABQgAAAUIIAAFCEAABQhgAAUIkAAFCKAABQiwAAUIwAAFCNAABQjwAAUJEAAFCSAABQkwAAUJUAAFCWAABQ1QAAUNcAAFDZAABQ2wAAUN4AAFDfAABQ4AAAUOEAAFDiAABQ5AAAUOYAAFDnAABQ6AAAUOoAAFDrAABRKgAAUSwAAFEvAABRMQAAUTQAAFE1AABRNgAAUTcAAFE4AABROgAAUTwAAFE9AABRPgAAUUAAAFFBAABRTgAAUU8AAFFQAABRUgAAUZEAAFGTAABRlQAAUZcAAFGaAABRmwAAUZwAAFGdAABRngAAUaAAAFGiAABRowAAUaQAAFGmAABRpwAAUeYAAFHoAABR6gAAUewAAFHvAABR8AAAUfEAAFHyAABR8wAAUfUAAFH3AABR+AAAUfkAAFH7AABR/AAAUjsAAFI9AABSPwAAUkEAAFJEAABSRQAAUkYAAFJHAABSSAAAUkoAAFJMAABSTQAAUk4AAFJQAABSUQAAUpAAAFKSAABSlAAAUpYAAFKZAABSmgAAUpsAAFKcAABSnQAAUp8AAFKhAABSogAAUqMAAFKlAABSpgAAUuUAAFLnAABS6QAAUusAAFLuAABS7wAAUvAAAFLxAABS8gAAUvQAAFL2AABS9wAAUvgAAFL6AABS+wAAUyAAAFNEAABTawAAU48AAFOSAABTlAAAU5YAAFOYAABTmgAAU5wAAFOdAABToAAAU60AAFO8AABTvgAAU8AAAFPCAABTxAAAU8YAAFPIAABTygAAU9kAAFPcAABT3wAAU+IAAFPlAABT6AAAU+sAAFPuAABT8AAAVC8AAFQxAABUMwAAVDUAAFQ4AABUOQAAVDoAAFQ7AABUPAAAVD4AAFRAAABUQQAAVEIAAFREAABURQAAVIQAAFSGAABUiQAAVIsAAFSOAABUjwAAVJAAAFSRAABUkgAAVJQAAFSWAABUlwAAVJgAAFSaAABUmwAAVJ0AAFTcAABU3gAAVOAAAFTiAABU5QAAVOYAAFTnAABU6AAAVOkAAFTrAABU7QAAVO4AAFTvAABU8QAAVPIAAFUxAABVMwAAVTYAAFU4AABVOwAAVTwAAFU9AABVPgAAVT8AAFVBAABVQwAAVUQAAFVFAABVRwAAVUgAAFWLAABVrwAAVdMAAFX2AABWHQAAVj0AAFZkAABWiwAAVqsAAFbPAABW8wAAVvUAAFb4AABW+gAAVvwAAFb+AABXAQAAVwMAAFcFAABXBwAAVwkAAFcLAABXDQAAVxAAAFcTAABXFAAAVxkAAFcmAABXKQAAVysAAFcuAABXMQAAVzMAAFdYAABXfAAAV6MAAFfHAABXygAAV8wAAFfOAABX0AAAV9IAAFfUAABX1QAAV9gAAFflAABX+AAAV/oAAFf8AABX/gAAWAAAAFgCAABYBAAAWAYAAFgIAABYCgAAWB0AAFggAABYIwAAWCYAAFgpAABYLAAAWC8AAFgyAABYNQAAWDgAAFg6AABYeQAAWHsAAFh+AABYgAAAWIMAAFiEAABYhQAAWIYAAFiHAABYiQAAWIsAAFiMAABYjQAAWI8AAFiQAABYmQAAWJoAAFicAABY2wAAWN0AAFjfAABY4QAAWOQAAFjlAABY5gAAWOcAAFjoAABY6gAAWOwAAFjtAABY7gAAWPAAAFjxAABZMAAAWTIAAFk1AABZNwAAWToAAFk7AABZPAAAWT0AAFk+AABZQAAAWUIAAFlDAABZRAAAWUYAAFlHAABZUAAAWVMAAFlWAABZWAAAWWEAAFlkAABZZgAAWWgAAFmnAABZqQAAWasAAFmtAABZsAAAWbEAAFmyAABZswAAWbQAAFm2AABZuAAAWbkAAFm6AABZvAAAWb0AAFn8AABZ/gAAWgEAAFoDAABaBgAAWgcAAFoIAABaCQAAWgoAAFoMAABaDgAAWg8AAFoQAABaEgAAWhMAAFocAABaHQAAWh8AAFpeAABaYAAAWmIAAFpkAABaZwAAWmgAAFppAABaagAAWmsAAFptAABabwAAWnAAAFpxAABacwAAWnQAAFqzAABatQAAWrgAAFq6AABavQAAWr4AAFq/AABawAAAWsEAAFrDAABaxQAAWsYAAFrHAABayQAAWsoAAFrXAABa2AAAWtkAAFrbAABbGgAAWxwAAFseAABbIAAAWyMAAFskAABbJQAAWyYAAFsnAABbKQAAWysAAFssAABbLQAAWy8AAFswAABbbwAAW3EAAFtzAABbdQAAW3gAAFt5AABbegAAW3sAAFt8AABbfgAAW4AAAFuBAABbggAAW4QAAFuFAABbkgAAW6MAAFulAABbqAAAW6oAAFutAABbrwAAW7EAAFuzAABbtgAAW8cAAFvKAABbzQAAW9AAAFvTAABb1gAAW9kAAFvcAABb3wAAW+EAAFvuAABb8wAAW/0AAFxIAABcawAAXIsAAFyrAABcrQAAXK8AAFyxAABcswAAXLYAAFy3AABcuAAAXLsAAFy8AABcvgAAXL8AAFzCAABcxAAAXMUAAFzGAABcyQAAXMoAAFzPAABc3AAAXOEAAFzjAABc5QAAXOoAAFztAABc8AAAXPIAAF0XAABdOwAAXWIAAF2GAABdiQAAXYsAAF2NAABdjwAAXZEAAF2TAABdlAAAXZcAAF2kAABdtQAAXbcAAF25AABduwAAXb0AAF2/AABdwQAAXcMAAF3FAABd1gAAXdkAAF3cAABd3wAAXeIAAF3lAABd6AAAXesAAF3uAABd8AAAXi8AAF4xAABeMwAAXjUAAF44AABeOQAAXjoAAF47AABePAAAXj4AAF5AAABeQQAAXkIAAF5EAABeRQAAXoQAAF6GAABeiAAAXooAAF6NAABejgAAXo8AAF6QAABekQAAXpMAAF6VAABelgAAXpcAAF6ZAABemgAAXtkAAF7bAABe3gAAXuAAAF7jAABe5AAAXuUAAF7mAABe5wAAXukAAF7rAABe7AAAXu0AAF7vAABe8AAAXv0AAF7+AABe/wAAXwEAAF9AAABfQgAAX0QAAF9GAABfSQAAX0oAAF9LAABfTAAAX00AAF9PAABfUQAAX1IAAF9TAABfVQAAX1YAAF+VAABflwAAX5kAAF+bAABfngAAX58AAF+gAABfoQAAX6IAAF+kAABfpgAAX6cAAF+oAABfqgAAX6sAAF/qAABf7AAAX+4AAF/wAABf8wAAX/QAAF/1AABf9gAAX/cAAF/5AABf+wAAX/wAAF/9AABf/wAAYAAAAGA/AABgQQAAYEMAAGBFAABgSAAAYEkAAGBKAABgSwAAYEwAAGBOAABgUAAAYFEAAGBSAABgVAAAYFUAAGCUAABglgAAYJgAAGCaAABgnQAAYJ4AAGCfAABgoAAAYKEAAGCjAABgpQAAYKYAAGCnAABgqQAAYKoAAGDPAABg8wAAYRoAAGE+AABhQQAAYUMAAGFFAABhRwAAYUkAAGFLAABhTAAAYU8AAGFcAABhawAAYW0AAGFvAABhcQAAYXMAAGF1AABhdwAAYXkAAGGIAABhiwAAYY4AAGGRAABhlAAAYZcAAGGaAABhnQAAYZ8AAGHeAABh4AAAYeIAAGHkAABh5wAAYegAAGHpAABh6gAAYesAAGHtAABh7wAAYfAAAGHxAABh8wAAYfQAAGIzAABiNQAAYjcAAGI5AABiPAAAYj0AAGI+AABiPwAAYkAAAGJCAABiRAAAYkUAAGJGAABiSAAAYkkAAGKIAABiigAAYowAAGKOAABikQAAYpIAAGKTAABilAAAYpUAAGKXAABimQAAYpoAAGKbAABinQAAYp4AAGLdAABi3wAAYuEAAGLjAABi5gAAYucAAGLoAABi6QAAYuoAAGLsAABi7gAAYu8AAGLwAABi8gAAYvMAAGMyAABjNAAAYzYAAGM4AABjOwAAYzwAAGM9AABjPgAAYz8AAGNBAABjQwAAY0QAAGNFAABjRwAAY0gAAGOHAABjiQAAY4sAAGONAABjkAAAY5EAAGOSAABjkwAAY5QAAGOWAABjmAAAY5kAAGOaAABjnAAAY50AAGPcAABj3gAAY+EAAGPjAABj5gAAY+cAAGPoAABj6QAAY+oAAGPsAABj7gAAY+8AAGPwAABj8gAAY/MAAGP8AABkDwAAZBwAAGQvAABkPAAAZE8AAGRmAABkeAAAZMMAAGTmAABlBgAAZSYAAGUoAABlKgAAZSwAAGUuAABlMQAAZTIAAGUzAABlNgAAZTcAAGU5AABlOgAAZTwAAGU/AABlQAAAZUEAAGVEAABlRQAAZU4AAGVbAABlYAAAZWIAAGVkAABlaQAAZWwAAGVvAABlcQAAZZYAAGW6AABl4QAAZgUAAGYIAABmCgAAZgwAAGYOAABmEAAAZhIAAGYTAABmFgAAZiMAAGY0AABmNgAAZjgAAGY6AABmPAAAZj4AAGZAAABmQgAAZkQAAGZVAABmWAAAZlsAAGZeAABmYQAAZmQAAGZnAABmagAAZm0AAGZvAABmrgAAZrAAAGayAABmtAAAZrcAAGa4AABmuQAAZroAAGa7AABmvQAAZr8AAGbAAABmwQAAZsMAAGbEAABnAwAAZwUAAGcHAABnCQAAZwwAAGcNAABnDgAAZw8AAGcQAABnEgAAZxQAAGcVAABnFgAAZxgAAGcZAABnWAAAZ1oAAGddAABnXwAAZ2IAAGdjAABnZAAAZ2UAAGdmAABnaAAAZ2oAAGdrAABnbAAAZ24AAGdvAABnfAAAZ30AAGd+AABngAAAZ78AAGfBAABnwwAAZ8UAAGfIAABnyQAAZ8oAAGfLAABnzAAAZ84AAGfQAABn0QAAZ9IAAGfUAABn1QAAaBQAAGgWAABoGAAAaBoAAGgdAABoHgAAaB8AAGggAABoIQAAaCMAAGglAABoJgAAaCcAAGgpAABoKgAAaGkAAGhrAABobQAAaG8AAGhyAABocwAAaHQAAGh1AABodgAAaHgAAGh6AABoewAAaHwAAGh+AABofwAAaL4AAGjAAABowgAAaMQAAGjHAABoyAAAaMkAAGjKAABoywAAaM0AAGjPAABo0AAAaNEAAGjTAABo1AAAaRMAAGkVAABpFwAAaRkAAGkcAABpHQAAaR4AAGkfAABpIAAAaSIAAGkkAABpJQAAaSYAAGkoAABpKQAAaU4AAGlyAABpmQAAab0AAGnAAABpwgAAacQAAGnGAABpyAAAacoAAGnLAABpzgAAadsAAGnqAABp7AAAae4AAGnwAABp8gAAafQAAGn2AABp+AAAagcAAGoKAABqDQAAahAAAGoTAABqFgAAahkAAGocAABqHgAAal0AAGpfAABqYQAAamMAAGpmAABqZwAAamgAAGppAABqagAAamwAAGpuAABqbwAAanAAAGpyAABqcwAAarIAAGq0AABqtgAAargAAGq7AABqvAAAar0AAGq+AABqvwAAasEAAGrDAABqxAAAasUAAGrHAABqyAAAawcAAGsJAABrCwAAaw0AAGsQAABrEQAAaxIAAGsTAABrFAAAaxYAAGsYAABrGQAAaxoAAGscAABrHQAAa1wAAGteAABrYQAAa2MAAGtmAABrZwAAa2gAAGtpAABragAAa2wAAGtuAABrbwAAa3AAAGtyAABrcwAAa3YAAGu1AABrtwAAa7kAAGu7AABrvgAAa78AAGvAAABrwQAAa8IAAGvEAABrxgAAa8cAAGvIAABrygAAa8sAAGwKAABsDAAAbA4AAGwQAABsEwAAbBQAAGwVAABsFgAAbBcAAGwZAABsGwAAbBwAAGwdAABsHwAAbCAAAGxfAABsYQAAbGMAAGxlAABsaAAAbGkAAGxqAABsawAAbGwAAGxuAABscAAAbHEAAGxyAABsdAAAbHUAAGzAAABs4wAAbQMAAG0jAABtJQAAbScAAG0pAABtKwAAbS4AAG0vAABtMAAAbTMAAG00AABtNgAAbTcAAG05AABtOwAAbTwAAG09AABtQAAAbUEAAG1GAABtUwAAbVgAAG1aAABtXAAAbWEAAG1kAABtZwAAbWkAAG2OAABtsgAAbdkAAG39AABuAAAAbgIAAG4EAABuBgAAbggAAG4KAABuCwAAbg4AAG4bAABuLAAAbi4AAG4wAABuMgAAbjQAAG42AABuOAAAbjoAAG48AABuTQAAblAAAG5TAABuVgAAblkAAG5cAABuXwAAbmIAAG5lAABuZwAAbqYAAG6oAABuqgAAbqwAAG6vAABusAAAbrEAAG6yAABuswAAbrUAAG63AABuuAAAbrkAAG67AABuvAAAbvsAAG79AABu/wAAbwEAAG8EAABvBQAAbwYAAG8HAABvCAAAbwoAAG8MAABvDQAAbw4AAG8QAABvEQAAb1AAAG9SAABvVQAAb1cAAG9aAABvWwAAb1wAAG9dAABvXgAAb2AAAG9iAABvYwAAb2QAAG9mAABvZwAAb3QAAG91AABvdgAAb3gAAG+3AABvuQAAb7sAAG+9AABvwAAAb8EAAG/CAABvwwAAb8QAAG/GAABvyAAAb8kAAG/KAABvzAAAb80AAHAMAABwDgAAcBAAAHASAABwFQAAcBYAAHAXAABwGAAAcBkAAHAbAABwHQAAcB4AAHAfAABwIQAAcCIAAHBhAABwYwAAcGUAAHBnAABwagAAcGsAAHBsAABwbQAAcG4AAHBwAABwcgAAcHMAAHB0AABwdgAAcHcAAHC2AABwuAAAcLoAAHC8AABwvwAAcMAAAHDBAABwwgAAcMMAAHDFAABwxwAAcMgAAHDJAABwywAAcMwAAHELAABxDQAAcQ8AAHERAABxFAAAcRUAAHEWAABxFwAAcRgAAHEaAABxHAAAcR0AAHEeAABxIAAAcSEAAHFGAABxagAAcZEAAHG1AABxuAAAcboAAHG8AABxvgAAccAAAHHCAABxwwAAccYAAHHTAABx4gAAceQAAHHmAABx6AAAceoAAHHsAABx7gAAcfAAAHH/AAByAgAAcgUAAHIIAAByCwAAcg4AAHIRAAByFAAAchYAAHJVAAByVwAAclkAAHJbAAByXgAAcl8AAHJgAAByYQAAcmIAAHJkAAByZgAAcmcAAHJoAAByagAAcmsAAHKqAAByrAAAcq4AAHKwAAByswAAcrQAAHK1AABytgAAcrcAAHK5AAByuwAAcrwAAHK9AAByvwAAcsAAAHL/AABzAQAAcwMAAHMFAABzCAAAcwkAAHMKAABzCwAAcwwAAHMOAABzEAAAcxEAAHMSAABzFAAAcxUAAHNUAABzVgAAc1kAAHNbAABzXgAAc18AAHNgAABzYQAAc2IAAHNkAABzZgAAc2cAAHNoAABzagAAc2sAAHOqAABzrAAAc64AAHOwAABzswAAc7QAAHO1AABztgAAc7cAAHO5AABzuwAAc7wAAHO9AABzvwAAc8AAAHP/AAB0AQAAdAMAAHQFAAB0CAAAdAkAAHQKAAB0CwAAdAwAAHQOAAB0EAAAdBEAAHQSAAB0FAAAdBUAAHRUAAB0VgAAdFgAAHRaAAB0XQAAdF4AAHRfAAB0YAAAdGEAAHRjAAB0ZQAAdGYAAHRnAAB0aQAAdGoAAHS1AAB02AAAdPgAAHUYAAB1GgAAdRwAAHUeAAB1IAAAdSMAAHUkAAB1JQAAdSgAAHUpAAB1KwAAdSwAAHUuAAB1MQAAdTIAAHUzAAB1NgAAdTcAAHU8AAB1SQAAdU4AAHVQAAB1UgAAdVcAAHVaAAB1XQAAdV8AAHWEAAB1qAAAdc8AAHXzAAB19gAAdfgAAHX6AAB1/AAAdf4AAHYAAAB2AQAAdgQAAHYRAAB2IgAAdiQAAHYmAAB2KAAAdioAAHYsAAB2LgAAdjAAAHYyAAB2QwAAdkYAAHZJAAB2TAAAdk8AAHZSAAB2VQAAdlgAAHZbAAB2XQAAdpwAAHaeAAB2oAAAdqIAAHalAAB2pgAAdqcAAHaoAAB2qQAAdqsAAHatAAB2rgAAdq8AAHaxAAB2sgAAdvEAAHbzAAB29QAAdvcAAHb6AAB2+wAAdvwAAHb9AAB2/gAAdwAAAHcCAAB3AwAAdwQAAHcGAAB3BwAAd0YAAHdIAAB3SwAAd00AAHdQAAB3UQAAd1IAAHdTAAB3VAAAd1YAAHdYAAB3WQAAd1oAAHdcAAB3XQAAd2oAAHdrAAB3bAAAd24AAHetAAB3rwAAd7EAAHezAAB3tgAAd7cAAHe4AAB3uQAAd7oAAHe8AAB3vgAAd78AAHfAAAB3wgAAd8MAAHgCAAB4BAAAeAYAAHgIAAB4CwAAeAwAAHgNAAB4DgAAeA8AAHgRAAB4EwAAeBQAAHgVAAB4FwAAeBgAAHhXAAB4WQAAeFsAAHhdAAB4YAAAeGEAAHhiAAB4YwAAeGQAAHhmAAB4aAAAeGkAAHhqAAB4bAAAeG0AAHisAAB4rgAAeLAAAHiyAAB4tQAAeLYAAHi3AAB4uAAAeLkAAHi7AAB4vQAAeL4AAHi/AAB4wQAAeMIAAHkBAAB5AwAAeQUAAHkHAAB5CgAAeQsAAHkMAAB5DQAAeQ4AAHkQAAB5EgAAeRMAAHkUAAB5FgAAeRcAAHk8AAB5YAAAeYcAAHmrAAB5rgAAebAAAHmyAAB5tAAAebYAAHm4AAB5uQAAebwAAHnJAAB52AAAedoAAHncAAB53gAAeeAAAHniAAB55AAAeeYAAHn1AAB5+AAAefsAAHn+AAB6AQAAegQAAHoHAAB6CgAAegwAAHpLAAB6TQAAek8AAHpRAAB6VAAAelUAAHpWAAB6VwAAelgAAHpaAAB6XAAAel0AAHpeAAB6YAAAemEAAHqgAAB6ogAAeqQAAHqmAAB6qQAAeqoAAHqrAAB6rAAAeq0AAHqvAAB6sQAAerIAAHqzAAB6tQAAerYAAHr1AAB69wAAevkAAHr7AAB6/gAAev8AAHsAAAB7AQAAewIAAHsEAAB7BgAAewcAAHsIAAB7CgAAewsAAHtKAAB7TAAAe08AAHtRAAB7VAAAe1UAAHtWAAB7VwAAe1gAAHtaAAB7XAAAe10AAHteAAB7YAAAe2EAAHtkAAB7owAAe6UAAHunAAB7qQAAe6wAAHutAAB7rgAAe68AAHuwAAB7sgAAe7QAAHu1AAB7tgAAe7gAAHu5AAB7+AAAe/oAAHv8AAB7/gAAfAEAAHwCAAB8AwAAfAQAAHwFAAB8BwAAfAkAAHwKAAB8CwAAfA0AAHwOAAB8TQAAfE8AAHxRAAB8UwAAfFYAAHxXAAB8WAAAfFkAAHxaAAB8XAAAfF4AAHxfAAB8YAAAfGIAAHxjAAB8rgAAfNEAAHzxAAB9EQAAfRMAAH0VAAB9FwAAfRkAAH0cAAB9HQAAfR4AAH0hAAB9IgAAfSQAAH0lAAB9JwAAfSkAAH0qAAB9KwAAfS4AAH0vAAB9NAAAfUEAAH1GAAB9SAAAfUoAAH1PAAB9UgAAfVUAAH1XAAB9fAAAfaAAAH3HAAB96wAAfe4AAH3wAAB98gAAffQAAH32AAB9+AAAffkAAH38AAB+CQAAfhoAAH4cAAB+HgAAfiAAAH4iAAB+JAAAfiYAAH4oAAB+KgAAfjsAAH4+AAB+QQAAfkQAAH5HAAB+SgAAfk0AAH5QAAB+UwAAflUAAH6UAAB+lgAAfpgAAH6aAAB+nQAAfp4AAH6fAAB+oAAAfqEAAH6jAAB+pQAAfqYAAH6nAAB+qQAAfqoAAH7pAAB+6wAAfu0AAH7vAAB+8gAAfvMAAH70AAB+9QAAfvYAAH74AAB++gAAfvsAAH78AAB+/gAAfv8AAH8+AAB/QAAAf0MAAH9FAAB/SAAAf0kAAH9KAAB/SwAAf0wAAH9OAAB/UAAAf1EAAH9SAAB/VAAAf1UAAH9iAAB/YwAAf2QAAH9mAAB/pQAAf6cAAH+pAAB/qwAAf64AAH+vAAB/sAAAf7EAAH+yAAB/tAAAf7YAAH+3AAB/uAAAf7oAAH+7AAB/+gAAf/wAAH/+AACAAAAAgAMAAIAEAACABQAAgAYAAIAHAACACQAAgAsAAIAMAACADQAAgA8AAIAQAACATwAAgFEAAIBTAACAVQAAgFgAAIBZAACAWgAAgFsAAIBcAACAXgAAgGAAAIBhAACAYgAAgGQAAIBlAACApAAAgKYAAICoAACAqgAAgK0AAICuAACArwAAgLAAAICxAACAswAAgLUAAIC2AACAtwAAgLkAAIC6AACA+QAAgPsAAID9AACA/wAAgQIAAIEDAACBBAAAgQUAAIEGAACBCAAAgQoAAIELAACBDAAAgQ4AAIEPAACBNAAAgVgAAIF/AACBowAAgaYAAIGoAACBqgAAgawAAIGuAACBsAAAgbEAAIG0AACBwQAAgdAAAIHSAACB1AAAgdYAAIHYAACB2gAAgdwAAIHeAACB7QAAgfAAAIHzAACB9gAAgfkAAIH8AACB/wAAggIAAIIEAACCQwAAgkUAAIJHAACCSQAAgkwAAIJNAACCTgAAgk8AAIJQAACCUgAAglQAAIJVAACCVgAAglgAAIJZAACCmAAAgpoAAIKcAACCngAAgqEAAIKiAACCowAAgqQAAIKlAACCpwAAgqkAAIKqAACCqwAAgq0AAIKuAACC7QAAgu8AAILxAACC8wAAgvYAAIL3AACC+AAAgvkAAIL6AACC/AAAgv4AAIL/AACDAAAAgwIAAIMDAACDQgAAg0QAAINHAACDSQAAg0wAAINNAACDTgAAg08AAINQAACDUgAAg1QAAINVAACDVgAAg1gAAINZAACDmAAAg5oAAIOcAACDngAAg6EAAIOiAACDowAAg6QAAIOlAACDpwAAg6kAAIOqAACDqwAAg60AAIOuAACD7QAAg+8AAIPxAACD8wAAg/YAAIP3AACD+AAAg/kAAIP6AACD/AAAg/4AAIP/AACEAAAAhAIAAIQDAACEQgAAhEQAAIRGAACESAAAhEsAAIRMAACETQAAhE4AAIRPAACEUQAAhFMAAIRUAACEVQAAhFcAAIRYAACEowAAhMYAAITmAACFBgAAhQgAAIUKAACFDAAAhQ4AAIURAACFEgAAhRMAAIUWAACFFwAAhRkAAIUaAACFHAAAhR4AAIUfAACFIAAAhSMAAIUkAACFKQAAhTYAAIU7AACFPQAAhT8AAIVEAACFRwAAhUoAAIVMAACFcQAAhZUAAIW8AACF4AAAheMAAIXlAACF5wAAhekAAIXrAACF7QAAhe4AAIXxAACF/gAAhg8AAIYRAACGEwAAhhUAAIYXAACGGQAAhhsAAIYdAACGHwAAhjAAAIYzAACGNgAAhjkAAIY8AACGPwAAhkIAAIZFAACGSAAAhkoAAIaJAACGiwAAho0AAIaPAACGkgAAhpMAAIaUAACGlQAAhpYAAIaYAACGmgAAhpsAAIacAACGngAAhp8AAIbeAACG4AAAhuIAAIbkAACG5wAAhugAAIbpAACG6gAAhusAAIbtAACG7wAAhvAAAIbxAACG8wAAhvQAAIczAACHNQAAhzgAAIc6AACHPQAAhz4AAIc/AACHQAAAh0EAAIdDAACHRQAAh0YAAIdHAACHSQAAh0oAAIdXAACHWgAAh10AAIdgAACHYwAAh2UAAId/AACHiQAAh8gAAIfKAACHzAAAh84AAIfRAACH0gAAh9MAAIfUAACH1QAAh9cAAIfZAACH2gAAh9sAAIfdAACH3gAAiB0AAIgfAACIIQAAiCMAAIgmAACIJwAAiCgAAIgpAACIKgAAiCwAAIguAACILwAAiDAAAIgyAACIMwAAiHIAAIh0AACIdgAAiHgAAIh7AACIfAAAiH0AAIh+AACIfwAAiIEAAIiDAACIhAAAiIUAAIiHAACIiAAAiMcAAIjJAACIywAAiM0AAIjQAACI0QAAiNIAAIjTAACI1AAAiNYAAIjYAACI2QAAiNoAAIjcAACI3QAAiRwAAIkeAACJIAAAiSIAAIklAACJJgAAiScAAIkoAACJKQAAiSsAAIktAACJLgAAiS8AAIkxAACJMgAAiVcAAIl7AACJogAAicYAAInJAACJywAAic0AAInPAACJ0QAAidMAAInUAACJ1wAAieQAAInzAACJ9QAAifcAAIn5AACJ+wAAif0AAIn/AACKAQAAihAAAIoTAACKFgAAihkAAIocAACKHwAAiiIAAIolAACKJwAAimYAAIpoAACKagAAimwAAIpvAACKcAAAinEAAIpyAACKcwAAinUAAIp3AACKeAAAinkAAIp7AACKfAAAirsAAIq9AACKvwAAisEAAIrEAACKxQAAisYAAIrHAACKyAAAisoAAIrMAACKzQAAis4AAIrQAACK0QAAixAAAIsSAACLFAAAixYAAIsZAACLGgAAixsAAIscAACLHQAAix8AAIshAACLIgAAiyMAAIslAACLJgAAi2UAAItnAACLaQAAi2sAAItuAACLbwAAi3AAAItxAACLcgAAi3QAAIt2AACLdwAAi3gAAIt6AACLewAAi7oAAIu8AACLvgAAi8AAAIvDAACLxAAAi8UAAIvGAACLxwAAi8kAAIvLAACLzAAAi80AAIvPAACL0AAAjA8AAIwRAACMEwAAjBUAAIwYAACMGQAAjBoAAIwbAACMHAAAjB4AAIwgAACMIQAAjCIAAIwkAACMJQAAjGQAAIxmAACMaAAAjGoAAIxtAACMbgAAjG8AAIxwAACMcQAAjHMAAIx1AACMdgAAjHcAAIx5AACMegAAjMUAAIzoAACNCAAAjSgAAI0qAACNLAAAjS4AAI0wAACNMwAAjTQAAI01AACNOAAAjTkAAI07AACNPAAAjT4AAI1AAACNQQAAjUIAAI1FAACNRgAAjUsAAI1YAACNXQAAjV8AAI1hAAC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juQAAo7wAAKO9AACjvgAAo78AAKPAAACjwgAAo8QAAKPFAACjxgAAo8gAAKPJAACkCAAApAoAAKQMAACkDgAApBEAAKQSAACkEwAApBQAAKQVAACkFwAApBkAAKQaAACkGwAApB0AAKQeAACkXQAApF8AAKRhAACkYwAApGYAAKRnAACkaAAApGkAAKRqAACkbAAApG4AAKRvAACkcAAApHIAAKRzAACksgAApLQAAKS2AACkuAAApLsAAKS8AACkvQAApL4AAKS/AACkwQAApMMAAKTEAACkxQAApMcAAKTIAAClBwAApQkAAKULAAClDQAApRAAAKURAAClEgAApRMAAKUUAAClFgAApRgAAKUZAAClGgAApRwAAKUdAAClXAAApV4AAKVhAAClYwAApWYAAKVnAAClaAAApWkAAKVqAAClbAAApW4AAKVvAAClcAAApXIAAKVzAAClvgAApeEAAKYBAACmIQAApiMAAKYlAACmJwAApikAAKYrAACmLAAApi0AAKYwAACmMQAApjMAAKY0AACmNwAApjkAAKY6AACmOwAApj4AAKY/AACmRAAAplEAAKZWAACmWAAAploAAKZfAACmYgAApmUAAKZnAACmjAAAprAAAKbXAACm+wAApv4AAKcAAACnAgAApwQAAKcGAACnCAAApwkAAKcMAACnGQAApyoAAKcsAACnLgAApzAAAKcyAACnNAAApzYAAKc4AACnOgAAp0sAAKdOAACnUQAAp1QAAKdXAACnWgAAp10AAKdgAACnYwAAp2UAAKekAACnpgAAp6gAAKeqAACnrQAAp64AAKevAACnsAAAp7EAAKezAACntQAAp7YAAKe3AACnuQAAp7oAAKf5AACn+wAAp/0AAKf/AACoAgAAqAMAAKgEAACoBQAAqAYAAKgIAACoCgAAqAsAAKgMAACoDgAAqA8AAKhOAACoUAAAqFMAAKhVAACoWAAAqFkAAKhaAACoWwAAqFwAAKheAACoYAAAqGEAAKhiAACoZAAAqGUAAKhyAACocwAAqHQAAKh2AACotQAAqLcAAKi5AACouwAAqL4AAKi/AACowAAAqMEAAKjCAACoxAAAqMYAAKjHAACoyAAAqMoAAKjLAACpCgAAqQwAAKkOAACpEAAAqRMAAKkUAACpFQAAqRYAAKkXAACpGQAAqRsAAKkcAACpHQAAqR8AAKkgAACpXwAAqWEAAKljAACpZQAAqWgAAKlpAACpagAAqWsAAKlsAACpbgAAqXAAAKlxAACpcgAAqXQAAKl1AACptAAAqbYAAKm4AACpugAAqb0AAKm+AACpvwAAqcAAAKnBAACpwwAAqcUAAKnGAACpxwAAqckAAKnKAACqCQAAqgsAAKoNAACqDwAAqhIAAKoTAACqFAAAqhUAAKoWAACqGAAAqhoAAKobAACqHAAAqh4AAKofAACqRAAAqmgAAKqPAACqswAAqrYAAKq4AACqugAAqrwAAKq+AACqwAAAqsEAAKrEAACq0QAAquAAAKriAACq5AAAquYAAKroAACq6gAAquwAAKruAACq/QAAqwAAAKsDAACrBgAAqwkAAKsMAACrDwAAqxIAAKsUAACrUwAAq1UAAKtXAACrWQAAq1wAAKtdAACrXgAAq18AAKtgAACrYgAAq2QAAKtlAACrZgAAq2gAAKtpAACrqAAAq6oAAKusAACrrgAAq7EAAKuyAACrswAAq7QAAKu1AACrtwAAq7kAAKu6AACruwAAq70AAKu+AACr/QAAq/8AAKwBAACsAwAArAYAAKwHAACsCAAArAkAAKwKAACsDAAArA4AAKwPAACsEAAArBIAAKwTAACsUgAArFQAAKxWAACsWAAArFsAAKxcAACsXQAArF4AAKxfAACsYQAArGMAAKxkAACsZQAArGcAAKxoAACspwAArKkAAKyrAACsrQAArLAAAKyxAACssgAArLMAAKy0AACstgAArLgAAKy5AACsugAArLwAAKy9AACs/AAArP4AAK0AAACtAgAArQUAAK0GAACtBwAArQgAAK0JAACtCwAArQ0AAK0OAACtDwAArREAAK0SAACtUQAArVMAAK1WAACtWAAArVsAAK1cAACtXQAArV4AAK1fAACtYQAArWMAAK1kAACtZQAArWcAAK1oAACtswAArdYAAK32AACuFgAArhgAAK4aAACuHAAArh4AAK4gAACuIQAAriIAAK4lAACuJgAArigAAK4pAACuLAAAri8AAK4wAACuMQAArjQAAK41AACuOgAArkcAAK5MAACuTgAArlAAAK5VAACuWAAArlsAAK5dAACuggAArqYAAK7NAACu8QAArvQAAK72AACu+AAArvoAAK78AACu/gAArv8AAK8CAACvDwAAryAAAK8iAACvJAAAryYAAK8oAACvKgAArywAAK8uAACvMAAAr0EAAK9EAACvRwAAr0oAAK9NAACvUAAAr1MAAK9WAACvWQAAr1sAAK+aAACvnAAAr54AAK+gAACvowAAr6QAAK+lAACvpgAAr6cAAK+pAACvqwAAr6wAAK+tAACvrwAAr7AAAK/vAACv8QAAr/MAAK/1AACv+AAAr/kAAK/6AACv+wAAr/wAAK/+AACwAAAAsAEAALACAACwBAAAsAUAALBEAACwRgAAsEkAALBLAACwTgAAsE8AALBQAACwUQAAsFIAALBUAACwVgAAsFcAALBYAACwWgAAsFsAALBoAACwaQAAsGoAALBsAACwqwAAsK0AALCvAACwsQAAsLQAALC1AACwtgAAsLcAALC4AACwugAAsLwAALC9AACwvgAAsMAAALDBAACxAAAAsQIAALEEAACxBgAAsQkAALEKAACxCwAAsQwAALENAACxDwAAsREAALESAACxEwAAsRUAALEWAACxVQAAsVcAALFZAACxWwAAsV4AALFfAACxYAAAsWEAALFiAACxZAAAsWYAALFnAACxaAAAsWoAALFrAACxqgAAsawAALGuAACxsAAAsbMAALG0AACxtQAAsbYAALG3AACxuQAAsbsAALG8AACxvQAAsb8AALHAAACx/wAAsgEAALIDAACyBQAAsggAALIJAACyCgAAsgsAALIMAACyDgAAshAAALIRAACyEgAAshQAALIVAACyOgAAsl4AALKFAACyqQAAsqwAALKuAACysAAAsrIAALK0AACytgAAsrcAALK6AACyxwAAstYAALLYAACy2gAAstwAALLeAACy4AAAsuIAALLkAACy8wAAsvYAALL5AACy/AAAsv8AALMCAACzBQAAswgAALMKAACzSQAAs0sAALNNAACzTwAAs1IAALNTAACzVAAAs1UAALNWAACzWAAAs1oAALNbAACzXAAAs14AALNfAACzngAAs6AAALOjAACzpQAAs6gAALOpAACzqgAAs6sAALOsAACzrgAAs7AAALOxAACzsgAAs7QAALO1AACz9AAAs/YAALP4AACz+gAAs/0AALP+AACz/wAAtAAAALQBAAC0AwAAtAUAALQGAAC0BwAAtAkAALQKAAC0SQAAtEsAALRNAAC0TwAAtFIAALRTAAC0VAAAtFUAALRWAAC0WAAAtFoAALRbAAC0XAAAtF4AALRfAAC0ngAAtKAAALSiAAC0pAAAtKcAALSoAAC0qQAAtKoAALSrAAC0rQAAtK8AALSwAAC0sQAAtLMAALS0AAC08wAAtPUAALT3AAC0+QAAtPwAALT9AAC0/gAAtP8AALUAAAC1AgAAtQQAALUFAAC1BgAAtQgAALUJAAC1SAAAtUoAALVMAAC1TgAAtVEAALVSAAC1UwAAtVQAALVVAAC1VwAAtVkAALVaAAC1WwAAtV0AALVeAAC1qQAAtcwAALXsAAC2DAAAtg4AALYQAAC2EgAAthQAALYWAAC2FwAAthgAALYbAAC2HAAAth4AALYfAAC2IQAAtiMAALYkAAC2JQAAtigAALYpAAC2LgAAtjsAALZAAAC2QgAAtkQAALZJAAC2TAAAtk8AALZRAAC2dgAAtpoAALbBAAC25QAAtugAALbqAAC27AAAtu4AALbwAAC28gAAtvMAALb2AAC3AwAAtxQAALcWAAC3GAAAtxoAALccAAC3HgAAtyAAALciAAC3JAAAtzUAALc4AAC3OwAAtz4AALdBAAC3RAAAt0cAALdKAAC3TQAAt08AALeOAAC3kAAAt5IAALeUAAC3lwAAt5gAALeZAAC3mgAAt5sAALedAAC3nwAAt6AAALehAAC3owAAt6QAALfjAAC35QAAt+cAALfpAAC37AAAt+0AALfuAAC37wAAt/AAALfyAAC39AAAt/UAALf2AAC3+AAAt/kAALg4AAC4OgAAuD0AALg/AAC4QgAAuEMAALhEAAC4RQAAuEYAALhIAAC4SgAAuEsAALhMAAC4TgAAuE8AALhcAAC4XQAAuF4AALhgAAC4nwAAuKEAALijAAC4pQAAuKgAALipAAC4qgAAuKsAALisAAC4rgAAuLAAALixAAC4sgAAuLQAALi1AAC49AAAuPYAALj4AAC4+gAAuP0AALj+AAC4/wAAuQAAALkBAAC5AwAAuQUAALkGAAC5BwAAuQkAALkKAAC5SQAAuUsAALlNAAC5TwAAuVIAALlTAAC5VAAAuVUAALlWAAC5WAAAuVoAALlbAAC5XAAAuV4AALlfAAC5ngAAuaAAALmiAAC5pAAAuacAALmoAAC5qQAAuaoAALmrAAC5rQAAua8AALmwAAC5sQAAubMAALm0AAC58wAAufUAALn3AAC5+QAAufwAALn9AAC5/gAAuf8AALoAAAC6AgAAugQAALoFAAC6BgAAuggAALoJAAC6LgAAulIAALp5AAC6nQAAuqAAALqiAAC6pAAAuqYAALqoAAC6qgAAuqsAALquAAC6uwAAusoAALrMAAC6zgAAutAAALrSAAC61AAAutYAALrYAAC65wAAuuoAALrtAAC68AAAuvMAALr2AAC6+QAAuvwAALr+AAC7PQAAuz8AALtBAAC7QwAAu0YAALtHAAC7SAAAu0kAALtKAAC7TAAAu04AALtPAAC7UAAAu1IAALtTAAC7kgAAu5QAALuWAAC7mAAAu5sAALucAAC7nQAAu54AALufAAC7oQAAu6MAALukAAC7pQAAu6cAALuoAAC75wAAu+kAALvrAAC77QAAu/AAALvxAAC78gAAu/MAALv0AAC79gAAu/gAALv5AAC7+gAAu/wAALv9AAC8PAAAvD4AALxBAAC8QwAAvEYAALxHAAC8SAAAvEkAALxKAAC8TAAAvE4AALxPAAC8UAAAvFIAALxTAAC8kgAAvJQAALyWAAC8mAAAvJsAALycAAC8nQAAvJ4AALyfAAC8oQAAvKMAALykAAC8pQAAvKcAALyoAAC85wAAvOkAALzrAAC87QAAvPAAALzxAAC88gAAvPMAALz0AAC89gAAvPgAALz5AAC8+gAAvPwAALz9AAC9PAAAvT4AAL1AAAC9QgAAvUUAAL1GAAC9RwAAvUgAAL1JAAC9SwAAvU0AAL1OAAC9TwAAvVEAAL1SAAC9nQAAvcAAAL3gAAC+AAAAvgIAAL4EAAC+BgAAvggAAL4KAAC+CwAAvgwAAL4PAAC+EAAAvhIAAL4TAAC+FQAAvhgAAL4ZAAC+GgAAvh0AAL4eAAC+IwAAvjAAAL41AAC+NwAAvjkAAL4+AAC+QQAAvkQAAL5GAAC+awAAvo8AAL62AAC+2gAAvt0AAL7fAAC+4QAAvuMAAL7lAAC+5wAAvugAAL7rAAC++AAAvwkAAL8LAAC/DQAAvw8AAL8RAAC/EwAAvxUAAL8XAAC/GQAAvyoAAL8tAAC/MAAAvzMAAL82AAC/OQAAvzwAAL8/AAC/QgAAv0QAAL+DAAC/hQAAv4cAAL+JAAC/jAAAv40AAL+OAAC/jwAAv5AAAL+SAAC/lAAAv5UAAL+WAAC/mAAAv5kAAL/YAAC/2gAAv9wAAL/eAAC/4QAAv+IAAL/jAAC/5AAAv+UAAL/nAAC/6QAAv+oAAL/rAAC/7QAAv+4AAMAtAADALwAAwDIAAMA0AADANwAAwDgAAMA5AADAOgAAwDsAAMA9AADAPwAAwEAAAMBBAADAQwAAwEQAAMBRAADAVAAAwFcAAMBaAADAXQAAwF8AAMB5AADAfQAAwLwAAMC+AADAwAAAwMIAAMDFAADAxgAAwMcAAMDIAADAyQAAwMsAAMDNAADAzgAAwM8AAMDRAADA0gAAwREAAMETAADBFQAAwRcAAMEaAADBGwAAwRwAAMEdAADBHgAAwSAAAMEiAADBIwAAwSQAAMEmAADBJwAAwWYAAMFoAADBagAAwWwAAMFvAADBcAAAwXEAAMFyAADBcwAAwXUAAMF3AADBeAAAwXkAAMF7AADBfAAAwbsAAMG9AADBvwAAwcEAAMHEAADBxQAAwcYAAMHHAADByAAAwcoAAMHMAADBzQAAwc4AAMHQAADB0QAAwhAAAMISAADCFAAAwhYAAMIZAADCGgAAwhsAAMIcAADCHQAAwh8AAMIhAADCIgAAwiMAAMIlAADCJgAAwksAAMJvAADClgAAwroAAMK9AADCvwAAwsEAAMLDAADCxQAAwscAAMLIAADCywAAwtgAAMLnAADC6QAAwusAAMLtAADC7wAAwvEAAMLzAADC9QAAwwQAAMMHAADDCgAAww0AAMMQAADDEwAAwxYAAMMZAADDGwAAw1oAAMNcAADDXgAAw2AAAMNjAADDZAAAw2UAAMNmAADDZwAAw2kAAMNrAADDbAAAw20AAMNvAADDcAAAw68AAMOxAADDswAAw7UAAMO4AADDuQAAw7oAAMO7AADDvAAAw74AAMPAAADDwQAAw8IAAMPEAADDxQAAxAQAAMQGAADECAAAxAoAAMQNAADEDgAAxA8AAMQQAADEEQAAxBMAAMQVAADEFgAAxBcAAMQZAADEGgAAxFkAAMRbAADEXQAAxF8AAMRiAADEYwAAxGQAAMRlAADEZgAAxGgAAMRqAADEawAAxGwAAMRuAADEbwAAxK4AAMSwAADEsgAAxLQAAMS3AADEuAAAxLkAAMS6AADEuwAAxL0AAMS/AADEwAAAxMEAAMTDAADExAAAxQMAAMUFAADFBwAAxQkAAMUMAADFDQAAxQ4AAMUPAADFEAAAxRIAAMUUAADFFQAAxRYAAMUYAADFGQAAxVgAAMVaAADFXAAAxV4AAMVhAADFYgAAxWMAAMVkAADFZQAAxWcAAMVpAADFagAAxWsAAMVtAADFbgAAxbkAAMXcAADF/AAAxhwAAMYeAADGIAAAxiIAAMYkAADGJgAAxicAAMYoAADGKwAAxiwAAMYuAADGLwAAxjIAAMY1AADGNgAAxjcAAMY6AADGOwAAxkAAAMZNAADGUgAAxlQAAMZWAADGWwAAxl4AAMZhAADGYwAAxogAAMasAADG0wAAxvcAAMb6AADG/AAAxv4AAMcAAADHAgAAxwQAAMcFAADHCAAAxxUAAMcmAADHKAAAxyoAAMcsAADHLgAAxzAAAMcyAADHNAAAxzYAAMdHAADHSgAAx00AAMdQAADHUwAAx1YAAMdZAADHXAAAx18AAMdhAADHoAAAx6IAAMekAADHpgAAx6kAAMeqAADHqwAAx6wAAMetAADHrwAAx7EAAMeyAADHswAAx7UAAMe2AADH9QAAx/cAAMf5AADH+wAAx/4AAMf/AADIAAAAyAEAAMgCAADIBAAAyAYAAMgHAADICAAAyAoAAMgLAADISgAAyEwAAMhPAADIUQAAyFQAAMhVAADIVgAAyFcAAMhYAADIWgAAyFwAAMhdAADIXgAAyGAAAMhhAADIbgAAyG8AAMhwAADIcgAAyLEAAMizAADItQAAyLcAAMi6AADIuwAAyLwAAMi9AADIvgAAyMAAAMjCAADIwwAAyMQAAMjGAADIxwAAyQYAAMkIAADJCgAAyQwAAMkPAADJEAAAyREAAMkSAADJEwAAyRUAAMkXAADJGAAAyRkAAMkbAADJHAAAyVsAAMldAADJXwAAyWEAAMlkAADJZQAAyWYAAMlnAADJaAAAyWoAAMlsAADJbQAAyW4AAMlwAADJcQAAybAAAMmyAADJtAAAybYAAMm5AADJugAAybsAAMm8AADJvQAAyb8AAMnBAADJwgAAycMAAMnFAADJxgAAygUAAMoHAADKCQAAygsAAMoOAADKDwAAyhAAAMoRAADKEgAAyhQAAMoWAADKFwAAyhgAAMoaAADKGwAAykAAAMpkAADKiwAAyq8AAMqyAADKtAAAyrYAAMq4AADKugAAyrwAAMq9AADKwAAAys0AAMrcAADK3gAAyuAAAMriAADK5AAAyuYAAMroAADK6gAAyvkAAMr8AADK/wAAywIAAMsFAADLCAAAywsAAMsOAADLEAAAy08AAMtRAADLUwAAy1UAAMtYAADLWQAAy1oAAMtbAADLXAAAy14AAMtgAADLYQAAy2IAAMtkAADLZQAAy6QAAMumAADLqAAAy6oAAMutAADLrgAAy68AAMuwAADLsQAAy7MAAMu1AADLtgAAy7cAAMu5AADLugAAy/kAAMv7AADL/QAAy/8AAMwCAADMAwAAzAQAAMwFAADMBgAAzAgAAMwKAADMCwAAzAwAAMwOAADMDwAAzE4AAMxQAADMUwAAzFUAAMxYAADMWQAAzFoAAMxbAADMXAAAzF4AAMxgAADMYQAAzGIAAMxkAADMZQAAzKgAAMzMAADM8AAAzRMAAM06AADNWgAAzYEAAM2oAADNyAAAzewAAM4QAADOEgAAzhUAAM4XAADOGQAAzhsAAM4eAADOIAAAziIAAM4kAADOJgAAzigAAM4qAADOLQAAzjAAAM4xAADONgAAzkMAAM5GAADOSAAAzksAAM5OAADOUAAAznUAAM6ZAADOwAAAzuQAAM7nAADO6QAAzusAAM7tAADO7wAAzvEAAM7yAADO9QAAzwIAAM8VAADPFwAAzxkAAM8bAADPHQAAzx8AAM8hAADPIwAAzyUAAM8nAADPOgAAzz0AAM9AAADPQwAAz0YAAM9JAADPTAAAz08AAM9SAADPVQAAz1cAAM+WAADPmAAAz5sAAM+dAADPoAAAz6EAAM+iAADPowAAz6QAAM+mAADPqAAAz6kAAM+qAADPrAAAz60AAM+2AADPtwAAz7kAAM/4AADP+gAAz/wAAM/+AADQAQAA0AIAANADAADQBAAA0AUAANAHAADQCQAA0AoAANALAADQDQAA0A4AANBNAADQTwAA0FIAANBUAADQVwAA0FgAANBZAADQWgAA0FsAANBdAADQXwAA0GAAANBhAADQYwAA0GQAANBtAADQcAAA0HMAANB1AADQfgAA0IEAANCDAADQhQAA0MQAANDGAADQyAAA0MoAANDNAADQzgAA0M8AANDQAADQ0QAA0NMAANDVAADQ1gAA0NcAANDZAADQ2gAA0RkAANEbAADRHgAA0SAAANEjAADRJAAA0SUAANEmAADRJwAA0SkAANErAADRLAAA0S0AANEvAADRMAAA0TkAANE6AADRPAAA0XsAANF9AADRfwAA0YEAANGEAADRhQAA0YYAANGHAADRiAAA0YoAANGMAADRjQAA0Y4AANGQAADRkQAA0dAAANHSAADR1QAA0dcAANHaAADR2wAA0dwAANHdAADR3gAA0eAAANHiAADR4wAA0eQAANHmAADR5wAA0fQAANH1AADR9gAA0fgAANI3AADSOQAA0jsAANI9AADSQAAA0kEAANJCAADSQwAA0kQAANJGAADSSAAA0kkAANJKAADSTAAA0k0AANKMAADSjgAA0pEAANKTAADSlgAA0pcAANKYAADSmQAA0poAANKcAADSngAA0p8AANKgAADSogAA0qMAANKyAADSvwAA0sYAANLJAADSzAAA0s4AANLVAADS2AAA0tsAANLeAADS4AAA0uYAANLsAADTNwAA01oAANN6AADTmgAA05wAANOeAADToAAA06IAANOlAADTpgAA06cAANOqAADTqwAA060AANOuAADTsAAA07MAANO0AADTtQAA07gAANO5AADTvgAA08sAANPQAADT0gAA09QAANPZAADT3AAA098AANPhAADUBgAA1CoAANRRAADUdQAA1HgAANR6AADUfAAA1H4AANSAAADUggAA1IMAANSGAADUkwAA1KQAANSmAADUqAAA1KoAANSsAADUrgAA1LAAANSyAADUtAAA1MUAANTIAADUywAA1M4AANTRAADU1AAA1NcAANTaAADU3QAA1N8AANUeAADVIAAA1SIAANUkAADVJwAA1SgAANUpAADVKgAA1SsAANUtAADVLwAA1TAAANUxAADVMwAA1TQAANVzAADVdQAA1XcAANV5AADVfAAA1X0AANV+AADVfwAA1YAAANWCAADVhAAA1YUAANWGAADViAAA1YkAANXIAADVygAA1c0AANXPAADV0gAA1dMAANXUAADV1QAA1dYAANXYAADV2gAA1dsAANXcAADV3gAA1d8AANXsAADV7QAA1e4AANXwAADWLwAA1jEAANYzAADWNQAA1jgAANY5AADWOgAA1jsAANY8AADWPgAA1kAAANZBAADWQgAA1kQAANZFAADWhAAA1oYAANaIAADWigAA1o0AANaOAADWjwAA1pAAANaRAADWkwAA1pUAANaWAADWlwAA1pkAANaaAADW2QAA1tsAANbdAADW3wAA1uIAANbjAADW5AAA1uUAANbmAADW6AAA1uoAANbrAADW7AAA1u4AANbvAADXLgAA1zAAANcyAADXNAAA1zcAANc4AADXOQAA1zoAANc7AADXPQAA1z8AANdAAADXQQAA10MAANdEAADXgwAA14UAANeHAADXiQAA14wAANeNAADXjgAA148AANeQAADXkgAA15QAANeVAADXlgAA15gAANeZAADXvgAA1+IAANgJAADYLQAA2DAAANgyAADYNAAA2DYAANg4AADYOgAA2DsAANg+AADYSwAA2FoAANhcAADYXgAA2GAAANhiAADYZAAA2GYAANhoAADYdwAA2HoAANh9AADYgAAA2IMAANiGAADYiQAA2IwAANiOAADYzQAA2M8AANjRAADY0wAA2NYAANjXAADY2AAA2NkAANjaAADY3AAA2N4AANjfAADY4AAA2OIAANjjAADZIgAA2SQAANkmAADZKAAA2SsAANksAADZLQAA2S4AANkvAADZMQAA2TMAANk0AADZNQAA2TcAANk4AADZdwAA2XkAANl7AADZfQAA2YAAANmBAADZggAA2YMAANmEAADZhgAA2YgAANmJAADZigAA2YwAANmNAADZzAAA2c4AANnQAADZ0gAA2dUAANnWAADZ1wAA2dgAANnZAADZ2wAA2d0AANneAADZ3wAA2eEAANniAADaIQAA2iMAANolAADaJwAA2ioAANorAADaLAAA2i0AANouAADaMAAA2jIAANozAADaNAAA2jYAANo3AADadgAA2ngAANp6AADafAAA2n8AANqAAADagQAA2oIAANqDAADahQAA2ocAANqIAADaiQAA2osAANqMAADaywAA2s0AANrPAADa0QAA2tQAANrVAADa1gAA2tcAANrYAADa2gAA2twAANrdAADa3gAA2uAAANrhAADbLAAA208AANtvAADbjwAA25EAANuTAADblQAA25cAANuaAADbmwAA25wAANufAADboAAA26IAANujAADbpgAA26kAANuqAADbqwAA264AANuvAADbtAAA28EAANvGAADbyAAA28oAANvPAADb0gAA29UAANvXAADb/AAA3CAAANxHAADcawAA3G4AANxwAADccgAA3HQAANx2AADceAAA3HkAANx8AADciQAA3JoAANycAADcngAA3KAAANyiAADcpAAA3KYAANyoAADcqgAA3LsAANy+AADcwQAA3MQAANzHAADcygAA3M0AANzQAADc0wAA3NUAAN0UAADdFgAA3RgAAN0aAADdHQAA3R4AAN0fAADdIAAA3SEAAN0jAADdJQAA3SYAAN0nAADdKQAA3SoAAN1pAADdawAA3W0AAN1vAADdcgAA3XMAAN10AADddQAA3XYAAN14AADdegAA3XsAAN18AADdfgAA3X8AAN2+AADdwAAA3cMAAN3FAADdyAAA3ckAAN3KAADdywAA3cwAAN3OAADd0AAA3dEAAN3SAADd1AAA3dUAAN3iAADd4wAA3eQAAN3mAADeJQAA3icAAN4pAADeKwAA3i4AAN4vAADeMAAA3jEAAN4yAADeNAAA3jYAAN43AADeOAAA3joAAN47AADeegAA3nwAAN5+AADegAAA3oMAAN6EAADehQAA3oYAAN6HAADeiQAA3osAAN6MAADejQAA3o8AAN6QAADezwAA3tEAAN7TAADe1QAA3tgAAN7ZAADe2gAA3tsAAN7cAADe3gAA3uAAAN7hAADe4gAA3uQAAN7lAADfJAAA3yYAAN8oAADfKgAA3y0AAN8uAADfLwAA3zAAAN8xAADfMwAA3zUAAN82AADfNwAA3zkAAN86AADfeQAA33sAAN99AADffwAA34IAAN+DAADfhAAA34UAAN+GAADfiAAA34oAAN+LAADfjAAA344AAN+PAADftAAA39gAAN//AADgIwAA4CYAAOAoAADgKgAA4CwAAOAuAADgMAAA4DEAAOA0AADgQQAA4FAAAOBSAADgVAAA4FYAAOBYAADgWgAA4FwAAOBeAADgbQAA4HAAAOBzAADgdgAA4HkAAOB8AADgfwAA4IIAAOCEAADgwwAA4MUAAODHAADgyQAA4MwAAODNAADgzgAA4M8AAODQAADg0gAA4NQAAODVAADg1gAA4NgAAODZAADhGAAA4RoAAOEcAADhHgAA4SEAAOEiAADhIwAA4SQAAOElAADhJwAA4SkAAOEqAADhKwAA4S0AAOEuAADhbQAA4W8AAOFxAADhcwAA4XYAAOF3AADheAAA4XkAAOF6AADhfAAA4X4AAOF/AADhgAAA4YIAAOGDAADhwgAA4cQAAOHGAADhyAAA4csAAOHMAADhzQAA4c4AAOHPAADh0QAA4dMAAOHUAADh1QAA4dcAAOHYAADiFwAA4hkAAOIbAADiHQAA4iAAAOIhAADiIgAA4iMAAOIkAADiJgAA4igAAOIpAADiKgAA4iwAAOItAADibAAA4m4AAOJwAADicgAA4nUAAOJ2AADidwAA4ngAAOJ5AADiewAA4n0AAOJ+AADifwAA4oEAAOKCAADiwQAA4sMAAOLGAADiyAAA4ssAAOLMAADizQAA4s4AAOLPAADi0QAA4tMAAOLUAADi1QAA4tcAAOLYAADjIwAA40YAAONmAADjhgAA44gAAOOKAADjjAAA444AAOORAADjkgAA45MAAOOWAADjlwAA45kAAOOaAADjnAAA454AAOOfAADjoAAA46MAAOOkAADjrQAA47oAAOO/AADjwQAA48MAAOPIAADjywAA484AAOPQAADj9QAA5BkAAORAAADkZAAA5GcAAORpAADkawAA5G0AAORvAADkcQAA5HIAAOR1AADkggAA5JMAAOSVAADklwAA5JkAAOSbAADknQAA5J8AAOShAADkowAA5LQAAOS3AADkugAA5L0AAOTAAADkwwAA5MYAAOTJAADkzAAA5M4AAOUNAADlDwAA5REAAOUTAADlFgAA5RcAAOUYAADlGQAA5RoAAOUcAADlHgAA5R8AAOUgAADlIgAA5SMAAOViAADlZAAA5WYAAOVoAADlawAA5WwAAOVtAADlbgAA5W8AAOVxAADlcwAA5XQAAOV1AADldwAA5XgAAOW3AADluQAA5bwAAOW+AADlwQAA5cIAAOXDAADlxAAA5cUAAOXHAADlyQAA5coAAOXLAADlzQAA5c4AAOXbAADl3AAA5d0AAOXfAADmHgAA5iAAAOYiAADmJAAA5icAAOYoAADmKQAA5ioAAOYrAADmLQAA5i8AAOYwAADmMQAA5jMAAOY0AADmcwAA5nUAAOZ3AADmeQAA5nwAAOZ9AADmfgAA5n8AAOaAAADmggAA5oQAAOaFAADmhgAA5ogAAOaJAADmyAAA5soAAObMAADmzgAA5tEAAObSAADm0wAA5tQAAObVAADm1wAA5tkAAObaAADm2wAA5t0AAObeAADnHQAA5x8AAOchAADnIwAA5yYAAOcnAADnKAAA5ykAAOcqAADnLAAA5y4AAOcvAADnMAAA5zIAAOczAADncgAA53QAAOd2AADneAAA53sAAOd8AADnfQAA534AAOd/AADngQAA54MAAOeEAADnhQAA54cAAOeIAADnrQAA59EAAOf4AADoHAAA6B8AAOghAADoIwAA6CUAAOgnAADoKQAA6CoAAOgtAADoOgAA6EkAAOhLAADoTQAA6E8AAOhRAADoUwAA6FUAAOhXAADoZgAA6GkAAOhsAADobwAA6HIAAOh1AADoeAAA6HsAAOh9AADovAAA6L4AAOjAAADowgAA6MUAAOjGAADoxwAA6MgAAOjJAADoywAA6M0AAOjOAADozwAA6NEAAOjSAADpEQAA6RMAAOkVAADpFwAA6RoAAOkbAADpHAAA6R0AAOkeAADpIAAA6SIAAOkjAADpJAAA6SYAAOknAADpZgAA6WgAAOlqAADpbAAA6W8AAOlwAADpcQAA6XIAAOlzAADpdQAA6XcAAOl4AADpeQAA6XsAAOl8AADpuwAA6b0AAOnAAADpwgAA6cUAAOnGAADpxwAA6cgAAOnJAADpywAA6c0AAOnOAADpzwAA6dEAAOnSAADqEQAA6hMAAOoVAADqFwAA6hoAAOobAADqHAAA6h0AAOoeAADqIAAA6iIAAOojAADqJAAA6iYAAOonAADqZgAA6mgAAOpqAADqbAAA6m8AAOpwAADqcQAA6nIAAOpzAADqdQAA6ncAAOp4AADqeQAA6nsAAOp8AADquwAA6r0AAOq/AADqwQAA6sQAAOrFAADqxgAA6scAAOrIAADqygAA6swAAOrNAADqzgAA6tAAAOrRAADq2gAA6tsAAOrdAADrHAAA6x4AAOsgAADrIgAA6yUAAOsmAADrJwAA6ygAAOspAADrKwAA6y0AAOsuAADrLwAA6zEAAOsyAADrcQAA63MAAOt1AADrdwAA63oAAOt7AADrfAAA630AAOt+AADrgAAA64IAAOuDAADrhAAA64YAAOuHAADrxgAA68gAAOvLAADrzQAA69AAAOvRAADr0gAA69MAAOvUAADr1gAA69gAAOvZAADr2gAA69wAAOvdAADsKAAA7EsAAOxrAADsiwAA7I0AAOyPAADskQAA7JMAAOyVAADslgAA7JcAAOyaAADsmwAA7J0AAOyeAADsoAAA7KIAAOyjAADspAAA7KcAAOyoAADsrQAA7LoAAOy/AADswQAA7MMAAOzIAADsywAA7M4AAOzQAAD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DTwABA1AAAQNRAAEDUgABA1QAAQNWAAEDVwABA1gAAQNaAAEDWwABA5oAAQOcAAEDngABA6AAAQOjAAEDpAABA6UAAQOmAAEDpwABA6kAAQOrAAEDrAABA60AAQOvAAEDsAABA+8AAQPxAAED8wABA/UAAQP4AAED+QABA/oAAQP7AAED/AABA/4AAQQAAAEEAQABBAIAAQQEAAEEBQABBA4AAQQPAAEEEQABBFAAAQRSAAEEVAABBFYAAQRYAAEEWQABBFoAAQRbAAEEXAABBF4AAQRgAAEEYQABBGIAAQRkAAEEZQABBKQAAQSmAAEEqAABBKoAAQSsAAEErQABBK4AAQSvAAEEsAABBLIAAQS0AAEEtQABBLYAAQS4AAEEuQABBPgAAQT6AAEE/QABBP8AAQUBAAEFAgABBQMAAQUEAAEFBQABBQcAAQUJAAEFCgABBQsAAQUNAAEFDgABBVkAAQV8AAEFnAABBbwAAQW+AAEFwAABBcIAAQXEAAEFxgABBccAAQXIAAEFywABBcwAAQXOAAEFzwABBdEAAQXTAAEF1AABBdUAAQXYAAEF2QABBd4AAQXrAAEF8AABBfIAAQX0AAEF+QABBfwAAQX/AAEGAQABBiYAAQZKAAEGcQABBpUAAQaYAAEGmgABBpwAAQaeAAEGoAABBqIAAQajAAEGpgABBrMAAQbEAAEGxgABBsgAAQbKAAEGzAABBs4AAQbQAAEG0gABBtQAAQblAAEG6AABBusAAQbuAAEG8QABBvQAAQb3AAEG+gABBv0AAQb/AAEHPgABB0AAAQdCAAEHRAABB0cAAQdIAAEHSQABB0oAAQdLAAEHTQABB08AAQdQAAEHUQABB1MAAQdUAAEHkwABB5UAAQeXAAEHmQABB5wAAQedAAEHngABB58AAQegAAEHogABB6QAAQelAAEHpgABB6gAAQepAAEH6AABB+oAAQftAAEH7wABB/IAAQfzAAEH9AABB/UAAQf2AAEH+AABB/oAAQf7AAEH/AABB/4AAQf/AAEIDAABCA0AAQgOAAEIEAABCE8AAQhRAAEIUwABCFUAAQhYAAEIWQABCFoAAQhbAAEIXAABCF4AAQhgAAEIYQABCGIAAQhkAAEIZQABCKQAAQimAAEIqAABCKoAAQitAAEIrgABCK8AAQiwAAEIsQABCLMAAQi1AAEItgABCLcAAQi5AAEIugABCPkAAQj7AAEI/QABCP8AAQkCAAEJAwABCQQAAQkFAAEJBgABCQgAAQkKAAEJCwABCQwAAQkOAAEJDwABCU4AAQlQAAEJUgABCVQAAQlXAAEJWAABCVkAAQlaAAEJWwABCV0AAQlfAAEJYAABCWEAAQljAAEJZAABCaMAAQmlAAEJpwABCakAAQmsAAEJrQABCa4AAQmvAAEJsAABCbIAAQm0AAEJtQABCbYAAQm4AAEJuQABCd4AAQoCAAEKKQABCk0AAQpQAAEKUgABClQAAQpWAAEKWAABCloAAQpbAAEKXgABCmsAAQp6AAEKfAABCn4AAQqAAAEKggABCoQAAQqGAAEKiAABCpcAAQqaAAEKnQABCqAAAQqjAAEKpgABCqkAAQqsAAEKrgABCu0AAQrvAAEK8QABCvMAAQr2AAEK9wABCvgAAQr5AAEK+gABCvwAAQr+AAEK/wABCwAAAQsCAAELAwABC0IAAQtEAAELRgABC0gAAQtLAAELTAABC00AAQtOAAELTwABC1EAAQtTAAELVAABC1UAAQtXAAELWAABC5cAAQuZAAELmwABC50AAQugAAELoQABC6IAAQujAAELpAABC6YAAQuoAAELqQABC6oAAQusAAELrQABC+wAAQvuAAEL8QABC/MAAQv2AAEL9wABC/gAAQv5AAEL+gABC/wAAQv+AAEL/wABDAAAAQwCAAEMAwABDEIAAQxEAAEMRgABDEgAAQxLAAEMTAABDE0AAQxOAAEMTwABDFEAAQxTAAEMVAABDFUAAQxXAAEMWAABDJcAAQyZAAEMmwABDJ0AAQygAAEMoQABDKIAAQyjAAEMpAABDKYAAQyoAAEMqQABDKoAAQysAAEMrQABDOwAAQzuAAEM8AABDPIAAQz1AAEM9gABDPcAAQz4AAEM+QABDPsAAQz9AAEM/gABDP8AAQ0BAAENAgABDU0AAQ1wAAENkAABDbAAAQ2yAAENtAABDbYAAQ24AAENugABDbsAAQ28AAENvwABDcAAAQ3CAAENwwABDcUAAQ3HAAENyAABDckAAQ3MAAENzQABDdYAAQ3jAAEN6AABDeoAAQ3sAAEN8QABDfQAAQ33AAEN+QABDh4AAQ5CAAEOaQABDo0AAQ6QAAEOkgABDpQAAQ6WAAEOmAABDpoAAQ6bAAEOngABDqsAAQ68AAEOvgABDsAAAQ7CAAEOxAABDsYAAQ7IAAEOygABDswAAQ7dAAEO4AABDuMAAQ7mAAEO6QABDuwAAQ7vAAEO8gABDvUAAQ73AAEPNgABDzgAAQ86AAEPPAABDz8AAQ9AAAEPQQABD0IAAQ9DAAEPRQABD0cAAQ9IAAEPSQABD0sAAQ9MAAEPiwABD40AAQ+PAAEPkQABD5QAAQ+VAAEPlgABD5cAAQ+YAAEPmgABD5wAAQ+dAAEPngABD6AAAQ+hAAEP4AABD+IAAQ/lAAEP5wABD+oAAQ/rAAEP7AABD+0AAQ/uAAEP8AABD/IAAQ/zAAEP9AABD/YAAQ/3AAEQBAABEAUAARAGAAEQCAABEEcAARBJAAEQSwABEE0AARBQAAEQUQABEFIAARBTAAEQVAABEFYAARBYAAEQWQABEFoAARBcAAEQXQABEJwAARCeAAEQoAABEKIAARClAAEQpgABEKcAARCoAAEQqQABEKsAARCtAAEQrgABEK8AARCxAAEQsgABEPEAARDzAAEQ9QABEPcAARD6AAEQ+wABEPwAARD9AAEQ/gABEQAAARECAAERAwABEQQAAREGAAERBwABEUYAARFIAAERSgABEUwAARFPAAERUAABEVEAARFSAAERUwABEVUAARFXAAERWAABEVkAARFbAAERXAABEZsAARGdAAERnwABEaEAARGkAAERpQABEaYAARGnAAERqAABEaoAARGsAAERrQABEa4AARGwAAERsQABEdYAARH6AAESIQABEkUAARJIAAESSgABEkwAARJOAAESUAABElIAARJTAAESVgABEmMAARJyAAESdAABEnYAARJ4AAESegABEnwAARJ+AAESgAABEo8AARKSAAESlQABEpgAARKbAAESngABEqEAARKkAAESpgABEuUAARLnAAES6QABEusAARLuAAES7wABEvAAARLxAAES8gABEvQAARL2AAES9wABEvgAARL6AAES+wABEzoAARM8AAETPgABE0AAARNDAAETRAABE0UAARNGAAETRwABE0kAARNLAAETTAABE00AARNPAAETUAABE48AARORAAETkwABE5UAAROYAAETmQABE5oAARObAAETnAABE54AAROgAAEToQABE6IAAROkAAETpQABE+QAARPmAAET6QABE+sAARPuAAET7wABE/AAARPxAAET8gABE/QAARP2AAET9wABE/gAARP6AAET+wABFDoAARQ8AAEUPgABFEAAARRDAAEURAABFEUAARRGAAEURwABFEkAARRLAAEUTAABFE0AARRPAAEUUAABFI8AARSRAAEUkwABFJUAARSYAAEUmQABFJoAARSbAAEUnAABFJ4AARSgAAEUoQABFKIAARSkAAEUpQABFOQAARTmAAEU6AABFOoAARTtAAEU7gABFO8AARTwAAEU8QABFPMAART1AAEU9gABFPcAART5AAEU+gABFUUAARVoAAEViAABFagAARWqAAEVrAABFa4AARWwAAEVsgABFbMAARW0AAEVtwABFbgAARW6AAEVuwABFb0AARW/AAEVwAABFcEAARXEAAEVxQABFcoAARXXAAEV3AABFd4AARXgAAEV5QABFegAARXrAAEV7QABFhIAARY2AAEWXQABFoEAARaEAAEWhgABFogAARaKAAEWjAABFo4AARaPAAEWkgABFp8AARawAAEWsgABFrQAARa2AAEWuAABFroAARa8AAEWvgABFsAAARbRAAEW1AABFtcAARbaAAEW3QABFuAAARbjAAEW5gABFukAARbrAAEXKgABFywAARcuAAEXMAABFzMAARc0AAEXNQABFzYAARc3AAEXOQABFzsAARc8AAEXPQABFz8AARdAAAEXfwABF4EAAReDAAEXhQABF4gAAReJAAEXigABF4sAAReMAAEXjgABF5AAAReRAAEXkgABF5QAAReVAAEX1AABF9YAARfZAAEX2wABF94AARffAAEX4AABF+EAARfiAAEX5AABF+YAARfnAAEX6AABF+oAARfrAAEX+AABF/kAARf6AAEX/AABGDsAARg9AAEYPwABGEEAARhEAAEYRQABGEYAARhHAAEYSAABGEoAARhMAAEYTQABGE4AARhQAAEYUQABGJAAARiSAAEYlAABGJYAARiZAAEYmgABGJsAARicAAEYnQABGJ8AARihAAEYogABGKMAARilAAEYpgABGOUAARjnAAEY6QABGOsAARjuAAEY7wABGPAAARjxAAEY8gABGPQAARj2AAEY9wABGPgAARj6AAEY+wABGToAARk8AAEZPgABGUAAARlDAAEZRAABGUUAARlGAAEZRwABGUkAARlLAAEZTAABGU0AARlPAAEZUAABGY8AARmRAAEZkwABGZUAARmYAAEZmQABGZoAARmbAAEZnAABGZ4AARmgAAEZoQABGaIAARmkAAEZpQABGcoAARnuAAEaFQABGjkAARo8AAEaPgABGkAAARpCAAEaRAABGkYAARpHAAEaSgABGlcAARpmAAEaaAABGmoAARpsAAEabgABGnAAARpyAAEadAABGoMAARqGAAEaiQABGowAARqPAAEakgABGpUAARqYAAEamgABGtkAARrbAAEa3QABGt8AARriAAEa4wABGuQAARrlAAEa5gABGugAARrqAAEa6wABGuwAARruAAEa7wABGy4AARswAAEbMgABGzQAARs3AAEbOAABGzkAARs6AAEbOwABGz0AARs/AAEbQAABG0EAARtDAAEbRAABG4MAARuFAAEbhwABG4kAARuMAAEbjQABG44AARuPAAEbkAABG5IAARuUAAEblQABG5YAARuYAAEbmQABG9gAARvaAAEb3QABG98AARviAAEb4wABG+QAARvlAAEb5gABG+gAARvqAAEb6wABG+wAARvuAAEb7wABHC4AARwwAAEcMgABHDQAARw3AAEcOAABHDkAARw6AAEcOwABHD0AARw/AAEcQAABHEEAARxDAAEcRAABHIMAARyFAAEchwABHIkAARyMAAEcjQABHI4AARyPAAEckAABHJIAARyUAAEclQABHJYAARyYAAEcmQABHNgAARzaAAEc3AABHN4AARzhAAEc4gABHOMAARzkAAEc5QABHOcAARzpAAEc6gABHOsAARztAAEc7gABHTkAAR1cAAEdfAABHZwAAR2eAAEdoAABHaIAAR2kAAEdpgABHacAAR2oAAEdqwABHawAAR2uAAEdrwABHbEAAR2zAAEdtAABHbUAAR24AAEduQABHb4AAR3LAAEd0AABHdIAAR3UAAEd2QABHdwAAR3fAAEd4QABHgYAAR4qAAEeUQABHnUAAR54AAEeegABHnwAAR5+AAEegAABHoIAAR6DAAEehgABHpMAAR6kAAEepgABHqgAAR6qAAEerAABHq4AAR6wAAEesgABHrQAAR7FAAEeyAABHssAAR7OAAEe0QABHtQAAR7XAAEe2gABHt0AAR7fAAEfHgABHyAAAR8iAAEfJAABHycAAR8oAAEfKQABHyoAAR8rAAEfLQABHy8AAR8wAAEfMQABHzMAAR80AAEfcwABH3UAAR93AAEfeQABH3wAAR99AAEffgABH38AAR+AAAEfggABH4QAAR+FAAEfhgABH4gAAR+JAAEfyAABH8oAAR/NAAEfzwABH9IAAR/TAAEf1AABH9UAAR/WAAEf2AABH9oAAR/bAAEf3AABH94AAR/fAAEf7AABH+8AAR/yAAEf9QABH/gAAR/6AAEgFAABIFMAASBVAAEgVwABIFkAASBcAAEgXQABIF4AASBfAAEgYAABIGIAASBkAAEgZQABIGYAASBoAAEgaQABIKgAASCqAAEgrAABIK4AASCxAAEgsgABILMAASC0AAEgtQABILcAASC5AAEgugABILsAASC9AAEgvgABIP0AASD/AAEhAQABIQMAASEGAAEhBwABIQgAASEJAAEhCgABIQwAASEOAAEhDwABIRAAASESAAEhEwABIVIAASFUAAEhVgABIVgAASFbAAEhXAABIV0AASFeAAEhXwABIWEAASFjAAEhZAABIWUAASFnAAEhaAABIacAASGpAAEhqwABIa0AASGwAAEhsQABIbIAASGzAAEhtAABIbYAASG4AAEhuQABIboAASG8AAEhvQABIeIAASIGAAEiLQABIlEAASJUAAEiVgABIlgAASJaAAEiXAABIl4AASJfAAEiYgABIm8AASJ+AAEigAABIoIAASKEAAEihgABIogAASKKAAEijAABIpsAASKeAAEioQABIqQAASKnAAEiqgABIq0AASKwAAEisgABIvEAASLzAAEi9QABIvcAASL6AAEi+wABIvwAASL9AAEi/gABIwAAASMCAAEjAwABIwQAASMGAAEjBwABI0YAASNIAAEjSgABI0wAASNPAAEjUAABI1EAASNSAAEjUwABI1UAASNXAAEjWAABI1kAASNbAAEjXAABI5sAASOdAAEjnwABI6EAASOkAAEjpQABI6YAASOnAAEjqAABI6oAASOsAAEjrQABI64AASOwAAEjsQABI/AAASPyAAEj9QABI/cAASP6AAEj+wABI/wAASP9AAEj/gABJAAAASQCAAEkAwABJAQAASQGAAEkBwABJEYAASRIAAEkSgABJEwAASRPAAEkUAABJFEAASRSAAEkUwABJFUAASRXAAEkWAABJFkAASRbAAEkXAABJJsAASSdAAEknwABJKEAASSkAAEkpQABJKYAASSnAAEkqAABJKoAASSsAAEkrQABJK4AASSwAAEksQABJPAAASTyAAEk9AABJPYAAST5AAEk+gABJPsAAST8AAEk/QABJP8AASUBAAElAgABJQMAASUFAAElBgABJVEAASV0AAEllAABJbQAASW2AAEluAABJboAASW8AAElvgABJb8AASXAAAElwwABJcQAASXGAAElxwABJckAASXLAAElzAABJc0AASXQAAEl0QABJdYAASXjAAEl6AABJeoAASXsAAEl8QABJfQAASX3AAEl+QABJh4AASZCAAEmaQABJo0AASaQAAEmkgABJpQAASaWAAEmmAABJpoAASabAAEmngABJqsAASa8AAEmvgABJsAAASbCAAEmxAABJsYAASbIAAEmygABJswAASbdAAEm4AABJuMAASbmAAEm6QABJuwAASbvAAEm8gABJvUAASb3AAEnNgABJzgAASc6AAEnPAABJz8AASdAAAEnQQABJ0IAASdDAAEnRQABJ0cAASdIAAEnSQABJ0sAASdMAAEniwABJ40AASePAAEnkQABJ5QAASeVAAEnlgABJ5cAASeYAAEnmgABJ5wAASedAAEnngABJ6AAASehAAEn4AABJ+IAASflAAEn5wABJ+oAASfrAAEn7AABJ+0AASfuAAEn8AABJ/IAASfzAAEn9AABJ/YAASf3AAEoBAABKAcAASgKAAEoDQABKBAAASgSAAEoLQABKDsAASh6AAEofAABKH4AASiAAAEogwABKIQAASiFAAEohgABKIcAASiJAAEoiwABKIwAASiNAAEojwABKJAAASjPAAEo0QABKNMAASjVAAEo2AABKNkAASjaAAEo2wABKNwAASjeAAEo4AABKOEAASjiAAEo5AABKOUAASkkAAEpJgABKSgAASkqAAEpLQABKS4AASkvAAEpMAABKTEAASkzAAEpNQABKTYAASk3AAEpOQABKToAASl5AAEpewABKX0AASl/AAEpggABKYMAASmEAAEphQABKYYAASmIAAEpigABKYsAASmMAAEpjgABKY8AASnOAAEp0AABKdIAASnUAAEp1wABKdgAASnZAAEp2gABKdsAASndAAEp3wABKeAAASnhAAEp4wABKeQAASoJAAEqLQABKlQAASp4AAEqewABKn0AASp/AAEqgQABKoMAASqFAAEqhgABKokAASqWAAEqpQABKqcAASqpAAEqqwABKq0AASqvAAEqsQABKrMAASrCAAEqxQABKsgAASrLAAEqzgABKtEAASrUAAEq1wABKtkAASsYAAErGgABKx0AASsfAAErIgABKyMAASskAAErJQABKyYAASsoAAErKgABKysAASssAAErLgABKy8AASsxAAErcAABK3IAASt0AAErdgABK3kAASt6AAErewABK3wAASt9AAErfwABK4EAASuCAAErgwABK4UAASuGAAErxQABK8cAASvJAAErywABK84AASvPAAEr0AABK9EAASvSAAEr1AABK9YAASvXAAEr2AABK9oAASvbAAEsGgABLBwAASweAAEsIAABLCMAASwkAAEsJQABLCYAASwnAAEsKQABLCsAASwsAAEsLQABLC8AASwwAAEsbwABLHEAASxzAAEsdQABLHgAASx5AAEsegABLHsAASx8AAEsfgABLIAAASyBAAEsggABLIQAASyFAAEsxAABLMYAASzIAAEsygABLM0AASzOAAEszwABLNAAASzRAAEs0wABLNUAASzWAAEs1wABLNkAASzaAAEtGQABLRsAAS0dAAEtHwABLSIAAS0jAAEtJAABLSUAAS0mAAEtKAABLSoAAS0rAAEtLAABLS4AAS0vAAEtegABLZ0AAS29AAEt3QABLd8AAS3hAAEt4wABLeUAAS3nAAEt6AABLekAAS3sAAEt7QABLe8AAS3wAAEt8gABLfQAAS31AAEt9gABLfkAAS36AAEt/wABLgwAAS4RAAEuEwABLhUAAS4aAAEuHQABLiAAAS4iAAEuRwABLmsAAS6SAAEutgABLrkAAS67AAEuvQABLr8AAS7BAAEuwwABLsQAAS7HAAEu1AABLuUAAS7nAAEu6QABLusAAS7tAAEu7wABLvEAAS7zAAEu9QABLwYAAS8JAAEvDAABLw8AAS8SAAEvFQABLxgAAS8bAAEvHgABLyAAAS9fAAEvYQABL2MAAS9lAAEvaAABL2kAAS9qAAEvawABL2wAAS9uAAEvcAABL3EAAS9yAAEvdAABL3UAAS+0AAEvtgABL7gAAS+6AAEvvQABL74AAS+/AAEvwAABL8EAAS/DAAEvxQABL8YAAS/HAAEvyQABL8oAATAJAAEwCwABMA4AATAQAAEwEwABMBQAATAVAAEwFgABMBcAATAZAAEwGwABMBwAATAdAAEwHwABMCAAATAtAAEwLgABMC8AATAxAAEwcAABMHIAATB0AAEwdgABMHkAATB6AAEwewABMHwAATB9AAEwfwABMIEAATCCAAEwgwABMIUAATCGAAEwxQABMMcAATDJAAEwywABMM4AATDPAAEw0AABMNEAATDSAAEw1AABMNYAATDXAAEw2AABMNoAATDbAAExGgABMRwAATEeAAExIAABMSMAATEkAAExJQABMSYAATEnAAExKQABMSsAATEsAAExLQABMS8AATEwAAExbwABMXEAATFzAAExdQABMXgAATF5AAExegABMXsAATF8AAExfgABMYAAATGBAAExggABMYQAATGFAAExxAABMcYAATHIAAExygABMc0AATHOAAExzwABMdAAATHRAAEx0wABMdUAATHWAAEx1wABMdkAATHaAAEx/wABMiMAATJKAAEybgABMnEAATJzAAEydQABMncAATJ5AAEyewABMnwAATJ/AAEyjAABMpsAATKdAAEynwABMqEAATKjAAEypQABMqcAATKpAAEyuAABMrsAATK+AAEywQABMsQAATLHAAEyygABMs0AATLPAAEzDgABMxAAATMSAAEzFAABMxcAATMYAAEzGQABMxoAATMbAAEzHQABMx8AATMgAAEzIQABMyMAATMkAAEzYwABM2UAATNnAAEzaQABM2wAATNtAAEzbgABM28AATNwAAEzcgABM3QAATN1AAEzdgABM3gAATN5AAEzuAABM7oAATO8AAEzvgABM8EAATPCAAEzwwABM8QAATPFAAEzxwABM8kAATPKAAEzywABM80AATPOAAE0DQABNA8AATQSAAE0FAABNBcAATQYAAE0GQABNBoAATQbAAE0HQABNB8AATQgAAE0IQABNCMAATQkAAE0YwABNGUAATRnAAE0aQABNGwAATRtAAE0bgABNG8AATRwAAE0cgABNHQAATR1AAE0dgABNHgAATR5AAE0uAABNLoAATS8AAE0vgABNMEAATTCAAE0wwABNMQAATTFAAE0xwABNMkAATTKAAE0ywABNM0AATTOAAE1DQABNQ8AATURAAE1EwABNRYAATUXAAE1GAABNRkAATUaAAE1HAABNR4AATUfAAE1IAABNSIAATUjAAE1LAABNS0AATUvAAE1cgABNZYAATW6AAE13QABNgQAATYkAAE2SwABNnIAATaSAAE2tgABNtoAATbcAAE23wABNuEAATbjAAE25QABNugAATbqAAE27AABNu4AATbwAAE28gABNvQAATb3AAE2+gABNvsAATcAAAE3DQABNxAAATcSAAE3FQABNxgAATcaAAE3PwABN2MAATeKAAE3rgABN7EAATezAAE3tQABN7cAATe5AAE3uwABN7wAATe/AAE3zAABN98AATfhAAE34wABN+UAATfnAAE36QABN+sAATftAAE37wABN/EAATgEAAE4BwABOAoAATgNAAE4EAABOBMAATgWAAE4GQABOBwAATgfAAE4IQABOGAAAThiAAE4ZQABOGcAAThqAAE4awABOGwAAThtAAE4bgABOHAAAThyAAE4cwABOHQAATh2AAE4dwABOIAAATiBAAE4gwABOMIAATjEAAE4xgABOMgAATjLAAE4zAABOM0AATjOAAE4zwABONEAATjTAAE41AABONUAATjXAAE42AABORcAATkZAAE5HAABOR4AATkhAAE5IgABOSMAATkkAAE5JQABOScAATkpAAE5KgABOSsAATktAAE5LgABOTcAATk6AAE5PQABOT8AATlIAAE5TQABOU8AATlRAAE5UwABOZIAATmUAAE5lgABOZgAATmbAAE5nAABOZ0AATmeAAE5nwABOaEAATmjAAE5pAABOaUAATmnAAE5qAABOecAATnpAAE57AABOe4AATnxAAE58gABOfMAATn0AAE59QABOfcAATn5AAE5+gABOfsAATn9AAE5/gABOgcAAToIAAE6CgABOkkAATpLAAE6TQABOk8AATpSAAE6UwABOlQAATpVAAE6VgABOlgAATpaAAE6WwABOlwAATpeAAE6XwABOp4AATqgAAE6owABOqUAATqoAAE6qQABOqoAATqrAAE6rAABOq4AATqwAAE6sQABOrIAATq0AAE6tQABOsIAATrDAAE6xAABOsYAATsFAAE7BwABOwkAATsLAAE7DgABOw8AATsQAAE7EQABOxIAATsUAAE7FgABOxcAATsYAAE7GgABOxsAATtaAAE7XAABO18AATthAAE7ZAABO2UAATtmAAE7ZwABO2gAATtqAAE7bAABO20AATtuAAE7cAABO3EAATuAAAE7jQABO5oAATudAAE7nwABO6EAATujAAE7pQABO6gAATu1AAE7uAABO7sAATu+AAE7wQABO8QAATvHAAE7yQABO9QAATvuAAE8OQABPFwAATx8AAE8nAABPJ4AATygAAE8ogABPKQAATynAAE8qAABPKkAATysAAE8rQABPK8AATywAAE8sgABPLUAATy2AAE8twABPLoAATy7AAE8wAABPM0AATzSAAE81AABPNYAATzbAAE83gABPOEAATzjAAE9CAABPSwAAT1TAAE9dwABPXoAAT18AAE9fgABPYAAAT2CAAE9hAABPYUAAT2IAAE9lQABPaYAAT2oAAE9qgABPawAAT2uAAE9sAABPbIAAT20AAE9tgABPccAAT3KAAE9zQABPdAAAT3TAAE91gABPdkAAT3cAAE93wABPeEAAT4gAAE+IgABPiQAAT4mAAE+KQABPioAAT4rAAE+LAABPi0AAT4vAAE+MQABPjIAAT4zAAE+NQABPjYAAT51AAE+dwABPnkAAT57AAE+fgABPn8AAT6AAAE+gQABPoIAAT6EAAE+hgABPocAAT6IAAE+igABPosAAT7KAAE+zAABPs8AAT7RAAE+1AABPtUAAT7WAAE+1wABPtgAAT7aAAE+3AABPt0AAT7eAAE+4AABPuEAAT7uAAE+7wABPvAAAT7yAAE/MQABPzMAAT81AAE/NwABPzoAAT87AAE/PAABPz0AAT8+AAE/QAABP0IAAT9DAAE/RAABP0YAAT9HAAE/hgABP4gAAT+KAAE/jAABP48AAT+QAAE/kQABP5IAAT+TAAE/lQABP5cAAT+YAAE/mQABP5sAAT+cAAE/2wABP90AAT/fAAE/4QABP+QAAT/lAAE/5gABP+cAAT/oAAE/6gABP+wAAT/tAAE/7gABP/AAAT/xAAFAMAABQDIAAUA0AAFANgABQDkAAUA6AAFAOwABQDwAAUA9AAFAPwABQEEAAUBCAAFAQwABQEUAAUBGAAFAhQABQIcAAUCJAAFAiwABQI4AAUCPAAFAkAABQJEAAUCSAAFAlAABQJYAAUCXAAFAmAABQJoAAUCbAAFAwAABQOQAAUELAAFBLwABQTIAAUE0AAFBNgABQTgAAUE6AAFBPAABQT0AAUFAAAFBTQABQVwAAUFeAAFBYAABQWIAAUFkAAFBZgABQWgAAUFqAAFBeQABQXwAAUF/AAF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SQQABUkMAAVJFAAFSRgABUkcAAVJJAAFSSgABUokAAVKLAAFSjQABUo8AAVKSAAFSkwABUpQAAVKVAAFSlgABUpgAAVKaAAFSmwABUpwAAVKeAAFSnwABUt4AAVLgAAFS4wABUuUAAVLoAAFS6QABUuoAAVLrAAFS7AABUu4AAVLwAAFS8QABUvIAAVL0AAFS9QABUzQAAVM2AAFTOAABUzoAAVM9AAFTPgABUz8AAVNAAAFTQQABU0MAAVNFAAFTRgABU0cAAVNJAAFTSgABU4kAAVOLAAFTjQABU48AAVOSAAFTkwABU5QAAVOVAAFTlgABU5gAAVOaAAFTmwABU5wAAVOeAAFTnwABU94AAVPgAAFT4gABU+QAAVPnAAFT6AABU+kAAVPqAAFT6wABU+0AAVPvAAFT8AABU/EAAVPzAAFT9AABVD8AAVRiAAFUggABVKIAAVSkAAFUpgABVKgAAVSqAAFUrQABVK4AAVSvAAFUsgABVLMAAVS1AAFUtgABVLgAAVS6AAFUuwABVLwAAVS/AAFUwAABVMUAAVTSAAFU1wABVNkAAVTbAAFU4AABVOMAAVTmAAFU6AABVQ0AAVUxAAFVWAABVXwAAVV/AAFVgQABVYMAAVWFAAFVhwABVYkAAVWKAAFVjQABVZoAAVWrAAFVrQABVa8AAVWxAAFVswABVbUAAVW3AAFVuQABVbsAAVXMAAFVzwABVdIAAVXVAAFV2AABVdsAAVXeAAFV4QABVeQAAVXmAAFWJQABVicAAVYpAAFWKwABVi4AAVYvAAFWMAABVjEAAVYyAAFWNAABVjYAAVY3AAFWOAABVjoAAVY7AAFWegABVnwAAVZ+AAFWgAABVoMAAVaEAAFWhQABVoYAAVaHAAFWiQABVosAAVaMAAFWjQABVo8AAVaQAAFWzwABVtEAAVbUAAFW1gABVtkAAVbaAAFW2wABVtwAAVbdAAFW3wABVuEAAVbiAAFW4wABVuUAAVbmAAFW8wABVvQAAVb1AAFW9wABVzYAAVc4AAFXOgABVzwAAVc/AAFXQAABV0EAAVdCAAFXQwABV0UAAVdHAAFXSAABV0kAAVdLAAFXTAABV4sAAVeNAAFXjwABV5EAAVeUAAFXlQABV5YAAVeXAAFXmAABV5oAAVecAAFXnQABV54AAVegAAFXoQABV+AAAVfiAAFX5AABV+YAAVfpAAFX6gABV+sAAVfsAAFX7QABV+8AAVfxAAFX8gABV/MAAVf1AAFX9gABWDUAAVg3AAFYOQABWDsAAVg+AAFYPwABWEAAAVhBAAFYQgABWEQAAVhGAAFYRwABWEgAAVhKAAFYSwABWIoAAViMAAFYjgABWJAAAViTAAFYlAABWJUAAViWAAFYlwABWJkAAVibAAFYnAABWJ0AAVifAAFYoAABWMUAAVjpAAFZEAABWTQAAVk3AAFZOQABWTsAAVk9AAFZPwABWUEAAVlCAAFZRQABWVIAAVlhAAFZYwABWWUAAVlnAAFZaQABWWsAAVltAAFZbwABWX4AAVmBAAFZhAABWYcAAVmKAAFZjQABWZAAAVmTAAFZlQABWdQAAVnWAAFZ2AABWdoAAVndAAFZ3gABWd8AAVngAAFZ4QABWeMAAVnlAAFZ5gABWecAAVnpAAFZ6gABWikAAVorAAFaLQABWi8AAVoyAAFaMwABWjQAAVo1AAFaNgABWjgAAVo6AAFaOwABWjwAAVo+AAFaPwABWn4AAVqAAAFaggABWoQAAVqHAAFaiAABWokAAVqKAAFaiwABWo0AAVqPAAFakAABWpEAAVqTAAFalAABWtMAAVrVAAFa2AABWtoAAVrdAAFa3gABWt8AAVrgAAFa4QABWuMAAVrlAAFa5gABWucAAVrpAAFa6gABWykAAVsrAAFbLQABWy8AAVsyAAFbMwABWzQAAVs1AAFbNgABWzgAAVs6AAFbOwABWzwAAVs+AAFbPwABW34AAVuAAAFbggABW4QAAVuHAAFbiAABW4kAAVuKAAFbiwABW40AAVuPAAFbkAABW5EAAVuTAAFblAABW9MAAVvVAAFb1wABW9kAAVvcAAFb3QABW94AAVvfAAFb4AABW+IAAVvkAAFb5QABW+YAAVvoAAFb6QABXDQAAVxXAAFcdwABXJcAAVyZAAFcmwABXJ0AAVyfAAFcogABXKMAAVykAAFcpwABXKgAAVyqAAFcqwABXK0AAVyvAAFcsAABXLEAAVy0AAFctQABXLoAAVzHAAFczAABXM4AAVzQAAFc1QABXNgAAVzbAAFc3QABXQIAAV0mAAFdTQABXXEAAV10AAFddgABXXgAAV16AAFdfAABXX4AAV1/AAFdggABXY8AAV2gAAFdogABXaQAAV2mAAFdqAABXaoAAV2sAAFdrgABXbAAAV3BAAFdxAABXccAAV3KAAFdzQABXdAAAV3TAAFd1gABXdkAAV3bAAFeGgABXhwAAV4eAAFeIAABXiMAAV4kAAFeJQABXiYAAV4nAAFeKQABXisAAV4sAAFeLQABXi8AAV4wAAFebwABXnEAAV5zAAFedQABXngAAV55AAFeegABXnsAAV58AAFefgABXoAAAV6BAAFeggABXoQAAV6FAAFexAABXsYAAV7JAAFeywABXs4AAV7PAAFe0AABXtEAAV7SAAFe1AABXtYAAV7XAAFe2AABXtoAAV7bAAFe6AABXukAAV7qAAFe7AABXysAAV8tAAFfLwABXzEAAV80AAFfNQABXzYAAV83AAFfOAABXzoAAV88AAFfPQABXz4AAV9AAAFfQQABX4AAAV+CAAFfhAABX4YAAV+JAAFfigABX4sAAV+MAAFfjQABX48AAV+RAAFfkgABX5MAAV+VAAFflgABX9UAAV/XAAFf2QABX9sAAV/eAAFf3wABX+AAAV/hAAFf4gABX+QAAV/mAAFf5wABX+gAAV/qAAFf6wABYCoAAWAsAAFgLgABYDAAAWAzAAFgNAABYDUAAWA2AAFgNwABYDkAAWA7AAFgPAABYD0AAWA/AAFgQAABYH8AAWCBAAFggwABYIUAAWCIAAFgiQABYIoAAWCLAAFgjAABYI4AAWCQAAFgkQABYJIAAWCUAAFglQABYLoAAWDeAAFhBQABYSkAAWEsAAFhLgABYTAAAWEyAAFhNAABYTYAAWE3AAFhOgABYUcAAWFWAAFhWAABYVoAAWFcAAFhXgABYWAAAWFiAAFhZAABYXMAAWF2AAFheQABYXwAAWF/AAFhggABYYUAAWGIAAFhigABYckAAWHLAAFhzQABYc8AAWHSAAFh0wABYdQAAWHVAAFh1gABYdgAAWHaAAFh2wABYdwAAWHeAAFh3wABYh4AAWIgAAFiIgABYiQAAWInAAFiKAABYikAAWIqAAFiKwABYi0AAWIvAAFiMAABYjEAAWIzAAFiNAABYnMAAWJ1AAFidwABYnkAAWJ8AAFifQABYn4AAWJ/AAFigAABYoIAAWKEAAFihQABYoYAAWKIAAFiiQABYsgAAWLKAAFizQABYs8AAWLSAAFi0wABYtQAAWLVAAFi1gABYtgAAWLaAAFi2wABYtwAAWLeAAFi3wABYx4AAWMgAAFjIgABYyQAAWMnAAFjKAABYykAAWMqAAFjKwABYy0AAWMvAAFjMAABYzEAAWMzAAFjNAABY3MAAWN1AAFjdwABY3kAAWN8AAFjfQABY34AAWN/AAFjgAABY4IAAWOEAAFjhQABY4YAAWOIAAFjiQABY8gAAWPKAAFjzAABY84AAWPRAAFj0gABY9MAAWPUAAFj1QABY9cAAWPZAAFj2gABY9sAAWPdAAFj3gABZCkAAWRMAAFkbAABZIwAAWSOAAFkkAABZJIAAWSUAAFklwABZJgAAWSZAAFknAABZJ0AAWSfAAFkoAABZKIAAWSlAAFkpgABZKcAAWSqAAFkqwABZLAAAWS9AAFkwgABZMQAAWTGAAFkywABZM4AAWTRAAFk0wABZPgAAWUcAAFlQwABZWcAAWVqAAFlbAABZW4AAWVwAAFlcgABZXQAAWV1AAFleAABZYUAAWWWAAFlmAABZZoAAWWcAAFlngABZaAAAWWiAAFlpAABZaYAAWW3AAFlugABZb0AAWXAAAFlwwABZcYAAWXJAAFlzAABZc8AAWXRAAFmEAABZhIAAWYUAAFmFgABZhkAAWYaAAFmGwABZhwAAWYdAAFmHwABZiEAAWYiAAFmIwABZiUAAWYmAAFmZQABZmcAAWZpAAFmawABZm4AAWZvAAFmcAABZnEAAWZyAAFmdAABZnYAAWZ3AAFmeAABZnoAAWZ7AAFmugABZrwAAWa/AAFmwQABZsQAAWbFAAFmxgABZscAAWbIAAFmygABZswAAWbNAAFmzgABZtAAAWbRAAFm3gABZuEAAWbkAAFm5wABZuoAAWbsAAFnBwABZyYAAWdlAAFnZwABZ2kAAWdrAAFnbgABZ28AAWdwAAFncQABZ3IAAWd0AAFndgABZ3cAAWd4AAFnegABZ3sAAWe6AAFnvAABZ74AAWfAAAFnwwABZ8QAAWfFAAFnxgABZ8cAAWfJAAFnywABZ8wAAWfNAAFnzwABZ9AAAWgPAAFoEQABaBMAAWgVAAFoGAABaBkAAWgaAAFoGwABaBwAAWgeAAFoIAABaCEAAWgiAAFoJAABaCUAAWhkAAFoZgABaGgAAWhqAAFobQABaG4AAWhvAAFocAABaHEAAWhzAAFodQABaHYAAWh3AAFoeQABaHoAAWi5AAFouwABaL0AAWi/AAFowgABaMMAAWjEAAFoxQABaMYAAWjIAAFoygABaMsAAWjMAAFozgABaM8AAWj0AAFpGAABaT8AAWljAAFpZgABaWgAAWlqAAFpbAABaW4AAWlwAAFpcQABaXQAAWmBAAFpkAABaZIAAWmUAAFplgABaZgAAWmaAAFpnAABaZ4AAWmtAAFpsAABabMAAWm2AAFpuQABabwAAWm/AAFpwgABacQAAWoDAAFqBQABagcAAWoJAAFqDAABag0AAWoOAAFqDwABahAAAWoSAAFqFAABahUAAWoWAAFqGAABahkAAWpYAAFqWgABalwAAWpeAAFqYQABamIAAWpjAAFqZAABamUAAWpnAAFqaQABamoAAWprAAFqbQABam4AAWqtAAFqrwABarEAAWqzAAFqtgABarcAAWq4AAFquQABaroAAWq8AAFqvgABar8AAWrAAAFqwgABasMAAWsCAAFrBAABawYAAWsIAAFrCwABawwAAWsNAAFrDgABaw8AAWsRAAFrEwABaxQAAWsVAAFrFwABaxgAAWtXAAFrWQABa1sAAWtdAAFrYAABa2EAAWtiAAFrYwABa2QAAWtmAAFraAABa2kAAWtqAAFrbAABa20AAWusAAFrrgABa7AAAWuyAAFrtQABa7YAAWu3AAFruAABa7kAAWu7AAFrvQABa74AAWu/AAFrwQABa8IAAWwBAAFsAwABbAUAAWwHAAFsCgABbAsAAWwMAAFsDQABbA4AAWwQAAFsEgABbBMAAWwUAAFsFgABbBcAAWwgAAFsIQABbCMAAWwwAAFsMQABbDIAAWw0AAFsQQABbEIAAWxDAAFsRQABbFIAAWxTAAFsVAABbFYAAWxfAAFsbgABbHsAAWyKAAFsnAABbLAAAWzHAAFs2QABbOIAAWzjAAFs5QABbPIAAWzzAAFs9AABbPYAAWz6AAFtAwABbQ0AAW0UAAFtHAABbS4AAW0zAAFtOAAAAAAAAAQCAAAAAAAANn8AAAAAAAAAAAAAAAAAAW06 + + Delta/Database/Model/Delta.xcdatamodeld/Delta 2.xcdatamodel + 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EQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQRmgQRkgAGABIAAgQRlgQRnEACABYADgASABIAAUFNZRVPTADYANwAKADgAPwBGV05TLmtleXNaTlMub2JqZWN0c6YAOQA6ADsAPAA9AD6ABoAHgAiACYAKgAumAEAAQQBCAEMARABFgAyAtoDygQEggQO+gQKDgC5fEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ1lTYXZlU3RhdGVUR2FtZVVDaGVhdF5Db250cm9sbGVyU2tpbl5HYW1lQ29sbGVjdGlvbt8QEABOAE8AUABRAB0AUgBTAB8AVABVAAoAIQBWAFcAJABYAFkAWgAlACUAEABeAF8ALQAlAFkAYgA5AFkAZQBmAGdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2VbX2lzQWJzdHJhY3SADoA2gASABIACgA+As4AEgA6AtYAGgA6AtIANCBJTvESHV29yZGVyZWTTADYANwAKAGsAbQBGoQBsgBChAG6AEYAuXlhEX1BTdGVyZW90eXBl2QAdACEAcgAKACQAcwAfAFgAdABAAGwAWQB4ABMAJQAtAGcAfF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYAMgBCADoA1gACABAiAEtMANgA3AAoAfgCIAEapAH8AgACBAIIAgwCEAIUAhgCHgBOAFIAVgBaAF4AYgBmAGoAbqQCJAIoAiwCMAI0AjgCPAJAAkYAcgCCAIYAngCiAKoAsgC+AM4AuXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATAKgAEwBuAGcAZwBnAC0AZwCvAH8AZwBnABMAZ1VfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3RhdGljWV9pc1VuaXF1ZVpfaXNEZXJpdmVkWl9pc09yZGVyZWRcX2lzQ29tcG9zaXRlV19pc0xlYWaAAIAdgACAEQgICAiAH4ATCAiAAAjSADcACgC2ALeggB7SALkAugC7ALxaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaMAuwC9AL5XTlNBcnJheVhOU09iamVjdNIAuQC6AMAAwV8QEFhEVU1MUHJvcGVydHlJbXCkAMIAwwDEAL5fEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMAbgBnAGcAZwAtAGcArwCAAGcAZwATAGeAAIAAgACAEQgICAiAH4AUCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwDWABMAbgBnAGcAZwAtAGcArwCBAGcAZwATAGeAAIAigACAEQgICAiAH4AVCAiAAAjSADcACgDkALehAOWAI4Ae0gA3AAoA6AC3owDpAOoA64AkgCWAJoAeXxAXZ2FtZUNvbnRyb2xsZXJJbnB1dFR5cGVYZ2FtZVR5cGVbcGxheWVySW5kZXjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMAbgBnAGcAZwAtAGcArwCCAGcAZwATAGeAAIAAgACAEQgICAiAH4AWCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwEBABMAbgBnAGcAZwAtAGcArwCDAGcAZwATAGeAAIApgACAEQgICAiAH4AXCAiAAAjSADcACgEPALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMAbgBnAGcAZwAtAGcArwCEAGcAZwATAGeAAIArgACAEQgICAiAH4AYCAiAAAgI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBIwATAG4AZwBnAGcALQBnAK8AhQBnAGcAEwBngACALYAAgBEICAgIgB+AGQgIgAAI0wA2ADcACgExATIARqCggC7SALkAugE1ATZfEBNOU011dGFibGVEaWN0aW9uYXJ5owE1ATcAvlxOU0RpY3Rpb25hcnnfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwE6ABMAbgBnAGcAZwAtAGcArwCGAGcAZwATAGeAAIAwgACAEQgICAiAH4AaCAiAAAjWACEACgAkAFgAHQAfAUgBSQATAGcAEwAtgDGAMoAACIAAXxAUWERHZW5lcmljUmVjb3JkQ2xhc3PSALkAugFPAVBdWERVTUxDbGFzc0ltcKYBUQFSAVMBVAFVAL5dWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwFYABMAbgBnAGcAZwAtAGcArwCHAGcAZwATAGeAAIA0gACAEQgICAiAH4AbCAiAAAhfEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ9IAuQC6AWcBaF8QElhEVU1MU3RlcmVvdHlwZUltcKcBaQFqAWsBbAFtAW4Avl8QElhEVU1MU3RlcmVvdHlwZUltcF1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNMANgA3AAoBcAF1AEakAOoBcgFzAXSAJYA3gDiAOaQBdgF3AXgBeYA6gGaAgICagC5fEBdnYW1lQ29udHJvbGxlcklucHV0VHlwZV8QFWRlbHRhQ29yZUlucHV0TWFwcGluZ1twbGF5ZXJJbmRleN8QEgCdAJ4AnwF/AB0AoQCiAYAAHwCgAYEAowAKACEApAClACQApgATABMAEwAlAEAAZwBnAYkALQBnAFkAZwGNAOoAZwBnAZEAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgAwICIA8CIAOCIBlgCUICIA7CBLd6BnQ0wA2ADcACgGVAZgARqIBlgGXgD2APqIBmQGagD+AVIAuXxASWERfUFByb3BTdGVyZW90eXBlXxASWERfUEF0dF9TdGVyZW90eXBl2QAdACEBnwAKACQBoAAfAFgBoQF2AZYAWQB4ABMAJQAtAGcBqV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYA6gD2ADoA1gACABAiAQNMANgA3AAoBqwG0AEaoAawBrQGuAa8BsAGxAbIBs4BBgEKAQ4BEgEWARoBHgEioAbUBtgG3AbgBuQG6AbsBvIBJgEqAS4BPgFCAUYBSgFOALl8QG1hEX1BQU0tfaXNTdG9yZWRJblRydXRoRmlsZV8QG1hEX1BQU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QEFhEX1BQU0tfdXNlckluZm9fEBFYRF9QUFNLX2lzSW5kZXhlZF8QElhEX1BQU0tfaXNPcHRpb25hbF8QGlhEX1BQU0tfaXNTcG90bGlnaHRJbmRleGVkXxARWERfUFBTS19lbGVtZW50SURfEBNYRF9QUFNLX2lzVHJhbnNpZW503xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAZkAZwBnAGcALQBnAK8BrABnAGcAEwBngACAK4AAgD8ICAgIgB+AQQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAZkAZwBnAGcALQBnAK8BrQBnAGcAEwBngACAAIAAgD8ICAgIgB+AQggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMB5gATAZkAZwBnAGcALQBnAK8BrgBnAGcAEwBngACATIAAgD8ICAgIgB+AQwgIgAAI0wA2ADcACgH0AfYARqEB9YBNoQH3gE6ALl8QF2F0dHJpYnV0ZVZhbHVlQ2xhc3NOYW1lWEdhbWVUeXBl3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAZkAZwBnAGcALQBnAK8BrwBnAGcAEwBngACAK4AAgD8ICAgIgB+ARAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAZkAZwBnAGcALQBnAK8BsABnAGcAEwBngACAK4AAgD8ICAgIgB+ARQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAZkAZwBnAGcALQBnAK8BsQBnAGcAEwBngACAK4AAgD8ICAgIgB+ARggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAZkAZwBnAGcALQBnAK8BsgBnAGcAEwBngACAAIAAgD8ICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAZkAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgD8ICAgIgB+ASAgIgAAI2QAdACECRwAKACQCSAAfAFgCSQF2AZcAWQB4ABMAJQAtAGcCUV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYA6gD6ADoA1gACABAiAVdMANgA3AAoCUwJbAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcCXAJdAl4CXwJgAmECYoBdgF6AX4BggGKAY4BkgC5fEB1YRF9QQXR0S19kZWZhdWx0VmFsdWVBc1N0cmluZ18QKFhEX1BBdHRLX2FsbG93c0V4dGVybmFsQmluYXJ5RGF0YVN0b3JhZ2VfEBdYRF9QQXR0S19taW5WYWx1ZVN0cmluZ18QFlhEX1BBdHRLX2F0dHJpYnV0ZVR5cGVfEBdYRF9QQXR0S19tYXhWYWx1ZVN0cmluZ18QHVhEX1BBdHRLX3ZhbHVlVHJhbnNmb3JtZXJOYW1lXxAgWERfUEF0dEtfcmVndWxhckV4cHJlc3Npb25TdHJpbmffEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMBmgBnAGcAZwAtAGcArwJUAGcAZwATAGeAAIAAgACAVAgICAiAH4BWCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMBmgBnAGcAZwAtAGcArwJVAGcAZwATAGeAAIArgACAVAgICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMBmgBnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACAVAgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwKaABMBmgBnAGcAZwAtAGcArwJXAGcAZwATAGeAAIBhgACAVAgICAiAH4BZCAiAAAgRBwjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMBmgBnAGcAZwAtAGcArwJYAGcAZwATAGeAAIAAgACAVAgICAiAH4BaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMBmgBnAGcAZwAtAGcArwJZAGcAZwATAGeAAIAAgACAVAgICAiAH4BbCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMBmgBnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACAVAgICAiAH4BcCAiAAAjSALkAugLWAtddWERQTUF0dHJpYnV0ZaYC2ALZAtoC2wLcAL5dWERQTUF0dHJpYnV0ZVxYRFBNUHJvcGVydHlfEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEBIAnQCeAJ8C3gAdAKEAogLfAB8AoALgAKMACgAhAKQApQAkAKYAEwATABMAJQBAAGcAZwLoAC0AZwBZAGcBjQFyAGcAZwLwAGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAMCAiAaAiADgiAZYA3CAiAZwgSJDrEo9MANgA3AAoC9AL3AEaiAZYBl4A9gD6iAvgC+YBpgHaALtkAHQAhAvwACgAkAv0AHwBYAv4BdwGWAFkAeAATACUALQBnAwZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAZoA9gA6ANYAAgAQIgGrTADYANwAKAwgDEQBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqAMSAxMDFAMVAxYDFwMYAxmAa4BsgG2AcYBygHOAdIB1gC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMC+ABnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACAaQgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMC+ABnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACAaQgICAiAH4BCCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwM7ABMC+ABnAGcAZwAtAGcArwGuAGcAZwATAGeAAIBugACAaQgICAiAH4BDCAiAAAjTADYANwAKA0kDSwBGoQNKgG+hA0yAcIAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWVfEBdHYW1lQ29udHJvbGxlcklucHV0VHlwZd8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwL4AGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAIBpCAgICIAfgEQICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwL4AGcAZwBnAC0AZwCvAbAAZwBnABMAZ4AAgCuAAIBpCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwL4AGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAIBpCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwL4AGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAIBpCAgICIAfgEcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwL4AGcAZwBnAC0AZwCvAbMAZwBnABMAZ4AAgCuAAIBpCAgICIAfgEgICIAACNkAHQAhA5wACgAkA50AHwBYA54BdwGXAFkAeAATACUALQBnA6ZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAZoA+gA6ANYAAgAQIgHfTADYANwAKA6gDsABGpwJUAlUCVgJXAlgCWQJagFaAV4BYgFmAWoBbgFynA7EDsgOzA7QDtQO2A7eAeIB5gHqAe4B8gH2Af4Au3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAvkAZwBnAGcALQBnAK8CVABnAGcAEwBngACAAIAAgHYICAgIgB+AVggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATAvkAZwBnAGcALQBnAK8CVQBnAGcAEwBngACAK4AAgHYICAgIgB+AVwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAvkAZwBnAGcALQBnAK8CVgBnAGcAEwBngACAAIAAgHYICAgIgB+AWAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMCmgATAvkAZwBnAGcALQBnAK8CVwBnAGcAEwBngACAYYAAgHYICAgIgB+AWQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATAvkAZwBnAGcALQBnAK8CWABnAGcAEwBngACAAIAAgHYICAgIgB+AWggIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMEBgATAvkAZwBnAGcALQBnAK8CWQBnAGcAEwBngACAfoAAgHYICAgIgB+AWwgIgAAIUN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwL5AGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAIB2CAgICIAfgFwICIAACN8QEgCdAJ4AnwQkAB0AoQCiBCUAHwCgBCYAowAKACEApAClACQApgATABMAEwAlAEAAZwBnBC4ALQBnAFkAZwGNAXMAZwBnBDYAZ18QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgAwICICCCIAOCIBlgDgICICBCBKPVikz0wA2ADcACgQ6BD0ARqIBlgGXgD2APqIEPgQ/gIOAkIAu2QAdACEEQgAKACQEQwAfAFgERAF4AZYAWQB4ABMAJQAtAGcETF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYCAgD2ADoA1gACABAiAhNMANgA3AAoETgRXAEaoAawBrQGuAa8BsAGxAbIBs4BBgEKAQ4BEgEWARoBHgEioBFgEWQRaBFsEXARdBF4EX4CFgIaAh4CLgIyAjYCOgI+ALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwQ+AGcAZwBnAC0AZwCvAawAZwBnABMAZ4AAgCuAAICDCAgICIAfgEEICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwQ+AGcAZwBnAC0AZwCvAa0AZwBnABMAZ4AAgACAAICDCAgICIAfgEIICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATBIEAEwQ+AGcAZwBnAC0AZwCvAa4AZwBnABMAZ4AAgIiAAICDCAgICIAfgEMICIAACNMANgA3AAoEjwSRAEahBJCAiaEEkoCKgC5fEBdhdHRyaWJ1dGVWYWx1ZUNsYXNzTmFtZVNBbnnfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMEPgBnAGcAZwAtAGcArwGvAGcAZwATAGeAAIArgACAgwgICAiAH4BECAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMEPgBnAGcAZwAtAGcArwGwAGcAZwATAGeAAIArgACAgwgICAiAH4BFCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMEPgBnAGcAZwAtAGcArwGxAGcAZwATAGeAAIArgACAgwgICAiAH4BGCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMEPgBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACAgwgICAiAH4BHCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMEPgBnAGcAZwAtAGcArwGzAGcAZwATAGeAAIArgACAgwgICAiAH4BICAiAAAjZAB0AIQTiAAoAJATjAB8AWATkAXgBlwBZAHgAEwAlAC0AZwTsXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgICAPoAOgDWAAIAECICR0wA2ADcACgTuBPYARqcCVAJVAlYCVwJYAlkCWoBWgFeAWIBZgFqAW4BcpwT3BPgE+QT6BPsE/AT9gJKAk4CUgJWAloCXgJmALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwQ/AGcAZwBnAC0AZwCvAlQAZwBnABMAZ4AAgACAAICQCAgICIAfgFYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwQ/AGcAZwBnAC0AZwCvAlUAZwBnABMAZ4AAgCuAAICQCAgICIAfgFcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwQ/AGcAZwBnAC0AZwCvAlYAZwBnABMAZ4AAgACAAICQCAgICIAfgFgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATApoAEwQ/AGcAZwBnAC0AZwCvAlcAZwBnABMAZ4AAgGGAAICQCAgICIAfgFkICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwQ/AGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAICQCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATBUwAEwQ/AGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgJiAAICQCAgICIAfgFsICIAACF8QJUdhbWVDb250cm9sbGVySW5wdXRNYXBwaW5nVHJhbnNmb3JtZXLfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMEPwBnAGcAZwAtAGcArwJaAGcAZwATAGeAAIAAgACAkAgICAiAH4BcCAiAAAjfEBIAnQCeAJ8FagAdAKEAogVrAB8AoAVsAKMACgAhAKQApQAkAKYAEwATABMAJQBAAGcAZwV0AC0AZwBZAGcBjQF0AGcAZwV8AGdfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAMCAiAnAiADgiAZYA5CAiAmwgSTqLn/9MANgA3AAoFgAWDAEaiAZYBl4A9gD6iBYQFhYCdgKiALtkAHQAhBYgACgAkBYkAHwBYBYoBeQGWAFkAeAATACUALQBnBZJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAmoA9gA6ANYAAgAQIgJ7TADYANwAKBZQFnQBGqAGsAa0BrgGvAbABsQGyAbOAQYBCgEOARIBFgEaAR4BIqAWeBZ8FoAWhBaIFowWkBaWAn4CggKGAo4CkgKWApoCngC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMFhABnAGcAZwAtAGcArwGsAGcAZwATAGeAAIArgACAnQgICAiAH4BBCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMFhABnAGcAZwAtAGcArwGtAGcAZwATAGeAAIAAgACAnQgICAiAH4BCCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwXHABMFhABnAGcAZwAtAGcArwGuAGcAZwATAGeAAICigACAnQgICAiAH4BDCAiAAAjTADYANwAKBdUF1gBGoKCALt8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwWEAGcAZwBnAC0AZwCvAa8AZwBnABMAZ4AAgCuAAICdCAgICIAfgEQICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwWEAGcAZwBnAC0AZwCvAbAAZwBnABMAZ4AAgCuAAICdCAgICIAfgEUICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwWEAGcAZwBnAC0AZwCvAbEAZwBnABMAZ4AAgCuAAICdCAgICIAfgEYICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwWEAGcAZwBnAC0AZwCvAbIAZwBnABMAZ4AAgACAAICdCAgICIAfgEcICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATARMAEwWEAGcAZwBnAC0AZwCvAbMAZwBnABMAZ4AAgCuAAICdCAgICIAfgEgICIAACNkAHQAhBiQACgAkBiUAHwBYBiYBeQGXAFkAeAATACUALQBnBi5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAmoA+gA6ANYAAgAQIgKnTADYANwAKBjAGOABGpwJUAlUCVgJXAlgCWQJagFaAV4BYgFmAWoBbgFynBjkGOgY7BjwGPQY+Bj+AqoCsgK2AroCwgLGAsoAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMGQwATBYUAZwBnAGcALQBnAK8CVABnAGcAEwBngACAq4AAgKgICAgIgB+AVggIgAAIUTDfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMFhQBnAGcAZwAtAGcArwJVAGcAZwATAGeAAIArgACAqAgICAiAH4BXCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMFhQBnAGcAZwAtAGcArwJWAGcAZwATAGeAAIAAgACAqAgICAiAH4BYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwZxABMFhQBnAGcAZwAtAGcArwJXAGcAZwATAGeAAICvgACAqAgICAiAH4BZCAiAAAgQZN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwWFAGcAZwBnAC0AZwCvAlgAZwBnABMAZ4AAgACAAICoCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwWFAGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgACAAICoCAgICIAfgFsICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEwWFAGcAZwBnAC0AZwCvAloAZwBnABMAZ4AAgACAAICoCAgICIAfgFwICIAACFpkdXBsaWNhdGVz0gA3AAoGrgC3oIAe0gC5ALoGsQayWlhEUE1FbnRpdHmnBrMGtAa1BrYGtwa4AL5aWERQTUVudGl0eV1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QEAa6BrsGvAa9AB0Gvga/AB8GwAbBAAoAIQbCBsMAJABYAFkGxQAlACUAEAbJAF8ALQAlAFkAYgA6AFkG0AbRAGdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WADoDLgASABIACgLiAs4AEgA6AtYAHgA6BA72AtwgS3Y/0atMANgA3AAoG1QbXAEahAGyAEKEG2IC5gC7ZAB0AIQbbAAoAJAbcAB8AWAbdAEEAbABZAHgAEwAlAC0AZwblXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgLaAEIAOgDWAAIAECIC60wA2ADcACgbnBvEARqkAfwCAAIEAggCDAIQAhQCGAIeAE4AUgBW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AAIAECID20wA2ADcACgj+CQgARqkAfwCAAIEAggCDAIQAhQCGAIeAE4AUgBWAFoAXgBiAGYAagBupCQkJCgkLCQwJDQkOCQ8JEAkRgPeA+YD6gP2A/oEBAIEBAYEBA4EBBIAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMJFQATCO8AZwBnAGcALQBnAK8AfwBnAGcAEwBngACA+IAAgPUICAgIgB+AEwgIgAAI0gA3AAoJIwC3oIAe3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATCO8AZwBnAGcALQBnAK8AgABnAGcAEwBngACAAIAAgPUICAgIgB+AFAgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMJNgATCO8AZwBnAGcALQBnAK8AgQBnAGcAEwBngACA+4AAgPUICAgIgB+AFQgIgAAI0gA3AAoJRAC3oQlFgPyAHtIANwAKCUgAt6EHMoDBgB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwATABMI7wBnAGcAZwAtAGcArwCCAGcAZwATAGeAAIAAgACA9QgICAiAH4AWCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwlcABMI7wBnAGcAZwAtAGcArwCDAGcAZwATAGeAAID/gACA9QgICAiAH4AXCAiAAAjSADcACglqALeggB7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMI7wBnAGcAZwAtAGcArwCEAGcAZwATAGeAAIArgACA9QgICAiAH4AYCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwl9ABMI7wBnAGcAZwAtAGcArwCFAGcAZwATAGeAAIEBAoAAgPUICAgIgB+AGQgIgAAI0wA2ADcACgmLCYwARqCggC7fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwE6ABMI7wBnAGcAZwAtAGcArwCGAGcAZwATAGeAAIAwgACA9QgICAiAH4AaCAiAAAjfEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwA7ABMI7wBnAGcAZwAtAGcArwC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kAKYAEwATABMu5gBnAGcAZwAtAGcArwGyAGcAZwATAGeAAIAAgACBA9gICAgIgB+ARwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMBEwATLuYAZwBnAGcALQBnAK8BswBnAGcAEwBngACAK4AAgQPYCAgICIAfgEgICIAACNkAHQAhL4YACgAkL4cAHwBYL4guwgGXAFkAeAATACUALQBnL5BfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA9WAPoAOgDWAAIAECIED5NMANgA3AAovki+aAEanAlQCVQJWAlcCWAJZAlqAVoBXgFiAWYBagFuAXKcvmy+cL50vni+fL6AvoYED5YED54ED6IED6YED6oED64ED7IAu3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMvpQATLucAZwBnAGcALQBnAK8CVABnAGcAEwBngACBA+aAAIED4wgICAiAH4BWCAiAAAhSTk/fEA8AnQCeAJ8AHQCgAKEAogAfAKMACgAhAKQApQAkAKYAEwETABMu5wBnAGcAZwAtAGcArwJVAGcAZwATAGeAAIArgACBA+MICAgIgB+AVwgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLucAZwBnAGcALQBnAK8CVgBnAGcAEwBngACAAIAAgQPjCAgICIAfgFgICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATFawAEy7nAGcAZwBnAC0AZwCvAlcAZwBnABMAZ4AAgQHygACBA+MICAgIgB+AWQgIgAAI3xAPAJ0AngCfAB0AoAChAKIAHwCjAAoAIQCkAKUAJACmABMAEwATLucAZwBnAGcALQBnAK8CWABnAGcAEwBngACAAIAAgQPjCAgICIAfgFoICIAACN8QDwCdAJ4AnwAdAKAAoQCiAB8AowAKACEApAClACQApgATABMAEy7nAGcAZwBnAC0AZwCvAlkAZwBnABMAZ4AAgACAAIED4wgICAiAH4BbCAiAAAj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ACsAAAArcAAAK4gAACwQAAAslAAALOAAACzoAAAs9AAALQAAAC0IAAAtEAAALRgAAC0kAAAtMAAALTgAAC1AAAAtSAAALVAAAC1YAAAtYAAALWQAAC10AAAtqAAALcgAAC30AAAuKAAALjAAAC44AAAuQAAALkgAAC5QAAAuWAAALowAAC6UAAAunAAALqQAAC6wAAAuvAAALsgAAC7QAAAvRAAAL2wAAC+AAAAvmAAAL9QAADAQAAAxHAAAMawAADI8AAAyyAAAM2QAADPkAAA0gAAANRwAADWcAAA2LAAANrwAADbsAAA29AAANvwAADcEAAA3DAAANxQAADccAAA3JAAANywAADc0AAA3PAAAN0QAADdMAAA3VAAAN1wAADdgAAA3dAAAN5QAADfIAAA31AAAN9wAADfoAAA38AAAN/gAADg0AAA4yAAAOVgAADn0AAA6hAAAOowAADqUAAA6nAAAOqQAADqsAAA6tAAAOrgAADrAAAA69AAAO0AAADtIAAA7UAAAO1gAADtgAAA7aAAAO3AAADt4AAA7gAAAO4gAADvUAAA73AAAO+QAADvsAAA79AAAO/wAADwEAAA8DAAAPBQAADwcAAA8JAAAPHwAADzIAAA9OAAAPawAAD4cAAA+bAAAPrQAAD8MAAA/cAAAQGwAAECEAABAqAAAQNwAAEEMAABBNAAAQVwAAEGIAABBtAAAQegAAEIIAABCEAAAQhgAAEIgAABCKAAAQiwAAEIwAABCNAAAQjgAAEJAAABCSAAAQkwAAEJQAABCWAAAQlwAAEKAAABChAAAQowAAEKwAABC3AAAQwAAAEM8AABDWAAAQ3gAAEOcAABDwAAARAwAAEQwAABEfAAARNgAAEUgAABGHAAARiQAAEYsAABGNAAARjwAAEZAAABGRAAARkgAAEZMAABGVAAARlwAAEZgAABGZAAARmwAAEZwAABHbAAAR3QAAEd8AABHhAAAR4wAAEeQAABHlAAAR5gAAEecAABHpAAAR6wAAEewAABHtAAAR7wAAEfAAABH5AAAR/AAAEf4AABIAAAASCQAAEhAAABISAAASFAAAEhYAABIYAAASMgAAEjsAABJHAAAShgAAEogAABKKAAASjAAAEo4AABKPAAASkAAAEpEAABKSAAASlAAAEpYAABKXAAASmAAAEpoAABKbAAAS2gAAEtwAABLeAAAS4AAAEuIAABLjAAAS5AAAEuUAABLmAAAS6AAAEuoAABLrAAAS7AAAEu4AABLvAAAS+AAAEvkAABL7AAATOgAAEzwAABM+AAATQAAAE0IAABNDAAATRAAAE0UAABNGAAATSAAAE0oAABNLAAATTAAAE04AABNPAAATUAAAE48AABORAAATkwAAE5UAABOXAAATmAAAE5kAABOaAAATmwAAE50AABOfAAAToAAAE6EAABOjAAATpAAAE7EAABOyAAATswAAE7UAABO+AAAT1AAAE9sAABPoAAAUJwAAFCkAABQrAAAULQAAFC8AABQwAAAUMQAAFDIAABQzAAAUNQAAFDcAABQ4AAAUOQAAFDsAABQ8AAAUVQAAFFcAABRZAAAUWwAAFFwAABReAAAUdQAAFH4AABSMAAAUmQAAFKcAABS8AAAU0AAAFOcAABT5AAAVOAAAFToAABU8AAAVPgAAFUAAABVBAAAVQgAAFUMAABVEAAAVRgAAFUgAABVJAAAVSgAAFUwAABVNAAAVagAAFXMAABWIAAAVlwAAFawAABW6AAAVzwAAFeMAABX6AAAWDAAAFhkAABYiAAAWJAAAFiYAABYoAAAWKgAAFjMAABY1AAAWNwAAFjkAABY7AAAWPQAAFlcAABZvAAAWewAAFsYAABbpAAAXCQAAFykAABcrAAAXLQAAFy8AABcxAAAXMwAAFzQAABc1AAAXNwAAFzgAABc6AAAXOwAAFz0AABc/AAAXQAAAF0EAABdDAAAXRAAAF0kAABdWAAAXWwAAF10AABdfAAAXZAAAF2YAABdoAAAXagAAF38AABeUAAAXuQAAF90AABgEAAAYKAAAGCoAABgsAAAYLgAAGDAAABgyAAAYNAAAGDUAABg3AAAYRAAAGFUAABhXAAAYWQAAGFsAABhdAAAYXwAAGGEAABhjAAAYZQAAGHYAABh4AAAYegAAGHwAABh+AAAYgAAAGIIAABiEAAAYhgAAGIgAABimAAAYxAAAGNcAABjrAAAZAAAAGR0AABkxAAAZRwAAGYYAABmIAAAZigAAGYwAABmOAAAZjwAAGZAAABmRAAAZkgAAGZQAABmWAAAZlwAAGZgAABmaAAAZmwAAGdoAABncAAAZ3gAAGeAAABniAAAZ4wAAGeQAABnlAAAZ5gAAGegAABnqAAAZ6wAAGewAABnuAAAZ7wAAGi4AABowAAAaMgAAGjQAABo2AAAaNwAAGjgAABo5AAAaOgAAGjwAABo+AAAaPwAAGkAAABpCAAAaQwAAGlAAABpTAAAaVQAAGlgAABpaAAAaXAAAGnYAABp/AAAavgAAGsAAABrCAAAaxAAAGsYAABrHAAAayAAAGskAABrKAAAazAAAGs4AABrPAAAa0AAAGtIAABrTAAAbEgAAGxQAABsWAAAbGAAAGxoAABsbAAAbHAAAGx0AABseAAAbIAAAGyIAABsjAAAbJAAAGyYAABsnAAAbZgAAG2gAABtqAAAbbAAAG24AABtvAAAbcAAAG3EAABtyAAAbdAAAG3YAABt3AAAbeAAAG3oAABt7AAAbugAAG7wAABu+AAAbwAAAG8IAABvDAAAbxAAAG8UAABvGAAAbyAAAG8oAABvLAAAbzAAAG84AABvPAAAcDgAAHBAAABwSAAAcFAAAHBYAABwXAAAcGAAAHBkAABwaAAAcHAAAHB4AABwfAAAcIAAAHCIAABwjAAAcSAAAHGwAAByTAAActwAAHLkAABy7AAAcvQAAHL8AABzBAAAcwwAAHMQAABzGAAAc0wAAHOIAABzkAAAc5gAAHOgAABzqAAAc7AAAHO4AABzwAAAc/wAAHQEAAB0DAAAdBQAAHQcAAB0JAAAdCwAAHQ0AAB0PAAAdLwAAHVoAAB10AAAdjQAAHacAAB3HAAAd6gAAHikAAB4rAAAeLQAAHi8AAB4xAAAeMgAAHjMAAB40AAAeNQAAHjcAAB45AAAeOgAAHjsAAB49AAAePgAAHn0AAB5/AAAegQAAHoMAAB6FAAAehgAAHocAAB6IAAAeiQAAHosAAB6NAAAejgAAHo8AAB6RAAAekgAAHtEAAB7TAAAe1QAAHtcAAB7ZAAAe2gAAHtsAAB7cAAAe3QAAHt8AAB7hAAAe4gAAHuMAAB7lAAAe5gAAHyUAAB8nAAAfKQAAHysAAB8tAAAfLgAAHy8AAB8wAAAfMQAAHzMAAB81AAAfNgAAHzcAAB85AAAfOgAAHz0AAB98AAAffgAAH4AAAB+CAAAfhAAAH4UAAB+GAAAfhwAAH4gAAB+KAAAfjAAAH40AAB+OAAAfkAAAH5EAAB/QAAAf0gAAH9QAAB/WAAAf2AAAH9kAAB/aAAAf2wAAH9wAAB/eAAAf4AAAH+EAAB/iAAAf5AAAH+UAACAkAAAgJgAAICgAACAqAAAgLAAAIC0AACAuAAAgLwAAIDAAACAyAAAgNAAAIDUAACA2AAAgOAAAIDkAACBCAAAgUAAAIF0AACBrAAAgeAAAIIsAACCiAAAgtAAAIP8AACEiAAAhQgAAIWIAACFkAAAhZgAAIWgAACFqAAAhbAAAIW0AACFuAAAhcAAAIXEAACFzAAAhdAAAIXYAACF4AAAheQAAIXoAACF8AAAhfQAAIYIAACGPAAAhlAAAIZYAACGYAAAhnQAAIZ8AACGhAAAhowAAIcgAACHsAAAiEwAAIjcAACI5AAAiOwAAIj0AACI/AAAiQQAAIkMAACJEAAAiRgAAIlMAACJkAAAiZgAAImgAACJqAAAibAAAIm4AACJwAAAicgAAInQAACKFAAAihwAAIokAACKLAAAijQAAIo8AACKRAAAikwAAIpUAACKXAAAi1gAAItgAACLaAAAi3AAAIt4AACLfAAAi4AAAIuEAACLiAAAi5AAAIuYAACLnAAAi6AAAIuoAACLrAAAjKgAAIywAACMuAAAjMAAAIzIAACMzAAAjNAAAIzUAACM2AAAjOAAAIzoAACM7AAAjPAAAIz4AACM/AAAjfgAAI4AAACOCAAAjhAAAI4YAACOHAAAjiAAAI4kAACOKAAAjjAAAI44AACOPAAAjkAAAI5IAACOTAAAjoAAAI6MAACOlAAAjqAAAI6oAACOsAAAjxgAAI+AAACQfAAAkIQAAJCMAACQlAAAkJwAAJCgAACQpAAAkKgAAJCsAACQtAAAkLwAAJDAAACQxAAAkMwAAJDQAACRzAAAkdQAAJHcAACR5AAAkewAAJHwAACR9AAAkfgAAJH8AACSBAAAkgwAAJIQAACSFAAAkhwAAJIgAACTHAAAkyQAAJMsAACTNAAAkzwAAJNAAACTRAAAk0gAAJNMAACTVAAAk1wAAJNgAACTZAAAk2wAAJNwAACUbAAAlHQAAJR8AACUhAAAlIwAAJSQAACUlAAAlJgAAJScAACUpAAAlKwAAJSwAACUtAAAlLwAAJTAAACVvAAAlcQAAJXMAACV1AAAldwAAJXgAACV5AAAlegAAJXsAACV9AAAlfwAAJYAAACWBAAAlgwAAJYQAACWpAAAlzQAAJfQAACYYAAAmGgAAJhwAACYeAAAmIAAAJiIAACYkAAAmJQAAJicAACY0AAAmQwAAJkUAACZHAAAmSQAAJksAACZNAAAmTwAAJlEAACZgAAAmYgAAJmQAACZmAAAmaAAAJmoAACZsAAAmbgAAJnAAACavAAAmsQAAJrMAACa1AAAmtwAAJrgAACa5AAAmugAAJrsAACa9AAAmvwAAJsAAACbBAAAmwwAAJsQAACcDAAAnBQAAJwcAACcJAAAnCwAAJwwAACcNAAAnDgAAJw8AACcRAAAnEwAAJxQAACcVAAAnFwAAJxgAACdXAAAnWQAAJ1sAACddAAAnXwAAJ2AAACdhAAAnYgAAJ2MAACdlAAAnZwAAJ2gAACdpAAAnawAAJ2wAACerAAAnrQAAJ68AACexAAAnswAAJ7QAACe1AAAntgAAJ7cAACe5AAAnuwAAJ7wAACe9AAAnvwAAJ8AAACf/AAAoAQAAKAMAACgFAAAoBwAAKAgAACgJAAAoCgAAKAsAACgNAAAoDwAAKBAAACgRAAAoEwAAKBQAAChTAAAoVQAAKFcAAChZAAAoWwAAKFwAAChdAAAoXgAAKF8AAChhAAAoYwAAKGQAAChlAAAoZwAAKGgAAChpAAAoqAAAKKoAACisAAAorgAAKLAAACixAAAosgAAKLMAACi0AAAotgAAKLgAACi5AAAougAAKLwAACi9AAApCAAAKSsAAClLAAApawAAKW0AAClvAAApcQAAKXMAACl1AAApdgAAKXcAACl5AAApegAAKXwAACl9AAApfwAAKYEAACmCAAApgwAAKYUAACmGAAApiwAAKZgAACmdAAApnwAAKaEAACmmAAApqAAAKaoAACmsAAAp0QAAKfUAACocAAAqQAAAKkIAACpEAAAqRgAAKkgAACpKAAAqTAAAKk0AACpPAAAqXAAAKm0AACpvAAAqcQAAKnMAACp1AAAqdwAAKnkAACp7AAAqfQAAKo4AACqQAAAqkgAAKpQAACqWAAAqmAAAKpoAACqcAAAqngAAKqAAACrfAAAq4QAAKuMAACrlAAAq5wAAKugAACrpAAAq6gAAKusAACrtAAAq7wAAKvAAACrxAAAq8wAAKvQAACszAAArNQAAKzcAACs5AAArOwAAKzwAACs9AAArPgAAKz8AACtBAAArQwAAK0QAACtFAAArRwAAK0gAACuHAAAriQAAK4sAACuNAAArjwAAK5AAACuRAAArkgAAK5MAACuVAAArlwAAK5gAACuZAAArmwAAK5wAACupAAArrAAAK64AACuxAAArswAAK7UAACvPAAAr0wAALBIAACwUAAAsFgAALBgAACwaAAAsGwAALBwAACwdAAAsHgAALCAAACwiAAAsIwAALCQAACwmAAAsJwAALGYAACxoAAAsagAALGwAACxuAAAsbwAALHAAACxxAAAscgAALHQAACx2AAAsdwAALHgAACx6AAAsewAALLoAACy8AAAsvgAALMAAACzCAAAswwAALMQAACzFAAAsxgAALMgAACzKAAAsywAALMwAACzOAAAszwAALQ4AAC0QAAAtEgAALRQAAC0WAAAtFwAALRgAAC0ZAAAtGgAALRwAAC0eAAAtHwAALSAAAC0iAAAtIwAALWIAAC1kAAAtZgAALWgAAC1qAAAtawAALWwAAC1tAAAtbgAALXAAAC1yAAAtcwAALXQAAC12AAAtdwAALZwAAC3AAAAt5wAALgsAAC4NAAAuDwAALhEAAC4TAAAuFQAALhcAAC4YAAAuGgAALicAAC42AAAuOAAALjoAAC48AAAuPgAALkAAAC5CAAAuRAAALlMAAC5VAAAuVwAALlkAAC5bAAAuXQAALl8AAC5hAAAuYwAALqIAAC6kAAAupgAALqgAAC6qAAAuqwAALqwAAC6tAAAurgAALrAAAC6yAAAuswAALrQAAC62AAAutwAALvYAAC74AAAu+gAALvwAAC7+AAAu/wAALwAAAC8BAAAvAgAALwQAAC8GAAAvBwAALwgAAC8KAAAvCwAAL0oAAC9MAAAvTgAAL1AAAC9SAAAvUwAAL1QAAC9VAAAvVgAAL1gAAC9aAAAvWwAAL1wAAC9eAAAvXwAAL54AAC+gAAAvogAAL6QAAC+mAAAvpwAAL6gAAC+pAAAvqgAAL6wAAC+uAAAvrwAAL7AAAC+yAAAvswAAL/IAAC/0AAAv9gAAL/gAAC/6AAAv+wAAL/wAAC/9AAAv/gAAMAAAADACAAAwAwAAMAQAADAGAAAwBwAAMEYAADBIAAAwSgAAMEwAADBOAAAwTwAAMFAAADBRAAAwUgAAMFQAADBWAAAwVwAAMFgAADBaAAAwWwAAMIMAADDCAAAwxAAAMMYAADDIAAAwygAAMMsAADDMAAAwzQAAMM4AADDQAAAw0gAAMNMAADDUAAAw1gAAMNcAADEiAAAxRQAAMWUAADGFAAAxhwAAMYkAADGLAAAxjQAAMY8AADGQAAAxkQAAMZMAADGUAAAxlgAAMZcAADGZAAAxmwAAMZwAADGdAAAxnwAAMaAAADGlAAAxsgAAMbcAADG5AAAxuwAAMcAAADHCAAAxxAAAMcYAADHrAAAyDwAAMjYAADJaAAAyXAAAMl4AADJgAAAyYgAAMmQAADJmAAAyZwAAMmkAADJ2AAAyhwAAMokAADKLAAAyjQAAMo8AADKRAAAykwAAMpUAADKXAAAyqAAAMqoAADKsAAAyrgAAMrAAADKyAAAytAAAMrYAADK4AAAyugAAMvkAADL7AAAy/QAAMv8AADMBAAAzAgAAMwMAADMEAAAzBQAAMwcAADMJAAAzCgAAMwsAADMNAAAzDgAAM00AADNPAAAzUQAAM1MAADNVAAAzVgAAM1cAADNYAAAzWQAAM1sAADNdAAAzXgAAM18AADNhAAAzYgAAM6EAADOjAAAzpQAAM6cAADOpAAAzqgAAM6sAADOsAAAzrQAAM68AADOxAAAzsgAAM7MAADO1AAAztgAAM8MAADPEAAAzxQAAM8cAADQGAAA0CAAANAoAADQMAAA0DgAANA8AADQQAAA0EQAANBIAADQUAAA0FgAANBcAADQYAAA0GgAANBsAADRaAAA0XAAANF4AADRgAAA0YgAANGMAADRkAAA0ZQAANGYAADRoAAA0agAANGsAADRsAAA0bgAANG8AADSuAAA0sAAANLIAADS0AAA0tgAANLcAADS4AAA0uQAANLoAADS8AAA0vgAANL8AADTAAAA0wgAANMMAADUCAAA1BAAANQYAADUIAAA1CgAANQsAADUMAAA1DQAANQ4AADUQAAA1EgAANRMAADUUAAA1FgAANRcAADVWAAA1WAAANVoAADVcAAA1XgAANV8AADVgAAA1YQAANWIAADVkAAA1ZgAANWcAADVoAAA1agAANWsAADWQAAA1tAAANdsAADX/AAA2AQAANgMAADYFAAA2BwAANgkAADYLAAA2DAAANg4AADYbAAA2KgAANiwAADYuAAA2MAAANjIAADY0AAA2NgAANjgAADZHAAA2SQAANksAADZNAAA2TwAANlEAADZTAAA2VQAANlcAADaWAAA2mAAANpoAADacAAA2ngAANp8AADagAAA2oQAANqIAADakAAA2pgAANqcAADaoAAA2qgAANqsAADatAAA27AAANu4AADbwAAA28gAANvQAADb1AAA29gAANvcAADb4AAA2+gAANvwAADb9AAA2/gAANwAAADcBAAA3QAAAN0IAADdEAAA3RgAAN0gAADdJAAA3SgAAN0sAADdMAAA3TgAAN1AAADdRAAA3UgAAN1QAADdVAAA3lAAAN5YAADeYAAA3mgAAN5wAADedAAA3ngAAN58AADegAAA3ogAAN6QAADelAAA3pgAAN6gAADepAAA3qwAAN+oAADfsAAA37gAAN/AAADfyAAA38wAAN/QAADf1AAA39gAAN/gAADf6AAA3+wAAN/wAADf+AAA3/wAAOD4AADhAAAA4QgAAOEQAADhGAAA4RwAAOEgAADhJAAA4SgAAOEwAADhOAAA4TwAAOFAAADhSAAA4UwAAOJIAADiUAAA4lgAAOJgAADiaAAA4mwAAOJwAADidAAA4ngAAOKAAADiiAAA4owAAOKQAADimAAA4pwAAOLIAADi7AAA4vAAAOL4AADjHAAA40gAAOOEAADjsAAA4+gAAOQ8AADkjAAA5OgAAOUwAADmPAAA5swAAOdcAADn6AAA6IQAAOkEAADpoAAA6jwAAOq8AADrTAAA69wAAOvkAADr7AAA6/QAAOv8AADsBAAA7AwAAOwUAADsHAAA7CQAAOwsAADsNAAA7DwAAOxIAADsUAAA7FQAAOxoAADsnAAA7KgAAOywAADsvAAA7MQAAOzMAADtYAAA7fAAAO6MAADvHAAA7yQAAO8sAADvNAAA7zwAAO9EAADvTAAA71AAAO9YAADvjAAA79gAAO/gAADv6AAA7/AAAO/4AADwAAAA8AgAAPAQAADwGAAA8CAAAPBsAADwdAAA8HwAAPCEAADwjAAA8JQAAPCcAADwpAAA8KwAAPC0AADwvAAA8bgAAPHAAADxyAAA8dAAAPHYAADx3AAA8eAAAPHkAADx6AAA8fAAAPH4AADx/AAA8gAAAPIIAADyDAAA8jAAAPI0AADyPAAA8zgAAPNAAADzSAAA81AAAPNYAADzXAAA82AAAPNkAADzaAAA83AAAPN4AADzfAAA84AAAPOIAADzjAAA9IgAAPSQAAD0mAAA9KAAAPSoAAD0rAAA9LAAAPS0AAD0uAAA9MAAAPTIAAD0zAAA9NAAAPTYAAD03AAA9QAAAPUMAAD1FAAA9RwAAPVAAAD1TAAA9VQAAPVcAAD1iAAA9oQAAPaMAAD2lAAA9pwAAPakAAD2qAAA9qwAAPawAAD2tAAA9rwAAPbEAAD2yAAA9swAAPbUAAD22AAA9vAAAPfsAAD39AAA9/wAAPgEAAD4DAAA+BAAAPgUAAD4GAAA+BwAAPgkAAD4LAAA+DAAAPg0AAD4PAAA+EAAAPhkAAD4aAAA+HAAAPlsAAD5dAAA+XwAAPmEAAD5jAAA+ZAAAPmUAAD5mAAA+ZwAAPmkAAD5rAAA+bAAAPm0AAD5vAAA+cAAAPq8AAD6xAAA+swAAPrUAAD63AAA+uAAAPrkAAD66AAA+uwAAPr0AAD6/AAA+wAAAPsEAAD7DAAA+xAAAPtEAAD7SAAA+0wAAPtUAAD8UAAA/FgAAPxgAAD8aAAA/HAAAPx0AAD8eAAA/HwAAPyAAAD8iAAA/JAAAPyUAAD8mAAA/KAAAPykAAD9oAAA/agAAP2wAAD9uAAA/cAAAP3EAAD9yAAA/cwAAP3QAAD92AAA/eAAAP3kAAD96AAA/fAAAP30AAD+KAAA/mwAAP50AAD+fAAA/oQAAP6MAAD+lAAA/pwAAP6kAAD+rAAA/vAAAP74AAD/BAAA/xAAAP8cAAD/KAAA/zQAAP9AAAD/TAAA/1QAAP9oAAD/mAAA/8wAAQAAAAEAJAABADgAAQBMAAEBeAABAgQAAQKEAAEDBAABAwwAAQMUAAEDHAABAyQAAQMsAAEDMAABAzQAAQM8AAEDQAABA0gAAQNMAAEDWAABA2AAAQNkAAEDaAABA3AAAQN0AAEDiAABA7wAAQPQAAED2AABA+AAAQP0AAED/AABBAQAAQQMAAEEWAABBOwAAQV8AAEGGAABBqgAAQawAAEGuAABBsAAAQbIAAEG0AABBtgAAQbcAAEG5AABBxgAAQdcAAEHZAABB2wAAQd0AAEHfAABB4QAAQeMAAEHlAABB5wAAQfgAAEH6AABB/AAAQf4AAEIAAABCAgAAQgQAAEIGAABCCAAAQgoAAEJJAABCSwAAQk0AAEJPAABCUQAAQlIAAEJTAABCVAAAQlUAAEJXAABCWQAAQloAAEJbAABCXQAAQl4AAEKdAABCnwAAQqEAAEKjAABCpQAAQqYAAEKnAABCqAAAQqkAAEKrAABCrQAAQq4AAEKvAABCsQAAQrIAAELxAABC8wAAQvUAAEL3AABC+QAAQvoAAEL7AABC/AAAQv0AAEL/AABDAQAAQwIAAEMDAABDBQAAQwYAAEMTAABDFAAAQxUAAEMXAABDVgAAQ1gAAENaAABDXAAAQ14AAENfAABDYAAAQ2EAAENiAABDZAAAQ2YAAENnAABDaAAAQ2oAAENrAABDqgAAQ6wAAEOuAABDsAAAQ7IAAEOzAABDtAAAQ7UAAEO2AABDuAAAQ7oAAEO7AABDvAAAQ74AAEO/AABDwAAAQ/8AAEQBAABEAwAARAUAAEQHAABECAAARAkAAEQKAABECwAARA0AAEQPAABEEAAARBEAAEQTAABEFAAARFMAAERVAABEVwAARFkAAERbAABEXAAARF0AAEReAABEXwAARGEAAERjAABEZAAARGUAAERnAABEaAAARKcAAESpAABEqwAARK0AAESvAABEsAAARLEAAESyAABEswAARLUAAES3AABEuAAARLkAAES7AABEvAAAROEAAEUFAABFLAAARVAAAEVSAABFVAAARVYAAEVYAABFWgAARVwAAEVdAABFXwAARWwAAEV7AABFfQAARX8AAEWBAABFgwAARYUAAEWHAABFiQAARZgAAEWaAABFnAAARZ4AAEWgAABFowAARaYAAEWpAABFqwAARb0AAEXRAABF4wAARfgAAEYKAABGGQAARjYAAEZ1AABGdwAARnkAAEZ7AABGfQAARn4AAEZ/AABGgAAARoEAAEaDAABGhQAARoYAAEaHAABGiQAARooAAEbJAABGywAARs0AAEbPAABG0QAARtIAAEbTAABG1AAARtUAAEbXAABG2QAARtoAAEbbAABG3QAARt4AAEbgAABHHwAARyEAAEcjAABHJQAARycAAEcoAABHKQAARyoAAEcrAABHLQAARy8AAEcwAABHMQAARzMAAEc0AABHcwAAR3UAAEd3AABHeQAAR3sAAEd8AABHfQAAR34AAEd/AABHgQAAR4MAAEeEAABHhQAAR4cAAEeIAABHywAAR+8AAEgTAABINgAASF0AAEh9AABIpAAASMsAAEjrAABJDwAASTMAAEk1AABJOAAASToAAEk8AABJPgAASUAAAElCAABJRAAASUYAAElIAABJSgAASUwAAElPAABJUQAASVIAAElXAABJZAAASWcAAElpAABJbAAASW4AAElwAABJlQAASbkAAEngAABKBAAASgYAAEoIAABKCgAASgwAAEoOAABKEAAAShEAAEoTAABKIAAASjMAAEo1AABKNwAASjkAAEo7AABKPQAASj8AAEpBAABKQwAASkUAAEpYAABKWgAASlwAAEpeAABKYAAASmIAAEplAABKaAAASmsAAEpuAABKcAAASq8AAEqxAABKswAASrUAAEq3AABKuAAASrkAAEq6AABKuwAASr0AAEq/AABKwAAASsEAAErDAABKxAAASs0AAErOAABK0AAASw8AAEsRAABLEwAASxUAAEsXAABLGAAASxkAAEsaAABLGwAASx0AAEsfAABLIAAASyEAAEsjAABLJAAAS2MAAEtlAABLZwAAS2kAAEtrAABLbAAAS20AAEtuAABLbwAAS3EAAEtzAABLdAAAS3UAAEt3AABLeAAAS4EAAEuEAABLhgAAS4gAAEuRAABLlAAAS5YAAEuYAABL1wAAS9kAAEvbAABL3QAAS98AAEvgAABL4QAAS+IAAEvjAABL5QAAS+cAAEvoAABL6QAAS+sAAEvsAABMKwAATC0AAEwvAABMMQAATDMAAEw0AABMNQAATDYAAEw3AABMOQAATDsAAEw8AABMPQAATD8AAExAAABMSQAATEoAAExMAABMiwAATI0AAEyPAABMkQAATJMAAEyUAABMlQAATJYAAEyXAABMmQAATJsAAEycAABMnQAATJ8AAEygAABM3wAATOEAAEzkAABM5gAATOgAAEzpAABM6gAATOsAAEzsAABM7gAATPAAAEzxAABM8gAATPQAAEz1AABNAgAATQMAAE0EAABNBgAATUUAAE1HAABNSQAATUsAAE1NAABNTgAATU8AAE1QAABNUQAATVMAAE1VAABNVgAATVcAAE1ZAABNWgAATZkAAE2bAABNnQAATZ8AAE2hAABNogAATaMAAE2kAABNpQAATacAAE2pAABNqgAATasAAE2tAABNrgAATbsAAE3OAABN0QAATdQAAE3XAABN2QAATdwAAE3fAABN4QAATeMAAE3lAABN+AAATfsAAE3+AABOAQAATgQAAE4HAABOCgAATg0AAE4QAABOEwAAThUAAE4cAABOLwAATjoAAE5FAABOVwAATqIAAE7FAABO5QAATwUAAE8HAABPCQAATwsAAE8NAABPDwAATxAAAE8RAABPFAAATxUAAE8XAABPGAAATxsAAE8eAABPHwAATyAAAE8jAABPJAAATykAAE82AABPOwAATz0AAE8/AABPRAAAT0cAAE9KAABPTAAAT3EAAE+VAABPvAAAT+AAAE/jAABP5QAAT+cAAE/pAABP6wAAT+0AAE/uAABP8QAAT/4AAFAPAABQEQAAUBMAAFAVAABQFwAAUBkAAFAbAABQHQAAUB8AAFAwAABQMwAAUDYAAFA5AABQPAAAUD8AAFBCAABQRQAAUEgAAFBKAABQiQAAUIsAAFCNAABQjwAAUJIAAFCTAABQlAAAUJUAAFCWAABQmAAAUJoAAFCbAABQnAAAUJ4AAFCfAABQ3gAAUOAAAFDiAABQ5AAAUOcAAFDoAABQ6QAAUOoAAFDrAABQ7QAAUO8AAFDwAABQ8QAAUPMAAFD0AABRMwAAUTUAAFE4AABROgAAUT0AAFE+AABRPwAAUUAAAFFBAABRQwAAUUUAAFFGAABRRwAAUUkAAFFKAABRVwAAUVgAAFFZAABRWwAAUZoAAFGcAABRngAAUaAAAFGjAABRpAAAUaUAAFGmAABRpwAAUakAAFGrAABRrAAAUa0AAFGvAABRsAAAUe8AAFHxAABR8wAAUfUAAFH4AABR+QAAUfoAAFH7AABR/AAAUf4AAFIAAABSAQAAUgIAAFIEAABSBQAAUkQAAFJGAABSSAAAUkoAAFJNAABSTgAAUk8AAFJQAABSUQAAUlMAAFJVAABSVgAAUlcAAFJZAABSWgAAUpkAAFKbAABSnQAAUp8AAFKiAABSowAAUqQAAFKlAABSpgAAUqgAAFKqAABSqwAAUqwAAFKuAABSrwAAUu4AAFLwAABS8gAAUvQAAFL3AABS+AAAUvkAAFL6AABS+wAAUv0AAFL/AABTAAAAUwEAAFMDAABTBAAAUykAAFNNAABTdAAAU5gAAFObAABTnQAAU58AAFOhAABTowAAU6UAAFOmAABTqQAAU7YAAFPFAABTxwAAU8kAAFPLAABTzQAAU88AAFPRAABT0wAAU+IAAFPlAABT6AAAU+sAAFPuAABT8QAAU/QAAFP3AABT+QAAVDgAAFQ6AABUPAAAVD4AAFRBAABUQgAAVEMAAFREAABURQAAVEcAAFRJAABUSgAAVEsAAFRNAABUTgAAVI0AAFSPAABUkgAAVJQAAFSXAABUmAAAVJkAAFSaAABUmwAAVJ0AAFSfAABUoAAAVKEAAFSjAABUpAAAVKYAAFTlAABU5wAAVOkAAFTrAABU7gAAVO8AAFTwAABU8QAAVPIAAFT0AABU9gAAVPcAAFT4AABU+gAAVPsAAFU6AABVPAAAVT8AAFVBAABVRAAAVUUAAFVGAABVRwAAVUgAAFVKAABVTAAAVU0AAFVOAABVUAAAVVEAAFWUAABVuAAAVdwAAFX/AABWJgAAVkYAAFZtAABWlAAAVrQAAFbYAABW/AAAVv4AAFcBAABXAwAAVwUAAFcHAABXCgAAVwwAAFcOAABXEAAAVxIAAFcUAABXFgAAVxkAAFccAABXHQAAVyIAAFcvAABXMgAAVzQAAFc3AABXOgAAVzwAAFdhAABXhQAAV6wAAFfQAABX0wAAV9UAAFfXAABX2QAAV9sAAFfdAABX3gAAV+EAAFfuAABYAQAAWAMAAFgFAABYBwAAWAkAAFgLAABYDQAAWA8AAFgRAABYEwAAWCYAAFgpAABYLAAAWC8AAFgyAABYNQAAWDgAAFg7AABYPgAAWEEAAFhDAABYggAAWIQAAFiHAABYiQAAWIwAAFiNAABYjgAAWI8AAFiQAABYkgAAWJQAAFiVAABYlgAAWJgAAFiZAABYogAAWKMAAFilAABY5AAAWOYAAFjoAABY6gAAWO0AAFjuAABY7wAAWPAAAFjxAABY8wAAWPUAAFj2AABY9wAAWPkAAFj6AABZOQAAWTsAAFk+AABZQAAAWUMAAFlEAABZRQAAWUYAAFlHAABZSQAAWUsAAFlMAABZTQAAWU8AAFlQAABZWQAAWVwAAFlfAABZYQAAWWoAAFltAABZbwAAWXEAAFmwAABZsgAAWbQAAFm2AABZuQAAWboAAFm7AABZvAAAWb0AAFm/AABZwQAAWcIAAFnDAABZxQAAWcYAAFoFAABaBwAAWgoAAFoMAABaDwAAWhAAAFoRAABaEgAAWhMAAFoVAABaFwAAWhgAAFoZAABaGwAAWhwAAFolAABaJgAAWigAAFpnAABaaQAAWmsAAFptAABacAAAWnEAAFpyAABacwAAWnQAAFp2AABaeAAAWnkAAFp6AABafAAAWn0AAFq8AABavgAAWsEAAFrDAABaxgAAWscAAFrIAABayQAAWsoAAFrMAABazgAAWs8AAFrQAABa0gAAWtMAAFrgAABa4QAAWuIAAFrkAABbIwAAWyUAAFsnAABbKQAAWywAAFstAABbLgAAWy8AAFswAABbMgAAWzQAAFs1AABbNgAAWzgAAFs5AABbeAAAW3oAAFt8AABbfgAAW4EAAFuCAABbgwAAW4QAAFuFAABbhwAAW4kAAFuKAABbiwAAW40AAFuOAABbmwAAW6wAAFuuAABbsQAAW7MAAFu2AABbuAAAW7oAAFu8AABbvwAAW9AAAFvTAABb1gAAW9kAAFvcAABb3wAAW+IAAFvlAABb6AAAW+oAAFv3AABb/AAAXAYAAFxRAABcdAAAXJQAAFy0AABctgAAXLgAAFy6AABcvAAAXL8AAFzAAABcwQAAXMQAAFzFAABcxwAAXMgAAFzLAABczQAAXM4AAFzPAABc0gAAXNMAAFzYAABc5QAAXOoAAFzsAABc7gAAXPMAAFz2AABc+QAAXPsAAF0gAABdRAAAXWsAAF2PAABdkgAAXZQAAF2WAABdmAAAXZoAAF2cAABdnQAAXaAAAF2tAABdvgAAXcAAAF3CAABdxAAAXcYAAF3IAABdygAAXcwAAF3OAABd3wAAXeIAAF3lAABd6AAAXesAAF3uAABd8QAAXfQAAF33AABd+QAAXjgAAF46AABePAAAXj4AAF5BAABeQgAAXkMAAF5EAABeRQAAXkcAAF5JAABeSgAAXksAAF5NAABeTgAAXo0AAF6PAABekQAAXpMAAF6WAABelwAAXpgAAF6ZAABemgAAXpwAAF6eAABenwAAXqAAAF6iAABeowAAXuIAAF7kAABe5wAAXukAAF7sAABe7QAAXu4AAF7vAABe8AAAXvIAAF70AABe9QAAXvYAAF74AABe+QAAXwYAAF8HAABfCAAAXwoAAF9JAABfSwAAX00AAF9PAABfUgAAX1MAAF9UAABfVQAAX1YAAF9YAABfWgAAX1sAAF9cAABfXgAAX18AAF+eAABfoAAAX6IAAF+kAABfpwAAX6gAAF+pAABfqgAAX6sAAF+tAABfrwAAX7AAAF+xAABfswAAX7QAAF/zAABf9QAAX/cAAF/5AABf/AAAX/0AAF/+AABf/wAAYAAAAGACAABgBAAAYAUAAGAGAABgCAAAYAkAAGBIAABgSgAAYEwAAGBOAABgUQAAYFIAAGBTAABgVAAAYFUAAGBXAABgWQAAYFoAAGBbAABgXQAAYF4AAGCdAABgnwAAYKEAAGCjAABgpgAAYKcAAGCoAABgqQAAYKoAAGCsAABgrgAAYK8AAGCwAABgsgAAYLMAAGDYAABg/AAAYSMAAGFHAABhSgAAYUwAAGFOAABhUAAAYVIAAGFUAABhVQAAYVgAAGFlAABhdAAAYXYAAGF4AABhegAAYXwAAGF+AABhgAAAYYIAAGGRAABhlAAAYZcAAGGaAABhnQAAYaAAAGGjAABhpgAAYagAAGHnAABh6QAAYesAAGHtAABh8AAAYfEAAGHyAABh8wAAYfQAAGH2AABh+AAAYfkAAGH6AABh/AAAYf0AAGI8AABiPgAAYkAAAGJCAABiRQAAYkYAAGJHAABiSAAAYkkAAGJLAABiTQAAYk4AAGJPAABiUQAAYlIAAGKRAABikwAAYpUAAGKXAABimgAAYpsAAGKcAABinQAAYp4AAGKgAABiogAAYqMAAGKkAABipgAAYqcAAGLmAABi6AAAYuoAAGLsAABi7wAAYvAAAGLxAABi8gAAYvMAAGL1AABi9wAAYvgAAGL5AABi+wAAYvwAAGM7AABjPQAAYz8AAGNBAABjRAAAY0UAAGNGAABjRwAAY0gAAGNKAABjTAAAY00AAGNOAABjUAAAY1EAAGOQAABjkgAAY5QAAGOWAABjmQAAY5oAAGObAABjnAAAY50AAGOfAABjoQAAY6IAAGOjAABjpQAAY6YAAGPlAABj5wAAY+oAAGPsAABj7wAAY/AAAGPxAABj8gAAY/MAAGP1AABj9wAAY/gAAGP5AABj+wAAY/wAAGQFAABkGAAAZCUAAGQ4AABkRQAAZFgAAGRvAABkgQAAZMwAAGTvAABlDwAAZS8AAGUxAABlMwAAZTUAAGU3AABlOgAAZTsAAGU8AABlPwAAZUAAAGVCAABlQwAAZUUAAGVIAABlSQAAZUoAAGVNAABlTgAAZVcAAGVkAABlaQAAZWsAAGVtAABlcgAAZXUAAGV4AABlegAAZZ8AAGXDAABl6gAAZg4AAGYRAABmEwAAZhUAAGYXAABmGQAAZhsAAGYcAABmHwAAZiwAAGY9AABmPwAAZkEAAGZDAABmRQAAZkcAAGZJAABmSwAAZk0AAGZeAABmYQAAZmQAAGZnAABmagAAZm0AAGZwAABmcwAAZnYAAGZ4AABmtwAAZrkAAGa7AABmvQAAZsAAAGbBAABmwgAAZsMAAGbEAABmxgAAZsgAAGbJAABmygAAZswAAGbNAABnDAAAZw4AAGcQAABnEgAAZxUAAGcWAABnFwAAZxgAAGcZAABnGwAAZx0AAGceAABnHwAAZyEAAGciAABnYQAAZ2MAAGdmAABnaAAAZ2sAAGdsAABnbQAAZ24AAGdvAABncQAAZ3MAAGd0AABndQAAZ3cAAGd4AABnhQAAZ4YAAGeHAABniQAAZ8gAAGfKAABnzAAAZ84AAGfRAABn0gAAZ9MAAGfUAABn1QAAZ9cAAGfZAABn2gAAZ9sAAGfdAABn3gAAaB0AAGgfAABoIQAAaCMAAGgmAABoJwAAaCgAAGgpAABoKgAAaCwAAGguAABoLwAAaDAAAGgyAABoMwAAaHIAAGh0AABodgAAaHgAAGh7AABofAAAaH0AAGh+AABofwAAaIEAAGiDAABohAAAaIUAAGiHAABoiAAAaMcAAGjJAABoywAAaM0AAGjQAABo0QAAaNIAAGjTAABo1AAAaNYAAGjYAABo2QAAaNoAAGjcAABo3QAAaRwAAGkeAABpIAAAaSIAAGklAABpJgAAaScAAGkoAABpKQAAaSsAAGktAABpLgAAaS8AAGkxAABpMgAAaVcAAGl7AABpogAAacYAAGnJAABpywAAac0AAGnPAABp0QAAadMAAGnUAABp1wAAaeQAAGnzAABp9QAAafcAAGn5AABp+wAAaf0AAGn/AABqAQAAahAAAGoTAABqFgAAahkAAGocAABqHwAAaiIAAGolAABqJwAAamYAAGpoAABqagAAamwAAGpvAABqcAAAanEAAGpyAABqcwAAanUAAGp3AABqeAAAankAAGp7AABqfAAAarsAAGq9AABqvwAAasEAAGrEAABqxQAAasYAAGrHAABqyAAAasoAAGrMAABqzQAAas4AAGrQAABq0QAAaxAAAGsSAABrFAAAaxYAAGsZAABrGgAAaxsAAGscAABrHQAAax8AAGshAABrIgAAayMAAGslAABrJgAAa2UAAGtnAABragAAa2wAAGtvAABrcAAAa3EAAGtyAABrcwAAa3UAAGt3AABreAAAa3kAAGt7AABrfAAAa38AAGu+AABrwAAAa8IAAGvEAABrxwAAa8gAAGvJAABrygAAa8sAAGvNAABrzwAAa9AAAGvRAABr0wAAa9QAAGwTAABsFQAAbBcAAGwZAABsHAAAbB0AAGweAABsHwAAbCAAAGwiAABsJAAAbCUAAGwmAABsKAAAbCkAAGxoAABsagAAbGwAAGxuAABscQAAbHIAAGxzAABsdAAAbHUAAGx3AABseQAAbHoAAGx7AABsfQAAbH4AAGzJAABs7AAAbQwAAG0sAABtLgAAbTAAAG0yAABtNAAAbTcAAG04AABtOQAAbTwAAG09AABtPwAAbUAAAG1CAABtRAAAbUUAAG1GAABtSQAAbUoAAG1PAABtXAAAbWEAAG1jAABtZQAAbWoAAG1tAABtcAAAbXIAAG2XAABtuwAAbeIAAG4GAABuCQAAbgsAAG4NAABuDwAAbhEAAG4TAABuFAAAbhcAAG4kAABuNQAAbjcAAG45AABuOwAAbj0AAG4/AABuQQAAbkMAAG5FAABuVgAAblkAAG5cAABuXwAAbmIAAG5lAABuaAAAbmsAAG5uAABucAAAbq8AAG6xAABuswAAbrUAAG64AABuuQAAbroAAG67AABuvAAAbr4AAG7AAABuwQAAbsIAAG7EAABuxQAAbwQAAG8GAABvCAAAbwoAAG8NAABvDgAAbw8AAG8QAABvEQAAbxMAAG8VAABvFgAAbxcAAG8ZAABvGgAAb1kAAG9bAABvXgAAb2AAAG9jAABvZAAAb2UAAG9mAABvZwAAb2kAAG9rAABvbAAAb20AAG9vAABvcAAAb30AAG9+AABvfwAAb4EAAG/AAABvwgAAb8QAAG/GAABvyQAAb8oAAG/LAABvzAAAb80AAG/PAABv0QAAb9IAAG/TAABv1QAAb9YAAHAVAABwFwAAcBkAAHAbAABwHgAAcB8AAHAgAABwIQAAcCIAAHAkAABwJgAAcCcAAHAoAABwKgAAcCsAAHBqAABwbAAAcG4AAHBwAABwcwAAcHQAAHB1AABwdgAAcHcAAHB5AABwewAAcHwAAHB9AABwfwAAcIAAAHC/AABwwQAAcMMAAHDFAABwyAAAcMkAAHDKAABwywAAcMwAAHDOAABw0AAAcNEAAHDSAABw1AAAcNUAAHEUAABxFgAAcRgAAHEaAABxHQAAcR4AAHEfAABxIAAAcSEAAHEjAABxJQA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Ah98AAIfiAACH4wAAh+QAAIflAACH5gAAh+gAAIfqAACH6wAAh+wAAIfuAACH7wAAiC4AAIgwAACIMgAAiDQAAIg3AACIOAAAiDkAAIg6AACIOwAAiD0AAIg/AACIQAAAiEEAAIhDAACIRAAAiIMAAIiFAACIhwAAiIkAAIiMAACIjQAAiI4AAIiPAACIkAAAiJIAAIiUAACIlQAAiJYAAIiYAACImQAAiNgAAIjaAACI3AAAiN4AAIjhAACI4gAAiOMAAIjkAACI5QAAiOcAAIjpAACI6gAAiOsAAIjtAACI7gAAiS0AAIkvAACJMQAAiTMAAIk2AACJNwAAiTgAAIk5AACJOgAAiTwAAIk+AACJPwAAiUAAAIlCAACJQwAAiWgAAImMAACJswAAidcAAInaAACJ3AAAid4AAIngAACJ4gAAieQAAInlAACJ6AAAifUAAIoEAACKBgAAiggAAIoKAACKDAAAig4AAIoQAACKEgAAiiEAAIokAACKJwAAiioAAIotAACKMAAAijMAAIo2AACKOAAAincAAIp5AACKewAAin0AAIqAAACKgQAAioIAAIqDAACKhAAAioYAAIqIAACKiQAAiooAAIqMAACKjQAAiswAAIrOAACK0AAAitIAAIrVAACK1gAAitcAAIrYAACK2QAAitsAAIrdAACK3gAAit8AAIrhAACK4gAAiyEAAIsjAACLJQAAiycAAIsqAACLKwAAiywAAIstAACLLgAAizAAAIsyAACLMwAAizQAAIs2AACLNwAAi3YAAIt4AACLegAAi3wAAIt/AACLgAAAi4EAAIuCAACLgwAAi4UAAIuHAACLiAAAi4kAAIuLAACLjAAAi8sAAIvNAACLzwAAi9EAAIvUAACL1QAAi9YAAIvXAACL2AAAi9oAAIvcAACL3QAAi94AAIvgAACL4QAAjCAAAIwiAACMJAAAjCYAAIwpAACMKgAAjCsAAIwsAACMLQAAjC8AAIwxAACMMgAAjDMAAIw1AACMNgAAjHUAAIx3AACMeQAAjHsAAIx+AACMfwAAjIAAAIyBAACMggAAjIQAAIyGAACMhwAAjIgAAIyKAACMiwAAjNYAAIz5AACNGQAAjTkAAI07AACNPQAAjT8AAI1BAACNRAAAjUUAAI1GAACNSQAAjUoAAI1MAACNTQAAjU8AAI1RAACNUgAAjVMAAI1WAACNVwAAjWAAAI1tAACNcgAAjXQAAI12AACNewAAjX4AAI2BAACNgwAAjagAAI3MAACN8wAAjhcAAI4aAACOHAAAjh4AAI4gAACOIgAAjiQAAI4lAACOKAAAjjUAAI5GAACOSAAAjkoAAI5MAACOTgAAjlAAAI5SAACOVAAAjlYAAI5nAACOagAAjm0AAI5wAACOcwAAjnYAAI55AACOfAAAjn8AAI6BAACOwAAAjsIAAI7EAACOxgAAjskAAI7KAACOywAAjswAAI7NAACOzwAAjtEAAI7SAACO0wAAjtUAAI7WAACPFQAAjxcAAI8ZAACPGwAAjx4AAI8fAACPIAAAjyEAAI8iAACPJAAAjyYAAI8nAACPKAAAjyoAAI8rAACPagAAj2wAAI9vAACPcQAAj3QAAI91AACPdgAAj3cAAI94AACPegAAj3wAAI99AACPfgAAj4AAAI+BAACPjgAAj48AAI+QAACPkgAAj9EAAI/TAACP1QAAj9cAAI/aAACP2wAAj9wAAI/dAACP3gAAj+AAAI/iAACP4wAAj+QAAI/mAACP5wAAkCYAAJAoAACQKgAAkCwAAJAvAACQMAAAkDEAAJAyAACQMwAAkDUAAJA3AACQOAAAkDkAAJA7AACQPAAAkHsAAJB9AACQfwAAkIEAAJCEAACQhQAAkIYAAJCHAACQiAAAkIoAAJCMAACQjQAAkI4AAJCQAACQkQAAkNAAAJDSAACQ1AAAkNYAAJDZAACQ2gAAkNsAAJDcAACQ3QAAkN8AAJDhAACQ4gAAkOMAAJDlAACQ5gAAkSUAAJEnAACRKQAAkSsAAJEuAACRLwAAkTAAAJExAACRMgAAkTQAAJE2AACRNwAAkTgAAJE6AACROwAAkWAAAJGEAACRqwAAkc8AAJHSAACR1AAAkdYAAJHYAACR2gAAkdwAAJHdAACR4AAAke0AAJH8AACR/gAAkgAAAJICAACSBAAAkgYAAJIIAACSCgAAkhkAAJIcAACSHwAAkiIAAJIlAACSKAAAkisAAJIuAACSMAAAkm8AAJJxAACScwAAknUAAJJ4AACSeQAAknoAAJJ7AACSfAAAkn4AAJKAAACSgQAAkoIAAJKEAACShQAAksQAAJLGAACSyAAAksoAAJLNAACSzgAAks8AAJLQAACS0QAAktMAAJLVAACS1gAAktcAAJLZAACS2gAAkxkAAJMbAACTHQAAkx8AAJMiAACTIwAAkyQAAJMlAACTJgAAkygAAJMqAACTKwAAkywAAJMuAACTLwAAk24AAJNwAACTcwAAk3UAAJN4AACTeQAAk3oAAJN7AACTfAAAk34AAJOAAACTgQAAk4IAAJOEAACThQAAk8QAAJPGAACTyAAAk8oAAJPNAACTzgAAk88AAJPQAACT0QAAk9MAAJPVAACT1gAAk9cAAJPZAACT2gAAlBkAAJQbAACUHQAAlB8AAJQiAACUIwAAlCQAAJQlAACUJgAAlCgAAJQqAACUKwAAlCwAAJQuAACULwAAlG4AAJRwAACUcgAAlHQAAJR3AACUeAAAlHkAAJR6AACUewAAlH0AAJR/AACUgAAAlIEAAJSDAACUhAAAlM8AAJTyAACVEgAAlTIAAJU0AACVNgAAlTgAAJU6AACVPQAAlT4AAJU/AACVQgAAlUMAAJVFAACVRgAAlUgAAJVLAACVTAAAlU0AAJVQAACVUQAAlVYAAJVjAACVaAAAlWoAAJVsAACVcQAAlXQAAJV3AACVeQAAlZ4AAJXCAACV6QAAlg0AAJYQAACWEgAAlhQAAJYWAACWGAAAlhoAAJYbAACWHgAAlisAAJY8AACWPgAAlkAAAJZCAACWRAAAlkYAAJZIAACWSgAAlkwAAJZdAACWYAAAlmMAAJZmAACWaQAAlmwAAJZvAACWcgAAlnUAAJZ3AACWtgAAlrgAAJa6AACWvAAAlr8AAJbAAACWwQAAlsIAAJbDAACWxQAAlscAAJbIAACWyQAAlssAAJbMAACXCwAAlw0AAJcPAACXEQAAlxQAAJcVAACXFgAAlxcAAJcYAACXGgAAlxwAAJcdAACXHgAAlyAAAJchAACXYAAAl2IAAJdlAACXZwAAl2oAAJdrAACXbAAAl20AAJduAACXcAAAl3IAAJdzAACXdAAAl3YAAJd3AACXhAAAl4UAAJeGAACXiAAAl8cAAJfJAACXywAAl80AAJfQAACX0QAAl9IAAJfTAACX1AAAl9YAAJfYAACX2QAAl9oAAJfcAACX3QAAmBwAAJgeAACYIAAAmCIAAJglAACYJgAAmCcAAJgoAACYKQAAmCsAAJgtAACYLgAAmC8AAJgxAACYMgAAmHEAAJhzAACYdQAAmHcAAJh6AACYewAAmHwAAJh9AACYfgAAmIAAAJiCAACYgwAAmIQAAJiGAACYhwAAmMYAAJjIAACYygAAmMwAAJjPAACY0AAAmNEAAJjSAACY0wAAmNUAAJjXAACY2AAAmNkAAJjbAACY3AAAmRsAAJkdAACZHwAAmSEAAJkkAACZJQAAmSYAAJknAACZKAAAmSoAAJksAACZLQAAmS4AAJkwAACZMQAAmVYAAJl6AACZoQAAmcUAAJnIAACZygAAmcwAAJnOAACZ0AAAmdIAAJnTAACZ1gAAmeMAAJnyAACZ9AAAmfYAAJn4AACZ+gAAmfwAAJn+AACaAAAAmg8AAJoSAACaFQAAmhgAAJobAACaHgAAmiEAAJokAACaJgAAmmUAAJpnAACaagAAmmwAAJpvAACacAAAmnEAAJpyAACacwAAmnUAAJp3AACaeAAAmnkAAJp7AACafAAAmoAAAJq/AACawQAAmsMAAJrFAACayAAAmskAAJrKAACaywAAmswAAJrOAACa0AAAmtEAAJrSAACa1AAAmtUAAJsUAACbFgAAmxgAAJsaAACbHQAAmx4AAJsfAACbIAAAmyEAAJsjAACbJQAAmyYAAJsnAACbKQAAmyoAAJtpAACbawAAm24AAJtwAACbcwAAm3QAAJt1AACbdgAAm3cAAJt5AACbewAAm3wAAJt9AACbfwAAm4AAAJuDAACbwgAAm8QAAJvGAACbyAAAm8sAAJvMAACbzQAAm84AAJvPAACb0QAAm9MAAJvUAACb1QAAm9cAAJvYAACcFwAAnBkAAJwbAACcHQAAnCAAAJwhAACcIgAAnCMAAJwkAACcJgAAnCgAAJwpAACcKgAAnCwAAJwtAACcbAAAnG4AAJxwAACccgAAnHUAAJx2AACcdwAAnHgAAJx5AACcewAAnH0AAJx+AACcfwAAnIEAAJyCAACciwAAnIwAAJyOAACczQAAnM8AAJzRAACc0wAAnNYAAJzXAACc2AAAnNkAAJzaAACc3AAAnN4AAJzfAACc4AAAnOIAAJzjAACdIgAAnSQAAJ0mAACdKAAAnSsAAJ0sAACdLQAAnS4AAJ0vAACdMQAAnTMAAJ00AACdNQAAnTcAAJ04AACddwAAnXkAAJ18AACdfgAAnYEAAJ2CAACdgwAAnYQAAJ2FAACdhwAAnYkAAJ2KAACdiwAAnY0AAJ2OAACd2QAAnfwAAJ4cAACePAAAnj4AAJ5AAACeQgAAnkQAAJ5GAACeRwAAnkgAAJ5LAACeTAAAnk4AAJ5PAACeUgAAnlUAAJ5WAACeVwAAnloAAJ5bAACeYAAAnm0AAJ5yAACedAAAnnYAAJ57AACefgAAnoEAAJ6DAACeqAAAnswAAJ7zAACfFwAAnxoAAJ8cAACfHgAAnyAAAJ8iAACfJAAAnyUAAJ8oAACfNQAAn0YAAJ9IAACfSgAAn0wAAJ9OAACfUAAAn1IAAJ9UAACfVgAAn2cAAJ9qAACfbQAAn3AAAJ9zAACfdgAAn3kAAJ98AACffwAAn4EAAJ/AAACfwgAAn8QAAJ/GAACfyQAAn8oAAJ/LAACfzAAAn80AAJ/PAACf0QAAn9IAAJ/TAACf1QAAn9YAAKAVAACgFwAAoBkAAKAbAACgHgAAoB8AAKAgAACgIQAAoCIAAKAkAACgJgAAoCcAAKAoAACgKgAAoCsAAKBqAACgbAAAoG8AAKBxAACgdAAAoHUAAKB2AACgdwAAoHgAAKB6AACgfAAAoH0AAKB+AACggAAAoIEAAKCOAACgjwAAoJAAAKCSAACg0QAAoNMAAKDVAACg1wAAoNoAAKDbAACg3AAAoN0AAKDeAACg4AAAoOIAAKDjAACg5AAAoOYAAKDnAAChJgAAoSgAAKEqAAChLAAAoS8AAKEwAAChMQAAoTIAAKEzAAChNQAAoTcAAKE4AAChOQAAoTsAAKE8AAChewAAoX0AAKF/AAChgQAAoYQAAKGFAAChhgAAoYcAAKGIAAChigAAoYwAAKGNAAChjgAAoZAAAKGRAACh0AAAodIAAKHUAACh1gAAodkAAKHaAACh2wAAodwAAKHdAACh3wAAoeEAAKHiAACh4wAAoeUAAKHmAACiJQAAoicAAKIpAACiKwAAoi4AAKIvAACiMAAAojEAAKIyAACiNAAAojYAAKI3AACiOAAAojoAAKI7AACiYAAAooQAAKKrAACizwAAotIAAKLUAACi1gAAotgAAKLaAACi3AAAot0AAKLgAACi7QAAovwAAKL+AACjAAAAowIAAKMEAACjBgAAowgAAKMKAACjGQAAoxwAAKMfAACjIgAAoyUAAKMoAACjKwAAoy4AAKMwAACjbwAAo3EAAKNzAACjdQAAo3gAAKN5AACjegAAo3sAAKN8AACjfgAAo4AAAKOBAACjggAAo4QAAKOFAACjxAAAo8YAAKPIAACjygAAo80AAKPOAACjzwAAo9AAAKPRAACj0wAAo9UAAKPWAACj1wAAo9kAAKPaAACkGQAApBsAAKQdAACkHwAApCIAAKQjAACkJAAApCUAAKQmAACkKAAApCoAAKQrAACkLAAApC4AAKQvAACkbgAApHAAAKRyAACkdAAApHcAAKR4AACkeQAApHoAAKR7AACkfQAApH8AAKSAAACkgQAApIMAAKSEAACkwwAApMUAAKTHAACkyQAApMwAAKTNAACkzgAApM8AAKTQAACk0gAApNQAAKTVAACk1gAApNgAAKTZAAClGAAApRoAAKUcAAClHgAApSEAAKUiAAClIwAApSQAAKUlAAClJwAApSkAAKUqAAClKwAApS0AAKUuAAClbQAApW8AAKVyAACldAAApXcAAKV4AACleQAApXoAAKV7AAClfQAApX8AAKWAAAClgQAApYMAAKWEAAClzwAApfIAAKYSAACmMgAApjQAAKY2AACmOAAApjoAAKY8AACmPQAApj4AAKZBAACmQgAApkQAAKZFAACmSAAApkoAAKZLAACmTAAApk8AAKZQAACmVQAApmIAAKZnAACmaQAApmsAAKZwAACmcwAApnYAAKZ4AACmnQAApsEAAKboAACnDAAApw8AAKcRAACnEwAApxUAAKcXAACnGQAApxoAAKcdAACnKgAApzsAAKc9AACnPwAAp0EAAKdDAACnRQAAp0cAAKdJAACnSwAAp1wAAKdfAACnYgAAp2UAAKdoAACnawAAp24AAKdxAACndAAAp3YAAKe1AACntwAAp7kAAKe7AACnvgAAp78AAKfAAACnwQAAp8IAAKfEAACnxgAAp8cAAKfIAACnygAAp8sAAKgKAACoDAAAqA4AAKgQAACoEwAAqBQAAKgVAACoFgAAqBcAAKgZAACoGwAAqBwAAKgdAACoHwAAqCAAAKhfAACoYQAAqGQAAKhmAACoaQAAqGoAAKhrAACobAAAqG0AAKhvAACocQAAqHIAAKhzAACodQAAqHYAAKiDAACohAAAqIUAAKiHAACoxgAAqMgAAKjKAACozAAAqM8AAKjQAACo0QAAqNIAAKjTAACo1QAAqNcAAKjYAACo2QAAqNsAAKjcAACpGwAAqR0AAKkfAACpIQAAqSQAAKklAACpJgAAqScAAKkoAACpKgAAqSwAAKktAACpLgAAqTAAAKkxAACpcAAAqXIAAKl0AACpdgAAqXkAAKl6AACpewAAqXwAAKl9AACpfwAAqYEAAKmCAACpgwAAqYUAAKmGAACpxQAAqccAAKnJAACpywAAqc4AAKnPAACp0AAAqdEAAKnSAACp1AAAqdYAAKnXAACp2AAAqdoAAKnbAACqGgAAqhwAAKoeAACqIAAAqiMAAKokAACqJQAAqiYAAKonAACqKQAAqisAAKosAACqLQAAqi8AAKowAACqVQAAqnkAAKqgAACqxAAAqscAAKrJAACqywAAqs0AAKrPAACq0QAAqtIAAKrVAACq4gAAqvEAAKrzAACq9QAAqvcAAKr5AACq+wAAqv0AAKr/AACrDgAAqxEAAKsUAACrFwAAqxoAAKsdAACrIAAAqyMAAKslAACrZAAAq2YAAKtoAACragAAq20AAKtuAACrbwAAq3AAAKtxAACrcwAAq3UAAKt2AACrdwAAq3kAAKt6AACruQAAq7sAAKu9AACrvwAAq8IAAKvDAACrxAAAq8UAAKvGAACryAAAq8oAAKvLAACrzAAAq84AAKvPAACsDgAArBAAAKwSAACsFAAArBcAAKwYAACsGQAArBoAAKwbAACsHQAArB8AAKwgAACsIQAArCMAAKwkAACsYwAArGUAAKxnAACsaQAArGwAAKxtAACsbgAArG8AAKxwAACscgAArHQAAKx1AACsdgAArHgAAKx5AACsuAAArLoAAKy8AACsvgAArMEAAKzCAACswwAArMQAAKzFAACsxwAArMkAAKzKAACsywAArM0AAKzOAACtDQAArQ8AAK0RAACtEwAArRYAAK0XAACtGAAArRkAAK0aAACtHAAArR4AAK0fAACtIAAArSIAAK0jAACtYgAArWQAAK1nAACtaQAArWwAAK1tAACtbgAArW8AAK1wAACtcgAArXQAAK11AACtdgAArXgAAK15AACtxAAArecAAK4HAACuJwAArikAAK4rAACuLQAAri8AAK4xAACuMgAArjMAAK42AACuNwAArjkAAK46AACuPQAArkAAAK5BAACuQgAArkUAAK5GAACuSwAArlgAAK5dAACuXwAArmEAAK5mAACuaQAArmwAAK5uAACukwAArrcAAK7eAACvAgAArwUAAK8HAACvCQAArwsAAK8NAACvDwAArxAAAK8TAACvIAAArzEAAK8zAACvNQAArzcAAK85AACvOwAArz0AAK8/AACvQQAAr1IAAK9VAACvWAAAr1sAAK9eAACvYQAAr2QAAK9nAACvagAAr2wAAK+rAACvrQAAr68AAK+xAACvtAAAr7UAAK+2AACvtwAAr7gAAK+6AACvvAAAr70AAK++AACvwAAAr8EAALAAAACwAgAAsAQAALAGAACwCQAAsAoAALALAACwDAAAsA0AALAPAACwEQAAsBIAALATAACwFQAAsBYAALBVAACwVwAAsFoAALBcAACwXwAAsGAAALBhAACwYgAAsGMAALBlAACwZwAAsGgAALBpAACwawAAsGwAALB5AACwegAAsHsAALB9AACwvAAAsL4AALDAAACwwgAAsMUAALDGAACwxwAAsMgAALDJAACwywAAsM0AALDOAACwzwAAsNEAALDSAACxEQAAsRMAALEVAACxFwAAsRoAALEbAACxHAAAsR0AALEeAACxIAAAsSIAALEjAACxJAAAsSYAALEnAACxZgAAsWgAALFqAACxbAAAsW8AALFwAACxcQAAsXIAALFzAACxdQAAsXcAALF4AACxeQAAsXsAALF8AACxuwAAsb0AALG/AACxwQAAscQAALHFAACxxgAAsccAALHIAACxygAAscwAALHNAACxzgAAsdAAALHRAACyEAAAshIAALIUAACyFgAAshkAALIaAACyGwAAshwAALIdAACyHwAAsiEAALIiAACyIwAAsiUAALImAACySwAAsm8AALKWAACyugAAsr0AALK/AACywQAAssMAALLFAACyxwAAssgAALLLAACy2AAAsucAALLpAACy6wAAsu0AALLvAACy8QAAsvMAALL1AACzBAAAswcAALMKAACzDQAAsxAAALMTAACzFgAAsxkAALMbAACzWgAAs1wAALNeAACzYAAAs2MAALNkAACzZQAAs2YAALNnAACzaQAAs2sAALNsAACzbQAAs28AALNwAACzrwAAs7EAALO0AACztgAAs7kAALO6AACzuwAAs7wAALO9AACzvwAAs8EAALPCAACzwwAAs8UAALPGAAC0BQAAtAcAALQJAAC0CwAAtA4AALQPAAC0EAAAtBEAALQSAAC0FAAAtBYAALQXAAC0GAA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AyscAAMrJAADKywAAys0AAMrOAADK0QAAyt4AAMrtAADK7wAAyvEAAMrzAADK9QAAyvcAAMr5AADK+wAAywoAAMsNAADLEAAAyxMAAMsWAADLGQAAyxwAAMsfAADLIQAAy2AAAMtiAADLZAAAy2YAAMtpAADLagAAy2sAAMtsAADLbQAAy28AAMtxAADLcgAAy3MAAMt1AADLdgAAy7UAAMu3AADLuQAAy7sAAMu+AADLvwAAy8AAAMvBAADLwgAAy8QAAMvGAADLxwAAy8gAAMvKAADLywAAzAoAAMwMAADMDgAAzBAAAMwTAADMFAAAzBUAAMwWAADMFwAAzBkAAMwbAADMHAAAzB0AAMwfAADMIAAAzF8AAMxhAADMZAAAzGYAAMxpAADMagAAzGsAAMxsAADMbQAAzG8AAMxxAADMcgAAzHMAAMx1AADMdgAAzLkAAMzdAADNAQAAzSQAAM1LAADNawAAzZIAAM25AADN2QAAzf0AAM4hAADOIwAAziYAAM4oAADOKgAAziwAAM4vAADOMQAAzjMAAM41AADONwAAzjkAAM47AADOPgAAzkEAAM5CAADORwAAzlQAAM5XAADOWQAAzlwAAM5fAADOYQAAzoYAAM6qAADO0QAAzvUAAM74AADO+gAAzvwAAM7+AADPAAAAzwIAAM8DAADPBgAAzxMAAM8mAADPKAAAzyoAAM8sAADPLgAAzzAAAM8yAADPNAAAzzYAAM84AADPSwAAz04AAM9RAADPVAAAz1cAAM9aAADPXQAAz2AAAM9jAADPZgAAz2gAAM+nAADPqQAAz6wAAM+uAADPsQAAz7IAAM+zAADPtAAAz7UAAM+3AADPuQAAz7oAAM+7AADPvQAAz74AAM/HAADPyAAAz8oAANAJAADQCwAA0A0AANAPAADQEgAA0BMAANAUAADQFQAA0BYAANAYAADQGgAA0BsAANAcAADQHgAA0B8AANBeAADQYAAA0GMAANBlAADQaAAA0GkAANBqAADQawAA0GwAANBuAADQcAAA0HEAANByAADQdAAA0HUAANB+AADQgQAA0IQAANCGAADQjwAA0JIAANCUAADQlgAA0NUAANDXAADQ2QAA0NsAANDeAADQ3wAA0OAAANDhAADQ4gAA0OQAANDmAADQ5wAA0OgAANDqAADQ6wAA0SoAANEsAADRLwAA0TEAANE0AADRNQAA0TYAANE3AADROAAA0ToAANE8AADRPQAA0T4AANFAAADRQQAA0UoAANFLAADRTQAA0YwAANGOAADRkAAA0ZIAANGVAADRlgAA0ZcAANGYAADRmQAA0ZsAANGdAADRngAA0Z8AANGhAADRogAA0eEAANHjAADR5gAA0egAANHrAADR7AAA0e0AANHuAADR7wAA0fEAANHzAADR9AAA0fUAANH3AADR+AAA0gUAANIGAADSBwAA0gkAANJIAADSSgAA0kwAANJOAADSUQAA0lIAANJTAADSVAAA0lUAANJXAADSWQAA0loAANJbAADSXQAA0l4AANKdAADSnwAA0qIAANKkAADSpwAA0qgAANKpAADSqgAA0qsAANKtAADSrwAA0rAAANKxAADSswAA0rQAANLDAADS0AAA0tcAANLaAADS3QAA0t8AANLmAADS6QAA0uwAANLvAADS8QAA0vcAANL9AADTSAAA02sAANOLAADTqwAA060AANOvAADTsQAA07MAANO2AADTtwAA07gAANO7AADTvAAA074AANO/AADTwQAA08QAANPFAADTxgAA08kAANPKAADTzwAA09wAANPhAADT4wAA0+UAANPqAADT7QAA0/AAANPyAADUFwAA1DsAANRiAADUhgAA1IkAANSLAADUjQAA1I8AANSRAADUkwAA1JQAANSXAADUpAAA1LUAANS3AADUuQAA1LsAANS9AADUvwAA1MEAANTDAADUxQAA1NYAANTZAADU3AAA1N8AANTiAADU5QAA1OgAANTrAADU7gAA1PAAANUvAADVMQAA1TMAANU1AADVOAAA1TkAANU6AADVOwAA1TwAANU+AADVQAAA1UEAANVCAADVRAAA1UUAANWEAADVhgAA1YgAANWKAADVjQAA1Y4AANWPAADVkAAA1ZEAANWTAADVlQAA1ZYAANWXAADVmQAA1ZoAANXZAADV2wAA1d4AANXgAADV4wAA1eQAANXlAADV5gAA1ecAANXpAADV6wAA1ewAANXtAADV7wAA1fAAANX9AADV/gAA1f8AANYBAADWQAAA1kIAANZEAADWRgAA1kkAANZKAADWSwAA1kwAANZNAADWTwAA1lEAANZSAADWUwAA1lUAANZWAADWlQAA1pcAANaZAADWmwAA1p4AANafAADWoAAA1qEAANaiAADWpAAA1qYAANanAADWqAAA1qoAANarAADW6gAA1uwAANbuAADW8AAA1vMAANb0AADW9QAA1vYAANb3AADW+QAA1vsAANb8AADW/QAA1v8AANcAAADXPwAA10EAANdDAADXRQAA10gAANdJAADXSgAA10sAANdMAADXTgAA11AAANdRAADXUgAA11QAANdVAADXlAAA15YAANeYAADXmgAA150AANeeAADXnwAA16AAANehAADXowAA16UAANemAADXpwAA16kAANeqAADXzwAA1/MAANgaAADYPgAA2EEAANhDAADYRQAA2EcAANhJAADYSwAA2EwAANhPAADYXAAA2GsAANhtAADYbwAA2HEAANhzAADYdQAA2HcAANh5AADYiAAA2IsAANiOAADYkQAA2JQAANiXAADYmgAA2J0AANifAADY3gAA2OAAANjiAADY5AAA2OcAANjoAADY6QAA2OoAANjrAADY7QAA2O8AANjwAADY8QAA2PMAANj0AADZMwAA2TUAANk3AADZOQAA2TwAANk9AADZPgAA2T8AANlAAADZQgAA2UQAANlFAADZRgAA2UgAANlJAADZiAAA2YoAANmMAADZjgAA2ZEAANmSAADZkwAA2ZQAANmVAADZlwAA2ZkAANmaAADZmwAA2Z0AANmeAADZ3QAA2d8AANnhAADZ4wAA2eYAANnnAADZ6AAA2ekAANnqAADZ7AAA2e4AANnvAADZ8AAA2fIAANnzAADaMgAA2jQAANo2AADaOAAA2jsAANo8AADaPQAA2j4AANo/AADaQQAA2kMAANpEAADaRQAA2kcAANpIAADahwAA2okAANqLAADajQAA2pAAANqRAADakgAA2pMAANqUAADalgAA2pgAANqZAADamgAA2pwAANqdAADa3AAA2t4AANrgAADa4gAA2uUAANrmAADa5wAA2ugAANrpAADa6wAA2u0AANruAADa7wAA2vEAANryAADbPQAA22AAANuAAADboAAA26IAANukAADbpgAA26gAANurAADbrAAA260AANuwAADbsQAA27MAANu0AADbtwAA27oAANu7AADbvAAA278AANvAAADbxQAA29IAANvXAADb2QAA29sAANvgAADb4wAA2+YAANvoAADcDQAA3DEAANxYAADcfAAA3H8AANyBAADcgwAA3IUAANyHAADciQAA3IoAANyNAADcmgAA3KsAANytAADcrwAA3LEAANyzAADctQAA3LcAANy5AADcuwAA3MwAANzPAADc0gAA3NUAANzYAADc2wAA3N4AANzhAADc5AAA3OYAAN0lAADdJwAA3SkAAN0rAADdLgAA3S8AAN0wAADdMQAA3TIAAN00AADdNgAA3TcAAN04AADdOgAA3TsAAN16AADdfAAA3X4AAN2AAADdgwAA3YQAAN2FAADdhgAA3YcAAN2JAADdiwAA3YwAAN2NAADdjwAA3ZAAAN3PAADd0QAA3dQAAN3WAADd2QAA3doAAN3bAADd3AAA3d0AAN3fAADd4QAA3eIAAN3jAADd5QAA3eYAAN3zAADd9AAA3fUAAN33AADeNgAA3jgAAN46AADePAAA3j8AAN5AAADeQQAA3kIAAN5DAADeRQAA3kcAAN5IAADeSQAA3ksAAN5MAADeiwAA3o0AAN6PAADekQAA3pQAAN6VAADelgAA3pcAAN6YAADemgAA3pwAAN6dAADengAA3qAAAN6hAADe4AAA3uIAAN7kAADe5gAA3ukAAN7qAADe6wAA3uwAAN7tAADe7wAA3vEAAN7yAADe8wAA3vUAAN72AADfNQAA3zcAAN85AADfOwAA3z4AAN8/AADfQAAA30EAAN9CAADfRAAA30YAAN9HAADfSAAA30oAAN9LAADfigAA34wAAN+OAADfkAAA35MAAN+UAADflQAA35YAAN+XAADfmQAA35sAAN+cAADfnQAA358AAN+gAADfxQAA3+kAAOAQAADgNAAA4DcAAOA5AADgOwAA4D0AAOA/AADgQQAA4EIAAOBFAADgUgAA4GEAAOBjAADgZQAA4GcAAOBpAADgawAA4G0AAOBvAADgfgAA4IEAAOCEAADghwAA4IoAAOCNAADgkAAA4JMAAOCVAADg1AAA4NYAAODYAADg2gAA4N0AAODeAADg3wAA4OAAAODhAADg4wAA4OUAAODmAADg5wAA4OkAAODqAADhKQAA4SsAAOEtAADhLwAA4TIAAOEzAADhNAAA4TUAAOE2AADhOAAA4ToAAOE7AADhPAAA4T4AAOE/AADhfgAA4YAAAOGCAADhhAAA4YcAAOGIAADhiQAA4YoAAOGLAADhjQAA4Y8AAOGQAADhkQAA4ZMAAOGUAADh0wAA4dUAAOHXAADh2QAA4dwAAOHdAADh3gAA4d8AAOHgAADh4gAA4eQAAOHlAADh5gAA4egAAOHpAADiKAAA4ioAAOIsAADiLgAA4jEAAOIyAADiMwAA4jQAAOI1AADiNwAA4jkAAOI6AADiOwAA4j0AAOI+AADifQAA4n8AAOKBAADigwAA4oYAAOKHAADiiAAA4okAAOKKAADijAAA4o4AAOKPAADikAAA4pIAAOKTAADi0gAA4tQAAOLXAADi2QAA4twAAOLdAADi3gAA4t8AAOLgAADi4gAA4uQAAOLlAADi5gAA4ugAAOLpAADjNAAA41cAAON3AADjlwAA45kAAOObAADjnQAA458AAOOiAADjowAA46QAAOOnAADjqAAA46oAAOOrAADjrQAA468AAOOwAADjsQAA47QAAOO1AADjvgAA48sAAOPQAADj0gAA49QAAOPZAADj3AAA498AAOPhAADkBgAA5CoAAORRAADkdQAA5HgAAOR6AADkfAAA5H4AAOSAAADkggAA5IMAAOSGAADkkwAA5KQAAOSmAADkqAAA5KoAAOSsAADkrgAA5LAAAOSyAADktAAA5MUAAOTIAADkywAA5M4AAOTRAADk1AAA5NcAAOTaAADk3QAA5N8AAOUeAADlIAAA5SIAAOUkAADlJwAA5SgAAOUpAADlKgAA5SsAAOUtAADlLwAA5TAAAOUxAADlMwAA5TQAAOVzAADldQAA5XcAAOV5AADlfAAA5X0AAOV+AADlfwAA5YAAAOWCAADlhAAA5YUAAOWGAADliAAA5YkAAOXIAADlygAA5c0AAOXPAADl0gAA5dMAAOXUAADl1QAA5dYAAOXYAADl2gAA5dsAAOXcAADl3gAA5d8AAOXsAADl7QAA5e4AAOXwAADmLwAA5jEAAOYzAADmNQAA5jgAAOY5AADmOgAA5jsAAOY8AADmPgAA5kAAAOZBAADmQgAA5kQAAOZFAADmhAAA5oYAAOaIAADmigAA5o0AAOaOAADmjwAA5pAAAOaRAADmkwAA5pUAAOaWAADmlwAA5pkAAOaaAADm2QAA5tsAAObdAADm3wAA5uIAAObjAADm5AAA5uUAAObmAADm6AAA5uoAAObrAADm7AAA5u4AAObvAADnLgAA5zAAAOcyAADnNAAA5zcAAOc4AADnOQAA5zoAAOc7AADnPQAA5z8AAOdAAADnQQAA50MAAOdEAADngwAA54UAAOeHAADniQAA54wAAOeNAADnjgAA548AAOeQAADnkgAA55QAAOeVAADnlgAA55gAAOeZAADnvgAA5+IAAOgJAADoLQAA6DAAAOgyAADoNAAA6DYAAOg4AADoOgAA6DsAAOg+AADoSwAA6FoAAOhcAADoXgAA6GAAAOhiAADoZAAA6GYAAOhoAADodwAA6HoAAOh9AADogAAA6IMAAOiGAADoiQAA6IwAAOiOAADozQAA6M8AAOjRAADo0wAA6NYAAOjXAADo2AAA6NkAAOjaAADo3AAA6N4AAOjfAADo4AAA6OIAAOjjAADpIgAA6SQAAOkmAADpKAAA6SsAAOksAADpLQAA6S4AAOkvAADpMQAA6TMAAOk0AADpNQAA6TcAAOk4AADpdwAA6XkAAOl7AADpfQAA6YAAAOmBAADpggAA6YMAAOmEAADphgAA6YgAAOmJAADpigAA6YwAAOmNAADpzAAA6c4AAOnRAADp0wAA6dYAAOnXAADp2AAA6dkAAOnaAADp3AAA6d4AAOnfAADp4AAA6eIAAOnjAADqIgAA6iQAAOomAADqKAAA6isAAOosAADqLQAA6i4AAOovAADqMQAA6jMAAOo0AADqNQAA6jcAAOo4AADqdwAA6nkAAOp7AADqfQAA6oAAAOqBAADqggAA6oMAAOqEAADqhgAA6ogAAOqJAADqigAA6owAAOqNAADqzAAA6s4AAOrQAADq0gAA6tUAAOrWAADq1wAA6tgAAOrZAADq2wAA6t0AAOreAADq3wAA6uEAAOriAADq6wAA6uwAAOruAADrLQAA6y8AAOsxAADrMwAA6zYAAOs3AADrOAAA6zkAAOs6AADrPAAA6z4AAOs/AADrQAAA60IAAOtDAADrggAA64QAAOuGAADriAAA64sAAOuMAADrjQAA644AAOuPAADrkQAA65MAAOuUAADrlQAA65cAAOuYAADr1wAA69kAAOvcAADr3gAA6+EAAOviAADr4wAA6+QAAOvlAADr5wAA6+kAAOvqAADr6wAA6+0AAOvuAADsOQAA7FwAAOx8AADsnAAA7J4AAOygAADsogAA7KQAAOymAADspwAA7KgAAOyrAADsrAAA7K4AAOyvAADssQAA7LMAAOy0AADstQAA7LgAAOy5AADsvgAA7MsAAOzQAADs0gAA7NQAAOzZAADs3AAA7N8AAOzhAADtBgAA7SoAAO1RAADtdQAA7XgAAO16AADtfAAA7X4AAO2AAADtggAA7YMAAO2GAADtkwAA7aQAAO2mAADtqAAA7aoAAO2sAADtrgAA7bAAAO2yAADttAAA7cUAAO3IAADtywAA7c4AAO3RAADt1AAA7dcAAO3aAADt3QAA7d8AAO4eAADuIAAA7iIAAO4kAADuJwAA7igAAO4pAADuKgAA7isAAO4tAADuLwAA7jAAAO4xAADuMwAA7jQAAO5zAADudQAA7ncAAO55AADufAAA7n0AAO5+AADufwAA7oAAAO6CAADuhAAA7oUAAO6GAADuiAAA7okAAO7IAADuygAA7s0AAO7PAADu0gAA7tMAAO7UAADu1QAA7tYAAO7YAADu2gAA7tsAAO7cAADu3gAA7t8AAO7sAADu7wAA7vIAAO71AADu+AAA7voAAO8UAADvGgAA71kAAO9bAADvXQAA718AAO9iAADvYwAA72QAAO9lAADvZgAA72gAAO9qAADvawAA72wAAO9uAADvbwAA764AAO+wAADvsgAA77QAAO+3AADvuAAA77kAAO+6AADvuwAA770AAO+/AADvwAAA78EAAO/DAADvxAAA8AMAAPAFAADwBwAA8AkAAPAMAADwDQAA8A4AAPAPAADwEAAA8BIAAPAUAADwFQAA8BYAAPAYAADwGQAA8FgAAPBaAADwXAAA8F4AAPBhAADwYgAA8GMAAPBkAADwZQAA8GcAAPBpAADwagAA8GsAAPBtAADwbgAA8K0AAPCvAADwsQAA8LMAAPC2AADwtwAA8LgAAPC5AADwugAA8LwAAPC+AADwvwAA8MAAAPDCAADwwwAA8OgAAPEMAADxMwAA8VcAAPFaAADxXAAA8V4AAPFgAADxYgAA8WQAAPFlAADxaAAA8XUAAPGEAADxhgAA8YgAAPGKAADxjAAA8Y4AAPGQAADxkgAA8aEAAPGkAADxpwAA8aoAAPGtAADxsAAA8bMAAPG2AADxuAAA8fcAAPH5AADx+wAA8f0AAPIAAADyAQAA8gIAAPIDAADyBAAA8gYAAPIIAADyCQAA8goAAPIMAADyDQAA8kwAAPJOAADyUAAA8lIAAPJVAADyVgAA8lcAAPJYAADyWQAA8lsAAPJdAADyXgA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BDpoAAQ6dAAEOnwABDqEAAQ6jAAEOpQABDqcAAQ6oAAEOqwABDrgAAQ7JAAEOywABDs0AAQ7PAAEO0QABDtMAAQ7VAAEO1wABDtkAAQ7qAAEO7QABDvAAAQ7zAAEO9gABDvkAAQ78AAEO/wABDwIAAQ8EAAEPQwABD0UAAQ9HAAEPSQABD0wAAQ9NAAEPTgABD08AAQ9QAAEPUgABD1QAAQ9VAAEPVgABD1gAAQ9ZAAEPmAABD5oAAQ+cAAEPngABD6EAAQ+iAAEPowABD6QAAQ+lAAEPpwABD6kAAQ+qAAEPqwABD60AAQ+uAAEP7QABD+8AAQ/yAAEP9AABD/cAAQ/4AAEP+QABD/oAAQ/7AAEP/QABD/8AARAAAAEQAQABEAMAARAEAAEQEQABEBIAARATAAEQFQABEFQAARBWAAEQWAABEFoAARBdAAEQXgABEF8AARBgAAEQYQABEGMAARBlAAEQZgABEGcAARBpAAEQagABEKkAARCrAAEQrQABEK8AARCyAAEQswABELQAARC1AAEQtgABELgAARC6AAEQuwABELwAARC+AAEQvwABEP4AAREAAAERAgABEQQAAREHAAERCAABEQkAAREKAAERCwABEQ0AAREPAAEREAABEREAARETAAERFAABEVMAARFVAAERVwABEVkAARFcAAERXQABEV4AARFfAAERYAABEWIAARFkAAERZQABEWYAARFoAAERaQABEagAARGqAAERrAABEa4AARGxAAERsgABEbMAARG0AAERtQABEbcAARG5AAERugABEbsAARG9AAERvgABEeMAARIHAAESLgABElIAARJVAAESVwABElkAARJbAAESXQABEl8AARJgAAESYwABEnAAARJ/AAESgQABEoMAARKFAAEShwABEokAARKLAAESjQABEpwAARKfAAESogABEqUAARKoAAESqwABEq4AARKxAAESswABEvIAARL0AAES9gABEvgAARL7AAES/AABEv0AARL+AAES/wABEwEAARMDAAETBAABEwUAARMHAAETCAABE0cAARNJAAETSwABE00AARNQAAETUQABE1IAARNTAAETVAABE1YAARNYAAETWQABE1oAARNcAAETXQABE5wAAROeAAEToAABE6IAAROlAAETpgABE6cAAROoAAETqQABE6sAAROtAAETrgABE68AAROxAAETsgABE/EAARPzAAET9gABE/gAARP7AAET/AABE/0AARP+AAET/wABFAEAARQDAAEUBAABFAUAARQHAAEUCAABFEcAARRJAAEUSwABFE0AARRQAAEUUQABFFIAARRTAAEUVAABFFYAARRYAAEUWQABFFoAARRcAAEUXQABFJwAARSeAAEUoAABFKIAARSlAAEUpgABFKcAARSoAAEUqQABFKsAARStAAEUrgABFK8AARSxAAEUsgABFPEAARTzAAEU9QABFPcAART6AAEU+wABFPwAART9AAEU/gABFQAAARUCAAEVAwABFQQAARUGAAEVBwABFVIAARV1AAEVlQABFbUAARW3AAEVuQABFbsAARW9AAEVvwABFcAAARXBAAEVxAABFcUAARXHAAEVyAABFcoAARXMAAEVzQABFc4AARXRAAEV0gABFdcAARXkAAEV6QABFesAARXtAAEV8gABFfUAARX4AAEV+gABFh8AARZDAAEWagABFo4AARaRAAEWkwABFpUAARaXAAEWmQABFpsAARacAAEWnwABFqwAARa9AAEWvwABFsEAARbDAAEWxQABFscAARbJAAEWywABFs0AARbeAAEW4QABFuQAARbnAAEW6gABFu0AARbwAAEW8wABFvYAARb4AAEXNwABFzkAARc7AAEXPQABF0AAARdBAAEXQgABF0MAARdEAAEXRgABF0gAARdJAAEXSgABF0wAARdNAAEXjAABF44AAReQAAEXkgABF5UAAReWAAEXlwABF5gAAReZAAEXmwABF50AAReeAAEXnwABF6EAAReiAAEX4QABF+MAARfmAAEX6AABF+sAARfsAAEX7QABF+4AARfvAAEX8QABF/MAARf0AAEX9QABF/cAARf4AAEYBQABGAYAARgHAAEYCQABGEgAARhKAAEYTAABGE4AARhRAAEYUgABGFMAARhUAAEYVQABGFcAARhZAAEYWgABGFsAARhdAAEYXgABGJ0AARifAAEYoQABGKMAARimAAEYpwABGKgAARipAAEYqgABGKwAARiuAAEYrwABGLAAARiyAAEYswABGPIAARj0AAEY9gABGPgAARj7AAEY/AABGP0AARj+AAEY/wABGQEAARkDAAEZBAABGQUAARkHAAEZCAABGUcAARlJAAEZSwABGU0AARlQAAEZUQABGVIAARlTAAEZVAABGVYAARlYAAEZWQABGVoAARlcAAEZXQABGZwAARmeAAEZoAABGaIAARmlAAEZpgABGacAARmoAAEZqQABGasAARmtAAEZrgABGa8AARmxAAEZsgABGdcAARn7AAEaIgABGkYAARpJAAEaSwABGk0AARpPAAEaUQABGlMAARpUAAEaVwABGmQAARpzAAEadQABGncAARp5AAEaewABGn0AARp/AAEagQABGpAAARqTAAEalgABGpkAARqcAAEanwABGqIAARqlAAEapwABGuYAARroAAEa6gABGuwAARrvAAEa8AABGvEAARryAAEa8wABGvUAARr3AAEa+AABGvkAARr7AAEa/AABGzsAARs9AAEbPwABG0EAARtEAAEbRQABG0YAARtHAAEbSAABG0oAARtMAAEbTQABG04AARtQAAEbUQABG5AAARuSAAEblAABG5YAARuZAAEbmgABG5sAARucAAEbnQABG58AARuhAAEbogABG6MAARulAAEbpgABG+UAARvnAAEb6gABG+wAARvvAAEb8AABG/EAARvyAAEb8wABG/UAARv3AAEb+AABG/kAARv7AAEb/AABHDsAARw9AAEcPwABHEEAARxEAAEcRQABHEYAARxHAAEcSAABHEoAARxMAAEcTQABHE4AARxQAAEcUQABHJAAARySAAEclAABHJYAARyZAAEcmgABHJsAARycAAEcnQABHJ8AARyhAAEcogABHKMAARylAAEcpgABHOUAARznAAEc6QABHOsAARzuAAEc7wABHPAAARzxAAEc8gABHPQAARz2AAEc9wABHPgAARz6AAEc+wABHUYAAR1pAAEdiQABHakAAR2rAAEdrQABHa8AAR2xAAEdswABHbQAAR21AAEduAABHbkAAR27AAEdvAABHb4AAR3AAAEdwQABHcIAAR3FAAEdxgABHcsAAR3YAAEd3QABHd8AAR3hAAEd5gABHekAAR3sAAEd7gABHhMAAR43AAEeXgABHoIAAR6FAAEehwABHokAAR6LAAEejQABHo8AAR6QAAEekwABHqAAAR6xAAEeswABHrUAAR63AAEeuQABHrsAAR69AAEevwABHsEAAR7SAAEe1QABHtgAAR7bAAEe3gABHuEAAR7kAAEe5wABHuoAAR7sAAEfKwABHy0AAR8vAAEfMQABHzQAAR81AAEfNgABHzcAAR84AAEfOgABHzwAAR89AAEfPgABH0AAAR9BAAEfgAABH4IAAR+EAAEfhgABH4kAAR+KAAEfiwABH4wAAR+NAAEfjwABH5EAAR+SAAEfkwABH5UAAR+WAAEf1QABH9cAAR/aAAEf3AABH98AAR/gAAEf4QABH+IAAR/jAAEf5QABH+cAAR/oAAEf6QABH+sAAR/sAAEf+QABH/wAAR//AAEgAgABIAUAASAHAAEgIQABIGAAASBiAAEgZAABIGYAASBpAAEgagABIGsAASBsAAEgbQABIG8AASBxAAEgcgABIHMAASB1AAEgdgABILUAASC3AAEguQABILsAASC+AAEgvwABIMAAASDBAAEgwgABIMQAASDGAAEgxwABIMgAASDKAAEgywABIQoAASEMAAEhDgABIRAAASETAAEhFAABIRUAASEWAAEhFwABIRkAASEbAAEhHAABIR0AASEfAAEhIAABIV8AASFhAAEhYwABIWUAASFoAAEhaQABIWoAASFrAAEhbAABIW4AASFwAAEhcQABIXIAASF0AAEhdQABIbQAASG2AAEhuAABIboAASG9AAEhvgABIb8AASHAAAEhwQABIcMAASHFAAEhxgABIccAASHJAAEhygABIe8AASITAAEiOgABIl4AASJhAAEiYwABImUAASJnAAEiaQABImsAASJsAAEibwABInwAASKLAAEijQABIo8AASKRAAEikwABIpUAASKXAAEimQABIqgAASKrAAEirgABIrEAASK0AAEitwABIroAASK9AAEivwABIv4AASMAAAEjAgABIwQAASMHAAEjCAABIwkAASMKAAEjCwABIw0AASMPAAEjEAABIxEAASMTAAEjFAABI1MAASNVAAEjVwABI1kAASNcAAEjXQABI14AASNfAAEjYAABI2IAASNkAAEjZQABI2YAASNoAAEjaQABI6gAASOqAAEjrAABI64AASOxAAEjsgABI7MAASO0AAEjtQABI7cAASO5AAEjugABI7sAASO9AAEjvgABI/0AASP/AAEkAgABJAQAASQHAAEkCAABJAkAASQKAAEkCwABJA0AASQPAAEkEAABJBEAASQTAAEkFAABJFMAASRVAAEkVwABJFkAASRcAAEkXQABJF4AASRfAAEkYAABJGIAASRkAAEkZQABJGYAASRoAAEkaQABJKgAASSqAAEkrAABJK4AASSxAAEksgABJLMAASS0AAEktQABJLcAASS5AAEkugABJLsAASS9AAEkvgABJP0AAST/AAElAQABJQMAASUGAAElBwABJQgAASUJAAElCgABJQwAASUOAAElDwABJRAAASUSAAElEwABJV4AASWBAAEloQABJcEAASXDAAElxQABJccAASXJAAElywABJcwAASXNAAEl0AABJdEAASXTAAEl1AABJdYAASXYAAEl2QABJdoAASXdAAEl3gABJeMAASXwAAEl9QABJfcAASX5AAEl/gABJgEAASYEAAEmBgABJisAASZPAAEmdgABJpoAASadAAEmnwABJqEAASajAAEmpQABJqcAASaoAAEmqwABJrgAASbJAAEmywABJs0AASbPAAEm0QABJtMAASbVAAEm1wABJtkAASbqAAEm7QABJvAAASbzAAEm9gABJvkAASb8AAEm/wABJwIAAScEAAEnQwABJ0UAASdHAAEnSQABJ0wAASdNAAEnTgABJ08AASdQAAEnUgABJ1QAASdVAAEnVgABJ1gAASdZAAEnmAABJ5oAASecAAEnngABJ6EAASeiAAEnowABJ6QAASelAAEnpwABJ6kAASeqAAEnqwABJ60AASeuAAEn7QABJ+8AASfyAAEn9AABJ/cAASf4AAEn+QABJ/oAASf7AAEn/QABJ/8AASgAAAEoAQABKAMAASgEAAEoEQABKBQAASgXAAEoGgABKB0AASgfAAEoOgABKEgAASiHAAEoiQABKIsAASiNAAEokAABKJEAASiSAAEokwABKJQAASiWAAEomAABKJkAASiaAAEonAABKJ0AASjcAAEo3gABKOAAASjiAAEo5QABKOYAASjnAAEo6AABKOkAASjrAAEo7QABKO4AASjvAAEo8QABKPIAASkxAAEpMwABKTUAASk3AAEpOgABKTsAASk8AAEpPQABKT4AASlAAAEpQgABKUMAASlEAAEpRgABKUcAASmGAAEpiAABKYoAASmMAAEpjwABKZAAASmRAAEpkgABKZMAASmVAAEplwABKZgAASmZAAEpmwABKZwAASnbAAEp3QABKd8AASnhAAEp5AABKeUAASnmAAEp5wABKegAASnqAAEp7AABKe0AASnuAAEp8AABKfEAASoWAAEqOgABKmEAASqFAAEqiAABKooAASqMAAEqjgABKpAAASqSAAEqkwABKpYAASqjAAEqsgABKrQAASq2AAEquAABKroAASq8AAEqvgABKsAAASrPAAEq0gABKtUAASrYAAEq2wABKt4AASrhAAEq5AABKuYAASslAAErJwABKyoAASssAAErLwABKzAAASsxAAErMgABKzMAASs1AAErNwABKzgAASs5AAErOwABKzwAASs+AAErfQABK38AASuBAAErgwABK4YAASuHAAEriAABK4kAASuKAAErjAABK44AASuPAAErkAABK5IAASuTAAEr0gABK9QAASvWAAEr2AABK9sAASvcAAEr3QABK94AASvfAAEr4QABK+MAASvkAAEr5QABK+cAASvoAAEsJwABLCkAASwrAAEsLQABLDAAASwxAAEsMgABLDMAASw0AAEsNgABLDgAASw5AAEsOgABLDwAASw9AAEsfAABLH4AASyAAAEsggABLIUAASyGAAEshwABLIgAASyJAAEsiwABLI0AASyOAAEsjwABLJEAASySAAEs0QABLNMAASzVAAEs1wABLNoAASzbAAEs3AABLN0AASzeAAEs4AABLOIAASzjAAEs5AABLOYAASznAAEtJgABLSgAAS0qAAEtLAABLS8AAS0wAAEtMQABLTIAAS0zAAEtNQABLTcAAS04AAEtOQABLTsAAS08AAEthwABLaoAAS3KAAEt6gABLewAAS3uAAEt8AABLfIAAS30AAEt9QABLfYAAS35AAEt+gABLfwAAS39AAEt/wABLgEAAS4CAAEuAwABLgYAAS4HAAEuEAABLh0AAS4iAAEuJAABLiYAAS4rAAEuLgABLjEAAS4zAAEuWAABLnwAAS6jAAEuxwABLsoAAS7MAAEuzgABLtAAAS7SAAEu1AABLtUAAS7YAAEu5QABLvYAAS74AAEu+gABLvwAAS7+AAEvAAABLwIAAS8EAAEvBgABLxcAAS8aAAEvHQABLyAAAS8jAAEvJgABLykAAS8sAAEvLwABLzEAAS9wAAEvcgABL3QAAS92AAEveQABL3oAAS97AAEvfAABL30AAS9/AAEvgQABL4IAAS+DAAEvhQABL4YAAS/FAAEvxwABL8kAAS/LAAEvzgABL88AAS/QAAEv0QABL9IAAS/UAAEv1gABL9cAAS/YAAEv2gABL9sAATAaAAEwHAABMB8AATAhAAEwJAABMCUAATAmAAEwJwABMCgAATAqAAEwLAABMC0AATAuAAEwMAABMDEAATA+AAEwPwABMEAAATBCAAEwgQABMIMAATCFAAEwhwABMIoAATCLAAEwjAABMI0AATCOAAEwkAABMJIAATCTAAEwlAABMJYAATCXAAEw1gABMNgAATDaAAEw3AABMN8AATDgAAEw4QABMOIAATDjAAEw5QABMOcAATDoAAEw6QABMOsAATDsAAExKwABMS0AATEvAAExMQABMTQAATE1AAExNgABMTcAATE4AAExOgABMTwAATE9AAExPgABMUAAATFBAAExgAABMYIAATGEAAExhgABMYkAATGKAAExiwABMYwAATGNAAExjwABMZEAATGSAAExkwABMZUAATGWAAEx1QABMdcAATHZAAEx2wABMd4AATHfAAEx4AABMeEAATHiAAEx5AABMeYAATHnAAEx6AABMeoAATHrAAEyEAABMjQAATJbAAEyfwABMoIAATKEAAEyhgABMogAATKKAAEyjAABMo0AATKQAAEynQABMqwAATKuAAEysAABMrIAATK0AAEytgABMrgAATK6AAEyyQABMswAATLPAAEy0gABMtUAATLYAAEy2wABMt4AATLgAAEzHwABMyEAATMjAAEzJQABMygAATMpAAEzKgABMysAATMsAAEzLgABMzAAATMxAAEzMgABMzQAATM1AAEzdAABM3YAATN4AAEzegABM30AATN+AAEzfwABM4AAATOBAAEzgwABM4UAATOGAAEzhwABM4kAATOKAAEzyQABM8sAATPNAAEzzwABM9IAATPTAAEz1AABM9UAATPWAAEz2AABM9oAATPbAAEz3AABM94AATPfAAE0HgABNCAAATQjAAE0JQABNCgAATQpAAE0KgABNCsAATQsAAE0LgABNDAAATQxAAE0MgABNDQAATQ1AAE0dAABNHYAATR4AAE0egABNH0AATR+AAE0fwABNIAAATSBAAE0gwABNIUAATSGAAE0hwABNIkAATSKAAE0yQABNMsAATTNAAE0zwABNNIAATTTAAE01AABNNUAATTWAAE02AABNNoAATTbAAE03AABNN4AATTfAAE1HgABNSAAATUiAAE1JAABNScAATUoAAE1KQABNSoAATUrAAE1LQABNS8AATUwAAE1MQABNTMAATU0AAE1PQABNT4AATVAAAE1gwABNacAATXLAAE17gABNhUAATY1AAE2XAABNoMAATajAAE2xwABNusAATbtAAE28AABNvIAATb0AAE29gABNvkAATb7AAE2/QABNv8AATcBAAE3AwABNwUAATcIAAE3CwABNwwAATcVAAE3IgABNyUAATcnAAE3KgABNy0AATcvAAE3VAABN3gAATefAAE3wwABN8YAATfIAAE3ygABN8wAATfOAAE30AABN9EAATfUAAE34QABN/QAATf2AAE3+AABN/oAATf8AAE3/gABOAAAATgCAAE4BAABOAYAATgZAAE4HAABOB8AATgiAAE4JQABOCgAATgrAAE4LgABODEAATg0AAE4NgABOHUAATh3AAE4egABOHwAATh/AAE4gAABOIEAATiCAAE4gwABOIUAATiHAAE4iAABOIkAATiLAAE4jAABOJUAATiWAAE4mAABONcAATjZAAE42wABON0AATjgAAE44QABOOIAATjjAAE45AABOOYAATjoAAE46QABOOoAATjsAAE47QABOSwAATkuAAE5MQABOTMAATk2AAE5NwABOTgAATk5AAE5OgABOTwAATk+AAE5PwABOUAAATlCAAE5QwABOUwAATlPAAE5UgABOVQAATldAAE5YgABOWQAATlmAAE5aAABOacAATmpAAE5qwABOa0AATmwAAE5sQABObIAATmzAAE5tAABObYAATm4AAE5uQABOboAATm8AAE5vQABOfwAATn+AAE6AQABOgMAAToGAAE6BwABOggAAToJAAE6CgABOgwAAToOAAE6DwABOhAAAToSAAE6EwABOhwAATodAAE6HwABOl4AATpgAAE6YgABOmQAATpnAAE6aAABOmkAATpqAAE6awABOm0AATpvAAE6cAABOnEAATpzAAE6dAABOrMAATq1AAE6uAABOroAATq9AAE6vgABOr8AATrAAAE6wQABOsMAATrFAAE6xgABOscAATrJAAE6ygABOtcAATrYAAE62QABOtsAATsaAAE7HAABOx4AATsgAAE7IwABOyQAATslAAE7JgABOycAATspAAE7KwABOywAATstAAE7LwABOzAAATtvAAE7cQABO3QAATt2AAE7eQABO3oAATt7AAE7fAABO30AATt/AAE7gQABO4IAATuDAAE7hQABO4YAATuVAAE7ogABO68AATuyAAE7tAABO7YAATu4AAE7ugABO70AATvKAAE7zQABO9AAATvTAAE71gABO9kAATvcAAE73gABO+kAATwDAAE8TgABPHEAATyRAAE8sQABPLMAATy1AAE8twABPLkAATy8AAE8vQABPL4AATzBAAE8wgABPMQAATzFAAE8xwABPMoAATzLAAE8zAABPM8AATzQAAE81QABPOIAATznAAE86QABPOsAATzwAAE88wABPPYAATz4AAE9HQABPUEAAT1oAAE9jAABPY8AAT2RAAE9kwABPZUAAT2XAAE9mQABPZoAAT2dAAE9qgABPbsAAT29AAE9vwABPcEAAT3DAAE9xQABPccAAT3JAAE9ywABPdwAAT3fAAE94gABPeUAAT3oAAE96wABPe4AAT3xAAE99AABPfYAAT41AAE+NwABPjkAAT47AAE+PgABPj8AAT5AAAE+QQABPkIAAT5EAAE+RgABPkcAAT5IAAE+SgABPksAAT6KAAE+jAABPo4AAT6QAAE+kwABPpQAAT6VAAE+lgABPpcAAT6ZAAE+mwABPpwAAT6dAAE+nwABPqAAAT7fAAE+4QABPuQAAT7mAAE+6QABPuoAAT7rAAE+7AABPu0AAT7vAAE+8QABPvIAAT7zAAE+9QABPvYAAT8DAAE/BAABPwUAAT8HAAE/RgABP0gAAT9KAAE/TAABP08AAT9QAAE/UQABP1IAAT9TAAE/VQABP1cAAT9YAAE/WQABP1sAAT9cAAE/mwABP50AAT+fAAE/oQABP6QAAT+lAAE/pgABP6cAAT+oAAE/qgABP6wAAT+tAAE/rgABP7AAAT+xAAE/8AABP/IAAT/0AAE/9gABP/kAAT/6AAE/+wABP/wAAT/9AAE//wABQAEAAUACAAFAAwABQAUAAUAGAAFARQABQEcAAUBJAAFASwABQE4AAUBPAAFAUAABQFEAAUBSAAFAVAABQFYAAUBXAAFAWAABQFoAAUBbAAFAmgABQJwAAUCeAAFAoAABQKMAAUCkAAFApQABQKYAAUCnAAFAqQABQKsAAUCsAAFArQABQK8AAUCwAAFA1QABQPkAAUEgAAFBRAABQUcAAUFJAAFBSwABQU0AAUFPAAFBUQABQVIAAUFVAAFBYgABQXEAAUFzAAFBdQABQXcAAUF5AAFBewABQX0AAUF/AAFBjgABQZEAAUGUAAFBlwABQZoAAUGdAAFBoAABQaMAAUGlAAFB5AABQeYAAUHpAAFB6wABQe4AAUHvAAFB8AABQfEAAUHyAAFB9AABQfYAAUH3AAFB+AABQfoAAUH7AAFB/gABQj0AAUI/AAFCQQABQkMAAUJGAAFCRwABQkgAAUJJAAFCSgABQkwAAUJOAAFCTwABQlAAAUJSAAFCUwABQpIAAUKUAAFClgABQpgAAUKbAAFCnAABQp0AAUKeAAFCnwABQqEAAUKjAAFCpAABQqUAAUKnAAFCqAABQucAAULpAAFC7AABQu4AAULxAAFC8gABQvMAAUL0AAFC9QABQvcAAUL5AAFC+gABQvsAAUL9AAFC/gABQz0AAUM/AAFDQQABQ0MAAUNGAAFDRwABQ0gAAUNJAAFDSgABQ0wAAUNOAAFDTwABQ1AAAUNSAAFDUwABQ5IAAUOUAAFDlgABQ5gAAUObAAFDnAABQ50AAUOeAAFDnwABQ6EAAUOjAAFDpAABQ6UAAUOnAAFDqAABQ+cAAUPpAAFD6wABQ+0AAUPwAAFD8QABQ/IAAUPzAAFD9AABQ/YAAUP4AAFD+QABQ/oAAUP8AAFD/QABREgAAURrAAFEiwABRKsAAUStAAFErwABRLEAAUSzAAFEtgABRLcAAUS4AAFEuwABRLwAAUS+AAFEvwABRMEAAUTDAAFExAABRMUAAUTIAAFEyQABRM4AAUTbAAFE4AABROIAAUTkAAFE6QABROwAAUTvAAFE8QABRRYAAUU6AAFFYQABRYUAAUWIAAFFigABRYwAAUWOAAFFkAABRZIAAUWTAAFFlgABRaMAAUW0AAFFtgABRbgAAUW6AAFFvAABRb4AAUXAAAFFwgABRcQAAUXVAAFF2AABRdsAAUXeAAFF4QABReQAAUXnAAFF6gABRe0AAUXvAAFGLgABRjAAAUYyAAFGNAABRjcAAUY4AAFGOQABRjoAAUY7AAFGPQABRj8AAUZAAAFGQQABRkMAAUZEAAFGgwABRoUAAUaHAAFGiQABRowAAUaNAAFGjgABRo8AAUaQAAFGkgABRpQAAUaVAAFGlgABRpgAAUaZAAFG2AABRtoAAUbdAAFG3wABRuIAAUbjAAFG5AABRuUAAUbmAAFG6AABRuoAAUbrAAFG7AABRu4AAUbvAAFG/AABRv8AAUcCAAFHBQABRwcAAUcJAAFHIwABR2IAAUdkAAFHZgABR2gAAUdrAAFHbAABR20AAUduAAFHbwABR3EAAUdzAAFHdAABR3UAAUd3AAFHeAABR7cAAUe5AAFHuwABR70AAUfAAAFHwQABR8IAAUfDAAFHxAABR8YAAUfIAAFHyQABR8oAAUfMAAFHzQABSAwAAUgOAAFIEAABSBIAAUgVAAFIFgABSBcAAUgYAAFIGQABSBsAAUgdAAFIHgABSB8AAUghAAFIIgABSGEAAUhjAAFIZQABSGcAAUhqAAFIawABSGwAAUhtAAFIbgABSHAAAUhyAAFIcwABSHQAAUh2AAFIdwABSLYAAUi4AAFIugABSLwAAUi/AAFIwAABSMEAAUjCAAFIwwABSMUAAUjHAAFIyAABSMkAAUjLAAFIzAABSPEAAUkVAAFJPAABSWAAAUljAAFJZQABSWcAAUlpAAFJawABSW0AAUluAAFJcQABSX4AAUmNAAFJjwABSZEAAUmTAAFJlQABSZcAAUmZAAFJmwABSaoAAUmtAAFJsAABSbMAAUm2AAFJuQABSbwAAUm/AAFJwQABSgAAAUoCAAFKBAABSgYAAUoJAAFKCgABSgsAAUoMAAFKDQABSg8AAUoRAAFKEgABShMAAUoVAAFKFgABSlUAAUpXAAFKWQABSlsAAUpeAAFKXwABSmAAAUphAAFKYgABSmQAAUpmAAFKZwABSmgAAUpqAAFKawABSqoAAUqsAAFKrgABSrAAAUqzAAFKtAABSrUAAUq2AAFKtwABSrkAAUq7AAFKvAABSr0AAUq/AAFKwAABSv8AAUsBAAFLAwABSwUAAUsIAAFLCQABSwoAAUsLAAFLDAABSw4AAUsQAAFLEQABSxIAAUsUAAFLFQABS1QAAUtWAAFLWAABS1oAAUtdAAFLXgABS18AAUtgAAFLYQABS2MAAUtlAAFLZgABS2cAAUtpAAFLagABS6kAAUurAAFLrQABS68AAUuyAAFLswABS7QAAUu1AAFLtgABS7gAAUu6AAFLuwABS7wAAUu+AAFLvwABS/4AAUwAAAFMAgABTAQAAUwHAAFMCAABTAkAAUwKAAFMCwABTA0AAUwPAAFMEAABTBEAAUwTAAFMFAABTF8AAUyCAAFMogABTMIAAUzEAAFMxgA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BV7MAAVe1AAFXtgABV7cAAVe5AAFXugABV/kAAVf7AAFX/QABV/8AAVgCAAFYAwABWAQAAVgFAAFYBgABWAgAAVgKAAFYCwABWAwAAVgOAAFYDwABWE4AAVhQAAFYUgABWFQAAVhXAAFYWAABWFkAAVhaAAFYWwABWF0AAVhfAAFYYAABWGEAAVhjAAFYZAABWKMAAVilAAFYpwABWKkAAVisAAFYrQABWK4AAVivAAFYsAABWLIAAVi0AAFYtQABWLYAAVi4AAFYuQABWN4AAVkCAAFZKQABWU0AAVlQAAFZUgABWVQAAVlWAAFZWAABWVoAAVlbAAFZXgABWWsAAVl6AAFZfAABWX4AAVmAAAFZggABWYQAAVmGAAFZiAABWZcAAVmaAAFZnQABWaAAAVmjAAFZpgABWakAAVmsAAFZrgABWe0AAVnvAAFZ8QABWfMAAVn2AAFZ9wABWfgAAVn5AAFZ+gABWfwAAVn+AAFZ/wABWgAAAVoCAAFaAwABWkIAAVpEAAFaRgABWkgAAVpLAAFaTAABWk0AAVpOAAFaTwABWlEAAVpTAAFaVAABWlUAAVpXAAFaWAABWpcAAVqZAAFamwABWp0AAVqgAAFaoQABWqIAAVqjAAFapAABWqYAAVqoAAFaqQABWqoAAVqsAAFarQABWuwAAVruAAFa8QABWvMAAVr2AAFa9wABWvgAAVr5AAFa+gABWvwAAVr+AAFa/wABWwAAAVsCAAFbAwABW0IAAVtEAAFbRgABW0gAAVtLAAFbTAABW00AAVtOAAFbTwABW1EAAVtTAAFbVAABW1UAAVtXAAFbWAABW5cAAVuZAAFbmwABW50AAVugAAFboQABW6IAAVujAAFbpAABW6YAAVuoAAFbqQABW6oAAVusAAFbrQABW+wAAVvuAAFb8AABW/IAAVv1AAFb9gABW/cAAVv4AAFb+QABW/sAAVv9AAFb/gABW/8AAVwBAAFcAgABXE0AAVxwAAFckAABXLAAAVyyAAFctAABXLYAAVy4AAFcuwABXLwAAVy9AAFcwAABXMEAAVzDAAFcxAABXMYAAVzIAAFcyQABXMoAAVzNAAFczgABXNMAAVzgAAFc5QABXOcAAVzpAAFc7gABXPEAAVz0AAFc9gABXRsAAV0/AAFdZgABXYoAAV2NAAFdjwABXZEAAV2TAAFdlQABXZcAAV2YAAFdmwABXagAAV25AAFduwABXb0AAV2/AAFdwQABXcMAAV3FAAFdxwABXckAAV3aAAFd3QABXeAAAV3jAAFd5gABXekAAV3sAAFd7wABXfIAAV30AAFeMwABXjUAAV43AAFeOQABXjwAAV49AAFePgABXj8AAV5AAAFeQgABXkQAAV5FAAFeRgABXkgAAV5JAAFeiAABXooAAV6MAAFejgABXpEAAV6SAAFekwABXpQAAV6VAAFelwABXpkAAV6aAAFemwABXp0AAV6eAAFe3QABXt8AAV7iAAFe5AABXucAAV7oAAFe6QABXuoAAV7rAAFe7QABXu8AAV7wAAFe8QABXvMAAV70AAFfAQABXwIAAV8DAAFfBQABX0QAAV9GAAFfSAABX0oAAV9NAAFfTgABX08AAV9QAAFfUQABX1MAAV9VAAFfVgABX1cAAV9ZAAFfWgABX5kAAV+bAAFfnQABX58AAV+iAAFfowABX6QAAV+lAAFfpgABX6gAAV+qAAFfqwABX6wAAV+uAAFfrwABX+4AAV/wAAFf8gABX/QAAV/3AAFf+AABX/kAAV/6AAFf+wABX/0AAV//AAFgAAABYAEAAWADAAFgBAABYEMAAWBFAAFgRwABYEkAAWBMAAFgTQABYE4AAWBPAAFgUAABYFIAAWBUAAFgVQABYFYAAWBYAAFgWQABYJgAAWCaAAFgnAABYJ4AAWChAAFgogABYKMAAWCkAAFgpQABYKcAAWCpAAFgqgABYKsAAWCtAAFgrgABYNMAAWD3AAFhHgABYUIAAWFFAAFhRwABYUkAAWFLAAFhTQABYU8AAWFQAAFhUwABYWAAAWFvAAFhcQABYXMAAWF1AAFhdwABYXkAAWF7AAFhfQABYYwAAWGPAAFhkgABYZUAAWGYAAFhmwABYZ4AAWGhAAFhowABYeIAAWHkAAFh5gABYegAAWHrAAFh7AABYe0AAWHuAAFh7wABYfEAAWHzAAFh9AABYfUAAWH3AAFh+AABYjcAAWI5AAFiOwABYj0AAWJAAAFiQQABYkIAAWJDAAFiRAABYkYAAWJIAAFiSQABYkoAAWJMAAFiTQABYowAAWKOAAFikAABYpIAAWKVAAFilgABYpcAAWKYAAFimQABYpsAAWKdAAFingABYp8AAWKhAAFiogABYuEAAWLjAAFi5gABYugAAWLrAAFi7AABYu0AAWLuAAFi7wABYvEAAWLzAAFi9AABYvUAAWL3AAFi+AABYzcAAWM5AAFjOwABYz0AAWNAAAFjQQABY0IAAWNDAAFjRAABY0YAAWNIAAFjSQABY0oAAWNMAAFjTQABY4wAAWOOAAFjkAABY5IAAWOVAAFjlgABY5cAAWOYAAFjmQABY5sAAWOdAAFjngABY58AAWOhAAFjogABY+EAAWPjAAFj5QABY+cAAWPqAAFj6wABY+wAAWPtAAFj7gABY/AAAWPyAAFj8wABY/QAAWP2AAFj9wABZEIAAWRlAAFkhQABZKUAAWSnAAFkqQABZKsAAWStAAFksAABZLEAAWSyAAFktQABZLYAAWS4AAFkuQABZLsAAWS+AAFkvwABZMAAAWTDAAFkxAABZM0AAWTaAAFk3wABZOEAAWTjAAFk6AABZOsAAWTuAAFk8AABZRUAAWU5AAFlYAABZYQAAWWHAAFliQABZYsAAWWNAAFljwABZZEAAWWSAAFllQABZaIAAWWzAAFltQABZbcAAWW5AAFluwABZb0AAWW/AAFlwQABZcMAAWXUAAFl1wABZdoAAWXdAAFl4AABZeMAAWXmAAFl6QABZewAAWXuAAFmLQABZi8AAWYxAAFmMwABZjYAAWY3AAFmOAABZjkAAWY6AAFmPAABZj4AAWY/AAFmQAABZkIAAWZDAAFmggABZoQAAWaGAAFmiAABZosAAWaMAAFmjQABZo4AAWaPAAFmkQABZpMAAWaUAAFmlQABZpcAAWaYAAFm1wABZtkAAWbcAAFm3gABZuEAAWbiAAFm4wABZuQAAWblAAFm5wABZukAAWbqAAFm6wABZu0AAWbuAAFm+wABZv4AAWcBAAFnBAABZwcAAWcJAAFnJAABZ0MAAWeCAAFnhAABZ4YAAWeIAAFniwABZ4wAAWeNAAFnjgABZ48AAWeRAAFnkwABZ5QAAWeVAAFnlwABZ5gAAWfXAAFn2QABZ9sAAWfdAAFn4AABZ+EAAWfiAAFn4wABZ+QAAWfmAAFn6AABZ+kAAWfqAAFn7AABZ+0AAWgsAAFoLgABaDAAAWgyAAFoNQABaDYAAWg3AAFoOAABaDkAAWg7AAFoPQABaD4AAWg/AAFoQQABaEIAAWiBAAFogwABaIUAAWiHAAFoigABaIsAAWiMAAFojQABaI4AAWiQAAFokgABaJMAAWiUAAFolgABaJcAAWjWAAFo2AABaNoAAWjcAAFo3wABaOAAAWjhAAFo4gABaOMAAWjlAAFo5wABaOgAAWjpAAFo6wABaOwAAWkRAAFpNQABaVwAAWmAAAFpgwABaYUAAWmHAAFpiQABaYsAAWmNAAFpjgABaZEAAWmeAAFprQABaa8AAWmxAAFpswABabUAAWm3AAFpuQABabsAAWnKAAFpzQABadAAAWnTAAFp1gABadkAAWncAAFp3wABaeEAAWogAAFqIgABaiQAAWomAAFqKQABaioAAWorAAFqLAABai0AAWovAAFqMQABajIAAWozAAFqNQABajYAAWp1AAFqdwABankAAWp7AAFqfgABan8AAWqAAAFqgQABaoIAAWqEAAFqhgABaocAAWqIAAFqigABaosAAWrKAAFqzAABas4AAWrQAAFq0wABatQAAWrVAAFq1gABatcAAWrZAAFq2wABatwAAWrdAAFq3wABauAAAWsfAAFrIQABayMAAWslAAFrKAABaykAAWsqAAFrKwABaywAAWsuAAFrMAABazEAAWsyAAFrNAABazUAAWt0AAFrdgABa3gAAWt6AAFrfQABa34AAWt/AAFrgAABa4EAAWuDAAFrhQABa4YAAWuHAAFriQABa4oAAWvJAAFrywABa80AAWvPAAFr0gABa9MAAWvUAAFr1QABa9YAAWvYAAFr2gABa9sAAWvcAAFr3gABa98AAWweAAFsIAABbCIAAWwkAAFsJwABbCgAAWwpAAFsKgABbCsAAWwtAAFsLwABbDAAAWwxAAFsMwABbDQAAWw9AAFsPgABbEAAAWxNAAFsTgABbE8AAWxRAAFsXgABbF8AAWxgAAFsYgABbG8AAWxwAAFscQABbHMAAWx8AAFsiwABbJgAAWynAAFsuQABbM0AAWzkAAFs9gABbP8AAW0AAAFtAgABbQ8AAW0QAAFtEQABbRMAAW0XAAFtIAABbSoAAW0xAAFtOQABbUsAAW1QAAFtVQAAAAAAAAQCAAAAAAAANoAAAAAAAAAAAAAAAAAAAW1X + + + + + gameControllerInputType + + + + 1 + saveStates + + + + 1 + cheats + + + + identifier + + + + filename + + + + Game + Undefined + 3 + Game + 1 + + + + + + gameType + + + + code + + + + type + + + + 1 + gameCollections + + + + isEnabled + + + + isStandard + + + + GameCollection + Undefined + 1 + GameCollection + 1 + + + + + + YnBsaXN0MDDUAQIDBAUGSktYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoK8Q +EwcIExQZGiInLC0wMTU6Oz5CRkhVJG51bGzVCQoLDA0ODxAREllOU09wZXJhbmReTlNTZWxlY3Rvck5hbWVfEBBOU0V4cHJlc3Npb25UeXBlW05TQXJndW1lbnRzViRjbGFzc4ADgAIQBIAGgBJfEBVtaWdyYXRlU2F2ZVN0YXRlVHlwZTrTFQsNFhcYWk5TVmFyaWFibGWABBACgAVcZW50aXR5UG9saWN50hscHR5aJGNsYXNzbmFtZVgkY2xhc3Nlc18QFE5TVmFyaWFibGVFeHByZXNzaW9uox8gIV8QFE5TVmFyaWFibGVFeHByZXNzaW9uXE5TRXhwcmVzc2lvblhOU09iamVjdNIjDSQmWk5TLm9iamVjdHOhJYAHgBHVCQoLDA0oKRAqK4AJgAiAC4AQXxAQdmFsdWVGb3JLZXlQYXRoOtMVCw0uFxiACoAFVnNvdXJjZdIjDTI0oTOADIAP0w0LNjc4OVlOU0tleVBhdGiADhAKgA1UdHlwZdIbHDw9XxAcTlNLZXlQYXRoU3BlY2lmaWVyRXhwcmVzc2lvbqM8ICHSGxw/QF5OU011dGFibGVBcnJheaM/QSFXTlNBcnJhedIbHENEXxATTlNLZXlQYXRoRXhwcmVzc2lvbqRDRSAhXxAUTlNGdW5jdGlvbkV4cHJlc3Npb27SGxxBR6JBIdIbHEVJo0UgIV8QD05TS2V5ZWRBcmNoaXZlctFMTVRyb290gAEACAARABoAIwAtADIANwBNAFMAXgBoAHcAigCWAJ0AnwChAKMApQCnAL8AxgDRANMA1QDXAOQA6QD0AP0BFAEYAS8BPAFFAUoBVQFXAVkBWwFmAWgBagFsAW4BgQGIAYoBjAGTAZgBmgGcAZ4BpQGvAbEBswG1AboBvwHeAeIB5wH2AfoCAgIHAh0CIgI5Aj4CQQJGAkoCXAJfAmQAAAAAAAACAQAAAAAAAABOAAAAAAAAAAAAAAAAAAACZg== + + type + + + + creationDate + + + + 1 + games + + + + name + + + + identifier + + + + filename + + + + name + + + + GameControllerInputMapping + Undefined + 5 + GameControllerInputMapping + 1 + + + + + + artworkURL + + + + identifier + + + + playerIndex + + + + ControllerSkin + Undefined + 2 + ControllerSkin + 1 + + + + + \ No newline at end of file diff --git a/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift b/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift new file mode 100644 index 0000000..2e5290d --- /dev/null +++ b/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift @@ -0,0 +1,25 @@ +// +// SaveStateMigrationPolicy.swift +// Delta +// +// Created by Riley Testut on 9/28/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +@objc(SaveStateToSaveStateMigrationPolicy) +class SaveStateToSaveStateMigrationPolicy: NSEntityMigrationPolicy +{ + @objc(migrateSaveStateType:) + func migrateSaveStateType(_ rawValue: NSNumber) -> NSNumber + { + switch rawValue.intValue + { + case 0: return NSNumber(value: SaveStateType.auto.rawValue) + case 1: return NSNumber(value: SaveStateType.general.rawValue) + case 2: return NSNumber(value: SaveStateType.locked.rawValue) + default: return rawValue + } + } +} diff --git a/Delta/Database/Model/Transformers/GameControllerInputMappingTransformer.swift b/Delta/Database/Model/Transformers/GameControllerInputMappingTransformer.swift new file mode 100644 index 0000000..3993514 --- /dev/null +++ b/Delta/Database/Model/Transformers/GameControllerInputMappingTransformer.swift @@ -0,0 +1,61 @@ +// +// GameControllerInputMappingTransformer.swift +// Delta +// +// Created by Riley Testut on 9/27/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import Foundation + +import DeltaCore + +@objc(GameControllerInputMappingTransformer) +class GameControllerInputMappingTransformer: ValueTransformer +{ + override class func transformedValueClass() -> AnyClass { + return NSData.self + } + + override class func allowsReverseTransformation() -> Bool { + return true + } + + override func transformedValue(_ value: Any?) -> Any? + { + guard let inputMapping = value as? DeltaCore.GameControllerInputMapping else { return nil } + + let plistEncoder = PropertyListEncoder() + + do + { + let data = try plistEncoder.encode(inputMapping) + return data + } + catch + { + print(error) + + return nil + } + } + + override func reverseTransformedValue(_ value: Any?) -> Any? + { + guard let inputMappingData = value as? Data else { return nil } + + let plistDecoder = PropertyListDecoder() + + do + { + let inputMapping = try plistDecoder.decode(DeltaCore.GameControllerInputMapping.self, from: inputMappingData) + return inputMapping + } + catch + { + print(error) + + return nil + } + } +} diff --git a/Delta/Database/OpenVGDB/GameMetadata.swift b/Delta/Database/OpenVGDB/GameMetadata.swift index 584dac4..666daa5 100644 --- a/Delta/Database/OpenVGDB/GameMetadata.swift +++ b/Delta/Database/OpenVGDB/GameMetadata.swift @@ -8,9 +8,32 @@ import Foundation -// Must be a class (not struct) so it can be used with Objective-C generics -class GameMetadata +// Must be an NSObject subclass so it can be used with RSTCellContentDataSource. +class GameMetadata: NSObject { - var name: String? - var artworkURL: URL? + let identifier: Int + + let name: String? + let artworkURL: URL? + + init(identifier: Int, name: String?, artworkURL: URL?) + { + self.name = name + self.identifier = identifier + self.artworkURL = artworkURL + } +} + +extension GameMetadata +{ + override var hash: Int { + return self.identifier.hashValue + } + + override func isEqual(_ object: Any?) -> Bool + { + guard let metadata = object as? GameMetadata else { return false } + + return self.identifier == metadata.identifier + } } diff --git a/Delta/Database/OpenVGDB/GamesDatabase.swift b/Delta/Database/OpenVGDB/GamesDatabase.swift index 97d00bc..ef87290 100644 --- a/Delta/Database/OpenVGDB/GamesDatabase.swift +++ b/Delta/Database/OpenVGDB/GamesDatabase.swift @@ -9,6 +9,11 @@ import Foundation import SQLite +private extension UserDefaults +{ + @NSManaged var previousGamesDatabaseVersion: Int +} + extension ExpressionType { static var name: SQLite.Expression { @@ -19,13 +24,17 @@ extension ExpressionType return SQLite.Expression("releaseCoverFront") } - static var hash: SQLite.Expression { + static var sha1Hash: SQLite.Expression { return SQLite.Expression("romHashSHA1") } static var romID: SQLite.Expression { return SQLite.Expression("romID") } + + static var releaseID: SQLite.Expression { + return SQLite.Expression("releaseID") + } } extension Table @@ -57,7 +66,9 @@ extension GamesDatabase class GamesDatabase { - fileprivate let connection: Connection + static let version = -1 + + private let connection: Connection init() throws { @@ -71,28 +82,36 @@ class GamesDatabase { throw Error.connection(error) } + + self.invalidateVirtualTableIfNeeded() } func metadataResults(forGameName gameName: String) -> [GameMetadata] { + let releaseID = Expression.releaseID let name = Expression.name let artworkAddress = Expression.artworkAddress - let query = VirtualTable.search.select(name, artworkAddress).filter(name.match(gameName + "*")) + let query = VirtualTable.search.select(releaseID, name, artworkAddress).filter(name.match(gameName + "*")) do { let rows = try self.connection.prepare(query) - let results = rows.map { row -> GameMetadata in - let metadata = GameMetadata() - metadata.name = row[name] - + let results = rows.map { (row) -> GameMetadata in + + let artworkURL: URL? if let address = row[artworkAddress] { - metadata.artworkURL = URL(string: address) + artworkURL = URL(string: address) + } + else + { + artworkURL = nil } + + let metadata = GameMetadata(identifier: row[releaseID], name: row[name], artworkURL: artworkURL) return metadata } @@ -118,26 +137,31 @@ class GamesDatabase func metadata(for game: Game) -> GameMetadata? { + let releaseID = Expression.releaseID let name = Expression.name let artworkAddress = Expression.artworkAddress - let hash = Expression.hash + + let sha1Hash = Expression.sha1Hash let romID = Expression.romID let gameHash = game.identifier.uppercased() - let query = Table.roms.select(name, artworkAddress).filter(hash == gameHash).join(Table.releases, on: Table.roms[romID] == Table.releases[romID]) + let query = Table.roms.select(releaseID, name, artworkAddress).filter(sha1Hash == gameHash).join(Table.releases, on: Table.roms[romID] == Table.releases[romID]) do { if let row = try self.connection.pluck(query) { - let metadata = GameMetadata() - metadata.name = row[name] - + let artworkURL: URL? if let address = row[artworkAddress] { - metadata.artworkURL = URL(string: address) + artworkURL = URL(string: address) + } + else + { + artworkURL = nil } + let metadata = GameMetadata(identifier: row[releaseID], name: row[name], artworkURL: artworkURL) return metadata } } @@ -152,16 +176,33 @@ class GamesDatabase private extension GamesDatabase { + func invalidateVirtualTableIfNeeded() + { + guard UserDefaults.standard.previousGamesDatabaseVersion != GamesDatabase.version else { return } + + do + { + try self.connection.run(VirtualTable.search.drop(ifExists: true)) + + UserDefaults.standard.previousGamesDatabaseVersion = GamesDatabase.version + } + catch + { + print(error) + } + } + func prepareFTS() -> Bool { let name = Expression.name let artworkAddress = Expression.artworkAddress + let releaseID = Expression.releaseID do { - try self.connection.run(VirtualTable.search.create(.FTS4([name, artworkAddress], tokenize: .Unicode61()))) + try self.connection.run(VirtualTable.search.create(.FTS4([releaseID, name, artworkAddress], tokenize: .Unicode61()))) - let update = VirtualTable.search.insert(Table.releases.select(name, artworkAddress)) + let update = VirtualTable.search.insert(Table.releases.select(releaseID, name, artworkAddress)) _ = try self.connection.run(update) } catch diff --git a/Delta/Database/OpenVGDB/GamesDatabaseBrowserViewController.swift b/Delta/Database/OpenVGDB/GamesDatabaseBrowserViewController.swift index 1945403..f4a0fe6 100644 --- a/Delta/Database/OpenVGDB/GamesDatabaseBrowserViewController.swift +++ b/Delta/Database/OpenVGDB/GamesDatabaseBrowserViewController.swift @@ -15,11 +15,9 @@ class GamesDatabaseBrowserViewController: UITableViewController { var selectionHandler: ((GameMetadata) -> Void)? - fileprivate let database: GamesDatabase? - fileprivate let dataSource: RSTArrayTableViewDataSource + private let database: GamesDatabase? - fileprivate let operationQueue = RSTOperationQueue() - fileprivate let imageCache = NSCache() + private let dataSource: RSTArrayTableViewPrefetchingDataSource override init(style: UITableViewStyle) { fatalError() @@ -37,39 +35,13 @@ class GamesDatabaseBrowserViewController: UITableViewController print(error) } - self.dataSource = RSTArrayTableViewDataSource(items: []) - - let placeholderView = RSTPlaceholderView() - placeholderView.textLabel.textColor = UIColor.lightText - placeholderView.detailTextLabel.textColor = UIColor.lightText - - self.dataSource.placeholderView = placeholderView + self.dataSource = RSTArrayTableViewPrefetchingDataSource(items: []) super.init(coder: aDecoder) - self.dataSource.cellConfigurationHandler = { (cell, metadata, indexPath) in - self.configure(cell: cell as! GameMetadataTableViewCell, with: metadata, for: indexPath) - } - - if let database = self.database - { - self.dataSource.searchController.searchHandler = { [unowned database, unowned dataSource] (searchValue, previousSearchValue) in - - return RSTBlockOperation(executionBlock: { [unowned database, unowned dataSource] (operation) in - let results = database.metadataResults(forGameName: searchValue.text) - - guard !operation.isCancelled else { return } - - dataSource.items = results - - rst_dispatch_sync_on_main_thread { - self.updatePlaceholderView() - } - }) - } - } - self.definesPresentationContext = true + + self.prepareDataSource() } override var preferredStatusBarStyle: UIStatusBarStyle { @@ -83,6 +55,8 @@ class GamesDatabaseBrowserViewController: UITableViewController self.view.backgroundColor = UIColor.deltaDarkGray self.tableView.dataSource = self.dataSource + self.tableView.prefetchDataSource = self.dataSource + self.tableView.indicatorStyle = .white self.tableView.separatorColor = UIColor.gray @@ -99,7 +73,73 @@ class GamesDatabaseBrowserViewController: UITableViewController } } -extension GamesDatabaseBrowserViewController +private extension GamesDatabaseBrowserViewController +{ + func prepareDataSource() + { + /* Placeholder View */ + let placeholderView = RSTPlaceholderView() + placeholderView.textLabel.textColor = UIColor.lightText + placeholderView.detailTextLabel.textColor = UIColor.lightText + self.dataSource.placeholderView = placeholderView + + + /* Cell Configuration */ + self.dataSource.cellConfigurationHandler = { [unowned self] (cell, metadata, indexPath) in + self.configure(cell: cell as! GameMetadataTableViewCell, with: metadata, for: indexPath) + } + + + /* Prefetching */ + self.dataSource.prefetchHandler = { (metadata, indexPath, completionHandler) in + guard let artworkURL = metadata.artworkURL else { return nil } + + let operation = LoadImageURLOperation(url: artworkURL) + operation.resultHandler = { (image, error) in + completionHandler(image, error) + } + return operation + } + + self.dataSource.prefetchCompletionHandler = { (cell, image, indexPath, error) in + guard let image = image else { return } + + let cell = cell as! GameMetadataTableViewCell + + let artworkDisplaySize = AVMakeRect(aspectRatio: image.size, insideRect: cell.artworkImageView.bounds) + let offset = (cell.artworkImageView.bounds.width - artworkDisplaySize.width) / 2 + + // Offset artworkImageViewLeadingConstraint and artworkImageViewTrailingConstraint to right-align artworkImageView + cell.artworkImageViewLeadingConstraint.constant += offset + cell.artworkImageViewTrailingConstraint.constant -= offset + + cell.artworkImageView.image = image + cell.artworkImageView.superview?.layoutIfNeeded() + } + + + /* Searching */ + if let database = self.database + { + self.dataSource.searchController.searchHandler = { [unowned self, unowned database] (searchValue, previousSearchValue) in + return RSTBlockOperation() { [unowned self, unowned database] (operation) in + let results = database.metadataResults(forGameName: searchValue.text) + + guard !operation.isCancelled else { return } + + self.dataSource.items = results + + rst_dispatch_sync_on_main_thread { + self.resetTableViewContentOffset() + self.updatePlaceholderView() + } + } + } + } + } +} + +private extension GamesDatabaseBrowserViewController { func configure(cell: GameMetadataTableViewCell, with metadata: GameMetadata, for indexPath: IndexPath) { @@ -112,30 +152,6 @@ extension GamesDatabaseBrowserViewController cell.artworkImageViewTrailingConstraint.constant = 15 cell.separatorInset.left = cell.nameLabel.frame.minX - - if let artworkURL = metadata.artworkURL - { - let operation = LoadImageURLOperation(url: artworkURL) - operation.resultsCache = self.imageCache - operation.resultHandler = { (image, error) in - if let image = image - { - let artworkDisplaySize = AVMakeRect(aspectRatio: image.size, insideRect: cell.artworkImageView.bounds) - let offset = (cell.artworkImageView.bounds.width - artworkDisplaySize.width) / 2 - - DispatchQueue.main.async { - // Offset artworkImageViewLeadingConstraint and artworkImageViewTrailingConstraint to right-align artworkImageView - cell.artworkImageViewLeadingConstraint.constant += offset - cell.artworkImageViewTrailingConstraint.constant -= offset - - cell.artworkImageView.image = image - cell.artworkImageView.superview?.layoutIfNeeded() - } - } - } - - self.operationQueue.addOperation(operation, forKey: indexPath as NSIndexPath) - } } func updatePlaceholderView() @@ -153,6 +169,12 @@ extension GamesDatabaseBrowserViewController placeholderView.detailTextLabel.text = NSLocalizedString("Please make sure the name is correct, or try searching for another game.", comment: "") } } + + func resetTableViewContentOffset() + { + self.tableView.setContentOffset(CGPoint.zero, animated: false) + self.tableView.setContentOffset(CGPoint(x: 0, y: -self.topLayoutGuide.length), animated: false) + } } extension GamesDatabaseBrowserViewController @@ -167,12 +189,6 @@ extension GamesDatabaseBrowserViewController let metadata = self.dataSource.item(at: indexPath) self.selectionHandler?(metadata) } - - override func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) - { - let operation = self.operationQueue[indexPath as NSIndexPath] - operation?.cancel() - } } extension GamesDatabaseBrowserViewController: UISearchControllerDelegate @@ -193,7 +209,6 @@ extension GamesDatabaseBrowserViewController: UISearchControllerDelegate func didDismissSearchController(_ searchController: UISearchController) { // Fix potentially incorrect offset if user dismisses searchController while scrolling - self.tableView.setContentOffset(CGPoint.zero, animated: false) - self.tableView.setContentOffset(CGPoint(x: 0, y: -self.topLayoutGuide.length), animated: false) + self.resetTableViewContentOffset() } } diff --git a/Delta/Emulation/ActionInput.swift b/Delta/Emulation/ActionInput.swift new file mode 100644 index 0000000..7597eaf --- /dev/null +++ b/Delta/Emulation/ActionInput.swift @@ -0,0 +1,28 @@ +// +// ActionInput.swift +// Delta +// +// Created by Riley Testut on 8/28/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import DeltaCore + +public extension GameControllerInputType +{ + static let action = GameControllerInputType("com.rileytestut.Delta.input.action") +} + +enum ActionInput: String +{ + case quickSave + case quickLoad + case fastForward +} + +extension ActionInput: Input +{ + var type: InputType { + return .controller(.action) + } +} diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index e329975..d8f1133 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -29,6 +29,25 @@ private extension GameViewController self.gameType = gameType } } + + struct SustainInputsMapping: GameControllerInputMappingProtocol + { + let gameController: GameController + + var gameControllerInputType: GameControllerInputType { + return self.gameController.inputType + } + + func input(forControllerInput controllerInput: Input) -> Input? + { + if let mappedInput = self.gameController.defaultInputMapping?.input(forControllerInput: controllerInput), mappedInput == StandardGameControllerInput.menu + { + return mappedInput + } + + return controllerInput + } + } } class GameViewController: DeltaCore.GameViewController @@ -53,11 +72,11 @@ class GameViewController: DeltaCore.GameViewController } //MARK: - Private Properties - - fileprivate var pauseViewController: PauseViewController? - fileprivate var pausingGameController: GameController? + private var pauseViewController: PauseViewController? + private var pausingGameController: GameController? // Prevents the same save state from being saved multiple times - fileprivate var pausedSaveState: PausedSaveState? { + private var pausedSaveState: PausedSaveState? { didSet { if let saveState = oldValue, self.pausedSaveState == nil @@ -74,25 +93,20 @@ class GameViewController: DeltaCore.GameViewController } } - fileprivate var _isLoadingSaveState = false + private var _isLoadingSaveState = false - fileprivate var context = CIContext(options: [kCIContextWorkingColorSpace: NSNull()]) + private var context = CIContext(options: [kCIContextWorkingColorSpace: NSNull()]) // Sustain Buttons - fileprivate var updateSemaphores = Set() - fileprivate var sustainedInputs = [ObjectIdentifier: [Input]]() - fileprivate var reactivateSustainedInputsQueue: OperationQueue - fileprivate var selectingSustainedButtons = false + private var isSelectingSustainedButtons = false + private var sustainInputsMapping: SustainInputsMapping? - fileprivate var sustainButtonsContentView: UIView! - fileprivate var sustainButtonsBlurView: UIVisualEffectView! - fileprivate var sustainButtonsBackgroundView: RSTPlaceholderView! + private var sustainButtonsContentView: UIView! + private var sustainButtonsBlurView: UIVisualEffectView! + private var sustainButtonsBackgroundView: RSTPlaceholderView! required init() { - self.reactivateSustainedInputsQueue = OperationQueue() - self.reactivateSustainedInputsQueue.maxConcurrentOperationCount = 1 - super.init() self.initialize() @@ -100,9 +114,6 @@ class GameViewController: DeltaCore.GameViewController required init?(coder aDecoder: NSCoder) { - self.reactivateSustainedInputsQueue = OperationQueue() - self.reactivateSustainedInputsQueue.maxConcurrentOperationCount = 1 - super.init(coder: aDecoder) self.initialize() @@ -112,8 +123,8 @@ class GameViewController: DeltaCore.GameViewController { self.delegate = self - NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalControllerDidConnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalControllerDidDisconnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalGameControllerDidConnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.updateControllers), name: .externalGameControllerDidDisconnect, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.didEnterBackground(with:)), name: .UIApplicationDidEnterBackground, object: UIApplication.shared) NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.settingsDidChange(with:)), name: .settingsDidChange, object: nil) } @@ -128,19 +139,42 @@ class GameViewController: DeltaCore.GameViewController { super.gameController(gameController, didActivate: input) - guard (input as? ControllerInput) != .menu else { return } - - if self.selectingSustainedButtons + if self.isSelectingSustainedButtons { - self.addSustainedInput(input, for: gameController) - } - else if let sustainedInputs = self.sustainedInputs[ObjectIdentifier(gameController)], sustainedInputs.contains(where: { $0.isEqual(input) }) - { - // Perform on next run loop - DispatchQueue.main.async { - self.reactivateSustainedInput(input, for: gameController) + guard let pausingGameController = self.pausingGameController, gameController == pausingGameController else { return } + + if input != StandardGameControllerInput.menu + { + gameController.sustain(input) } } + else if self.emulatorCore?.state == .running + { + guard let actionInput = ActionInput(input: input) else { return } + + switch actionInput + { + case .quickSave: self.performQuickSaveAction() + case .quickLoad: self.performQuickLoadAction() + case .fastForward: self.performFastForwardAction(activate: true) + } + } + } + + override func gameController(_ gameController: GameController, didDeactivate input: Input) + { + super.gameController(gameController, didDeactivate: input) + + guard !self.isSelectingSustainedButtons else { return } + + guard let actionInput = ActionInput(input: input) else { return } + + switch actionInput + { + case .quickSave: break + case .quickLoad: break + case .fastForward: self.performFastForwardAction(activate: false) + } } } @@ -153,10 +187,15 @@ extension GameViewController { super.viewDidLoad() + // Lays out self.gameView, so we can pin self.sustainButtonsContentView to it without resulting in a temporary "cannot satisfy constraints". + self.view.layoutIfNeeded() + + let gameViewContainerView = self.gameView.superview! + self.sustainButtonsContentView = UIView(frame: CGRect(x: 0, y: 0, width: self.gameView.bounds.width, height: self.gameView.bounds.height)) self.sustainButtonsContentView.translatesAutoresizingMaskIntoConstraints = false self.sustainButtonsContentView.isHidden = true - self.view.insertSubview(self.sustainButtonsContentView, aboveSubview: self.gameView) + self.view.insertSubview(self.sustainButtonsContentView, aboveSubview: gameViewContainerView) let blurEffect = UIBlurEffect(style: .dark) let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect) @@ -182,10 +221,10 @@ extension GameViewController vibrancyView.contentView.addSubview(self.sustainButtonsBackgroundView) // Auto Layout - self.sustainButtonsContentView.leadingAnchor.constraint(equalTo: self.gameView.leadingAnchor).isActive = true - self.sustainButtonsContentView.trailingAnchor.constraint(equalTo: self.gameView.trailingAnchor).isActive = true - self.sustainButtonsContentView.topAnchor.constraint(equalTo: self.gameView.topAnchor).isActive = true - self.sustainButtonsContentView.bottomAnchor.constraint(equalTo: self.gameView.bottomAnchor).isActive = true + self.sustainButtonsContentView.leadingAnchor.constraint(equalTo: gameViewContainerView.leadingAnchor).isActive = true + self.sustainButtonsContentView.trailingAnchor.constraint(equalTo: gameViewContainerView.trailingAnchor).isActive = true + self.sustainButtonsContentView.topAnchor.constraint(equalTo: gameViewContainerView.topAnchor).isActive = true + self.sustainButtonsContentView.bottomAnchor.constraint(equalTo: gameViewContainerView.bottomAnchor).isActive = true self.updateControllerSkin() self.updateControllers() @@ -220,7 +259,7 @@ extension GameViewController if let game = self.game { - let fileURL = FileManager.uniqueTemporaryURL() + let fileURL = FileManager.default.uniqueTemporaryURL() self.pausedSaveState = PausedSaveState(fileURL: fileURL, gameType: game.type) self.emulatorCore?.saveSaveState(to: fileURL) @@ -238,22 +277,27 @@ extension GameViewController pauseViewController.saveStatesViewControllerDelegate = self pauseViewController.cheatsViewControllerDelegate = self - pauseViewController.fastForwardItem?.selected = (self.emulatorCore?.rate != self.emulatorCore?.configuration.supportedRates.lowerBound) + pauseViewController.fastForwardItem?.isSelected = (self.emulatorCore?.rate != self.emulatorCore?.deltaCore.supportedRates.lowerBound) pauseViewController.fastForwardItem?.action = { [unowned self] item in - guard let emulatorCore = self.emulatorCore else { return } - emulatorCore.rate = item.selected ? emulatorCore.configuration.supportedRates.upperBound : emulatorCore.configuration.supportedRates.lowerBound + self.performFastForwardAction(activate: item.isSelected) } - pauseViewController.sustainButtonsItem?.selected = (self.sustainedInputs[ObjectIdentifier(gameController)]?.count ?? 0) > 0 + pauseViewController.sustainButtonsItem?.isSelected = gameController.sustainedInputs.count > 0 pauseViewController.sustainButtonsItem?.action = { [unowned self, unowned pauseViewController] item in - self.resetSustainedInputs(for: gameController) + for input in gameController.sustainedInputs + { + gameController.unsustain(input) + } - if item.selected + if item.isSelected { self.showSustainButtonView() pauseViewController.dismiss() } + + // Re-set gameController as pausingGameController. + self.pausingGameController = gameController } self.pauseViewController = pauseViewController @@ -341,13 +385,14 @@ private extension GameViewController { @objc func updateControllers() { - var controllers = [GameController]() - controllers.append(self.controllerView) + let isExternalGameControllerConnected = ExternalGameControllerManager.shared.connectedControllers.contains(where: { $0.playerIndex != nil }) + if !isExternalGameControllerConnected && Settings.localControllerPlayerIndex == nil + { + Settings.localControllerPlayerIndex = 0 + } - // We need to map each item as a GameControllerProtocol due to a Swift bug - controllers.append(contentsOf: ExternalControllerManager.shared.connectedControllers.map { $0 as GameController }) - - if let index = Settings.localControllerPlayerIndex + // If Settings.localControllerPlayerIndex is non-nil, and there isn't a connected controller with same playerIndex, show controller view. + if let index = Settings.localControllerPlayerIndex, !ExternalGameControllerManager.shared.connectedControllers.contains { $0.playerIndex == index } { self.controllerView.playerIndex = index self.controllerView.isHidden = false @@ -356,44 +401,48 @@ private extension GameViewController { self.controllerView.playerIndex = nil self.controllerView.isHidden = true - } - - // Removing all game controllers from EmulatorCore will reset each controller's playerIndex to nil - // We temporarily cache their playerIndexes, and then we reset them after removing all controllers - var controllerIndexes = [ObjectIdentifier: Int?]() - controllers.forEach { controllerIndexes[ObjectIdentifier($0)] = $0.playerIndex } - - self.emulatorCore?.removeAllGameControllers() - - // Reset each controller's playerIndex to what it was before removing all controllers from EmulatorCore - controllers.forEach { $0.playerIndex = controllerIndexes[ObjectIdentifier($0)] ?? nil } - - for controller in controllers - { - if let index = controller.playerIndex - { - // We need to place the underscore here to silence erroneous unused result warning despite annotating function with @discardableResult - // Hopefully this bug won't be around for too long... - _ = self.emulatorCore?.setGameController(controller, at: index) - controller.addReceiver(self) - } - else - { - controller.removeReceiver(self) - } + + Settings.localControllerPlayerIndex = nil } self.view.setNeedsLayout() self.view.layoutIfNeeded() + + if let emulatorCore = self.emulatorCore, let game = self.game + { + let controllers = [self.controllerView as GameController] + ExternalGameControllerManager.shared.connectedControllers + + for gameController in controllers + { + if gameController.playerIndex != nil + { + if let inputMapping = GameControllerInputMapping.inputMapping(for: gameController, gameType: game.type, in: DatabaseManager.shared.viewContext) + { + gameController.addReceiver(self, inputMapping: inputMapping) + gameController.addReceiver(emulatorCore, inputMapping: inputMapping) + } + else + { + gameController.addReceiver(self) + gameController.addReceiver(emulatorCore) + } + } + else + { + gameController.removeReceiver(self) + gameController.removeReceiver(emulatorCore) + } + } + } } func updateControllerSkin() { - guard let game = self.game else { return } + guard let game = self.game, let system = System(gameType: game.type) else { return } let traits = DeltaCore.ControllerSkin.Traits.defaults(for: self.view) - let controllerSkin = Settings.preferredControllerSkin(for: game.type, traits: traits) + let controllerSkin = Settings.preferredControllerSkin(for: system, traits: traits) self.controllerView.controllerSkin = controllerSkin if controllerSkin?.isTranslucent(for: traits) ?? false @@ -411,7 +460,7 @@ private extension GameViewController /// Save States extension GameViewController: SaveStatesViewControllerDelegate { - fileprivate func updateAutoSaveState() + private func updateAutoSaveState() { // Ensures game is non-nil and also a Game subclass guard let game = self.game as? Game else { return } @@ -429,47 +478,42 @@ extension GameViewController: SaveStatesViewControllerDelegate let game = backgroundContext.object(with: game.objectID) as! Game - let predicate = NSPredicate(format: "%K == %d AND %K == %@", #keyPath(SaveState.type), SaveStateType.auto.rawValue, #keyPath(SaveState.game), game) - - let fetchRequest: NSFetchRequest = SaveState.fetchRequest() - fetchRequest.predicate = predicate + let fetchRequest = SaveState.fetchRequest(for: game, type: .auto) fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(SaveState.creationDate), ascending: true)] - var saveStates: [SaveState]? = nil - do { - saveStates = try fetchRequest.execute() + let saveStates = try fetchRequest.execute() + + if let saveState = saveStates.first, saveStates.count >= 2 + { + // If there are two or more auto save states, update the oldest one + self.update(saveState, with: self.pausedSaveState) + + // Tiny hack: SaveStatesViewController sorts save states by creation date, so we update the creation date too + // Simpler than deleting old save states ¯\_(ツ)_/¯ + saveState.creationDate = saveState.modifiedDate + } + else + { + // Otherwise, create a new one + let saveState = SaveState.insertIntoManagedObjectContext(backgroundContext) + saveState.type = .auto + saveState.game = game + + self.update(saveState, with: self.pausedSaveState) + } } catch { print(error) } - - if let saveStates = saveStates, let saveState = saveStates.first, saveStates.count >= 2 - { - // If there are two or more auto save states, update the oldest one - self.update(saveState, with: self.pausedSaveState) - - // Tiny hack; SaveStatesViewController sorts save states by creation date, so we update the creation date too - // Simpler than deleting old save states ¯\_(ツ)_/¯ - saveState.creationDate = saveState.modifiedDate - } - else - { - // Otherwise, create a new one - let saveState = SaveState.insertIntoManagedObjectContext(backgroundContext) - saveState.type = .auto - saveState.game = game - - self.update(saveState, with: self.pausedSaveState) - } - + backgroundContext.saveWithErrorLogging() } } - fileprivate func update(_ saveState: SaveState, with replacementSaveState: SaveStateProtocol? = nil) + private func update(_ saveState: SaveState, with replacementSaveState: SaveStateProtocol? = nil) { let isRunning = (self.emulatorCore?.state == .running) @@ -523,25 +567,14 @@ extension GameViewController: SaveStatesViewControllerDelegate } } - //MARK: - SaveStatesViewControllerDelegate - - func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, updateSaveState saveState: SaveState) + private func load(_ saveState: SaveStateProtocol) { - let updatingExistingSaveState = FileManager.default.fileExists(atPath: saveState.fileURL.path) + let isRunning = (self.emulatorCore?.state == .running) - self.update(saveState) - - // Dismiss if updating an existing save state. - // If creating a new one, don't dismiss. - if updatingExistingSaveState + if isRunning { - self.pauseViewController?.dismiss() + self.pauseEmulation() } - } - - func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, loadSaveState saveState: SaveStateProtocol) - { - self._isLoadingSaveState = true // If we're loading the auto save state, we need to create a temporary copy of saveState. // Then, we update the auto save state, but load our copy so everything works out. @@ -549,7 +582,7 @@ extension GameViewController: SaveStatesViewControllerDelegate if let autoSaveState = saveState as? SaveState, autoSaveState.type == .auto { - let temporaryURL = FileManager.uniqueTemporaryURL() + let temporaryURL = FileManager.default.uniqueTemporaryURL() do { @@ -585,16 +618,33 @@ extension GameViewController: SaveStatesViewControllerDelegate print(error) } - // Reactivate sustained inputs - for gameController in self.emulatorCore?.gameControllers ?? [] + if isRunning { - guard let sustainedInputs = self.sustainedInputs[ObjectIdentifier(gameController)] else { continue } - - for input in sustainedInputs - { - self.reactivateSustainedInput(input, for: gameController) - } + self.resumeEmulation() } + } + + //MARK: - SaveStatesViewControllerDelegate + + func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, updateSaveState saveState: SaveState) + { + let updatingExistingSaveState = FileManager.default.fileExists(atPath: saveState.fileURL.path) + + self.update(saveState) + + // Dismiss if updating an existing save state. + // If creating a new one, don't dismiss. + if updatingExistingSaveState + { + self.pauseViewController?.dismiss() + } + } + + func saveStatesViewController(_ saveStatesViewController: SaveStatesViewController, loadSaveState saveState: SaveStateProtocol) + { + self._isLoadingSaveState = true + + self.load(saveState) self.pauseViewController?.dismiss() } @@ -620,7 +670,12 @@ private extension GameViewController { func showSustainButtonView() { - self.selectingSustainedButtons = true + guard let gameController = self.pausingGameController else { return } + + self.isSelectingSustainedButtons = true + + let sustainInputsMapping = SustainInputsMapping(gameController: gameController) + gameController.addReceiver(self, inputMapping: sustainInputsMapping) let blurEffect = self.sustainButtonsBlurView.effect self.sustainButtonsBlurView.effect = nil @@ -635,7 +690,18 @@ private extension GameViewController func hideSustainButtonView() { - self.selectingSustainedButtons = false + guard let gameController = self.pausingGameController else { return } + + self.isSelectingSustainedButtons = false + + self.updateControllers() + self.sustainInputsMapping = nil + + // Reactivate all sustained inputs, since they will now be mapped to game inputs. + for input in gameController.sustainedInputs + { + gameController.activate(input) + } let blurEffect = self.sustainButtonsBlurView.effect @@ -647,94 +713,76 @@ private extension GameViewController self.sustainButtonsBlurView.effect = blurEffect } } - - func resetSustainedInputs(for gameController: GameController) +} + +//MARK: - Action Inputs - +/// Action Inputs +extension GameViewController +{ + func performQuickSaveAction() { - if let previousInputs = self.sustainedInputs[ObjectIdentifier(gameController)] - { - let receivers = gameController.receivers - receivers.forEach { gameController.removeReceiver($0) } - - // Activate previousInputs without notifying anyone so we can then deactivate them - // We do this because deactivating an already deactivated input has no effect - previousInputs.forEach { gameController.activate($0) } - - receivers.forEach { gameController.addReceiver($0) } - - // Deactivate previously sustained inputs - previousInputs.forEach { gameController.deactivate($0) } - } + guard let game = self.game as? Game else { return } - self.sustainedInputs[ObjectIdentifier(gameController)] = [] - } - - func addSustainedInput(_ input: Input, for gameController: GameController) - { - var inputs = self.sustainedInputs[ObjectIdentifier(gameController)] ?? [] - - guard !inputs.contains(where: { $0.isEqual(input) }) else { return } - - inputs.append(input) - self.sustainedInputs[ObjectIdentifier(gameController)] = inputs - - let receivers = gameController.receivers - receivers.forEach { gameController.removeReceiver($0) } - - // Causes input to be considered deactivated, so gameController won't send a subsequent message to observers when user actually deactivates - // However, at this point the core still thinks it is activated, and is temporarily not a receiver, thus sustaining it - gameController.deactivate(input) - - receivers.forEach { gameController.addReceiver($0) } - } - - func reactivateSustainedInput(_ input: Input, for gameController: GameController) - { - // These MUST be performed serially, or else Bad Things Happen™ if multiple inputs are reactivated at once - self.reactivateSustainedInputsQueue.addOperation { + let backgroundContext = DatabaseManager.shared.newBackgroundContext() + backgroundContext.performAndWait { - // The manual activations/deactivations here are hidden implementation details, so we won't notify ourselves about them - gameController.removeReceiver(self) + let game = backgroundContext.object(with: game.objectID) as! Game + let fetchRequest = SaveState.fetchRequest(for: game, type: .quick) - // Must deactivate first so core recognizes a secondary activation - gameController.deactivate(input) - - let dispatchQueue = DispatchQueue(label: "com.rileytestut.Delta.sustainButtonsQueue") - dispatchQueue.async { - - let semaphore = DispatchSemaphore(value: 0) - self.updateSemaphores.insert(semaphore) - - // To ensure the emulator core recognizes us activating the input again, we need to wait at least two frames - // Unfortunately we cannot init DispatchSemaphore with value less than 0 - // To compensate, we simply wait twice; once the first wait returns, we wait again - semaphore.wait() - semaphore.wait() - - // These MUST be performed serially, or else Bad Things Happen™ if multiple inputs are reactivated at once - self.reactivateSustainedInputsQueue.addOperation { - - self.updateSemaphores.remove(semaphore) - - // Ensure we still are not a receiver (to prevent rare race conditions) - gameController.removeReceiver(self) - - gameController.activate(input) - - let receivers = gameController.receivers - receivers.forEach { gameController.removeReceiver($0) } - - // Causes input to be considered deactivated, so gameController won't send a subsequent message to observers when user actually deactivates - // However, at this point the core still thinks it is activated, and is temporarily not a receiver, thus sustaining it - gameController.deactivate(input) - - receivers.forEach { gameController.addReceiver($0) } + do + { + if let quickSaveState = try fetchRequest.execute().first + { + self.update(quickSaveState) + } + else + { + let saveState = SaveState(context: backgroundContext) + saveState.type = .quick + saveState.game = game + + self.update(saveState) } - - // More Bad Things Happen™ if we add self as observer before ALL reactivations have occurred (notable, infinite loops) - self.reactivateSustainedInputsQueue.waitUntilAllOperationsAreFinished() - - gameController.addReceiver(self) } + catch + { + print(error) + } + + backgroundContext.saveWithErrorLogging() + } + } + + func performQuickLoadAction() + { + guard let game = self.game as? Game else { return } + + let fetchRequest = SaveState.fetchRequest(for: game, type: .quick) + + do + { + if let quickSaveState = try DatabaseManager.shared.viewContext.fetch(fetchRequest).first + { + self.load(quickSaveState) + } + } + catch + { + print(error) + } + } + + func performFastForwardAction(activate: Bool) + { + guard let emulatorCore = self.emulatorCore else { return } + + if activate + { + emulatorCore.rate = emulatorCore.deltaCore.supportedRates.upperBound + } + else + { + emulatorCore.rate = emulatorCore.deltaCore.supportedRates.lowerBound } } } @@ -745,12 +793,17 @@ extension GameViewController: GameViewControllerDelegate { func gameViewController(_ gameViewController: DeltaCore.GameViewController, handleMenuInputFrom gameController: GameController) { - if self.selectingSustainedButtons + if let pausingGameController = self.pausingGameController + { + guard pausingGameController == gameController else { return } + } + + if self.isSelectingSustainedButtons { self.hideSustainButtonView() } - if let pauseViewController = self.pauseViewController, !self.selectingSustainedButtons + if let pauseViewController = self.pauseViewController, !self.isSelectingSustainedButtons { pauseViewController.dismiss() } @@ -763,15 +816,7 @@ extension GameViewController: GameViewControllerDelegate func gameViewControllerShouldResumeEmulation(_ gameViewController: DeltaCore.GameViewController) -> Bool { - return (self.presentedViewController == nil || self.presentedViewController?.isDisappearing == true) && !self.selectingSustainedButtons && self.view.window != nil - } - - func gameViewControllerDidUpdate(_ gameViewController: DeltaCore.GameViewController) - { - for semaphore in self.updateSemaphores - { - semaphore.signal() - } + return (self.presentedViewController == nil || self.presentedViewController?.isDisappearing == true) && !self.isSelectingSustainedButtons && self.view.window != nil } } @@ -805,12 +850,12 @@ private extension GameViewController case .preferredControllerSkin: guard - let gameType = notification.userInfo?[Settings.NotificationUserInfoKey.gameType] as? GameType, + let system = notification.userInfo?[Settings.NotificationUserInfoKey.system] as? System, let traits = notification.userInfo?[Settings.NotificationUserInfoKey.traits] as? DeltaCore.ControllerSkin.Traits else { return } let currentTraits = DeltaCore.ControllerSkin.Traits.defaults(for: self.view) - if gameType == self.game?.type && traits == currentTraits + if system.gameType == self.game?.type && traits == currentTraits { self.updateControllerSkin() } diff --git a/Delta/Emulation/PreviewGameViewController.swift b/Delta/Emulation/PreviewGameViewController.swift index 52480fd..42833a4 100644 --- a/Delta/Emulation/PreviewGameViewController.swift +++ b/Delta/Emulation/PreviewGameViewController.swift @@ -27,7 +27,7 @@ class PreviewGameViewController: DeltaCore.GameViewController } } - fileprivate var emulatorCoreQueue = DispatchQueue(label: "com.rileytestut.Delta.PreviewGameViewController.emulatorCoreQueue", qos: .userInitiated) + private var emulatorCoreQueue = DispatchQueue(label: "com.rileytestut.Delta.PreviewGameViewController.emulatorCoreQueue", qos: .userInitiated) override var game: GameProtocol? { willSet { diff --git a/Delta/Extensions/DeltaCoreProtocol+Delta.swift b/Delta/Extensions/DeltaCoreProtocol+Delta.swift new file mode 100644 index 0000000..a11418a --- /dev/null +++ b/Delta/Extensions/DeltaCoreProtocol+Delta.swift @@ -0,0 +1,23 @@ +// +// DeltaCoreProtocol+Delta.swift +// Delta +// +// Created by Riley Testut on 4/30/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import DeltaCore + +extension DeltaCoreProtocol +{ + var supportedRates: ClosedRange { + guard let system = System(gameType: self.gameType) else { return 1...1 } + + switch system + { + case .snes: return 1...4 + case .gba: return 1...3 + case .gbc: return 1...4 + } + } +} diff --git a/Delta/Extensions/GameType+Delta.swift b/Delta/Extensions/GameType+Delta.swift deleted file mode 100644 index 7911dd2..0000000 --- a/Delta/Extensions/GameType+Delta.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// GameType+Delta.swift -// Delta -// -// Created by Riley Testut on 12/22/16. -// Copyright © 2016 Riley Testut. All rights reserved. -// - -import DeltaCore - -extension GameType -{ - static var supportedTypes: Set - { - return [GameType.snes, GameType.gba] - } - - static func gameType(forFileExtension fileExtension: String) -> GameType - { - let gameType: GameType - - switch fileExtension.lowercased() - { - case "smc", "sfc", "fig": gameType = GameType.snes - case "gba": gameType = GameType.gba - default: gameType = GameType.unknown - } - - return gameType - } -} diff --git a/Delta/Extensions/GameType+Localization.swift b/Delta/Extensions/GameType+Localization.swift deleted file mode 100644 index c176238..0000000 --- a/Delta/Extensions/GameType+Localization.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// GameType+Localization.swift -// Delta -// -// Created by Riley Testut on 10/3/16. -// Copyright © 2016 Riley Testut. All rights reserved. -// - -import DeltaCore - -extension GameType -{ - var localizedName: String - { - switch self - { - case GameType.snes: return NSLocalizedString("Super Nintendo Entertainment System", comment: "") - case GameType.gba: return NSLocalizedString("Game Boy Advance", comment: "") - case GameType.unknown: return NSLocalizedString("Unsupported System", comment: "") - default: return NSLocalizedString("Unknown", comment: "") - } - } - - var localizedShortName: String - { - switch self - { - case GameType.snes: return NSLocalizedString("SNES", comment: "") - case GameType.gba: return NSLocalizedString("GBA", comment: "") - case GameType.unknown: return NSLocalizedString("Unsupported", comment: "") - default: return NSLocalizedString("Unknown", comment: "") - } - } -} diff --git a/Delta/Extensions/Input+Display.swift b/Delta/Extensions/Input+Display.swift new file mode 100644 index 0000000..ac80b19 --- /dev/null +++ b/Delta/Extensions/Input+Display.swift @@ -0,0 +1,112 @@ +// +// Input+Display.swift +// Delta +// +// Created by Riley Testut on 8/15/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import DeltaCore + +extension Input +{ + // With the default GameControllerInputMapping files, multiple controller inputs may map to the same game input. + // This is because each controller input maps to a unique standard input, but then multiple standard inputs may map to same game input. + // To ensure we only show the most "important" controller input for a game input, we define general "display priorities" for each input. + // + // For example, MFiGameController.down and MFiGameController.leftThumbstickDown both map to a "down" game input. + // However, .down has a higher priority than .leftThumbstickDown, so we show .down instead of .leftThumbstickDown. + var displayPriority: Int { + switch self.type + { + case .game: break + case .controller(.standard): break + case .controller(.mfi): + let input = MFiGameController.Input(input: self)! + switch input + { + case .leftThumbstickUp: return 750 + case .leftThumbstickDown: return 750 + case .leftThumbstickLeft: return 750 + case .leftThumbstickRight: return 750 + case .leftShoulder: return 750 + case .leftTrigger: return 500 + case .rightShoulder: return 750 + case .rightTrigger: return 500 + default: break + } + + default: break + } + + return 1000 + } + + var localizedName: String { + switch self.type + { + case .game: break + case .controller(.standard): + let input = StandardGameControllerInput(input: self)! + switch input + { + case .menu: return NSLocalizedString("Menu", comment: "") + case .up: return NSLocalizedString("Up", comment: "") + case .down: return NSLocalizedString("Down", comment: "") + case .left: return NSLocalizedString("Left", comment: "") + case .right: return NSLocalizedString("Right", comment: "") + case .leftThumbstickUp: return NSLocalizedString("L🕹↑", comment: "") + case .leftThumbstickDown: return NSLocalizedString("L🕹↓", comment: "") + case .leftThumbstickLeft: return NSLocalizedString("L🕹←", comment: "") + case .leftThumbstickRight: return NSLocalizedString("L🕹→", comment: "") + case .rightThumbstickUp: return NSLocalizedString("R🕹↑", comment: "") + case .rightThumbstickDown: return NSLocalizedString("R🕹↓", comment: "") + case .rightThumbstickLeft: return NSLocalizedString("R🕹←", comment: "") + case .rightThumbstickRight: return NSLocalizedString("R🕹→", comment: "") + case .a: return NSLocalizedString("A", comment: "") + case .b: return NSLocalizedString("B", comment: "") + case .x: return NSLocalizedString("X", comment: "") + case .y: return NSLocalizedString("Y", comment: "") + case .start: return NSLocalizedString("Start", comment: "Start button") + case .select: return NSLocalizedString("Select", comment: "Select button") + case .l1: return NSLocalizedString("L1", comment: "") + case .l2: return NSLocalizedString("L2", comment: "") + case .l3: return NSLocalizedString("L3", comment: "") + case .r1: return NSLocalizedString("R1", comment: "") + case .r2: return NSLocalizedString("R2", comment: "") + case .r3: return NSLocalizedString("R3", comment: "") + } + + case .controller(.mfi): + let input = MFiGameController.Input(input: self)! + switch input + { + case .menu: return NSLocalizedString("Menu", comment: "") + case .up: return NSLocalizedString("Up", comment: "") + case .down: return NSLocalizedString("Down", comment: "") + case .left: return NSLocalizedString("Left", comment: "") + case .right: return NSLocalizedString("Right", comment: "") + case .leftThumbstickUp: return NSLocalizedString("L🕹↑", comment: "") + case .leftThumbstickDown: return NSLocalizedString("L🕹↓", comment: "") + case .leftThumbstickLeft: return NSLocalizedString("L🕹←", comment: "") + case .leftThumbstickRight: return NSLocalizedString("L🕹→", comment: "") + case .rightThumbstickUp: return NSLocalizedString("R🕹↑", comment: "") + case .rightThumbstickDown: return NSLocalizedString("R🕹↓", comment: "") + case .rightThumbstickLeft: return NSLocalizedString("R🕹←", comment: "") + case .rightThumbstickRight: return NSLocalizedString("R🕹→", comment: "") + case .a: return NSLocalizedString("A", comment: "") + case .b: return NSLocalizedString("B", comment: "") + case .x: return NSLocalizedString("X", comment: "") + case .y: return NSLocalizedString("Y", comment: "") + case .leftShoulder: return NSLocalizedString("L1", comment: "") + case .leftTrigger: return NSLocalizedString("L2", comment: "") + case .rightShoulder: return NSLocalizedString("R1", comment: "") + case .rightTrigger: return NSLocalizedString("R2", comment: "") + } + + default: break + } + + return "" + } +} diff --git a/Delta/Extensions/UIAlertController+Importing.swift b/Delta/Extensions/UIAlertController+Importing.swift index adac8c1..f326d36 100644 --- a/Delta/Extensions/UIAlertController+Importing.swift +++ b/Delta/Extensions/UIAlertController+Importing.swift @@ -38,6 +38,7 @@ extension UIAlertController { case .doesNotExist(let url): urls.insert(url) case .invalid(let url): urls.insert(url) + case .unsupported(let url): urls.insert(url) case .unknown(let url, _): urls.insert(url) case .saveFailed(let errorURLs, _): urls.formUnion(errorURLs) } diff --git a/Delta/Extensions/UIColor+Delta.swift b/Delta/Extensions/UIColor+Delta.swift index 263ad61..6532698 100644 --- a/Delta/Extensions/UIColor+Delta.swift +++ b/Delta/Extensions/UIColor+Delta.swift @@ -12,7 +12,7 @@ extension UIColor { class var deltaPurple: UIColor { - return UIColor(red: 140.0/255.0, green: 26.0/255.0, blue: 233.0/255.0, alpha: 1.0) + return UIColor(red: 139.0/255.0, green: 40.0/255.0, blue: 247.0/255.0, alpha: 1.0) } class var deltaDarkGray: UIColor diff --git a/Delta/Extensions/UILabel+FontSize.swift b/Delta/Extensions/UILabel+FontSize.swift index b010932..39695a5 100644 --- a/Delta/Extensions/UILabel+FontSize.swift +++ b/Delta/Extensions/UILabel+FontSize.swift @@ -18,7 +18,7 @@ internal extension UILabel context.minimumScaleFactor = self.minimumScaleFactor // Using self.attributedString returns incorrect calculations, so we create our own attributed string - let attributedString = NSAttributedString(string: text, attributes: [NSFontAttributeName: self.font]) + let attributedString = NSAttributedString(string: text, attributes: [.font: self.font]) attributedString.boundingRect(with: self.bounds.size, options: [.usesLineFragmentOrigin, .usesFontLeading], context: context) let scaleFactor = context.actualScaleFactor diff --git a/Delta/Extensions/UIView+ParentViewController.swift b/Delta/Extensions/UIView+ParentViewController.swift new file mode 100644 index 0000000..2213199 --- /dev/null +++ b/Delta/Extensions/UIView+ParentViewController.swift @@ -0,0 +1,28 @@ +// +// UIView+ParentViewController.swift +// Delta +// +// Created by Riley Testut on 9/3/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +extension UIView +{ + var parentViewController: UIViewController? { + var nextResponder = self.next + + while nextResponder != nil + { + if let parentViewController = nextResponder as? UIViewController + { + return parentViewController + } + + nextResponder = nextResponder?.next + } + + return nil + } +} diff --git a/Delta/Extensions/UIViewControllerContextTransitioning+Conveniences.swift b/Delta/Extensions/UIViewControllerContextTransitioning+Conveniences.swift index 3c7453e..94d9ba4 100644 --- a/Delta/Extensions/UIViewControllerContextTransitioning+Conveniences.swift +++ b/Delta/Extensions/UIViewControllerContextTransitioning+Conveniences.swift @@ -21,11 +21,11 @@ extension UIViewControllerContextTransitioning /// UIViews var sourceView: UIView { - return self.sourceViewController.view + return self.view(forKey: .from) ?? self.sourceViewController.view } var destinationView: UIView { - return self.destinationViewController.view + return self.view(forKey: .to) ?? self.destinationViewController.view } diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index ebffe8c..68f3112 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -7,6 +7,7 @@ // import UIKit +import MobileCoreServices import DeltaCore @@ -16,9 +17,9 @@ import SDWebImage class GameCollectionViewController: UICollectionViewController { - var gameCollection: GameCollection! { + var gameCollection: GameCollection? { didSet { - self.title = self.gameCollection.shortName + self.title = self.gameCollection?.shortName self.updateDataSource() } } @@ -40,17 +41,28 @@ class GameCollectionViewController: UICollectionViewController } } + internal let dataSource: RSTFetchedResultsCollectionViewPrefetchingDataSource + weak var activeEmulatorCore: EmulatorCore? - fileprivate var activeSaveState: SaveStateProtocol? + private var activeSaveState: SaveStateProtocol? - fileprivate let dataSource = RSTFetchedResultsCollectionViewDataSource(fetchedResultsController: NSFetchedResultsController()) - fileprivate let prototypeCell = GridCollectionViewCell() + private let prototypeCell = GridCollectionViewCell() - fileprivate var _performing3DTouchTransition = false - fileprivate weak var _destination3DTouchTransitionViewController: UIViewController? + private var _performing3DTouchTransition = false + private weak var _destination3DTouchTransitionViewController: UIViewController? - fileprivate var _renameAction: UIAlertAction? + private var _renameAction: UIAlertAction? + private var _changingArtworkGame: Game? + + required init?(coder aDecoder: NSCoder) + { + self.dataSource = RSTFetchedResultsCollectionViewPrefetchingDataSource(fetchedResultsController: NSFetchedResultsController()) + + super.init(coder: aDecoder) + + self.prepareDataSource() + } } //MARK: - UIViewController - @@ -61,11 +73,8 @@ extension GameCollectionViewController { super.viewDidLoad() - self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in - self.configure(cell as! GridCollectionViewCell, for: indexPath) - } - self.collectionView?.dataSource = self.dataSource + self.collectionView?.prefetchDataSource = self.dataSource self.collectionView?.delegate = self let layout = self.collectionViewLayout as! GridCollectionViewLayout @@ -122,25 +131,7 @@ extension GameCollectionViewController saveStatesViewController.game = game saveStatesViewController.mode = .loading saveStatesViewController.theme = self.theme - - case "gamesDatabaseBrowser": - let game = sender as! Game - - let gamesDatabaseBrowserViewController = (segue.destination as! UINavigationController).topViewController as! GamesDatabaseBrowserViewController - gamesDatabaseBrowserViewController.selectionHandler = { (metadata) in - - DatabaseManager.shared.performBackgroundTask({ (context) in - let temporaryGame = context.object(with: game.objectID) as! Game - temporaryGame.artworkURL = metadata.artworkURL - context.saveWithErrorLogging() - - DispatchQueue.main.async { - gamesDatabaseBrowserViewController.dismiss(animated: true, completion: nil) - } - }) - - } - + case "unwindFromGames": let destinationViewController = segue.destination as! GameViewController let cell = sender as! UICollectionViewCell @@ -195,11 +186,42 @@ extension GameCollectionViewController //MARK: - Private Methods - private extension GameCollectionViewController { - //MARK: - Update + //MARK: - Data Source + func prepareDataSource() + { + self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in + self.configure(cell as! GridCollectionViewCell, for: indexPath) + } + + self.dataSource.prefetchHandler = { (game, indexPath, completionHandler) in + guard let artworkURL = game.artworkURL else { return nil } + + let imageOperation = LoadImageURLOperation(url: artworkURL) + imageOperation.resultHandler = { (image, error) in + completionHandler(image, error) + } + + return imageOperation + } + + self.dataSource.prefetchCompletionHandler = { (cell, image, indexPath, error) in + guard let image = image else { return } + + let cell = cell as! GridCollectionViewCell + cell.imageView.image = image + cell.isImageViewVibrancyEnabled = false + } + } + func updateDataSource() { let fetchRequest: NSFetchRequest = Game.fetchRequest() - fetchRequest.predicate = NSPredicate(format: "ANY %K == %@", #keyPath(Game.gameCollections), self.gameCollection) + + if let gameCollection = self.gameCollection + { + fetchRequest.predicate = NSPredicate(format: "ANY %K == %@", #keyPath(Game.gameCollections), gameCollection) + } + fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(Game.name), ascending: true)] fetchRequest.returnsObjectsAsFaults = false @@ -207,7 +229,7 @@ private extension GameCollectionViewController } //MARK: - Configure Cells - func configure(_ cell: GridCollectionViewCell, for indexPath: IndexPath, ignoreImageOperations: Bool = false) + func configure(_ cell: GridCollectionViewCell, for indexPath: IndexPath) { let game = self.dataSource.item(at: indexPath) @@ -222,29 +244,11 @@ private extension GameCollectionViewController cell.isImageViewVibrancyEnabled = true } + cell.imageView.image = #imageLiteral(resourceName: "BoxArt") + cell.maximumImageSize = CGSize(width: 90, height: 90) cell.textLabel.text = game.name cell.textLabel.textColor = UIColor.gray - - if let artworkURL = game.artworkURL, !ignoreImageOperations - { - cell.imageView.sd_setImage(with: artworkURL, placeholderImage: #imageLiteral(resourceName: "BoxArt"), options: .continueInBackground) { (image, error, type, url) in - - if let error = error - { - print(error) - } - - if image != nil - { - cell.isImageViewVibrancyEnabled = false - } - } - } - else - { - cell.imageView.image = #imageLiteral(resourceName: "BoxArt") - } } //MARK: - Emulation @@ -342,7 +346,7 @@ private extension GameCollectionViewController func rename(_ game: Game, with name: String) { - guard name.characters.count > 0 else { return } + guard name.count > 0 else { return } DatabaseManager.shared.performBackgroundTask { (context) in let game = context.object(with: game.objectID) as! Game @@ -356,7 +360,16 @@ private extension GameCollectionViewController func changeArtwork(for game: Game) { - self.performSegue(withIdentifier: "gamesDatabaseBrowser", sender: game) + self._changingArtworkGame = game + + let clipboardImportOption = ClipboardImportOption() + let photoLibraryImportOption = PhotoLibraryImportOption(presentingViewController: self) + let gamesDatabaseImportOption = GamesDatabaseImportOption(presentingViewController: self) + + let importController = ImportController(documentTypes: [kUTTypeImage as String]) + importController.delegate = self + importController.importOptions = [clipboardImportOption, photoLibraryImportOption, gamesDatabaseImportOption] + self.present(importController, animated: true, completion: nil) } func share(_ game: Game) @@ -394,7 +407,7 @@ private extension GameCollectionViewController @objc func textFieldTextDidChange(_ textField: UITextField) { let text = textField.text ?? "" - self._renameAction?.isEnabled = text.characters.count > 0 + self._renameAction?.isEnabled = text.count > 0 } @objc func handleLongPressGesture(_ gestureRecognizer: UILongPressGestureRecognizer) @@ -417,7 +430,7 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate { func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { - guard self.gameCollection.identifier != GameType.unknown.rawValue else { return nil } + guard self.gameCollection?.identifier != GameType.unknown.rawValue else { return nil } guard let collectionView = self.collectionView, @@ -452,7 +465,7 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate let indexPath = self.dataSource.fetchedResultsController.indexPath(forObject: game)! let cell = self.collectionView?.cellForItem(at: indexPath) - let fileURL = FileManager.uniqueTemporaryURL() + let fileURL = FileManager.default.uniqueTemporaryURL() self.activeSaveState = gameViewController.emulatorCore?.saveSaveState(to: fileURL) gameViewController.emulatorCore?.stop() @@ -493,13 +506,105 @@ extension GameCollectionViewController: SaveStatesViewControllerDelegate } } +//MARK: - ImportControllerDelegate - +/// ImportControllerDelegate +extension GameCollectionViewController: ImportControllerDelegate +{ + func importController(_ importController: ImportController, didImportItemsAt urls: Set, errors: [Error]) + { + guard let game = self._changingArtworkGame else { return } + + var errors = errors + + var imageURL: URL? + + if let url = urls.first + { + if url.isFileURL + { + do + { + let imageData = try Data(contentsOf: url) + + if let image = UIImage(data: imageData) + { + let resizedImage = image.resizing(toFit: CGSize(width: 300, height: 300)) + + if let resizedData = UIImageJPEGRepresentation(resizedImage, 0.85) + { + let destinationURL = DatabaseManager.artworkURL(for: game) + try resizedData.write(to: destinationURL, options: .atomic) + + imageURL = destinationURL + } + } + } + catch + { + errors.append(error) + } + } + else + { + imageURL = url + } + } + + for error in errors + { + print(error) + } + + if let imageURL = imageURL + { + // Remove previous artwork from cache. + self.dataSource.prefetchItemCache.removeObject(forKey: game) + + DatabaseManager.shared.performBackgroundTask { (context) in + let temporaryGame = context.object(with: game.objectID) as! Game + temporaryGame.artworkURL = imageURL + context.saveWithErrorLogging() + + DispatchQueue.main.async { + self.presentedViewController?.dismiss(animated: true, completion: nil) + } + } + } + else + { + func presentAlertController() + { + let alertController = UIAlertController(title: NSLocalizedString("Unable to Change Artwork", comment: ""), message: NSLocalizedString("The image might be corrupted or in an unsupported format.", comment: ""), preferredStyle: .alert) + alertController.addAction(UIAlertAction(title: RSTSystemLocalizedString("OK"), style: .cancel, handler: nil)) + self.present(alertController, animated: true, completion: nil) + } + + if let presentedViewController = self.presentedViewController + { + presentedViewController.dismiss(animated: true) { + presentAlertController() + } + } + else + { + presentAlertController() + } + } + } + + func importControllerDidCancel(_ importController: ImportController) + { + self.presentedViewController?.dismiss(animated: true, completion: nil) + } +} + //MARK: - UICollectionViewDelegate - /// UICollectionViewDelegate extension GameCollectionViewController { override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - guard self.gameCollection.identifier != GameType.unknown.rawValue else { return } + guard self.gameCollection?.identifier != GameType.unknown.rawValue else { return } let cell = collectionView.cellForItem(at: indexPath) let game = self.dataSource.item(at: indexPath) @@ -542,12 +647,6 @@ extension GameCollectionViewController self.launchGame(withSender: cell, clearScreen: true) } } - - override func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) - { - let cell = cell as! GridCollectionViewCell - cell.imageView.sd_cancelCurrentImageLoad() - } } //MARK: - UICollectionViewDelegateFlowLayout - @@ -562,7 +661,7 @@ extension GameCollectionViewController: UICollectionViewDelegateFlowLayout widthConstraint.isActive = true defer { widthConstraint.isActive = false } - self.configure(self.prototypeCell, for: indexPath, ignoreImageOperations: true) + self.configure(self.prototypeCell, for: indexPath) let size = self.prototypeCell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) return size diff --git a/Delta/Game Selection/GamesViewController.swift b/Delta/Game Selection/GamesViewController.swift index ccdecb4..4a969cb 100644 --- a/Delta/Game Selection/GamesViewController.swift +++ b/Delta/Game Selection/GamesViewController.swift @@ -8,6 +8,7 @@ import UIKit import CoreData +import MobileCoreServices import DeltaCore @@ -34,11 +35,17 @@ class GamesViewController: UIViewController } } - fileprivate var pageViewController: UIPageViewController! - fileprivate var placeholderView: RSTPlaceholderView! - fileprivate var pageControl: UIPageControl! + override var preferredStatusBarStyle: UIStatusBarStyle { + return .lightContent + } - fileprivate let fetchedResultsController: NSFetchedResultsController + private var pageViewController: UIPageViewController! + private var placeholderView: RSTPlaceholderView! + private var pageControl: UIPageControl! + + private let fetchedResultsController: NSFetchedResultsController + + private var searchController: RSTSearchController? override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { fatalError("initWithNibName: not implemented") @@ -87,6 +94,11 @@ extension GamesViewController self.navigationController?.navigationBar.barStyle = .blackTranslucent self.navigationController?.toolbar.barStyle = .blackTranslucent + if #available(iOS 11.0, *) + { + self.prepareSearchController() + } + self.updateTheme() } @@ -108,11 +120,15 @@ extension GamesViewController { super.viewDidLayoutSubviews() - if let viewControllers = self.pageViewController.viewControllers as? [GameCollectionViewController] + if #available(iOS 11.0, *) {} + else { - for viewController in viewControllers + if let viewControllers = self.pageViewController.viewControllers as? [GameCollectionViewController] { - viewController.collectionView?.contentInset.top = self.topLayoutGuide.length + for viewController in viewControllers + { + viewController.collectionView?.contentInset.top = self.topLayoutGuide.length + } } } } @@ -148,6 +164,48 @@ extension GamesViewController /// UI private extension GamesViewController { + @available(iOS 11.0, *) + func prepareSearchController() + { + let searchResultsController = self.storyboard?.instantiateViewController(withIdentifier: "gameCollectionViewController") as! GameCollectionViewController + searchResultsController.gameCollection = nil + searchResultsController.theme = self.theme + searchResultsController.activeEmulatorCore = self.activeEmulatorCore + + let placeholderView = RSTPlaceholderView() + placeholderView.textLabel.text = NSLocalizedString("No Games Found", comment: "") + placeholderView.detailTextLabel.text = NSLocalizedString("Please make sure the name is correct, or try searching for another game.", comment: "") + + switch self.theme + { + case .opaque: searchResultsController.dataSource.placeholderView = placeholderView + case .translucent: + let vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .dark))) + vibrancyView.contentView.addSubview(placeholderView, pinningEdgesWith: .zero) + searchResultsController.dataSource.placeholderView = vibrancyView + } + + self.searchController = RSTSearchController(searchResultsController: searchResultsController) + self.searchController?.searchableKeyPaths = [#keyPath(Game.name)] + self.searchController?.searchHandler = { [weak searchController, weak searchResultsController] (searchValue, _) in + if searchController?.searchBar.text?.isEmpty == false + { + self.pageViewController.view.isHidden = true + } + else + { + self.pageViewController.view.isHidden = false + } + + searchResultsController?.dataSource.predicate = searchValue.predicate + return nil + } + self.navigationItem.searchController = self.searchController + self.navigationItem.hidesSearchBarWhenScrolling = false + + self.definesPresentationContext = true + } + func updateTheme() { switch self.theme @@ -185,12 +243,16 @@ private extension GamesViewController let indexPath = IndexPath(row: safeIndex, section: 0) let viewController = self.storyboard?.instantiateViewController(withIdentifier: "gameCollectionViewController") as! GameCollectionViewController - viewController.gameCollection = self.fetchedResultsController.object(at: indexPath) as! GameCollection + viewController.gameCollection = self.fetchedResultsController.object(at: indexPath) as? GameCollection viewController.theme = self.theme viewController.activeEmulatorCore = self.activeEmulatorCore - // Need to set content inset here AND willTransitionTo callback to ensure its correct for all edge cases - viewController.collectionView?.contentInset.top = self.topLayoutGuide.length + if #available(iOS 11.0, *) {} + else + { + // Need to set content inset here AND willTransitionTo callback to ensure its correct for all edge cases + viewController.collectionView?.contentInset.top = self.topLayoutGuide.length + } return viewController } @@ -264,39 +326,57 @@ private extension GamesViewController /// Importing extension GamesViewController: ImportControllerDelegate { - @IBAction fileprivate func importFiles() + @IBAction private func importFiles() { - let importController = ImportController() + var documentTypes = Set(System.supportedSystems.map { $0.gameType.rawValue }) + documentTypes.insert(kUTTypeZipArchive as String) + + // Add GBA4iOS's exported UTIs in case user has GBA4iOS installed (which may override Delta's UTI declarations) + documentTypes.insert("com.rileytestut.gba") + documentTypes.insert("com.rileytestut.gbc") + documentTypes.insert("com.rileytestut.gb") + + let itunesImportOption = iTunesImportOption(presentingViewController: self) + + let importController = ImportController(documentTypes: documentTypes) importController.delegate = self + importController.importOptions = [itunesImportOption] self.present(importController, animated: true, completion: nil) } - //MARK: - ImportControllerDelegate - @nonobjc func importController(_ importController: ImportController, didImport games: Set, with errors: Set) + func importController(_ importController: ImportController, didImportItemsAt urls: Set, errors: [Error]) { - if errors.count > 0 + for error in errors { - let alertController = UIAlertController.alertController(for: .games, with: errors) - self.present(alertController, animated: true, completion: nil) + print(error) } - if games.count > 0 - { - print("Imported Games:", games.map { $0.name }) - } - } - - @nonobjc func importController(_ importController: ImportController, didImport controllerSkins: Set, with errors: Set) - { - if errors.count > 0 - { - let alertController = UIAlertController.alertController(for: .controllerSkins, with: errors) - self.present(alertController, animated: true, completion: nil) + let gameURLs = urls.filter { $0.pathExtension.lowercased() != "deltaskin" } + DatabaseManager.shared.importGames(at: Set(gameURLs)) { (games, errors) in + if errors.count > 0 + { + let alertController = UIAlertController.alertController(for: .games, with: errors) + self.present(alertController, animated: true, completion: nil) + } + + if games.count > 0 + { + print("Imported Games:", games.map { $0.name }) + } } - if controllerSkins.count > 0 - { - print("Imported Controller Skins:", controllerSkins.map { $0.name }) + let controllerSkinURLs = urls.filter { $0.pathExtension.lowercased() == "deltaskin" } + DatabaseManager.shared.importControllerSkins(at: Set(controllerSkinURLs)) { (controllerSkins, errors) in + if errors.count > 0 + { + let alertController = UIAlertController.alertController(for: .controllerSkins, with: errors) + self.present(alertController, animated: true, completion: nil) + } + + if controllerSkins.count > 0 + { + print("Imported Controller Skins:", controllerSkins.map { $0.name }) + } } } } @@ -347,9 +427,13 @@ extension GamesViewController: UIPageViewControllerDataSource, UIPageViewControl { guard let viewControllers = pendingViewControllers as? [GameCollectionViewController] else { return } - for viewController in viewControllers + if #available(iOS 11.0, *) {} + else { - viewController.collectionView?.contentInset.top = self.topLayoutGuide.length + for viewController in viewControllers + { + viewController.collectionView?.contentInset.top = self.topLayoutGuide.length + } } } @@ -371,6 +455,21 @@ extension GamesViewController: UIPageViewControllerDataSource, UIPageViewControl } } +extension GamesViewController: UISearchResultsUpdating +{ + func updateSearchResults(for searchController: UISearchController) + { + if searchController.searchBar.text?.isEmpty == false + { + self.pageViewController.view.isHidden = true + } + else + { + self.pageViewController.view.isHidden = false + } + } +} + //MARK: - NSFetchedResultsControllerDelegate - /// NSFetchedResultsControllerDelegate extension GamesViewController: NSFetchedResultsControllerDelegate diff --git a/Delta/Game Selection/Segues/GamesPresentationController.swift b/Delta/Game Selection/Segues/GamesPresentationController.swift index 9167fde..3f4de91 100644 --- a/Delta/Game Selection/Segues/GamesPresentationController.swift +++ b/Delta/Game Selection/Segues/GamesPresentationController.swift @@ -12,8 +12,12 @@ class GamesPresentationController: UIPresentationController { private let blurView: UIVisualEffectView - override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) + private let animator: UIViewPropertyAnimator + + init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?, animator: UIViewPropertyAnimator) { + self.animator = animator + self.blurView = UIVisualEffectView(effect: nil) self.blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight] @@ -26,17 +30,17 @@ class GamesPresentationController: UIPresentationController self.blurView.frame = CGRect(x: 0, y: 0, width: containerView.bounds.width, height: containerView.bounds.height) containerView.addSubview(self.blurView) - - self.presentedViewController.transitionCoordinator?.animate(alongsideTransition: { (context) in + + self.animator.addAnimations { self.blurView.effect = UIBlurEffect(style: .dark) - }) + } } override func dismissalTransitionWillBegin() { - self.presentedViewController.transitionCoordinator?.animate(alongsideTransition: { (context) in + self.animator.addAnimations { self.blurView.effect = nil - }) + } } override func dismissalTransitionDidEnd(_ completed: Bool) diff --git a/Delta/Game Selection/Segues/GamesStoryboardSegue.swift b/Delta/Game Selection/Segues/GamesStoryboardSegue.swift index 8730a01..f71a281 100644 --- a/Delta/Game Selection/Segues/GamesStoryboardSegue.swift +++ b/Delta/Game Selection/Segues/GamesStoryboardSegue.swift @@ -10,9 +10,9 @@ import UIKit class GamesStoryboardSegue: UIStoryboardSegue { - fileprivate let animator: UIViewPropertyAnimator + private let animator: UIViewPropertyAnimator - fileprivate var isPresenting: Bool = true + private var isPresenting: Bool = true override init(identifier: String?, source: UIViewController, destination: UIViewController) { @@ -48,7 +48,7 @@ extension GamesStoryboardSegue: UIViewControllerTransitioningDelegate func presentationController(forPresented presentedViewController: UIViewController, presenting presentingViewController: UIViewController?, source: UIViewController) -> UIPresentationController? { - let presentationController = GamesPresentationController(presentedViewController: presentedViewController, presenting: presentingViewController) + let presentationController = GamesPresentationController(presentedViewController: presentedViewController, presenting: presentingViewController, animator: self.animator) return presentationController } } @@ -85,48 +85,51 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning snapshotView.alpha = 1.0 transitionContext.containerView.addSubview(snapshotView) - // Ensures navigation controller toolbar (if visible) has been added to view heirachy, allowing us to add constraints - transitionContext.containerView.layoutIfNeeded() - // We add extra padding around the existing navigation bar and toolbar so they never appear to be detached from the edges of the screen during the overshooting of the spring animation var topPaddingToolbar: UIToolbar? = nil var bottomPaddingToolbar: UIToolbar? = nil - if let navigationController = transitionContext.destinationViewController as? UINavigationController - { - let padding: CGFloat = 44 + // Must be wrapped in no-animation block to prevent iOS 11 search bar from not appearing. + UIView.performWithoutAnimation { + // Ensures navigation controller toolbar (if visible) has been added to view heirachy, allowing us to add constraints + transitionContext.containerView.layoutIfNeeded() - if !navigationController.isNavigationBarHidden + if let navigationController = transitionContext.destinationViewController as? UINavigationController { - let topToolbar = UIToolbar(frame: CGRect.zero) - topToolbar.translatesAutoresizingMaskIntoConstraints = false - topToolbar.barStyle = navigationController.toolbar.barStyle - transitionContext.destinationView.insertSubview(topToolbar, belowSubview: navigationController.navigationBar) + let padding: CGFloat = 44 - topToolbar.bottomAnchor.constraint(equalTo: navigationController.navigationBar.bottomAnchor).isActive = true - topToolbar.centerXAnchor.constraint(equalTo: navigationController.navigationBar.centerXAnchor).isActive = true - topToolbar.widthAnchor.constraint(equalTo: navigationController.navigationBar.widthAnchor, constant: padding * 2).isActive = true - topToolbar.heightAnchor.constraint(equalTo: navigationController.navigationBar.heightAnchor, constant: padding).isActive = true + if !navigationController.isNavigationBarHidden + { + let topToolbar = UIToolbar(frame: CGRect.zero) + topToolbar.translatesAutoresizingMaskIntoConstraints = false + topToolbar.barStyle = navigationController.toolbar.barStyle + transitionContext.destinationView.insertSubview(topToolbar, at: 1) + + topToolbar.topAnchor.constraint(equalTo: navigationController.navigationBar.topAnchor, constant: -padding).isActive = true + topToolbar.bottomAnchor.constraint(equalTo: navigationController.topViewController!.topLayoutGuide.bottomAnchor).isActive = true + topToolbar.leftAnchor.constraint(equalTo: navigationController.navigationBar.leftAnchor, constant: -padding).isActive = true + topToolbar.rightAnchor.constraint(equalTo: navigationController.navigationBar.rightAnchor, constant: padding).isActive = true + + topPaddingToolbar = topToolbar + } - topPaddingToolbar = topToolbar - } - - if !navigationController.isToolbarHidden - { - let bottomToolbar = UIToolbar(frame: CGRect.zero) - bottomToolbar.translatesAutoresizingMaskIntoConstraints = false - bottomToolbar.barStyle = navigationController.toolbar.barStyle - transitionContext.destinationView.insertSubview(bottomToolbar, belowSubview: navigationController.navigationBar) - - bottomToolbar.topAnchor.constraint(equalTo: navigationController.toolbar.topAnchor).isActive = true - bottomToolbar.centerXAnchor.constraint(equalTo: navigationController.toolbar.centerXAnchor).isActive = true - bottomToolbar.widthAnchor.constraint(equalTo: navigationController.toolbar.widthAnchor, constant: padding * 2).isActive = true - bottomToolbar.heightAnchor.constraint(equalTo: navigationController.toolbar.heightAnchor, constant: padding).isActive = true - - bottomPaddingToolbar = bottomToolbar + if !navigationController.isToolbarHidden + { + let bottomToolbar = UIToolbar(frame: CGRect.zero) + bottomToolbar.translatesAutoresizingMaskIntoConstraints = false + bottomToolbar.barStyle = navigationController.toolbar.barStyle + transitionContext.destinationView.insertSubview(bottomToolbar, belowSubview: navigationController.navigationBar) + + bottomToolbar.topAnchor.constraint(equalTo: navigationController.toolbar.topAnchor).isActive = true + bottomToolbar.bottomAnchor.constraint(equalTo: navigationController.toolbar.bottomAnchor, constant: padding).isActive = true + bottomToolbar.leftAnchor.constraint(equalTo: navigationController.toolbar.leftAnchor, constant: -padding).isActive = true + bottomToolbar.rightAnchor.constraint(equalTo: navigationController.toolbar.rightAnchor, constant: padding).isActive = true + + bottomPaddingToolbar = bottomToolbar + } } } - + self.animator.addAnimations { snapshotView.alpha = 0.0 transitionContext.destinationView.transform = CGAffineTransform.identity @@ -163,3 +166,4 @@ extension GamesStoryboardSegue: UIViewControllerAnimatedTransitioning self.animator.startAnimation() } } + diff --git a/Delta/Game Selection/Segues/InitialGamesStoryboardSegue.swift b/Delta/Game Selection/Segues/InitialGamesStoryboardSegue.swift index 5183340..b0da5e4 100644 --- a/Delta/Game Selection/Segues/InitialGamesStoryboardSegue.swift +++ b/Delta/Game Selection/Segues/InitialGamesStoryboardSegue.swift @@ -10,9 +10,9 @@ import UIKit class InitialGamesStoryboardSegue: UIStoryboardSegue { - fileprivate let animator: UIViewPropertyAnimator + private let animator: UIViewPropertyAnimator - fileprivate var isPresenting: Bool = true + private var isPresenting: Bool = true override init(identifier: String?, source: UIViewController, destination: UIViewController) { diff --git a/Delta/Importing/Import Options/ClipboardImportOption.swift b/Delta/Importing/Import Options/ClipboardImportOption.swift new file mode 100644 index 0000000..6bbfb27 --- /dev/null +++ b/Delta/Importing/Import Options/ClipboardImportOption.swift @@ -0,0 +1,39 @@ +// +// ClipboardImportOption.swift +// Delta +// +// Created by Riley Testut on 5/1/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit +import MobileCoreServices + +import Roxas + +struct ClipboardImportOption: ImportOption +{ + let title = NSLocalizedString("Clipboard", comment: "") + let image: UIImage? = nil + + func `import`(withCompletionHandler completionHandler: @escaping (Set?) -> Void) + { + guard UIPasteboard.general.hasImages else { return completionHandler([]) } + + guard let data = UIPasteboard.general.data(forPasteboardType: kUTTypeImage as String) else { return completionHandler([]) } + + do + { + let temporaryURL = FileManager.default.uniqueTemporaryURL() + try data.write(to: temporaryURL, options: .atomic) + + completionHandler([temporaryURL]) + } + catch + { + print(error) + + completionHandler([]) + } + } +} diff --git a/Delta/Importing/Import Options/GamesDatabaseImportOption.swift b/Delta/Importing/Import Options/GamesDatabaseImportOption.swift new file mode 100644 index 0000000..b82a460 --- /dev/null +++ b/Delta/Importing/Import Options/GamesDatabaseImportOption.swift @@ -0,0 +1,42 @@ +// +// GamesDatabaseImportOption.swift +// Delta +// +// Created by Riley Testut on 5/1/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +struct GamesDatabaseImportOption: ImportOption +{ + let title = NSLocalizedString("Games Database", comment: "") + let image: UIImage? = nil + + private let presentingViewController: UIViewController + + init(presentingViewController: UIViewController) + { + self.presentingViewController = presentingViewController + } + + func `import`(withCompletionHandler completionHandler: @escaping (Set?) -> Void) + { + let storyboard = UIStoryboard(name: "GamesDatabase", bundle: nil) + let navigationController = (storyboard.instantiateInitialViewController() as! UINavigationController) + + let gamesDatabaseBrowserViewController = navigationController.topViewController as! GamesDatabaseBrowserViewController + gamesDatabaseBrowserViewController.selectionHandler = { (metadata) in + if let artworkURL = metadata.artworkURL + { + completionHandler([artworkURL]) + } + else + { + completionHandler(nil) + } + } + + self.presentingViewController.present(navigationController, animated: true, completion: nil) + } +} diff --git a/Delta/Importing/Import Options/PhotoLibraryImportOption.swift b/Delta/Importing/Import Options/PhotoLibraryImportOption.swift new file mode 100644 index 0000000..4d5d558 --- /dev/null +++ b/Delta/Importing/Import Options/PhotoLibraryImportOption.swift @@ -0,0 +1,61 @@ +// +// PhotoLibraryImportOption.swift +// Delta +// +// Created by Riley Testut on 5/2/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit +import MobileCoreServices + +class PhotoLibraryImportOption: NSObject, ImportOption +{ + let title = NSLocalizedString("Photo Library", comment: "") + let image: UIImage? = nil + + private let presentingViewController: UIViewController + private var completionHandler: ((Set?) -> Void)? + + init(presentingViewController: UIViewController) + { + self.presentingViewController = presentingViewController + + super.init() + } + + func `import`(withCompletionHandler completionHandler: @escaping (Set?) -> Void) + { + self.completionHandler = completionHandler + + let imagePickerController = UIImagePickerController() + imagePickerController.delegate = self + imagePickerController.sourceType = .photoLibrary + imagePickerController.mediaTypes = [kUTTypeImage as String] + imagePickerController.view.backgroundColor = .white + self.presentingViewController.present(imagePickerController, animated: true, completion: nil) + } +} + +extension PhotoLibraryImportOption: UIImagePickerControllerDelegate, UINavigationControllerDelegate +{ + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) + { + guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage, let data = UIImageJPEGRepresentation(image, 0.85) else { + self.completionHandler?([]) + return + } + + do + { + let temporaryURL = FileManager.default.uniqueTemporaryURL() + try data.write(to: temporaryURL, options: .atomic) + + self.completionHandler?([temporaryURL]) + } + catch + { + self.completionHandler?([]) + } + } +} diff --git a/Delta/Importing/Import Options/iTunesImportOption.swift b/Delta/Importing/Import Options/iTunesImportOption.swift new file mode 100644 index 0000000..9949a4b --- /dev/null +++ b/Delta/Importing/Import Options/iTunesImportOption.swift @@ -0,0 +1,73 @@ +// +// iTunesImportOption.swift +// Delta +// +// Created by Riley Testut on 5/1/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +import DeltaCore + +struct iTunesImportOption: ImportOption +{ + let title = NSLocalizedString("iTunes", comment: "") + let image: UIImage? = nil + + private let presentingViewController: UIViewController + + init(presentingViewController: UIViewController) + { + self.presentingViewController = presentingViewController + } + + func `import`(withCompletionHandler completionHandler: @escaping (Set?) -> Void) + { + let alertController = UIAlertController(title: NSLocalizedString("Import from iTunes?", comment: ""), message: NSLocalizedString("Delta will import the games and controller skins copied over via iTunes.", comment: ""), preferredStyle: .alert) + + let importAction = UIAlertAction(title: NSLocalizedString("Import", comment: ""), style: .default) { action in + + var importedURLs = Set() + + let documentsDirectoryURL = DatabaseManager.defaultDirectoryURL().deletingLastPathComponent() + + do + { + let contents = try FileManager.default.contentsOfDirectory(at: documentsDirectoryURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles) + + let itemURLs = contents.filter { GameType(fileExtension: $0.pathExtension) != nil || $0.pathExtension.lowercased() == "zip" || $0.pathExtension.lowercased() == "deltaskin" } + + for url in itemURLs + { + let destinationURL = FileManager.default.uniqueTemporaryURL().appendingPathExtension(url.pathExtension) + + do + { + try FileManager.default.moveItem(at: url, to: destinationURL) + importedURLs.insert(destinationURL) + } + catch + { + print("Error importing file at URL", url, error) + } + } + + } + catch + { + print(error) + } + + completionHandler(importedURLs) + } + alertController.addAction(importAction) + + let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel) { action in + completionHandler(nil) + } + alertController.addAction(cancelAction) + + self.presentingViewController.present(alertController, animated: true, completion: nil) + } +} diff --git a/Delta/Importing/ImportController.swift b/Delta/Importing/ImportController.swift new file mode 100644 index 0000000..a394054 --- /dev/null +++ b/Delta/Importing/ImportController.swift @@ -0,0 +1,250 @@ +// +// ImportController.swift +// Delta +// +// Created by Riley Testut on 10/10/15. +// Copyright © 2015 Riley Testut. All rights reserved. +// + +import UIKit +import MobileCoreServices +import ObjectiveC + +import DeltaCore + +import Roxas + +protocol ImportControllerDelegate +{ + func importController(_ importController: ImportController, didImportItemsAt urls: Set, errors: [Error]) + + /** Optional **/ + func importControllerDidCancel(_ importController: ImportController) +} + +extension ImportControllerDelegate +{ + func importControllerDidCancel(_ importController: ImportController) + { + // Empty Implementation + } +} + +class ImportController: NSObject +{ + let documentTypes: Set + + var delegate: ImportControllerDelegate? + var importOptions: [ImportOption]? + + private weak var presentingViewController: UIViewController? + + // Store presentedViewController separately, since when we dismiss we don't know if it has already been dismissed. + // Calling dismiss on presentingViewController in that case would dismiss presentingViewController, which is bad. + private weak var presentedViewController: UIViewController? + + private let importQueue: OperationQueue + private let fileCoordinator: NSFileCoordinator + + init(documentTypes: Set) + { + self.documentTypes = documentTypes + + let dispatchQueue = DispatchQueue(label: "com.rileytestut.Delta.ImportController.dispatchQueue", qos: .userInitiated, attributes: .concurrent) + + self.importQueue = OperationQueue() + self.importQueue.name = "com.rileytestut.Delta.ImportController.importQueue" + self.importQueue.underlyingQueue = dispatchQueue + + self.fileCoordinator = NSFileCoordinator(filePresenter: nil) + + super.init() + } + + fileprivate func presentImportController(from presentingViewController: UIViewController, animated: Bool, completionHandler: (() -> Void)?) + { + self.presentingViewController = presentingViewController + + #if IMPACTOR + + let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) + alertController.addAction(UIAlertAction.cancel) + + if let importOptions = self.importOptions + { + for importOption in importOptions + { + alertController.add(importOption) { [unowned self] (urls) in + self.finish(with: urls, errors: []) + } + } + } + + self.presentedViewController = alertController + self.presentingViewController?.present(alertController, animated: true, completion: nil) + + #else + + let documentMenuController = UIDocumentMenuViewController(documentTypes: Array(self.documentTypes), in: .import) + documentMenuController.delegate = self + + if let reversedImportOptions = self.importOptions?.reversed() + { + for importOption in reversedImportOptions + { + documentMenuController.add(importOption, order: .first) { [unowned self] (urls) in + self.finish(with: urls, errors: []) + } + } + } + + self.presentedViewController = documentMenuController + self.presentingViewController?.present(documentMenuController, animated: true, completion: nil) + + #endif + } + + @objc private func cancel() + { + self.finish(with: nil, errors: []) + } + + private func finish(with urls: Set?, errors: [Error]) + { + if let urls = urls + { + self.delegate?.importController(self, didImportItemsAt: urls, errors: errors) + } + else + { + self.delegate?.importControllerDidCancel(self) + } + + self.presentedViewController?.dismiss(animated: true) + + self.presentingViewController?.importController = nil + } +} + + +extension ImportController: UIDocumentMenuDelegate +{ + func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) + { + if #available(iOS 11.0, *) + { + let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(ImportController.cancel)) + + let documentBrowserViewController = UIDocumentBrowserViewController(forOpeningFilesWithContentTypes: Array(self.documentTypes)) + documentBrowserViewController.delegate = self + documentBrowserViewController.browserUserInterfaceStyle = .dark + documentBrowserViewController.allowsPickingMultipleItems = true + documentBrowserViewController.allowsDocumentCreation = false + documentBrowserViewController.additionalTrailingNavigationBarButtonItems = [cancelButton] + + self.presentedViewController = documentBrowserViewController + self.presentingViewController?.present(documentBrowserViewController, animated: true, completion: nil) + } + else + { + documentPicker.delegate = self + + self.presentedViewController = documentPicker + self.presentingViewController?.present(documentPicker, animated: true, completion: nil) + } + } + + func documentMenuWasCancelled(_ documentMenu: UIDocumentMenuViewController) + { + self.finish(with: nil, errors: []) + } +} + +extension ImportController: UIDocumentPickerDelegate +{ + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) + { + self.finish(with: [url], errors: []) + } + + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) + { + self.finish(with: Set(urls), errors: []) + } + + func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) + { + self.finish(with: nil, errors: []) + } +} + +@available(iOS 11.0, *) +extension ImportController: UIDocumentBrowserViewControllerDelegate +{ + func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL]) + { + var coordinatedURLs = Set() + var errors = [Error]() + + let dispatchGroup = DispatchGroup() + + for url in documentURLs + { + dispatchGroup.enter() + + let intent = NSFileAccessIntent.readingIntent(with: url) + self.fileCoordinator.coordinate(with: [intent], queue: self.importQueue) { (error) in + if let error = error + { + errors.append(error) + } + else + { + let temporaryURL = FileManager.default.temporaryDirectory.appendingPathComponent(url.lastPathComponent) + + do + { + // Always access intent.url, as the system may have updated it when requesting access. + try FileManager.default.copyItem(at: intent.url, to: temporaryURL) + + coordinatedURLs.insert(temporaryURL) + } + catch + { + errors.append(error) + } + } + + dispatchGroup.leave() + } + } + + dispatchGroup.notify(queue: self.importQueue.underlyingQueue!) { + self.finish(with: coordinatedURLs, errors: errors) + } + } +} + +private var ImportControllerKey: UInt8 = 0 + +extension UIViewController +{ + fileprivate(set) var importController: ImportController? + { + set + { + objc_setAssociatedObject(self, &ImportControllerKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + get + { + return objc_getAssociatedObject(self, &ImportControllerKey) as? ImportController + } + } + + func present(_ importController: ImportController, animated: Bool, completion: (() -> Void)?) + { + self.importController = importController + + importController.presentImportController(from: self, animated: animated, completionHandler: completion) + } +} diff --git a/Delta/Importing/ImportOption.swift b/Delta/Importing/ImportOption.swift new file mode 100644 index 0000000..0f6dfda --- /dev/null +++ b/Delta/Importing/ImportOption.swift @@ -0,0 +1,40 @@ +// +// ImportOption.swift +// Delta +// +// Created by Riley Testut on 5/1/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit + +import DeltaCore + +extension UIDocumentMenuViewController +{ + func add(_ importOption: ImportOption, order: UIDocumentMenuOrder, completionHandler: @escaping (Set?) -> Void) + { + self.addOption(withTitle: importOption.title, image: importOption.image, order: order) { + importOption.import(withCompletionHandler: completionHandler) + } + } +} + +extension UIAlertController +{ + func add(_ importOption: ImportOption, completionHandler: @escaping (Set?) -> Void) + { + let action = UIAlertAction(title: importOption.title, style: .default, handler: { action in + importOption.import(withCompletionHandler: completionHandler) + }) + self.addAction(action) + } +} + +protocol ImportOption +{ + var title: String { get } + var image: UIImage? { get } + + func `import`(withCompletionHandler completionHandler: @escaping (Set?) -> Void) +} diff --git a/Delta/Launch/LaunchViewController.swift b/Delta/Launch/LaunchViewController.swift index 9f5d7ba..c2d0be5 100644 --- a/Delta/Launch/LaunchViewController.swift +++ b/Delta/Launch/LaunchViewController.swift @@ -10,10 +10,10 @@ import UIKit class LaunchViewController: UIViewController { - @IBOutlet fileprivate var gameViewContainerView: UIView! - fileprivate var gameViewController: GameViewController! + @IBOutlet private var gameViewContainerView: UIView! + private var gameViewController: GameViewController! - fileprivate var presentedGameViewController: Bool = false + private var presentedGameViewController: Bool = false override var preferredStatusBarStyle: UIStatusBarStyle { return self.gameViewController?.preferredStatusBarStyle ?? .lightContent diff --git a/Delta/Pause Menu/Cheats/CheatTextView.swift b/Delta/Pause Menu/Cheats/CheatTextView.swift index 316bcc5..cafcb6c 100644 --- a/Delta/Pause Menu/Cheats/CheatTextView.swift +++ b/Delta/Pause Menu/Cheats/CheatTextView.swift @@ -13,7 +13,10 @@ import DeltaCore import Roxas -private let CheatPrefixAttribute = "prefix" +private extension NSAttributedStringKey +{ + static let cheatPrefix = NSAttributedStringKey("CheatPrefix") +} class CheatTextView: UITextView { @@ -23,7 +26,7 @@ class CheatTextView: UITextView } } - @NSCopying fileprivate var attributedFormat: NSAttributedString? + @NSCopying private var attributedFormat: NSAttributedString? required init?(coder aDecoder: NSCoder) { @@ -44,9 +47,9 @@ extension CheatTextView if let format = self.cheatFormat, let font = self.font { - let characterWidth = ("A" as NSString).size(attributes: [NSFontAttributeName: font]).width + let characterWidth = ("A" as NSString).size(withAttributes: [.font: font]).width - let width = characterWidth * CGFloat(format.format.characters.count) + let width = characterWidth * CGFloat(format.format.count) self.textContainer.size = CGSize(width: width, height: 0) } } @@ -79,7 +82,7 @@ private extension CheatTextView if let prefixString = prefixString, prefixString.length > 0 { - attributedString.addAttribute(CheatPrefixAttribute, value: prefixString, range: NSRange(location: 0, length: 1)) + attributedString.addAttribute(.cheatPrefix, value: prefixString, range: NSRange(location: 0, length: 1)) } attributedFormat.append(attributedString) @@ -105,7 +108,7 @@ private extension CheatTextView extension CheatTextView: NSLayoutManagerDelegate { - func layoutManager(_ layoutManager: NSLayoutManager, shouldGenerateGlyphs glyphs: UnsafePointer, properties props: UnsafePointer, characterIndexes charIndexes: UnsafePointer, font aFont: UIFont, forGlyphRange glyphRange: NSRange) -> Int + func layoutManager(_ layoutManager: NSLayoutManager, shouldGenerateGlyphs glyphs: UnsafePointer, properties props: UnsafePointer, characterIndexes charIndexes: UnsafePointer, font aFont: UIFont, forGlyphRange glyphRange: NSRange) -> Int { // Returning 0 = let the layoutManager do the normal logic guard let attributedFormat = self.attributedFormat else { return 0 } @@ -118,7 +121,7 @@ extension CheatTextView: NSLayoutManagerDelegate // Allocate our replacement buffers let glyphBuffer = UnsafeMutablePointer.allocate(capacity: bufferSize) - let propertyBuffer = UnsafeMutablePointer.allocate(capacity: bufferSize) + let propertyBuffer = UnsafeMutablePointer.allocate(capacity: bufferSize) let characterBuffer = UnsafeMutablePointer.allocate(capacity: bufferSize) var offset = 0 @@ -128,10 +131,10 @@ extension CheatTextView: NSLayoutManagerDelegate // The index the actual character maps to in the cheat format let characterIndex = charIndexes[i] % attributedFormat.length - if let prefix = attributedFormat.attributes(at: characterIndex, effectiveRange: nil)[CheatPrefixAttribute] as? String + if let prefix = attributedFormat.attributes(at: characterIndex, effectiveRange: nil)[.cheatPrefix] as? String { // If there is a prefix string, we insert the glyphs (and associated properties/character indexes) first - let prefixCount = prefix.characters.count + let prefixCount = prefix.count for j in 0 ..< prefixCount { diff --git a/Delta/Pause Menu/Cheats/CheatValidator.swift b/Delta/Pause Menu/Cheats/CheatValidator.swift index 19d8440..6c38128 100644 --- a/Delta/Pause Menu/Cheats/CheatValidator.swift +++ b/Delta/Pause Menu/Cheats/CheatValidator.swift @@ -51,7 +51,7 @@ struct CheatValidator // Remove newline characters (code should already be formatted) let sanitizedCode = (cheat.code as NSString).replacingOccurrences(of: "\n", with: "") - if sanitizedCode.characters.count % self.format.format.characters.count != 0 + if sanitizedCode.count % self.format.format.count != 0 { throw Error.invalidCode } diff --git a/Delta/Pause Menu/Cheats/CheatsViewController.swift b/Delta/Pause Menu/Cheats/CheatsViewController.swift index c42fea4..db9cf70 100644 --- a/Delta/Pause Menu/Cheats/CheatsViewController.swift +++ b/Delta/Pause Menu/Cheats/CheatsViewController.swift @@ -29,7 +29,7 @@ class CheatsViewController: UITableViewController weak var delegate: CheatsViewControllerDelegate? - fileprivate let dataSource = RSTFetchedResultsTableViewDataSource(fetchedResultsController: NSFetchedResultsController()) + private let dataSource = RSTFetchedResultsTableViewDataSource(fetchedResultsController: NSFetchedResultsController()) } extension CheatsViewController diff --git a/Delta/Pause Menu/Cheats/EditCheatViewController.swift b/Delta/Pause Menu/Cheats/EditCheatViewController.swift index 8d9b4fb..e36d29e 100644 --- a/Delta/Pause Menu/Cheats/EditCheatViewController.swift +++ b/Delta/Pause Menu/Cheats/EditCheatViewController.swift @@ -33,7 +33,7 @@ class EditCheatViewController: UITableViewController var game: Game! { didSet { let deltaCore = Delta.core(for: self.game.type)! - self.supportedCheatFormats = deltaCore.emulatorConfiguration.supportedCheatFormats + self.supportedCheatFormats = deltaCore.supportedCheatFormats.sorted() { $0.name < $1.name } } } @@ -43,19 +43,19 @@ class EditCheatViewController: UITableViewController var isPreviewing = false - fileprivate var supportedCheatFormats: [CheatFormat]! + private var supportedCheatFormats: [CheatFormat]! - fileprivate var selectedCheatFormat: CheatFormat { + private var selectedCheatFormat: CheatFormat { let cheatFormat = self.supportedCheatFormats[self.typeSegmentedControl.selectedSegmentIndex] return cheatFormat } - fileprivate var mutableCheat: Cheat! - fileprivate var managedObjectContext = DatabaseManager.shared.newBackgroundContext() + private var mutableCheat: Cheat! + private var managedObjectContext = DatabaseManager.shared.newBackgroundContext() - @IBOutlet fileprivate var nameTextField: UITextField! - @IBOutlet fileprivate var typeSegmentedControl: UISegmentedControl! - @IBOutlet fileprivate var codeTextView: CheatTextView! + @IBOutlet private var nameTextField: UITextField! + @IBOutlet private var typeSegmentedControl: UISegmentedControl! + @IBOutlet private var codeTextView: CheatTextView! override var previewActionItems: [UIPreviewActionItem] { @@ -132,7 +132,7 @@ extension EditCheatViewController // Update UI - if name.characters.count == 0 + if name.count == 0 { self.title = NSLocalizedString("Cheat", comment: "") } @@ -224,7 +224,7 @@ private extension EditCheatViewController @IBAction func updateCheatName(_ sender: UITextField) { var title = sender.text ?? "" - if title.characters.count == 0 + if title.count == 0 { title = NSLocalizedString("Cheat", comment: "") } @@ -325,7 +325,7 @@ private extension EditCheatViewController sender.resignFirstResponder() } - func presentErrorAlert(title: String, message: String, handler: ((Void) -> Void)?) + func presentErrorAlert(title: String, message: String, handler: (() -> Void)?) { DispatchQueue.main.async { let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) @@ -382,7 +382,9 @@ extension EditCheatViewController: UITextViewDelegate // We need to manually add back the attributes when manually modifying the underlying text storage // Otherwise, pasting text into an empty text view will result in the wrong font being used - let attributedString = NSAttributedString(string: sanitizedText, attributes: textView.typingAttributes) + let attributes = Dictionary(uniqueKeysWithValues: textView.typingAttributes.map { (key, value) in (NSAttributedStringKey(key), value) }) + + let attributedString = NSAttributedString(string: sanitizedText, attributes: attributes) textView.textStorage.replaceCharacters(in: range, with: attributedString) // We must add attributedString.length, not range.length, in case the attributed string's length differs diff --git a/Delta/Pause Menu/GridMenuViewController.swift b/Delta/Pause Menu/GridMenuViewController.swift new file mode 100644 index 0000000..a92fad3 --- /dev/null +++ b/Delta/Pause Menu/GridMenuViewController.swift @@ -0,0 +1,176 @@ +// +// GridMenuViewController.swift +// Delta +// +// Created by Riley Testut on 12/21/15. +// Copyright © 2015 Riley Testut. All rights reserved. +// + +import UIKit +import Roxas + +class GridMenuViewController: UICollectionViewController +{ + var items: [MenuItem] { + get { return self.dataSource.items } + set { self.dataSource.items = newValue; self.updateItems() } + } + + var isVibrancyEnabled = true + + override var preferredContentSize: CGSize { + set { } + get { return self.collectionView?.contentSize ?? CGSize.zero } + } + + private let dataSource = RSTArrayCollectionViewDataSource(items: []) + + private var prototypeCell = GridCollectionViewCell() + private var previousIndexPath: IndexPath? = nil + + private var registeredKVOObservers = Set() + + init() + { + let collectionViewLayout = GridCollectionViewLayout() + collectionViewLayout.itemSize = CGSize(width: 60, height: 80) + collectionViewLayout.minimumLineSpacing = 20 + collectionViewLayout.minimumInteritemSpacing = 10 + + super.init(collectionViewLayout: collectionViewLayout) + } + + required init?(coder aDecoder: NSCoder) + { + super.init(coder: aDecoder) + } + + deinit + { + // Crashes on iOS 10 if not explicitly invalidated. + self.registeredKVOObservers.forEach { $0.invalidate() } + } +} + +extension GridMenuViewController +{ + override func viewDidLoad() + { + super.viewDidLoad() + + self.collectionView?.register(GridCollectionViewCell.self, forCellWithReuseIdentifier: RSTCellContentGenericCellIdentifier) + + self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in + self.configure(cell as! GridCollectionViewCell, for: indexPath) + } + self.collectionView?.dataSource = self.dataSource + + let collectionViewLayout = self.collectionViewLayout as! GridCollectionViewLayout + collectionViewLayout.itemWidth = 90 + collectionViewLayout.usesEqualHorizontalSpacingDistributionForSingleRow = true + + // Manually update prototype cell properties + self.prototypeCell.contentView.widthAnchor.constraint(equalToConstant: collectionViewLayout.itemWidth).isActive = true + } + + override func viewDidAppear(_ animated: Bool) + { + super.viewDidAppear(animated) + + if let indexPath = self.previousIndexPath + { + UIView.animate(withDuration: 0.2) { + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected + } + } + } +} + +private extension GridMenuViewController +{ + func configure(_ cell: GridCollectionViewCell, for indexPath: IndexPath) + { + let pauseItem = self.items[indexPath.item] + + cell.maximumImageSize = CGSize(width: 60, height: 60) + + cell.imageView.image = pauseItem.image + cell.imageView.contentMode = .center + cell.imageView.layer.borderWidth = 2 + cell.imageView.layer.borderColor = self.view.tintColor.cgColor + cell.imageView.layer.cornerRadius = 10 + + cell.textLabel.text = pauseItem.text + cell.textLabel.textColor = self.view.tintColor + + if pauseItem.isSelected + { + cell.imageView.tintColor = UIColor.black + cell.imageView.backgroundColor = self.view.tintColor + } + else + { + cell.imageView.tintColor = self.view.tintColor + cell.imageView.backgroundColor = UIColor.clear + } + + cell.isImageViewVibrancyEnabled = self.isVibrancyEnabled + cell.isTextLabelVibrancyEnabled = self.isVibrancyEnabled + } + + func updateItems() + { + self.registeredKVOObservers.removeAll() + + for (index, item) in self.items.enumerated() + { + let observer = item.observe(\.isSelected, changeHandler: { [unowned self] (item, change) in + let indexPath = IndexPath(item: index, section: 0) + + if let cell = self.collectionView?.cellForItem(at: indexPath) as? GridCollectionViewCell + { + self.configure(cell, for: indexPath) + } + }) + + self.registeredKVOObservers.insert(observer) + } + } +} + +extension GridMenuViewController: UICollectionViewDelegateFlowLayout +{ + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize + { + self.configure(self.prototypeCell, for: indexPath) + + let size = self.prototypeCell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) + return size + } +} + +extension GridMenuViewController +{ + override func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) + { + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected + } + + override func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) + { + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected + } + + override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) + { + self.previousIndexPath = indexPath + + let item = self.items[indexPath.item] + item.isSelected = !item.isSelected + item.action(item) + } +} + diff --git a/Delta/Pause Menu/MenuItem.swift b/Delta/Pause Menu/MenuItem.swift new file mode 100644 index 0000000..3335b9c --- /dev/null +++ b/Delta/Pause Menu/MenuItem.swift @@ -0,0 +1,35 @@ +// +// MenuItem.swift +// Delta +// +// Created by Riley Testut on 1/30/16. +// Copyright © 2016 Riley Testut. All rights reserved. +// + +import UIKit + +// Must be class for use with Objective-C generics :( +class MenuItem: NSObject +{ + var text: String + var image: UIImage? + var action: ((MenuItem) -> Void) + + @objc dynamic var isSelected = false + + init(text: String, image: UIImage?, action: @escaping ((MenuItem) -> Void)) + { + self.image = image + self.text = text + self.action = action + } +} + +extension MenuItem +{ + override func isEqual(_ object: Any?) -> Bool + { + guard let item = object as? MenuItem else { return false } + return item.image == self.image && item.text == self.text + } +} diff --git a/Delta/Pause Menu/PauseItem.swift b/Delta/Pause Menu/PauseItem.swift deleted file mode 100644 index e1c629b..0000000 --- a/Delta/Pause Menu/PauseItem.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// PauseItem.swift -// Delta -// -// Created by Riley Testut on 1/30/16. -// Copyright © 2016 Riley Testut. All rights reserved. -// - -import UIKit - -// Must be class for use with Objective-C generics :( -class PauseItem: Equatable -{ - var image: UIImage - var text: String - var action: ((PauseItem) -> Void) - - var selected = false - - init(image: UIImage, text: String, action: @escaping ((PauseItem) -> Void)) - { - self.image = image - self.text = text - self.action = action - } -} - -func ==(lhs: PauseItem, rhs: PauseItem) -> Bool -{ - return (lhs.image == rhs.image) && (lhs.text == rhs.text) -} diff --git a/Delta/Pause Menu/PauseMenuViewController.swift b/Delta/Pause Menu/PauseMenuViewController.swift deleted file mode 100644 index a887cb4..0000000 --- a/Delta/Pause Menu/PauseMenuViewController.swift +++ /dev/null @@ -1,146 +0,0 @@ -// -// PauseMenuViewController.swift -// Delta -// -// Created by Riley Testut on 12/21/15. -// Copyright © 2015 Riley Testut. All rights reserved. -// - -import UIKit -import Roxas - -class PauseMenuViewController: UICollectionViewController -{ - var items = [PauseItem]() { - didSet - { - guard oldValue != self.items else { return } - - if self.items.count > 8 - { - fatalError("PauseViewController only supports up to 8 items (for my sanity when laying out on a landscape iPhone 4s") - } - - self.dataSource.items = self.items - } - } - - override var preferredContentSize: CGSize { - set { } - get { return self.collectionView?.contentSize ?? CGSize.zero } - } - - fileprivate let dataSource = RSTArrayCollectionViewDataSource(items: []) - - fileprivate var prototypeCell = GridCollectionViewCell() - fileprivate var previousIndexPath: IndexPath? = nil -} - -extension PauseMenuViewController -{ - override func viewDidLoad() - { - super.viewDidLoad() - - self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in - self.configure(cell as! GridCollectionViewCell, for: indexPath) - } - self.collectionView?.dataSource = self.dataSource - - let collectionViewLayout = self.collectionViewLayout as! GridCollectionViewLayout - collectionViewLayout.itemWidth = 90 - collectionViewLayout.usesEqualHorizontalSpacingDistributionForSingleRow = true - - // Manually update prototype cell properties - self.prototypeCell.contentView.widthAnchor.constraint(equalToConstant: collectionViewLayout.itemWidth).isActive = true - } - - override func viewDidAppear(_ animated: Bool) - { - super.viewDidAppear(animated) - - if let indexPath = self.previousIndexPath - { - UIView.animate(withDuration: 0.2) { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - } - } - } -} - -private extension PauseMenuViewController -{ - func configure(_ cell: GridCollectionViewCell, for indexPath: IndexPath) - { - let pauseItem = self.items[(indexPath as NSIndexPath).item] - - cell.maximumImageSize = CGSize(width: 60, height: 60) - - cell.imageView.image = pauseItem.image - cell.imageView.contentMode = .center - cell.imageView.layer.borderWidth = 2 - cell.imageView.layer.borderColor = UIColor.white.cgColor - cell.imageView.layer.cornerRadius = 10 - - cell.textLabel.text = pauseItem.text - cell.textLabel.textColor = UIColor.white - - if pauseItem.selected - { - cell.imageView.tintColor = UIColor.black - cell.imageView.backgroundColor = UIColor.white - } - else - { - cell.imageView.tintColor = UIColor.white - cell.imageView.backgroundColor = UIColor.clear - } - - cell.isImageViewVibrancyEnabled = true - cell.isTextLabelVibrancyEnabled = true - } - - func toggleSelectedStateForPauseItemAtIndexPath(_ indexPath: IndexPath) - { - let pauseItem = self.items[indexPath.item] - pauseItem.selected = !pauseItem.selected - - let cell = self.collectionView!.cellForItem(at: indexPath) as! GridCollectionViewCell - self.configure(cell, for: indexPath) - } -} - -extension PauseMenuViewController: UICollectionViewDelegateFlowLayout -{ - func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize - { - self.configure(self.prototypeCell, for: indexPath) - - let size = self.prototypeCell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) - return size - } -} - -extension PauseMenuViewController -{ - override func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) - { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - } - - override func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) - { - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - } - - override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) - { - self.previousIndexPath = indexPath - - self.toggleSelectedStateForPauseItemAtIndexPath(indexPath) - - let pauseItem = self.items[indexPath.item] - pauseItem.action(pauseItem) - } -} - diff --git a/Delta/Pause Menu/PauseViewController.swift b/Delta/Pause Menu/PauseViewController.swift index 10a4d02..68f6e09 100644 --- a/Delta/Pause Menu/PauseViewController.swift +++ b/Delta/Pause Menu/PauseViewController.swift @@ -18,16 +18,16 @@ class PauseViewController: UIViewController, PauseInfoProviding } } - var pauseItems: [PauseItem] { + var pauseItems: [MenuItem] { return [self.saveStateItem, self.loadStateItem, self.cheatCodesItem, self.fastForwardItem, self.sustainButtonsItem].flatMap { $0 } } /// Pause Items - var saveStateItem: PauseItem? - var loadStateItem: PauseItem? - var cheatCodesItem: PauseItem? - var fastForwardItem: PauseItem? - var sustainButtonsItem: PauseItem? + var saveStateItem: MenuItem? + var loadStateItem: MenuItem? + var cheatCodesItem: MenuItem? + var fastForwardItem: MenuItem? + var sustainButtonsItem: MenuItem? /// PauseInfoProviding var pauseText: String? @@ -38,9 +38,9 @@ class PauseViewController: UIViewController, PauseInfoProviding /// Save States weak var saveStatesViewControllerDelegate: SaveStatesViewControllerDelegate? - fileprivate var saveStatesViewControllerMode = SaveStatesViewController.Mode.loading + private var saveStatesViewControllerMode = SaveStatesViewController.Mode.loading - fileprivate var pauseNavigationController: UINavigationController! + private var pauseNavigationController: UINavigationController! /// UIViewController override var preferredContentSize: CGSize { @@ -85,8 +85,8 @@ extension PauseViewController self.pauseNavigationController.navigationBar.tintColor = UIColor.deltaPurple self.pauseNavigationController.view.backgroundColor = UIColor.clear - let pauseMenuViewController = self.pauseNavigationController.topViewController as! PauseMenuViewController - pauseMenuViewController.items = self.pauseItems + let gridMenuViewController = self.pauseNavigationController.topViewController as! GridMenuViewController + gridMenuViewController.items = self.pauseItems case "saveStates": let saveStatesViewController = segue.destination as! SaveStatesViewController @@ -135,21 +135,21 @@ private extension PauseViewController guard self.emulatorCore != nil else { return } - self.saveStateItem = PauseItem(image: #imageLiteral(resourceName: "SaveSaveState"), text: NSLocalizedString("Save State", comment: ""), action: { [unowned self] _ in + self.saveStateItem = MenuItem(text: NSLocalizedString("Save State", comment: ""), image: #imageLiteral(resourceName: "SaveSaveState"), action: { [unowned self] _ in self.saveStatesViewControllerMode = .saving self.performSegue(withIdentifier: "saveStates", sender: self) }) - self.loadStateItem = PauseItem(image: #imageLiteral(resourceName: "LoadSaveState"), text: NSLocalizedString("Load State", comment: ""), action: { [unowned self] _ in + self.loadStateItem = MenuItem(text: NSLocalizedString("Load State", comment: ""), image: #imageLiteral(resourceName: "LoadSaveState"), action: { [unowned self] _ in self.saveStatesViewControllerMode = .loading self.performSegue(withIdentifier: "saveStates", sender: self) }) - self.cheatCodesItem = PauseItem(image: #imageLiteral(resourceName: "CheatCodes"), text: NSLocalizedString("Cheat Codes", comment: ""), action: { [unowned self] _ in + self.cheatCodesItem = MenuItem(text: NSLocalizedString("Cheat Codes", comment: ""), image: #imageLiteral(resourceName: "CheatCodes"), action: { [unowned self] _ in self.performSegue(withIdentifier: "cheats", sender: self) }) - self.fastForwardItem = PauseItem(image: #imageLiteral(resourceName: "FastForward"), text: NSLocalizedString("Fast Forward", comment: ""), action: { _ in }) - self.sustainButtonsItem = PauseItem(image: #imageLiteral(resourceName: "SustainButtons"), text: NSLocalizedString("Sustain Buttons", comment: ""), action: { _ in }) + self.fastForwardItem = MenuItem(text: NSLocalizedString("Fast Forward", comment: ""), image: #imageLiteral(resourceName: "FastForward"), action: { _ in }) + self.sustainButtonsItem = MenuItem(text: NSLocalizedString("Sustain Buttons", comment: ""), image: #imageLiteral(resourceName: "SustainButtons"), action: { _ in }) } } diff --git a/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift b/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift index 3d1093b..c0fb79b 100644 --- a/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift +++ b/Delta/Pause Menu/Presentation Controller/PausePresentationController.swift @@ -17,13 +17,17 @@ protocol PauseInfoProviding class PausePresentationController: UIPresentationController { + let presentationAnimator: UIViewPropertyAnimator + private let blurringView: UIVisualEffectView private let vibrancyView: UIVisualEffectView private var contentView: UIView! - @IBOutlet private weak var pauseLabel: UILabel! - @IBOutlet private weak var pauseIconImageView: UIImageView! - @IBOutlet private weak var stackView: UIStackView! + + // Must not be weak, or else may result in crash when deallocating. + @IBOutlet private var pauseLabel: UILabel! + @IBOutlet private var pauseIconImageView: UIImageView! + @IBOutlet private var stackView: UIStackView! override var frameOfPresentedViewInContainerView: CGRect { @@ -45,8 +49,10 @@ class PausePresentationController: UIPresentationController return frame } - override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) + init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?, presentationAnimator: UIViewPropertyAnimator) { + self.presentationAnimator = presentationAnimator + self.blurringView = UIVisualEffectView(effect: nil) self.vibrancyView = UIVisualEffectView(effect: nil) @@ -83,16 +89,18 @@ class PausePresentationController: UIPresentationController self.contentView.alpha = 0.0 self.vibrancyView.contentView.addSubview(self.contentView) - self.presentingViewController.transitionCoordinator?.animate(alongsideTransition: { context in - + self.presentationAnimator.addAnimations { let blurEffect = UIBlurEffect(style: .dark) self.blurringView.effect = blurEffect self.vibrancyView.effect = UIVibrancyEffect(blurEffect: blurEffect) self.contentView.alpha = 1.0 - - }, completion: nil) + } + + // I have absolutely no clue why animating with transition coordinator results in no animation on iOS 11. + // Spent far too long trying to fix it, so just use the presentation animator. + // self.presentingViewController.transitionCoordinator?.animate(alongsideTransition: { context in }, completion: nil) } override func dismissalTransitionWillBegin() diff --git a/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift b/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift index 554c945..b4f8ec7 100644 --- a/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift +++ b/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift @@ -12,7 +12,7 @@ class SaveStatesCollectionHeaderView: UICollectionReusableView { let textLabel = UILabel() - fileprivate let vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .dark))) + private let vibrancyView = UIVisualEffectView(effect: UIVibrancyEffect(blurEffect: UIBlurEffect(style: .dark))) var isTextLabelVibrancyEnabled = true { didSet { diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index 3de34db..019be65 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -29,6 +29,7 @@ extension SaveStatesViewController enum Section: Int { case auto + case quick case general case locked } @@ -58,29 +59,30 @@ class SaveStatesViewController: UICollectionViewController } } - fileprivate var vibrancyView: UIVisualEffectView! - fileprivate var placeholderView: RSTPlaceholderView! + private var vibrancyView: UIVisualEffectView! + private var placeholderView: RSTPlaceholderView! - fileprivate var prototypeCell = GridCollectionViewCell() - fileprivate var prototypeCellWidthConstraint: NSLayoutConstraint! - fileprivate var prototypeHeader = SaveStatesCollectionHeaderView() + private var prototypeCell = GridCollectionViewCell() + private var prototypeCellWidthConstraint: NSLayoutConstraint! + private var prototypeHeader = SaveStatesCollectionHeaderView() - fileprivate let dataSource = RSTFetchedResultsCollectionViewDataSource(fetchedResultsController: NSFetchedResultsController()) + private let dataSource: RSTFetchedResultsCollectionViewPrefetchingDataSource - fileprivate let imageOperationQueue = RSTOperationQueue() - fileprivate let imageCache = NSCache() + private var emulatorCoreSaveState: SaveStateProtocol? - fileprivate var emulatorCoreSaveState: SaveStateProtocol? - - fileprivate let dateFormatter: DateFormatter + private let dateFormatter: DateFormatter required init?(coder aDecoder: NSCoder) { + self.dataSource = RSTFetchedResultsCollectionViewPrefetchingDataSource(fetchedResultsController: NSFetchedResultsController()) + self.dateFormatter = DateFormatter() self.dateFormatter.timeStyle = .short self.dateFormatter.dateStyle = .short super.init(coder: aDecoder) + + self.prepareDataSource() } } @@ -90,21 +92,8 @@ extension SaveStatesViewController { super.viewDidLoad() - self.vibrancyView = UIVisualEffectView(effect: nil) - - self.placeholderView = RSTPlaceholderView(frame: CGRect(x: 0, y: 0, width: self.vibrancyView.bounds.width, height: self.vibrancyView.bounds.height)) - self.placeholderView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - self.placeholderView.textLabel.text = NSLocalizedString("No Save States", comment: "") - self.placeholderView.textLabel.textColor = UIColor.white - self.placeholderView.detailTextLabel.textColor = UIColor.white - self.vibrancyView.contentView.addSubview(self.placeholderView) - - self.dataSource.proxy = self - self.dataSource.placeholderView = self.vibrancyView - self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in - self.configure(cell as! GridCollectionViewCell, for: indexPath) - } self.collectionView?.dataSource = self.dataSource + self.collectionView?.prefetchDataSource = self.dataSource let collectionViewLayout = self.collectionViewLayout as! GridCollectionViewLayout let averageHorizontalInset = (collectionViewLayout.sectionInset.left + collectionViewLayout.sectionInset.right) / 2 @@ -118,11 +107,11 @@ extension SaveStatesViewController { case .saving: self.title = NSLocalizedString("Save State", comment: "") - placeholderView.detailTextLabel.text = NSLocalizedString("You can create a new save state by pressing the + button in the top right.", comment: "") + self.placeholderView.detailTextLabel.text = NSLocalizedString("You can create a new save state by pressing the + button in the top right.", comment: "") case .loading: self.title = NSLocalizedString("Load State", comment: "") - placeholderView.detailTextLabel.text = NSLocalizedString("You can create a new save state by pressing the Save State option in the pause menu.", comment: "") + self.placeholderView.detailTextLabel.text = NSLocalizedString("You can create a new save state by pressing the Save State option in the pause menu.", comment: "") self.navigationItem.rightBarButtonItem = nil } @@ -156,10 +145,57 @@ extension SaveStatesViewController } } +private extension SaveStatesViewController +{ + func prepareDataSource() + { + self.dataSource.proxy = self + + self.vibrancyView = UIVisualEffectView(effect: nil) + + self.placeholderView = RSTPlaceholderView(frame: CGRect(x: 0, y: 0, width: self.vibrancyView.bounds.width, height: self.vibrancyView.bounds.height)) + self.placeholderView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + self.placeholderView.textLabel.text = NSLocalizedString("No Save States", comment: "") + self.placeholderView.textLabel.textColor = UIColor.white + self.placeholderView.detailTextLabel.textColor = UIColor.white + self.vibrancyView.contentView.addSubview(self.placeholderView) + + self.dataSource.placeholderView = self.vibrancyView + + self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in + self.configure(cell as! GridCollectionViewCell, for: indexPath) + } + + self.dataSource.prefetchHandler = { [unowned self] (saveState, indexPath, completionHandler) in + let imageOperation = LoadImageURLOperation(url: saveState.imageFileURL) + imageOperation.resultHandler = { (image, error) in + completionHandler(image, error) + } + + if self.isAppearing + { + imageOperation.start() + imageOperation.waitUntilFinished() + return nil + } + + return imageOperation + } + + self.dataSource.prefetchCompletionHandler = { (cell, image, indexPath, error) in + guard let image = image, let cell = cell as? GridCollectionViewCell else { return } + + cell.imageView.backgroundColor = nil + cell.imageView.image = image + + cell.isImageViewVibrancyEnabled = false + } + } +} + private extension SaveStatesViewController { //MARK: - Update - - func updateDataSource() { let fetchRequest: NSFetchRequest = SaveState.fetchRequest() @@ -194,7 +230,7 @@ private extension SaveStatesViewController //MARK: - Configure Views - - func configure(_ cell: GridCollectionViewCell, for indexPath: IndexPath, ignoreExpensiveOperations ignoreOperations: Bool = false) + func configure(_ cell: GridCollectionViewCell, for indexPath: IndexPath) { let saveState = self.dataSource.item(at: indexPath) @@ -213,35 +249,9 @@ private extension SaveStatesViewController cell.isImageViewVibrancyEnabled = true } - if !ignoreOperations - { - let imageOperation = LoadImageURLOperation(url: saveState.imageFileURL) - imageOperation.resultsCache = self.imageCache - imageOperation.resultHandler = { (image, error) in - - if let image = image - { - DispatchQueue.main.async { - cell.imageView.backgroundColor = nil - cell.imageView.image = image - - cell.isImageViewVibrancyEnabled = false - } - } - } - - // Ensure initially visible cells have loaded their image before they appear to prevent potential flickering from placeholder to thumbnail - if self.isAppearing - { - imageOperation.isImmediate = true - } - - self.imageOperationQueue.addOperation(imageOperation, forKey: indexPath as NSCopying) - } - let deltaCore = Delta.core(for: self.game.type)! - let dimensions = deltaCore.emulatorConfiguration.videoBufferInfo.outputDimensions + let dimensions = deltaCore.videoFormat.dimensions cell.maximumImageSize = CGSize(width: self.prototypeCellWidthConstraint.constant, height: (self.prototypeCellWidthConstraint.constant / dimensions.width) * dimensions.height) cell.textLabel.font = UIFont.preferredFont(forTextStyle: .subheadline) @@ -259,6 +269,7 @@ private extension SaveStatesViewController switch section { case .auto: title = NSLocalizedString("Auto Save", comment: "") + case .quick: title = NSLocalizedString("Quick Save", comment: "") case .general: title = NSLocalizedString("General", comment: "") case .locked: title = NSLocalizedString("Locked", comment: "") } @@ -301,6 +312,7 @@ private extension SaveStatesViewController let game = backgroundContext.object(with: self.game.objectID) as! Game saveState = SaveState.insertIntoManagedObjectContext(backgroundContext) + saveState.type = .general saveState.game = game } @@ -365,7 +377,7 @@ private extension SaveStatesViewController func rename(_ saveState: SaveState, with name: String?) { var name = name - if (name ?? "").characters.count == 0 + if (name ?? "").count == 0 { // When text is nil, we know to show the timestamp instead name = nil @@ -471,6 +483,7 @@ private extension SaveStatesViewController switch saveState.type { case .auto: break + case .quick: break case .general: let lockAction = Action(title: NSLocalizedString("Lock", comment: ""), style: .default, action: { [unowned self] action in self.lockSaveState(saveState) @@ -549,13 +562,13 @@ private extension SaveStatesViewController //MARK: - 3D Touch - extension SaveStatesViewController: UIViewControllerPreviewingDelegate { - fileprivate func prepareEmulatorCoreSaveState() + private func prepareEmulatorCoreSaveState() { guard let emulatorCore = self.emulatorCore else { return } // Store reference to current game state before we stop emulation so we can resume it if user decides to not load a save state - let fileURL = FileManager.uniqueTemporaryURL() + let fileURL = FileManager.default.uniqueTemporaryURL() self.emulatorCoreSaveState = emulatorCore.saveSaveState(to: fileURL) if self.emulatorCoreSaveState != nil @@ -577,7 +590,7 @@ extension SaveStatesViewController: UIViewControllerPreviewingDelegate let saveState = self.dataSource.item(at: indexPath) let actions = self.actionsForSaveState(saveState)?.previewActions ?? [] - let previewImage = self.imageCache.object(forKey: saveState.imageFileURL as NSURL) ?? UIImage(contentsOfFile: saveState.imageFileURL.path) + let previewImage = self.dataSource.prefetchItemCache.object(forKey: saveState) ?? UIImage(contentsOfFile: saveState.imageFileURL.path) let previewGameViewController = PreviewGameViewController() previewGameViewController.game = self.game @@ -593,7 +606,7 @@ extension SaveStatesViewController: UIViewControllerPreviewingDelegate let gameViewController = viewControllerToCommit as! PreviewGameViewController gameViewController.emulatorCore?.pause() - let fileURL = FileManager.uniqueTemporaryURL() + let fileURL = FileManager.default.uniqueTemporaryURL() if let saveState = gameViewController.emulatorCore?.saveSaveState(to: fileURL) { gameViewController.emulatorCore?.stop() @@ -634,11 +647,11 @@ extension SaveStatesViewController { case .saving: - let section = self.correctedSectionForSectionIndex((indexPath as NSIndexPath).section) + let section = self.correctedSectionForSectionIndex(indexPath.section) switch section { case .auto: break - case .general: + case .quick, .general: let backgroundContext = DatabaseManager.shared.newBackgroundContext() backgroundContext.performAndWait() { let temporarySaveState = backgroundContext.object(with: saveState.objectID) as! SaveState @@ -655,12 +668,6 @@ extension SaveStatesViewController case .loading: self.loadSaveState(saveState) } } - - override func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) - { - let operation = self.imageOperationQueue[indexPath as NSCopying] - operation?.cancel() - } } //MARK: - - @@ -668,8 +675,7 @@ extension SaveStatesViewController: UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { - // No need to load images from disk just to determine size, so we pass true for ignoreExpensiveOperations - self.configure(self.prototypeCell, for: indexPath, ignoreExpensiveOperations: true) + self.configure(self.prototypeCell, for: indexPath) let size = self.prototypeCell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize) return size diff --git a/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift b/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift index bec5a67..31e537e 100644 --- a/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift +++ b/Delta/Pause Menu/Segues/PauseStoryboardSegue.swift @@ -10,15 +10,15 @@ import UIKit class PauseStoryboardSegue: UIStoryboardSegue { - fileprivate let animator: UIViewPropertyAnimator - fileprivate let presentationController: PausePresentationController + private let animator: UIViewPropertyAnimator + private let presentationController: PausePresentationController override init(identifier: String?, source: UIViewController, destination: UIViewController) { let timingParameters = UISpringTimingParameters(mass: 3.0, stiffness: 750, damping: 65, initialVelocity: CGVector(dx: 0, dy: 0)) self.animator = UIViewPropertyAnimator(duration: 0, timingParameters: timingParameters) - self.presentationController = PausePresentationController(presentedViewController: destination, presenting: source) + self.presentationController = PausePresentationController(presentedViewController: destination, presenting: source, presentationAnimator: self.animator) super.init(identifier: identifier, source: source, destination: destination) } @@ -29,6 +29,9 @@ class PauseStoryboardSegue: UIStoryboardSegue self.destination.modalPresentationStyle = .custom self.destination.modalPresentationCapturesStatusBarAppearance = true + // Manually set tint color, since calling layoutIfNeeded will cause view to load, but with default system tint color. + self.destination.view.tintColor = .white + // We need to force layout of destinationViewController.view _before_ animateTransition(using:) // Otherwise, we'll get "Unable to simultaneously satisfy constraints" errors self.destination.view.frame = self.source.view.frame diff --git a/Delta/Pause Menu/Segues/PauseTransitionCoordinator.swift b/Delta/Pause Menu/Segues/PauseTransitionCoordinator.swift index 9a83b06..6063067 100644 --- a/Delta/Pause Menu/Segues/PauseTransitionCoordinator.swift +++ b/Delta/Pause Menu/Segues/PauseTransitionCoordinator.swift @@ -37,6 +37,13 @@ class PauseTransitionCoordinator: NSObject, UIViewControllerAnimatedTransitionin destinationViewController.view.layoutIfNeeded() + if let navigationController = destinationViewController.navigationController + { + // Layout before animation to prevent strange bar button item layout during animation. + navigationController.view.setNeedsLayout() + navigationController.view.layoutIfNeeded() + } + UIView.animate(withDuration: self.transitionDuration(using: transitionContext), delay:0, options:RSTSystemTransitionAnimationCurve, animations: { sourceViewController.view.frame.origin.y = self.presenting ? -sourceViewController.view.bounds.height : transitionContext.containerView.bounds.height diff --git a/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift b/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift index e6c8fa5..49b5575 100644 --- a/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift +++ b/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift @@ -12,18 +12,9 @@ import DeltaCore import Roxas -extension ControllerSkinsViewController -{ - enum Section: Int - { - case standard - case custom - } -} - class ControllerSkinsViewController: UITableViewController { - var gameType: GameType! { + var system: System! { didSet { self.updateDataSource() } @@ -35,11 +26,16 @@ class ControllerSkinsViewController: UITableViewController } } - fileprivate let dataSource = RSTFetchedResultsTableViewDataSource(fetchedResultsController: NSFetchedResultsController()) + private let dataSource: RSTFetchedResultsTableViewPrefetchingDataSource - fileprivate let imageOperationQueue = RSTOperationQueue() - - fileprivate let imageCache = NSCache() + required init?(coder aDecoder: NSCoder) + { + self.dataSource = RSTFetchedResultsTableViewPrefetchingDataSource(fetchedResultsController: NSFetchedResultsController()) + + super.init(coder: aDecoder) + + self.prepareDataSource() + } } extension ControllerSkinsViewController @@ -48,11 +44,8 @@ extension ControllerSkinsViewController { super.viewDidLoad() - self.dataSource.proxy = self - self.dataSource.cellConfigurationHandler = { [unowned self] (cell, item, indexPath) in - self.configure(cell as! ControllerSkinTableViewCell, for: indexPath) - } self.tableView.dataSource = self.dataSource + self.tableView.prefetchDataSource = self.dataSource } override func didReceiveMemoryWarning() @@ -65,57 +58,53 @@ extension ControllerSkinsViewController private extension ControllerSkinsViewController { //MARK: - Update + func prepareDataSource() + { + self.dataSource.proxy = self + self.dataSource.cellConfigurationHandler = { (cell, item, indexPath) in + let cell = cell as! ControllerSkinTableViewCell + + cell.controllerSkinImageView.image = nil + cell.activityIndicatorView.startAnimating() + } + + self.dataSource.prefetchHandler = { [unowned self] (controllerSkin, indexPath, completionHandler) in + let imageOperation = LoadControllerSkinImageOperation(controllerSkin: controllerSkin, traits: self.traits, size: UIScreen.main.defaultControllerSkinSize) + imageOperation.resultHandler = { (image, error) in + completionHandler(image, error) + } + + // Ensure initially visible cells have loaded their image before they appear to prevent potential flickering from placeholder to thumbnail + if self.isAppearing + { + imageOperation.start() + imageOperation.waitUntilFinished() + return nil + } + + return imageOperation + } + + self.dataSource.prefetchCompletionHandler = { (cell, image, indexPath, error) in + guard let image = image, let cell = cell as? ControllerSkinTableViewCell else { return } + + cell.controllerSkinImageView.image = image + cell.activityIndicatorView.stopAnimating() + } + } + func updateDataSource() { - guard let gameType = self.gameType, let traits = self.traits else { return } + guard let system = self.system, let traits = self.traits else { return } let configuration = ControllerSkinConfigurations(traits: traits) let fetchRequest: NSFetchRequest = ControllerSkin.fetchRequest() - fetchRequest.predicate = NSPredicate(format: "%K == %@ AND (%K & %d) == %d", #keyPath(ControllerSkin.gameType), gameType.rawValue, #keyPath(ControllerSkin.supportedConfigurations), configuration.rawValue, configuration.rawValue) + fetchRequest.predicate = NSPredicate(format: "%K == %@ AND (%K & %d) == %d", #keyPath(ControllerSkin.gameType), system.gameType.rawValue, #keyPath(ControllerSkin.supportedConfigurations), configuration.rawValue, configuration.rawValue) fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(ControllerSkin.isStandard), ascending: false), NSSortDescriptor(key: #keyPath(ControllerSkin.name), ascending: true)] self.dataSource.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.shared.viewContext, sectionNameKeyPath: #keyPath(ControllerSkin.name), cacheName: nil) } - - //MARK: - Configure Cells - func configure(_ cell: ControllerSkinTableViewCell, for indexPath: IndexPath) - { - let controllerSkin = self.dataSource.item(at: indexPath) - - cell.controllerSkinImageView.image = nil - cell.activityIndicatorView.startAnimating() - - let size = UIScreen.main.defaultControllerSkinSize - - let imageOperation = LoadControllerSkinImageOperation(controllerSkin: controllerSkin, traits: self.traits, size: size) - imageOperation.resultsCache = self.imageCache - imageOperation.resultHandler = { (image, error) in - - guard let image = image else { return } - - if !imageOperation.isImmediate - { - UIView.transition(with: cell.controllerSkinImageView, duration: 0.2, options: .transitionCrossDissolve, animations: { - cell.controllerSkinImageView.image = image - }, completion: nil) - } - else - { - cell.controllerSkinImageView.image = image - } - - cell.activityIndicatorView.stopAnimating() - } - - // Ensure initially visible cells have loaded their image before they appear to prevent potential flickering from placeholder to thumbnail - if self.isAppearing - { - imageOperation.isImmediate = true - } - - self.imageOperationQueue.addOperation(imageOperation, forKey: indexPath as NSCopying) - } } extension ControllerSkinsViewController @@ -127,39 +116,12 @@ extension ControllerSkinsViewController } } -extension ControllerSkinsViewController: UITableViewDataSourcePrefetching -{ - func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) - { - for indexPath in indexPaths - { - let controllerSkin = self.dataSource.item(at: indexPath) - - let size = UIScreen.main.defaultControllerSkinSize - - let imageOperation = LoadControllerSkinImageOperation(controllerSkin: controllerSkin, traits: self.traits, size: size) - imageOperation.resultsCache = self.imageCache - - self.imageOperationQueue.addOperation(imageOperation, forKey: indexPath as NSCopying) - } - } - - func tableView(_ tableView: UITableView, cancelPrefetchingForRowsAt indexPaths: [IndexPath]) - { - for indexPath in indexPaths - { - let operation = self.imageOperationQueue[indexPath as NSCopying] - operation?.cancel() - } - } -} - extension ControllerSkinsViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let controllerSkin = self.dataSource.item(at: indexPath) - Settings.setPreferredControllerSkin(controllerSkin, for: self.gameType, traits: self.traits) + Settings.setPreferredControllerSkin(controllerSkin, for: self.system, traits: self.traits) _ = self.navigationController?.popViewController(animated: true) } @@ -176,10 +138,4 @@ extension ControllerSkinsViewController return height } - - override func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) - { - let operation = self.imageOperationQueue[indexPath as NSCopying] - operation?.cancel() - } } diff --git a/Delta/Settings/Controller Skins/GameTypeControllerSkinsViewController.swift b/Delta/Settings/Controller Skins/SystemControllerSkinsViewController.swift similarity index 80% rename from Delta/Settings/Controller Skins/GameTypeControllerSkinsViewController.swift rename to Delta/Settings/Controller Skins/SystemControllerSkinsViewController.swift index f162cc7..c0b0545 100644 --- a/Delta/Settings/Controller Skins/GameTypeControllerSkinsViewController.swift +++ b/Delta/Settings/Controller Skins/SystemControllerSkinsViewController.swift @@ -1,5 +1,5 @@ // -// GameTypeControllerSkinsViewController.swift +// SystemControllerSkinsViewController.swift // Delta // // Created by Riley Testut on 9/30/16. @@ -10,30 +10,30 @@ import UIKit import DeltaCore -extension GameTypeControllerSkinsViewController +extension SystemControllerSkinsViewController { - fileprivate enum Section: Int + private enum Section: Int { case portrait case landscape } } -class GameTypeControllerSkinsViewController: UITableViewController +class SystemControllerSkinsViewController: UITableViewController { - var gameType: GameType! + var system: System! - @IBOutlet fileprivate var portraitImageView: UIImageView! - @IBOutlet fileprivate var landscapeImageView: UIImageView! + @IBOutlet private var portraitImageView: UIImageView! + @IBOutlet private var landscapeImageView: UIImageView! } -extension GameTypeControllerSkinsViewController +extension SystemControllerSkinsViewController { override func viewDidLoad() { super.viewDidLoad() - self.title = self.gameType.localizedShortName + self.title = self.system.localizedShortName } override func viewWillAppear(_ animated: Bool) @@ -53,7 +53,7 @@ extension GameTypeControllerSkinsViewController guard let cell = sender as? UITableViewCell, let indexPath = self.tableView.indexPath(for: cell) else { return } let controllerSkinsViewController = segue.destination as! ControllerSkinsViewController - controllerSkinsViewController.gameType = self.gameType + controllerSkinsViewController.system = self.system var traits = DeltaCore.ControllerSkin.Traits.defaults(for: self.view) @@ -68,7 +68,7 @@ extension GameTypeControllerSkinsViewController } } -extension GameTypeControllerSkinsViewController +extension SystemControllerSkinsViewController { override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { @@ -98,15 +98,15 @@ extension GameTypeControllerSkinsViewController } } -private extension GameTypeControllerSkinsViewController +private extension SystemControllerSkinsViewController { func updateControllerSkins() { let portraitTraits = DeltaCore.ControllerSkin.Traits(deviceType: .iphone, displayMode: DeltaCore.ControllerSkin.DisplayMode.fullScreen, orientation: .portrait) let landscapeTraits = DeltaCore.ControllerSkin.Traits(deviceType: .iphone, displayMode: DeltaCore.ControllerSkin.DisplayMode.fullScreen, orientation: .landscape) - let portraitControllerSkin = Settings.preferredControllerSkin(for: self.gameType, traits: portraitTraits) - let landscapeControllerSkin = Settings.preferredControllerSkin(for: self.gameType, traits: landscapeTraits) + let portraitControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: portraitTraits) + let landscapeControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: landscapeTraits) self.portraitImageView.image = portraitControllerSkin?.image(for: portraitTraits, preferredSize: UIScreen.main.defaultControllerSkinSize) self.landscapeImageView.image = landscapeControllerSkin?.image(for: landscapeTraits, preferredSize: UIScreen.main.defaultControllerSkinSize) diff --git a/Delta/Settings/Controllers/ControllerInputsViewController.swift b/Delta/Settings/Controllers/ControllerInputsViewController.swift new file mode 100644 index 0000000..228b81f --- /dev/null +++ b/Delta/Settings/Controllers/ControllerInputsViewController.swift @@ -0,0 +1,508 @@ +// +// ControllerInputsViewController.swift +// Delta +// +// Created by Riley Testut on 7/1/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import UIKit +import Roxas + +import DeltaCore + +import SMCalloutView + +class ControllerInputsViewController: UIViewController +{ + var gameController: GameController! { + didSet { + self.gameController.addReceiver(self, inputMapping: nil) + } + } + + var system: System = .snes { + didSet { + guard self.system != oldValue else { return } + self.updateSystem() + } + } + + private lazy var managedObjectContext: NSManagedObjectContext = DatabaseManager.shared.newBackgroundContext() + private var inputMappings = [System: GameControllerInputMapping]() + + private let supportedActionInputs: [ActionInput] = [.quickSave, .quickLoad, .fastForward] + + private var gameViewController: DeltaCore.GameViewController! + private var actionsMenuViewController: GridMenuViewController! + + private var calloutViews = [AnyInput: InputCalloutView]() + + private var activeCalloutView: InputCalloutView? + + @IBOutlet private var actionsMenuViewControllerHeightConstraint: NSLayoutConstraint! + @IBOutlet private var cancelTapGestureRecognizer: UITapGestureRecognizer! + + override func viewDidLoad() + { + super.viewDidLoad() + + self.gameViewController.controllerView.addReceiver(self) + + self.navigationController?.navigationBar.barStyle = .black + + NSLayoutConstraint.activate([self.gameViewController.gameView.centerYAnchor.constraint(equalTo: self.actionsMenuViewController.view.centerYAnchor)]) + + self.preparePopoverMenuController() + self.updateSystem() + } + + override func viewDidLayoutSubviews() + { + super.viewDidLayoutSubviews() + + if self.actionsMenuViewController.preferredContentSize.height > 0 + { + self.actionsMenuViewControllerHeightConstraint.constant = self.actionsMenuViewController.preferredContentSize.height + } + } + + override func viewDidAppear(_ animated: Bool) + { + super.viewDidAppear(animated) + + if self.calloutViews.isEmpty + { + self.prepareCallouts() + } + } +} + +extension ControllerInputsViewController +{ + override func prepare(for segue: UIStoryboardSegue, sender: Any?) + { + guard let identifier = segue.identifier else { return } + + switch identifier + { + case "embedGameViewController": self.gameViewController = segue.destination as! DeltaCore.GameViewController + case "embedActionsMenuViewController": + self.actionsMenuViewController = segue.destination as! GridMenuViewController + self.prepareActionsMenuViewController() + + case "cancelControllerInputs": break + case "saveControllerInputs": + self.managedObjectContext.performAndWait { + self.managedObjectContext.saveWithErrorLogging() + } + + default: break + } + } +} + +private extension ControllerInputsViewController +{ + func updateSystem() + { + guard self.isViewLoaded else { return } + + // Update popoverMenuButton to display correctly on iOS 10. + if let popoverMenuButton = self.navigationItem.popoverMenuController?.popoverMenuButton + { + popoverMenuButton.title = self.system.localizedShortName + popoverMenuButton.bounds.size = popoverMenuButton.intrinsicContentSize + + self.navigationController?.navigationBar.layoutIfNeeded() + } + + // Update controller view's controller skin. + self.gameViewController.controllerView.controllerSkin = DeltaCore.ControllerSkin.standardControllerSkin(for: self.system.gameType) + + // Fetch input mapping if it hasn't already been fetched. + if let gameController = self.gameController, let playerIndex = gameController.playerIndex, self.inputMappings[self.system] == nil + { + self.managedObjectContext.performAndWait { + let inputMapping = GameControllerInputMapping.inputMapping(for: gameController, gameType: self.system.gameType, in: self.managedObjectContext) ?? { + let deltaCoreInputMapping = gameController.defaultInputMapping as? DeltaCore.GameControllerInputMapping ?? DeltaCore.GameControllerInputMapping(gameControllerInputType: gameController.inputType) + + let inputMapping = GameControllerInputMapping(inputMapping: deltaCoreInputMapping, context: self.managedObjectContext) + inputMapping.gameControllerInputType = gameController.inputType + inputMapping.gameType = self.system.gameType + inputMapping.playerIndex = Int16(playerIndex) + + return inputMapping + }() + + inputMapping.name = String.localizedStringWithFormat("Custom %@", gameController.name) + + self.inputMappings[self.system] = inputMapping + } + } + + // Update callouts, if view is already on screen. + if self.view.window != nil + { + self.calloutViews.forEach { $1.dismissCallout(animated: true) } + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + self.calloutViews = [:] + self.prepareCallouts() + } + } + } + + func preparePopoverMenuController() + { + let listMenuViewController = ListMenuViewController() + listMenuViewController.title = NSLocalizedString("Game System", comment: "") + + let navigationController = UINavigationController(rootViewController: listMenuViewController) + + let popoverMenuController = PopoverMenuController(popoverViewController: navigationController) + self.navigationItem.popoverMenuController = popoverMenuController + + let items = System.supportedSystems.map { [unowned self, weak popoverMenuController, weak listMenuViewController] system -> MenuItem in + let item = MenuItem(text: system.localizedShortName, image: #imageLiteral(resourceName: "CheatCodes")) { [weak popoverMenuController, weak listMenuViewController] item in + listMenuViewController?.items.forEach { $0.isSelected = ($0 == item) } + popoverMenuController?.isActive = false + + self.system = system + } + item.isSelected = (system == self.system) + + return item + } + listMenuViewController.items = items + } + + func prepareActionsMenuViewController() + { + var items = [MenuItem]() + + for input in self.supportedActionInputs + { + let image: UIImage + let text: String + + switch input + { + case .quickSave: + image = #imageLiteral(resourceName: "SaveSaveState") + text = NSLocalizedString("Quick Save", comment: "") + + case .quickLoad: + image = #imageLiteral(resourceName: "LoadSaveState") + text = NSLocalizedString("Quick Load", comment: "") + + case .fastForward: + image = #imageLiteral(resourceName: "FastForward") + text = NSLocalizedString("Fast Forward", comment: "") + } + + let item = MenuItem(text: text, image: image) { [unowned self] (item) in + guard let calloutView = self.calloutViews[AnyInput(input)] else { return } + self.toggle(calloutView) + } + + items.append(item) + } + + self.actionsMenuViewController.items = items + self.actionsMenuViewController.isVibrancyEnabled = false + } + + func prepareCallouts() + { + guard + let controllerView = self.gameViewController.controllerView, + let traits = controllerView.controllerSkinTraits, + let items = controllerView.controllerSkin?.items(for: traits), + let controllerViewInputMapping = controllerView.defaultInputMapping, + let inputMapping = self.inputMappings[self.system] + else { return } + + // Implicit assumption that all skins used for controller input mapping don't have multiple items with same input. + let mappedInputs = items.flatMap { $0.inputs.allInputs.flatMap(controllerViewInputMapping.input(forControllerInput:)) } + (self.supportedActionInputs as [Input]) + + // Create callout view for each on-screen input. + for input in mappedInputs + { + let calloutView = InputCalloutView() + calloutView.delegate = self + self.calloutViews[AnyInput(input)] = calloutView + } + + self.managedObjectContext.performAndWait { + // Update callout views with controller inputs that map to callout views' associated controller skin inputs. + for input in inputMapping.supportedControllerInputs + { + let mappedInput = self.mappedInput(for: input) + + if let calloutView = self.calloutViews[mappedInput] + { + if let previousInput = calloutView.input + { + // Ensure the input we display has a higher priority. + calloutView.input = (input.displayPriority > previousInput.displayPriority) ? input : previousInput + } + else + { + calloutView.input = input + } + } + } + } + + // Present only callout views that are associated with a controller input. + for calloutView in self.calloutViews.values + { + if let presentationRect = self.presentationRect(for: calloutView), calloutView.input != nil + { + calloutView.presentCallout(from: presentationRect, in: self.view, constrainedTo: self.view, animated: true) + } + } + } +} + +private extension ControllerInputsViewController +{ + func updateActiveCalloutView(with controllerInput: Input?) + { + guard let inputMapping = self.inputMappings[self.system] else { return } + + guard let activeCalloutView = self.activeCalloutView else { return } + + guard let input = self.calloutViews.first(where: { $0.value == activeCalloutView })?.key else { return } + + if let controllerInput = controllerInput + { + for (_, calloutView) in self.calloutViews + { + guard let calloutInput = calloutView.input else { continue } + + if calloutInput == controllerInput + { + // Hide callout views that previously displayed the controller input. + calloutView.input = nil + calloutView.dismissCallout(animated: true) + } + } + } + + self.managedObjectContext.performAndWait { + for supportedInput in inputMapping.supportedControllerInputs + { + let mappedInput = self.mappedInput(for: supportedInput) + + if mappedInput == input + { + // Set all existing controller inputs that currently map to "input" to instead map to nil. + inputMapping.set(nil, forControllerInput: supportedInput) + } + } + + if let controllerInput = controllerInput + { + inputMapping.set(input, forControllerInput: controllerInput) + } + } + + activeCalloutView.input = controllerInput + + self.toggle(activeCalloutView) + } + + func toggle(_ calloutView: InputCalloutView) + { + if let activeCalloutView = self.activeCalloutView, activeCalloutView != calloutView + { + self.toggle(activeCalloutView) + } + + let menuItem: MenuItem? + + if let input = self.calloutViews.first(where: { $0.value == calloutView })?.key, let index = self.supportedActionInputs.index(where: { $0 == input }) + { + menuItem = self.actionsMenuViewController.items[index] + } + else + { + menuItem = nil + } + + switch calloutView.state + { + case .normal: + calloutView.state = .listening + menuItem?.isSelected = true + self.activeCalloutView = calloutView + + case .listening: + calloutView.state = .normal + menuItem?.isSelected = false + self.activeCalloutView = nil + } + + calloutView.dismissCallout(animated: true) + + if let presentationRect = self.presentationRect(for: calloutView) + { + if calloutView.state == .listening || calloutView.input != nil + { + calloutView.presentCallout(from: presentationRect, in: self.view, constrainedTo: self.view, animated: true) + } + } + } +} + +extension ControllerInputsViewController: UIGestureRecognizerDelegate +{ + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool + { + return self.activeCalloutView != nil + } + + @IBAction private func handleTapGesture(_ tapGestureRecognizer: UITapGestureRecognizer) + { + self.updateActiveCalloutView(with: nil) + } +} + +private extension ControllerInputsViewController +{ + func mappedInput(for input: Input) -> AnyInput + { + guard let inputMapping = self.inputMappings[self.system] else { + fatalError("Input mapping for current system does not exist.") + } + + guard let mappedInput = inputMapping.input(forControllerInput: input) else { + fatalError("Mapped input for provided input does not exist.") + } + + if let standardInput = StandardGameControllerInput(input: mappedInput) + { + if let gameInput = standardInput.input(for: self.system.gameType) + { + return AnyInput(gameInput) + } + } + + return AnyInput(mappedInput) + } + + func presentationRect(for calloutView: InputCalloutView) -> CGRect? + { + guard let input = self.calloutViews.first(where: { $0.value == calloutView })?.key else { return nil } + + guard + let controllerView = self.gameViewController.controllerView, + let traits = controllerView.controllerSkinTraits, + let items = controllerView.controllerSkin?.items(for: traits) + else { return nil } + + if let item = items.first(where: { $0.inputs.allInputs.contains(where: { $0.stringValue == input.stringValue })}) + { + // Input is a controller skin input. + + let itemFrame: CGRect? + + switch item.inputs + { + case .standard: itemFrame = item.frame + case let .directional(up, down, left, right): + + switch input.stringValue + { + case up.stringValue: + itemFrame = CGRect(x: item.frame.minX + item.frame.width / 3, + y: item.frame.minY, + width: item.frame.width / 3, + height: item.frame.height / 3) + case down.stringValue: + itemFrame = CGRect(x: item.frame.minX + item.frame.width / 3, + y: item.frame.minY + (item.frame.height / 3) * 2, + width: item.frame.width / 3, + height: item.frame.height / 3) + + case left.stringValue: + itemFrame = CGRect(x: item.frame.minX, + y: item.frame.minY + (item.frame.height / 3), + width: item.frame.width / 3, + height: item.frame.height / 3) + + case right.stringValue: + itemFrame = CGRect(x: item.frame.minX + (item.frame.width / 3) * 2, + y: item.frame.minY + (item.frame.height / 3), + width: item.frame.width / 3, + height: item.frame.height / 3) + + default: itemFrame = nil + } + } + + if let itemFrame = itemFrame + { + var presentationFrame = itemFrame.applying(CGAffineTransform(scaleX: controllerView.bounds.width, y: controllerView.bounds.height)) + presentationFrame = self.view.convert(presentationFrame, from: controllerView) + + return presentationFrame + } + } + else if let index = self.supportedActionInputs.index(where: { $0 == input }) + { + // Input is an ActionInput. + + let indexPath = IndexPath(item: index, section: 0) + + if let attributes = self.actionsMenuViewController.collectionViewLayout.layoutAttributesForItem(at: indexPath) + { + let presentationFrame = self.view.convert(attributes.frame, from: self.actionsMenuViewController.view) + return presentationFrame + } + } + else + { + // Input is not an on-screen input. + } + + return nil + } +} + +extension ControllerInputsViewController: GameControllerReceiver +{ + func gameController(_ gameController: GameController, didActivate controllerInput: DeltaCore.Input) + { + guard self.isViewLoaded else { return } + + switch gameController + { + case self.gameViewController.controllerView: + if let calloutView = self.calloutViews[AnyInput(controllerInput)] + { + self.toggle(calloutView) + } + + case self.gameController: self.updateActiveCalloutView(with: controllerInput) + + default: break + } + } + + func gameController(_ gameController: GameController, didDeactivate input: DeltaCore.Input) + { + } +} + +extension ControllerInputsViewController: SMCalloutViewDelegate +{ + func calloutViewClicked(_ calloutView: SMCalloutView) + { + guard let calloutView = calloutView as? InputCalloutView else { return } + + self.toggle(calloutView) + } +} diff --git a/Delta/Settings/Controllers/ControllersSettingsViewController.swift b/Delta/Settings/Controllers/ControllersSettingsViewController.swift index f5499ae..9d20b3d 100644 --- a/Delta/Settings/Controllers/ControllersSettingsViewController.swift +++ b/Delta/Settings/Controllers/ControllersSettingsViewController.swift @@ -9,39 +9,62 @@ import UIKit import DeltaCore -private enum ControllersSettingsSection: Int +import Roxas + +extension ControllersSettingsViewController { - case none - case localDevice - case externalControllers + private enum Section: Int + { + case none + case localDevice + case externalControllers + case customizeControls + } } -private class LocalDeviceController: ExternalController +private class LocalDeviceController: NSObject, GameController { - override var name: String { + var name: String { return UIDevice.current.name } + + var playerIndex: Int? { + set { Settings.localControllerPlayerIndex = newValue } + get { return Settings.localControllerPlayerIndex } + } + + let inputType: GameControllerInputType = .standard + + var defaultInputMapping: GameControllerInputMappingProtocol? } class ControllersSettingsViewController: UITableViewController { - var playerIndex: Int? { - didSet - { - if let playerIndex = self.playerIndex + var playerIndex: Int! { + didSet { + self.title = NSLocalizedString("Player \(self.playerIndex + 1)", comment: "") + } + } + + private var gameController: GameController? { + didSet { + // Order matters since localDeviceController changes Settings.localControllerPlayerIndex, which sends out NSNotification. + if oldValue == self.localDeviceController { - self.title = NSLocalizedString("Player \(playerIndex + 1)", comment: "") + self.gameController?.playerIndex = self.playerIndex + oldValue?.playerIndex = nil } else { - self.title = NSLocalizedString("Controllers", comment: "") + oldValue?.playerIndex = nil + self.gameController?.playerIndex = self.playerIndex } } } - fileprivate var connectedControllers = ExternalControllerManager.shared.connectedControllers.sorted(by: { $0.playerIndex ?? NSIntegerMax < $1.playerIndex ?? NSIntegerMax }) + private var connectedControllers = ExternalGameControllerManager.shared.connectedControllers.sorted(by: { $0.playerIndex ?? NSIntegerMax < $1.playerIndex ?? NSIntegerMax }) - fileprivate lazy var localDeviceController: LocalDeviceController = { + private lazy var localDeviceController: LocalDeviceController = { let device = LocalDeviceController() device.playerIndex = Settings.localControllerPlayerIndex @@ -52,146 +75,76 @@ class ControllersSettingsViewController: UITableViewController { super.init(coder: aDecoder) - NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalControllerDidConnect(_:)), name: .externalControllerDidConnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalControllerDidDisconnect(_:)), name: .externalControllerDidDisconnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalGameControllerDidConnect(_:)), name: .externalGameControllerDidConnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(ControllersSettingsViewController.externalGameControllerDidDisconnect(_:)), name: .externalGameControllerDidDisconnect, object: nil) } override func viewDidLoad() { super.viewDidLoad() - } - - //MARK: - Storyboards - - - override func prepare(for segue: UIStoryboardSegue, sender: Any?) - { - guard let indexPath = self.tableView.indexPathForSelectedRow else { return } - var controllers = self.connectedControllers - controllers.append(self.localDeviceController) - - // Reset previous controller - if let playerIndex = self.playerIndex, let index = controllers.index(where: { $0.playerIndex == playerIndex }) + let gameControllers = [self.localDeviceController as GameController] + self.connectedControllers + for gameController in gameControllers { - let controller = controllers[index] - controller.playerIndex = nil - } - - switch ControllersSettingsSection(rawValue: (indexPath as NSIndexPath).section)! - { - case .none: break - case .localDevice: self.localDeviceController.playerIndex = self.playerIndex - case .externalControllers: - let controller = self.connectedControllers[(indexPath as NSIndexPath).row] - controller.playerIndex = self.playerIndex - } - - // Updates in case we reset it above, as well as if we updated in the switch statement - Settings.localControllerPlayerIndex = self.localDeviceController.playerIndex - } -} - -private extension ControllersSettingsViewController -{ - dynamic func externalControllerDidConnect(_ notification: Notification) - { - guard let controller = notification.object as? ExternalController else { return } - - if let playerIndex = controller.playerIndex - { - self.connectedControllers.insert(controller, at: playerIndex) - } - else - { - self.connectedControllers.append(controller) - } - - if let index = self.connectedControllers.index(of: controller) - { - if self.connectedControllers.count == 1 + if gameController.playerIndex == self.playerIndex { - self.tableView.insertSections(IndexSet(integer: ControllersSettingsSection.externalControllers.rawValue), with: .fade) + self.gameController = gameController + break } - else - { - self.tableView.insertRows(at: [IndexPath(row: index, section: ControllersSettingsSection.externalControllers.rawValue)], with: .automatic) - } - } - } - - dynamic func externalControllerDidDisconnect(_ notification: Notification) - { - guard let controller = notification.object as? ExternalController else { return } - - if let index = self.connectedControllers.index(of: controller) - { - self.connectedControllers.remove(at: index) - - if self.connectedControllers.count == 0 - { - self.tableView.deleteSections(IndexSet(integer: ControllersSettingsSection.externalControllers.rawValue), with: .fade) - } - else - { - self.tableView.deleteRows(at: [IndexPath(row: index, section: ControllersSettingsSection.externalControllers.rawValue)], with: .automatic) - } - } - - if controller.playerIndex == self.playerIndex - { - self.tableView.reloadSections(IndexSet(integer: ControllersSettingsSection.none.rawValue), with: .none) } } } extension ControllersSettingsViewController { - override func numberOfSections(in tableView: UITableView) -> Int + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - if self.connectedControllers.count == 0 - { - return 2 - } - - return 3 - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int - { - switch ControllersSettingsSection(rawValue: section)! - { - case .none: return 1 - case .localDevice: return 1 - case .externalControllers: return self.connectedControllers.count - } - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - { - let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) - cell.detailTextLabel?.text = nil - cell.accessoryType = .none + guard let identifier = segue.identifier else { return } - if (indexPath as NSIndexPath).section == ControllersSettingsSection.none.rawValue + switch identifier { + case "controllerInputsSegue": + let controllerInputsViewController = (segue.destination as! UINavigationController).topViewController as! ControllerInputsViewController + controllerInputsViewController.gameController = self.gameController + controllerInputsViewController.system = .snes + + default: break + } + } + + @IBAction private func unwindFromControllerControlsViewController(_ segue: UIStoryboardSegue) + { + } +} + +private extension ControllersSettingsViewController +{ + func configure(_ cell: UITableViewCell, for indexPath: IndexPath) + { + cell.accessoryType = .none + cell.detailTextLabel?.text = nil + cell.textLabel?.textColor = .darkText + + switch Section(rawValue: indexPath.section)! + { + case .none: cell.textLabel?.text = NSLocalizedString("None", comment: "") if Settings.localControllerPlayerIndex != self.playerIndex && !self.connectedControllers.contains(where: { $0.playerIndex == self.playerIndex }) { cell.accessoryType = .checkmark } - } - else - { - let controller: ExternalController - if (indexPath as NSIndexPath).section == ControllersSettingsSection.localDevice.rawValue + case .localDevice, .externalControllers: + let controller: GameController + + if indexPath.section == Section.localDevice.rawValue { controller = self.localDeviceController } - else if (indexPath as NSIndexPath).section == ControllersSettingsSection.externalControllers.rawValue + else if indexPath.section == Section.externalControllers.rawValue { - controller = self.connectedControllers[(indexPath as NSIndexPath).row] + controller = self.connectedControllers[indexPath.row] } else { @@ -205,25 +158,216 @@ extension ControllersSettingsViewController cell.accessoryType = .checkmark } else - { + { if let playerIndex = controller.playerIndex { cell.detailTextLabel?.text = NSLocalizedString("Player \(playerIndex + 1)", comment: "") } - } + + case .customizeControls: + cell.textLabel?.text = NSLocalizedString("Customize Controls…", comment: "") + cell.textLabel?.textColor = self.view.tintColor + } + } +} + +private extension ControllersSettingsViewController +{ + @objc func externalGameControllerDidConnect(_ notification: Notification) + { + guard let controller = notification.object as? GameController else { return } + + if let playerIndex = controller.playerIndex + { + // Keep connected controllers sorted. + + self.connectedControllers.insert(controller, at: playerIndex) + } + else + { + self.connectedControllers.append(controller) } + if let index = self.connectedControllers.index(where: { $0 == controller }) + { + self.tableView.beginUpdates() + + if self.connectedControllers.count == 1 + { + self.tableView.insertSections(IndexSet(integer: Section.externalControllers.rawValue), with: .fade) + + if self.connectedControllers.first?.playerIndex == self.playerIndex + { + self.tableView.insertSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + } + else + { + self.tableView.insertRows(at: [IndexPath(row: index, section: Section.externalControllers.rawValue)], with: .automatic) + } + + self.tableView.endUpdates() + } + + if controller.playerIndex == self.playerIndex + { + self.tableView.reloadSections(IndexSet(integer: Section.none.rawValue), with: .none) + self.tableView.reloadSections(IndexSet(integer: Section.localDevice.rawValue), with: .none) + } + } + + @objc func externalGameControllerDidDisconnect(_ notification: Notification) + { + guard let controller = notification.object as? GameController else { return } + + if let index = self.connectedControllers.index(where: { $0 == controller }) + { + self.connectedControllers.remove(at: index) + + self.tableView.beginUpdates() + + if self.connectedControllers.count == 0 + { + self.tableView.deleteSections(IndexSet(integer: Section.externalControllers.rawValue), with: .fade) + + if controller.playerIndex != nil + { + self.tableView.deleteSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + } + else + { + self.tableView.deleteRows(at: [IndexPath(row: index, section: Section.externalControllers.rawValue)], with: .automatic) + } + + self.tableView.endUpdates() + } + + if controller.playerIndex == self.playerIndex + { + self.tableView.reloadSections(IndexSet(integer: Section.none.rawValue), with: .none) + self.tableView.reloadSections(IndexSet(integer: Section.localDevice.rawValue), with: .none) + } + } +} + +extension ControllersSettingsViewController +{ + override func numberOfSections(in tableView: UITableView) -> Int + { + if self.connectedControllers.count == 0 + { + return 2 + } + + if self.gameController == nil || Settings.localControllerPlayerIndex == self.playerIndex + { + return 3 + } + + return 4 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int + { + switch Section(rawValue: section)! + { + case .none: return 0 + case .localDevice: return 1 + case .externalControllers: return self.connectedControllers.count + case .customizeControls: return 1 + } + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell + { + let cell = tableView.dequeueReusableCell(withIdentifier: RSTCellContentGenericCellIdentifier, for: indexPath) + + self.configure(cell, for: indexPath) + return cell } override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - switch ControllersSettingsSection(rawValue: section)! + switch Section(rawValue: section)! { case .none: return nil case .localDevice: return NSLocalizedString("Local Device", comment: "") case .externalControllers: return self.connectedControllers.count > 0 ? NSLocalizedString("External Controllers", comment: "") : "" + case .customizeControls: return nil } } + + override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat + { + if section == Section.none.rawValue + { + return 1 + } + + return UITableViewAutomaticDimension + } +} + +extension ControllersSettingsViewController +{ + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) + { + let previousIndexPath: IndexPath? + + if let gameController = self.gameController + { + if gameController == self.localDeviceController + { + previousIndexPath = IndexPath(row: 0, section: Section.localDevice.rawValue) + } + else if let row = self.connectedControllers.index(where: { $0 == gameController }) + { + previousIndexPath = IndexPath(row: row, section: Section.externalControllers.rawValue) + } + else + { + previousIndexPath = nil + } + } + else + { + previousIndexPath = IndexPath(row: 0, section: Section.none.rawValue) + } + + switch Section(rawValue: indexPath.section)! + { + case .none: self.gameController = nil + case .localDevice: self.gameController = self.localDeviceController + case .externalControllers: self.gameController = self.connectedControllers[indexPath.row] + case .customizeControls: + guard let cell = tableView.cellForRow(at: indexPath) else { return } + self.performSegue(withIdentifier: "controllerInputsSegue", sender: cell) + + return + } + + self.tableView.beginUpdates() + + if let previousIndexPath = previousIndexPath, let cell = tableView.cellForRow(at: previousIndexPath) + { + // Must configure cell directly, or else a strange animation occurs when reloading row on iOS 11. + self.configure(cell, for: previousIndexPath) + } + + self.tableView.reloadRows(at: [indexPath], with: .none) + + if self.numberOfSections(in: self.tableView) > self.tableView.numberOfSections + { + self.tableView.insertSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + else if self.numberOfSections(in: self.tableView) < self.tableView.numberOfSections + { + self.tableView.deleteSections(IndexSet(integer: Section.customizeControls.rawValue), with: .fade) + } + + self.tableView.endUpdates() + } } diff --git a/Delta/Settings/Controllers/InputCalloutView.swift b/Delta/Settings/Controllers/InputCalloutView.swift new file mode 100644 index 0000000..f764f4b --- /dev/null +++ b/Delta/Settings/Controllers/InputCalloutView.swift @@ -0,0 +1,84 @@ +// +// InputCalloutView.swift +// Delta +// +// Created by Riley Testut on 7/9/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import SMCalloutView + +import DeltaCore + +extension InputCalloutView +{ + enum State + { + case normal + case listening + } +} + +class InputCalloutView: SMCalloutView +{ + var input: Input? { + didSet { + self.updateState() + } + } + + var state: State = .normal { + didSet { + self.updateState() + } + } + + private let textLabel: UILabel + + init() + { + self.textLabel = UILabel() + self.textLabel.font = UIFont.boldSystemFont(ofSize: 18.0) + self.textLabel.textAlignment = .center + + super.init(frame: CGRect.zero) + + self.titleView = self.textLabel + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func tintColorDidChange() + { + super.tintColorDidChange() + + self.updateTintColor() + } +} + +private extension InputCalloutView +{ + func updateState() + { + switch self.state + { + case .normal: self.textLabel.text = self.input?.localizedName + case .listening: self.textLabel.text = NSLocalizedString("Press Button", comment: "") + } + + self.updateTintColor() + + self.textLabel.sizeToFit() + } + + func updateTintColor() + { + switch self.state + { + case .normal: self.textLabel.textColor = self.tintColor + case .listening: self.textLabel.textColor = .red + } + } +} diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index 288eb4c..5a6269c 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -9,8 +9,6 @@ import Foundation import DeltaCore -import SNESDeltaCore -import GBADeltaCore import Roxas @@ -25,7 +23,7 @@ extension Settings { case name - case gameType + case system case traits } @@ -42,12 +40,14 @@ struct Settings /// Controllers static var localControllerPlayerIndex: Int? = 0 { didSet { + guard self.localControllerPlayerIndex != oldValue else { return } NotificationCenter.default.post(name: .settingsDidChange, object: nil, userInfo: [NotificationUserInfoKey.name: Name.localControllerPlayerIndex]) } } static var translucentControllerSkinOpacity: CGFloat { set { + guard newValue != self.translucentControllerSkinOpacity else { return } UserDefaults.standard.translucentControllerSkinOpacity = newValue NotificationCenter.default.post(name: .settingsDidChange, object: nil, userInfo: [NotificationUserInfoKey.name: Name.translucentControllerSkinOpacity]) } @@ -72,9 +72,9 @@ struct Settings UserDefaults.standard.register(defaults: defaults) } - static func preferredControllerSkin(for gameType: GameType, traits: DeltaCore.ControllerSkin.Traits) -> ControllerSkin? + static func preferredControllerSkin(for system: System, traits: DeltaCore.ControllerSkin.Traits) -> ControllerSkin? { - guard let userDefaultsKey = self.preferredControllerSkinKey(for: gameType, traits: traits) else { return nil } + guard let userDefaultsKey = self.preferredControllerSkinKey(for: system, traits: traits) else { return nil } let identifier = UserDefaults.standard.string(forKey: userDefaultsKey) @@ -86,7 +86,7 @@ struct Settings if let identifier = identifier { - fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == %@", #keyPath(ControllerSkin.gameType), gameType.rawValue, #keyPath(ControllerSkin.identifier), identifier) + fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == %@", #keyPath(ControllerSkin.gameType), system.gameType.rawValue, #keyPath(ControllerSkin.identifier), identifier) if let controllerSkin = try DatabaseManager.shared.viewContext.fetch(fetchRequest).first { @@ -96,11 +96,11 @@ struct Settings // Controller skin doesn't exist, so fall back to standard controller skin - fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == YES", #keyPath(ControllerSkin.gameType), gameType.rawValue, #keyPath(ControllerSkin.isStandard)) + fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == YES", #keyPath(ControllerSkin.gameType), system.gameType.rawValue, #keyPath(ControllerSkin.isStandard)) if let controllerSkin = try DatabaseManager.shared.viewContext.fetch(fetchRequest).first { - Settings.setPreferredControllerSkin(controllerSkin, for: gameType, traits: traits) + Settings.setPreferredControllerSkin(controllerSkin, for: system, traits: traits) return controllerSkin } } @@ -112,26 +112,29 @@ struct Settings return nil } - static func setPreferredControllerSkin(_ controllerSkin: ControllerSkin, for gameType: GameType, traits: DeltaCore.ControllerSkin.Traits) + static func setPreferredControllerSkin(_ controllerSkin: ControllerSkin, for system: System, traits: DeltaCore.ControllerSkin.Traits) { - guard let userDefaultKey = self.preferredControllerSkinKey(for: gameType, traits: traits) else { return } + guard let userDefaultKey = self.preferredControllerSkinKey(for: system, traits: traits) else { return } + + guard UserDefaults.standard.string(forKey: userDefaultKey) != controllerSkin.identifier else { return } + UserDefaults.standard.set(controllerSkin.identifier, forKey: userDefaultKey) - NotificationCenter.default.post(name: .settingsDidChange, object: controllerSkin, userInfo: [NotificationUserInfoKey.name: Name.preferredControllerSkin, NotificationUserInfoKey.gameType: gameType, NotificationUserInfoKey.traits: traits]) + NotificationCenter.default.post(name: .settingsDidChange, object: controllerSkin, userInfo: [NotificationUserInfoKey.name: Name.preferredControllerSkin, NotificationUserInfoKey.system: system, NotificationUserInfoKey.traits: traits]) } } private extension Settings { - static func preferredControllerSkinKey(for gameType: GameType, traits: DeltaCore.ControllerSkin.Traits) -> String? + static func preferredControllerSkinKey(for system: System, traits: DeltaCore.ControllerSkin.Traits) -> String? { let systemName: String - switch gameType + switch system { - case GameType.snes: systemName = "snes" - case GameType.gba: systemName = "gba" - default: return nil + case .snes: systemName = "snes" + case .gba: systemName = "gba" + case .gbc: systemName = "gbc" } let orientation: String diff --git a/Delta/Settings/SettingsViewController.swift b/Delta/Settings/SettingsViewController.swift index f18410d..38efe76 100644 --- a/Delta/Settings/SettingsViewController.swift +++ b/Delta/Settings/SettingsViewController.swift @@ -7,37 +7,49 @@ // import UIKit + import DeltaCore -extension SettingsViewController +import Roxas + +private extension SettingsViewController { - fileprivate enum Section: Int + enum Section: Int { case controllers case controllerSkins case controllerOpacity } - fileprivate enum Segue: String + enum Segue: String { case controllers = "controllersSegue" case controllerSkins = "controllerSkinsSegue" } + + enum ControllerSkinsRow: Int + { + case snes + case gba + case gbc + } } class SettingsViewController: UITableViewController { - @IBOutlet fileprivate var controllerOpacityLabel: UILabel! - @IBOutlet fileprivate var controllerOpacitySlider: UISlider! + @IBOutlet private var controllerOpacityLabel: UILabel! + @IBOutlet private var controllerOpacitySlider: UISlider! - fileprivate var selectionFeedbackGenerator: UISelectionFeedbackGenerator? + private var selectionFeedbackGenerator: UISelectionFeedbackGenerator? + + private var previousSelectedRowIndexPath: IndexPath? required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) - NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalControllerDidConnect(_:)), name: .externalControllerDidConnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalControllerDidDisconnect(_:)), name: .externalControllerDidDisconnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalGameControllerDidConnect(_:)), name: .externalGameControllerDidConnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.externalGameControllerDidDisconnect(_:)), name: .externalGameControllerDidDisconnect, object: nil) } override func viewDidLoad() @@ -52,8 +64,15 @@ class SettingsViewController: UITableViewController { super.viewWillAppear(animated) - if let indexPath = self.tableView.indexPathForSelectedRow + if let indexPath = self.previousSelectedRowIndexPath { + if indexPath.section == Section.controllers.rawValue + { + // Update and temporarily re-select selected row. + self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) + self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) + } + self.tableView.deselectRow(at: indexPath, animated: true) } } @@ -72,6 +91,8 @@ class SettingsViewController: UITableViewController let indexPath = self.tableView.indexPath(for: cell) else { return } + self.previousSelectedRowIndexPath = indexPath + switch segueType { case Segue.controllers: @@ -79,13 +100,14 @@ class SettingsViewController: UITableViewController controllersSettingsViewController.playerIndex = indexPath.row case Segue.controllerSkins: - let gameTypeControllerSkinsViewController = segue.destination as! GameTypeControllerSkinsViewController + let systemControllerSkinsViewController = segue.destination as! SystemControllerSkinsViewController - switch indexPath.row + let row = ControllerSkinsRow(rawValue: indexPath.row)! + switch row { - case 0: gameTypeControllerSkinsViewController.gameType = .snes - case 1: gameTypeControllerSkinsViewController.gameType = .gba - default: break + case .snes: systemControllerSkinsViewController.system = .snes + case .gba: systemControllerSkinsViewController.system = .gba + case .gbc: systemControllerSkinsViewController.system = .gbc } } } @@ -100,18 +122,6 @@ private extension SettingsViewController } } -private extension SettingsViewController -{ - @IBAction func unwindFromControllersSettingsViewController(_ segue: UIStoryboardSegue) - { - let indexPath = self.tableView.indexPathForSelectedRow - - self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) - - self.tableView.selectRow(at: indexPath, animated: true, scrollPosition: UITableViewScrollPosition.none) - } -} - private extension SettingsViewController { @IBAction func beginChangingControllerOpacity(with sender: UISlider) @@ -143,12 +153,12 @@ private extension SettingsViewController private extension SettingsViewController { - dynamic func externalControllerDidConnect(_ notification: Notification) + @objc func externalGameControllerDidConnect(_ notification: Notification) { self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) } - dynamic func externalControllerDidDisconnect(_ notification: Notification) + @objc func externalGameControllerDidDisconnect(_ notification: Notification) { self.tableView.reloadSections(IndexSet(integer: Section.controllers.rawValue), with: .none) } @@ -162,6 +172,7 @@ extension SettingsViewController switch section { case .controllers: return 1 // Temporarily hide other controller indexes until controller logic is finalized + case .controllerSkins: return System.supportedSystems.count default: return super.tableView(tableView, numberOfRowsInSection: sectionIndex) } } @@ -169,24 +180,29 @@ extension SettingsViewController override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = super.tableView(tableView, cellForRowAt: indexPath) - - if indexPath.section == Section.controllers.rawValue + + let section = Section(rawValue: indexPath.section)! + switch section { + case .controllers: if indexPath.row == Settings.localControllerPlayerIndex { cell.detailTextLabel?.text = UIDevice.current.name } - else if let index = ExternalControllerManager.shared.connectedControllers.index(where: { $0.playerIndex == indexPath.row }) + else if let index = ExternalGameControllerManager.shared.connectedControllers.index(where: { $0.playerIndex == indexPath.row }) { - let controller = ExternalControllerManager.shared.connectedControllers[index] + let controller = ExternalGameControllerManager.shared.connectedControllers[index] cell.detailTextLabel?.text = controller.name } else { cell.detailTextLabel?.text = nil } + + case .controllerSkins: cell.textLabel?.text = System.supportedSystems[indexPath.row].localizedName + default: break } - + return cell } @@ -194,7 +210,7 @@ extension SettingsViewController { let cell = tableView.cellForRow(at: indexPath) let section = Section(rawValue: indexPath.section)! - + switch section { case Section.controllers: self.performSegue(withIdentifier: Segue.controllers.rawValue, sender: cell) diff --git a/Delta/Supporting Files/Info.plist b/Delta/Supporting Files/Info.plist index 5ba993f..6c68b74 100644 --- a/Delta/Supporting Files/Info.plist +++ b/Delta/Supporting Files/Info.plist @@ -60,6 +60,20 @@ com.pkware.zip-archive + + CFBundleTypeIconFiles + + CFBundleTypeName + GBC Game + CFBundleTypeRole + Viewer + LSHandlerRank + Owner + LSItemContentTypes + + com.rileytestut.delta.game.gbc + + CFBundleExecutable $(EXECUTABLE_NAME) @@ -82,17 +96,17 @@ NSAppTransportSecurity NSExceptionDomains - - gamefaqs.net - - NSIncludesSubdomains - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - NSTemporaryExceptionMinimumTLSVersion - TLSv1.1 - - + + gamefaqs.net + + NSIncludesSubdomains + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + NSTemporaryExceptionMinimumTLSVersion + TLSv1.1 + + UIFileSharingEnabled @@ -112,6 +126,8 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSPhotoLibraryUsageDescription + Press "OK" to allow Delta to use images from your Photo Library as game artwork. UTExportedTypeDeclarations @@ -179,6 +195,38 @@ deltaskin + + UTTypeConformsTo + + com.rileytestut.delta.game + + UTTypeDescription + GBC Game + UTTypeIdentifier + com.rileytestut.delta.game.gbc + UTTypeTagSpecification + + public.filename-extension + + gbc + gb + + + + Fabric + + APIKey + d542629b4f6625cfd5564d27318550321272076d + Kits + + + KitInfo + + KitName + Crashlytics + + + diff --git a/Delta/Systems/System.swift b/Delta/Systems/System.swift new file mode 100644 index 0000000..3cb147a --- /dev/null +++ b/Delta/Systems/System.swift @@ -0,0 +1,103 @@ +// +// System.swift +// Delta +// +// Created by Riley Testut on 4/30/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import DeltaCore + +import SNESDeltaCore +import GBADeltaCore +import GBCDeltaCore + +extension GameType +{ + init?(fileExtension: String) + { + switch fileExtension.lowercased() + { + case "smc", "sfc", "fig": self = .snes + case "gba": self = .gba + case "gbc", "gb": self = .gbc + default: return nil + } + } +} + +enum System +{ + case snes + case gba + case gbc + + static var supportedSystems: [System] { + return [.snes, .gba, .gbc] + } +} + +extension System +{ + var localizedName: String { + switch self + { + case .snes: return NSLocalizedString("Super Nintendo", comment: "") + case .gba: return NSLocalizedString("Game Boy Advance", comment: "") + case .gbc: return NSLocalizedString("Game Boy Color", comment: "") + } + } + + var localizedShortName: String { + switch self + { + case .snes: return NSLocalizedString("SNES", comment: "") + case .gba: return NSLocalizedString("GBA", comment: "") + case .gbc: return NSLocalizedString("GBC", comment: "") + } + } + + var year: Int { + switch self + { + case .snes: return 1990 + case .gba: return 2001 + case .gbc: return 1998 + } + } +} + +extension System +{ + var deltaCore: DeltaCoreProtocol { + switch self + { + case .snes: return SNES.core + case .gba: return GBA.core + case .gbc: return GBC.core + } + } +} + +extension System +{ + var gameType: GameType { + switch self + { + case .snes: return .snes + case .gba: return .gba + case .gbc: return .gbc + } + } + + init?(gameType: GameType) + { + switch gameType + { + case GameType.snes: self = .snes + case GameType.gba: self = .gba + case GameType.gbc: self = .gbc + default: return nil + } + } +} diff --git a/External/Roxas b/External/Roxas index 9143d01..192682b 160000 --- a/External/Roxas +++ b/External/Roxas @@ -1 +1 @@ -Subproject commit 9143d01afa25f07da8f1cdb5390b49f4efb1a75f +Subproject commit 192682bb389830944d257946d870e1d50ae4c42b diff --git a/Podfile b/Podfile index e9a9e31..55982e7 100644 --- a/Podfile +++ b/Podfile @@ -7,4 +7,7 @@ target 'Delta' do pod 'FileMD5Hash', '~> 2.0.0' pod 'SQLite.swift', '~> 0.11.0' pod 'SDWebImage', '~> 3.8' -end + pod 'Fabric', '~> 1.6.0' + pod 'Crashlytics', '~> 3.8.0' + pod 'SMCalloutView' +end \ No newline at end of file diff --git a/Podfile.lock b/Podfile.lock index 39f37a3..746dd93 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,22 +1,32 @@ PODS: + - Crashlytics (3.8.6): + - Fabric (~> 1.6.3) + - Fabric (1.6.13) - FileMD5Hash (2.0.0) - SDWebImage (3.8.2): - SDWebImage/Core (= 3.8.2) - SDWebImage/Core (3.8.2) - - SQLite.swift (0.11.3): - - SQLite.swift/standard (= 0.11.3) - - SQLite.swift/standard (0.11.3) + - SMCalloutView (2.1.5) + - SQLite.swift (0.11.4): + - SQLite.swift/standard (= 0.11.4) + - SQLite.swift/standard (0.11.4) DEPENDENCIES: + - Crashlytics (~> 3.8.0) + - Fabric (~> 1.6.0) - FileMD5Hash (~> 2.0.0) - SDWebImage (~> 3.8) + - SMCalloutView - SQLite.swift (~> 0.11.0) SPEC CHECKSUMS: + Crashlytics: 95d05f4e4c19a771250c4bd9ce344d996de32bbf + Fabric: 2fb5676bc811af011a04513451f463dac6803206 FileMD5Hash: 3ed69cc19a21ff4d30ae8833fc104275ad2c7de0 SDWebImage: '098e97e6176540799c27e804c96653ee0833d13c' - SQLite.swift: 99b36c22084427f0abbeb957556ce1528cf10bb3 + SMCalloutView: 5c0ee363dc8e7204b2fda17dfad38c93e9e23481 + SQLite.swift: 3e3bee21da701b5b9f87c4a672cb54f233505692 -PODFILE CHECKSUM: e583277236d810a5e080371e73349e52a4aaa25e +PODFILE CHECKSUM: a1fb0ce1f1bb0e73380460cc4f946d297a4d5ff1 -COCOAPODS: 1.2.0 +COCOAPODS: 1.2.1 diff --git a/Pods/Crashlytics/Crashlytics.framework/README b/Pods/Crashlytics/Crashlytics.framework/README new file mode 100644 index 0000000..3ebf767 --- /dev/null +++ b/Pods/Crashlytics/Crashlytics.framework/README @@ -0,0 +1 @@ +We've now combined all our supported platforms into a single podspec. As a result, we moved our submit script to a new location for Cocoapods projects: ${PODS_ROOT}/Crashlytics/submit. To avoid breaking functionality that references the old location of the submit, we've placed this dummy script that calls to the correct location, while providing a helpful warning if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! diff --git a/Pods/Crashlytics/Crashlytics.framework/submit b/Pods/Crashlytics/Crashlytics.framework/submit new file mode 100755 index 0000000..b7de4e3 --- /dev/null +++ b/Pods/Crashlytics/Crashlytics.framework/submit @@ -0,0 +1,6 @@ +if [[ -z $PODS_ROOT ]]; then +echo "error: The submit binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Crashlytics/submit'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the submit binary to fix this issue." +else +echo "warning: The submit script is now located at '$"{"PODS_ROOT"}"/Crashlytics/submit'. To remove this warning, update your path to point to this new location." +sh "${PODS_ROOT}/Crashlytics/submit" "$@" +fi diff --git a/Pods/Crashlytics/README.md b/Pods/Crashlytics/README.md new file mode 100644 index 0000000..2715a06 --- /dev/null +++ b/Pods/Crashlytics/README.md @@ -0,0 +1,39 @@ +![Crashlytics Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-crashlytics-header.png) + +Part of [Google Fabric](https://get.fabric.io), [Crashlytics](http://try.crashlytics.com/) offers the most powerful, yet lightest weight crash reporting solution for iOS. Crashlytics also provides real-time analytics through [Answers](https://answers.io/) and app distributions to testers using [Beta](http://try.crashlytics.com/beta/). + +## Setup + +1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. + +1. Open Fabric.app, login and select the Crashlytics SDK. + + ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) + +1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. + + ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) + +1. Select the Podfile option and follow the installation instructions to update your Podfile. **Note:** the Crashlytics Pod includes Answers. If you have Answers included as a separate Pod it should be removed from your Podfile to avoid duplicate symbol errors. + + ``` + pod 'Fabric' + pod 'Crashlytics' + ``` + +1. Run `pod install` + +1. Add a Run Script Build Phase and build your app. + + ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) + +1. Initialize the SDK by inserting code outlined in the Fabric.app. + +1. Run your app to finish the installation. + +## Resources + +* [Documentation](https://docs.fabric.io/apple/crashlytics/overview.html) +* [Forums](https://stackoverflow.com/questions/tagged/google-fabric) +* [Website](http://try.crashlytics.com/) +* Follow us on Twitter: [@fabric](https://twitter.com/fabric) and [@crashlytics](https://twitter.com/crashlytics) diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics b/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics new file mode 100755 index 0000000..90f7551 Binary files /dev/null and b/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics differ diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h new file mode 100644 index 0000000..6ec011d --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/ANSCompatibility.h @@ -0,0 +1,31 @@ +// +// ANSCompatibility.h +// AnswersKit +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#pragma once + +#if !__has_feature(nullability) +#define nonnull +#define nullable +#define _Nullable +#define _Nonnull +#endif + +#ifndef NS_ASSUME_NONNULL_BEGIN +#define NS_ASSUME_NONNULL_BEGIN +#endif + +#ifndef NS_ASSUME_NONNULL_END +#define NS_ASSUME_NONNULL_END +#endif + +#if __has_feature(objc_generics) +#define ANS_GENERIC_NSARRAY(type) NSArray +#define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#else +#define ANS_GENERIC_NSARRAY(type) NSArray +#define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#endif diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h new file mode 100644 index 0000000..710eb50 --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Answers.h @@ -0,0 +1,210 @@ +// +// Answers.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#import +#import "ANSCompatibility.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * This class exposes the Answers Events API, allowing you to track key + * user user actions and metrics in your app. + */ +@interface Answers : NSObject + +/** + * Log a Sign Up event to see users signing up for your app in real-time, understand how + * many users are signing up with different methods and their success rate signing up. + * + * @param signUpMethodOrNil The method by which a user logged in, e.g. Twitter or Digits. + * @param signUpSucceededOrNil The ultimate success or failure of the login + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logSignUpWithMethod:(nullable NSString *)signUpMethodOrNil + success:(nullable NSNumber *)signUpSucceededOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log an Log In event to see users logging into your app in real-time, understand how many + * users are logging in with different methods and their success rate logging into your app. + * + * @param loginMethodOrNil The method by which a user logged in, e.g. email, Twitter or Digits. + * @param loginSucceededOrNil The ultimate success or failure of the login + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logLoginWithMethod:(nullable NSString *)loginMethodOrNil + success:(nullable NSNumber *)loginSucceededOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Share event to see users sharing from your app in real-time, letting you + * understand what content they're sharing from the type or genre down to the specific id. + * + * @param shareMethodOrNil The method by which a user shared, e.g. email, Twitter, SMS. + * @param contentNameOrNil The human readable name for this piece of content. + * @param contentTypeOrNil The type of content shared. + * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logShareWithMethod:(nullable NSString *)shareMethodOrNil + contentName:(nullable NSString *)contentNameOrNil + contentType:(nullable NSString *)contentTypeOrNil + contentId:(nullable NSString *)contentIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log an Invite Event to track how users are inviting other users into + * your application. + * + * @param inviteMethodOrNil The method of invitation, e.g. GameCenter, Twitter, email. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logInviteWithMethod:(nullable NSString *)inviteMethodOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Purchase event to see your revenue in real-time, understand how many users are making purchases, see which + * items are most popular, and track plenty of other important purchase-related metrics. + * + * @param itemPriceOrNil The purchased item's price. + * @param currencyOrNil The ISO4217 currency code. Example: USD + * @param purchaseSucceededOrNil Was the purchase succesful or unsuccesful + * @param itemNameOrNil The human-readable form of the item's name. Example: + * @param itemTypeOrNil The type, or genre of the item. Example: Song + * @param itemIdOrNil The machine-readable, unique item identifier Example: SKU + * @param customAttributesOrNil A dictionary of custom attributes to associate with this purchase. + */ ++ (void)logPurchaseWithPrice:(nullable NSDecimalNumber *)itemPriceOrNil + currency:(nullable NSString *)currencyOrNil + success:(nullable NSNumber *)purchaseSucceededOrNil + itemName:(nullable NSString *)itemNameOrNil + itemType:(nullable NSString *)itemTypeOrNil + itemId:(nullable NSString *)itemIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Level Start Event to track where users are in your game. + * + * @param levelNameOrNil The level name + * @param customAttributesOrNil A dictionary of custom attributes to associate with this level start event. + */ ++ (void)logLevelStart:(nullable NSString *)levelNameOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Level End event to track how users are completing levels in your game. + * + * @param levelNameOrNil The name of the level completed, E.G. "1" or "Training" + * @param scoreOrNil The score the user completed the level with. + * @param levelCompletedSuccesfullyOrNil A boolean representing whether or not the level was completed succesfully. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logLevelEnd:(nullable NSString *)levelNameOrNil + score:(nullable NSNumber *)scoreOrNil + success:(nullable NSNumber *)levelCompletedSuccesfullyOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log an Add to Cart event to see users adding items to a shopping cart in real-time, understand how + * many users start the purchase flow, see which items are most popular, and track plenty of other important + * purchase-related metrics. + * + * @param itemPriceOrNil The purchased item's price. + * @param currencyOrNil The ISO4217 currency code. Example: USD + * @param itemNameOrNil The human-readable form of the item's name. Example: + * @param itemTypeOrNil The type, or genre of the item. Example: Song + * @param itemIdOrNil The machine-readable, unique item identifier Example: SKU + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logAddToCartWithPrice:(nullable NSDecimalNumber *)itemPriceOrNil + currency:(nullable NSString *)currencyOrNil + itemName:(nullable NSString *)itemNameOrNil + itemType:(nullable NSString *)itemTypeOrNil + itemId:(nullable NSString *)itemIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Start Checkout event to see users moving through the purchase funnel in real-time, understand how many + * users are doing this and how much they're spending per checkout, and see how it related to other important + * purchase-related metrics. + * + * @param totalPriceOrNil The total price of the cart. + * @param currencyOrNil The ISO4217 currency code. Example: USD + * @param itemCountOrNil The number of items in the cart. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logStartCheckoutWithPrice:(nullable NSDecimalNumber *)totalPriceOrNil + currency:(nullable NSString *)currencyOrNil + itemCount:(nullable NSNumber *)itemCountOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Rating event to see users rating content within your app in real-time and understand what + * content is most engaging, from the type or genre down to the specific id. + * + * @param ratingOrNil The integer rating given by the user. + * @param contentNameOrNil The human readable name for this piece of content. + * @param contentTypeOrNil The type of content shared. + * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logRating:(nullable NSNumber *)ratingOrNil + contentName:(nullable NSString *)contentNameOrNil + contentType:(nullable NSString *)contentTypeOrNil + contentId:(nullable NSString *)contentIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Content View event to see users viewing content within your app in real-time and + * understand what content is most engaging, from the type or genre down to the specific id. + * + * @param contentNameOrNil The human readable name for this piece of content. + * @param contentTypeOrNil The type of content shared. + * @param contentIdOrNil The unique identifier for this piece of content. Useful for finding the top shared item. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logContentViewWithName:(nullable NSString *)contentNameOrNil + contentType:(nullable NSString *)contentTypeOrNil + contentId:(nullable NSString *)contentIdOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Search event allows you to see users searching within your app in real-time and understand + * exactly what they're searching for. + * + * @param queryOrNil The user's query. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. + */ ++ (void)logSearchWithQuery:(nullable NSString *)queryOrNil + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +/** + * Log a Custom Event to see user actions that are uniquely important for your app in real-time, to see how often + * they're performing these actions with breakdowns by different categories you add. Use a human-readable name for + * the name of the event, since this is how the event will appear in Answers. + * + * @param eventName The human-readable name for the event. + * @param customAttributesOrNil A dictionary of custom attributes to associate with this event. Attribute keys + * must be NSString and and values must be NSNumber or NSString. + * @discussion How we treat NSNumbers: + * We will provide information about the distribution of values over time. + * + * How we treat NSStrings: + * NSStrings are used as categorical data, allowing comparison across different category values. + * Strings are limited to a maximum length of 100 characters, attributes over this length will be + * truncated. + * + * When tracking the Tweet views to better understand user engagement, sending the tweet's length + * and the type of media present in the tweet allows you to track how tweet length and the type of media influence + * engagement. + */ ++ (void)logCustomEventWithName:(NSString *)eventName + customAttributes:(nullable ANS_GENERIC_NSDICTIONARY(NSString *, id) *)customAttributesOrNil; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h new file mode 100644 index 0000000..1526b0d --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSAttributes.h @@ -0,0 +1,33 @@ +// +// CLSAttributes.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#pragma once + +#define CLS_DEPRECATED(x) __attribute__ ((deprecated(x))) + +#if !__has_feature(nullability) + #define nonnull + #define nullable + #define _Nullable + #define _Nonnull +#endif + +#ifndef NS_ASSUME_NONNULL_BEGIN + #define NS_ASSUME_NONNULL_BEGIN +#endif + +#ifndef NS_ASSUME_NONNULL_END + #define NS_ASSUME_NONNULL_END +#endif + +#if __has_feature(objc_generics) + #define CLS_GENERIC_NSARRAY(type) NSArray + #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#else + #define CLS_GENERIC_NSARRAY(type) NSArray + #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary +#endif diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h new file mode 100644 index 0000000..59590d5 --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSLogging.h @@ -0,0 +1,64 @@ +// +// CLSLogging.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// +#ifdef __OBJC__ +#import "CLSAttributes.h" +#import + +NS_ASSUME_NONNULL_BEGIN +#endif + + + +/** + * + * The CLS_LOG macro provides as easy way to gather more information in your log messages that are + * sent with your crash data. CLS_LOG prepends your custom log message with the function name and + * line number where the macro was used. If your app was built with the DEBUG preprocessor macro + * defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog. + * If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only. + * + * Example output: + * -[AppDelegate login:] line 134 $ login start + * + * If you would like to change this macro, create a new header file, unset our define and then define + * your own version. Make sure this new header file is imported after the Crashlytics header file. + * + * #undef CLS_LOG + * #define CLS_LOG(__FORMAT__, ...) CLSNSLog... + * + **/ +#ifdef __OBJC__ +#ifdef DEBUG +#define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) +#else +#define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) +#endif +#endif + +/** + * + * Add logging that will be sent with your crash data. This logging will not show up in the system.log + * and will only be visible in your Crashlytics dashboard. + * + **/ + +#ifdef __OBJC__ +OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); +OBJC_EXTERN void CLSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); + +/** + * + * Add logging that will be sent with your crash data. This logging will show up in the system.log + * and your Crashlytics dashboard. It is not recommended for Release builds. + * + **/ +OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); +OBJC_EXTERN void CLSNSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); + + +NS_ASSUME_NONNULL_END +#endif diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h new file mode 100644 index 0000000..5f7d334 --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSReport.h @@ -0,0 +1,103 @@ +// +// CLSReport.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#import +#import "CLSAttributes.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * The CLSCrashReport protocol is deprecated. See the CLSReport class and the CrashyticsDelegate changes for details. + **/ +@protocol CLSCrashReport + +@property (nonatomic, copy, readonly) NSString *identifier; +@property (nonatomic, copy, readonly) NSDictionary *customKeys; +@property (nonatomic, copy, readonly) NSString *bundleVersion; +@property (nonatomic, copy, readonly) NSString *bundleShortVersionString; +@property (nonatomic, readonly, nullable) NSDate *crashedOnDate; +@property (nonatomic, copy, readonly) NSString *OSVersion; +@property (nonatomic, copy, readonly) NSString *OSBuildVersion; + +@end + +/** + * The CLSReport exposes an interface to the phsyical report that Crashlytics has created. You can + * use this class to get information about the event, and can also set some values after the + * event has occured. + **/ +@interface CLSReport : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * Returns the session identifier for the report. + **/ +@property (nonatomic, copy, readonly) NSString *identifier; + +/** + * Returns the custom key value data for the report. + **/ +@property (nonatomic, copy, readonly) NSDictionary *customKeys; + +/** + * Returns the CFBundleVersion of the application that generated the report. + **/ +@property (nonatomic, copy, readonly) NSString *bundleVersion; + +/** + * Returns the CFBundleShortVersionString of the application that generated the report. + **/ +@property (nonatomic, copy, readonly) NSString *bundleShortVersionString; + +/** + * Returns the date that the report was created. + **/ +@property (nonatomic, copy, readonly) NSDate *dateCreated; + +/** + * Returns the os version that the application crashed on. + **/ +@property (nonatomic, copy, readonly) NSString *OSVersion; + +/** + * Returns the os build version that the application crashed on. + **/ +@property (nonatomic, copy, readonly) NSString *OSBuildVersion; + +/** + * Returns YES if the report contains any crash information, otherwise returns NO. + **/ +@property (nonatomic, assign, readonly) BOOL isCrash; + +/** + * You can use this method to set, after the event, additional custom keys. The rules + * and semantics for this method are the same as those documented in Crashlytics.h. Be aware + * that the maximum size and count of custom keys is still enforced, and you can overwrite keys + * and/or cause excess keys to be deleted by using this method. + **/ +- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; + +/** + * Record an application-specific user identifier. See Crashlytics.h for details. + **/ +@property (nonatomic, copy, nullable) NSString * userIdentifier; + +/** + * Record a user name. See Crashlytics.h for details. + **/ +@property (nonatomic, copy, nullable) NSString * userName; + +/** + * Record a user email. See Crashlytics.h for details. + **/ +@property (nonatomic, copy, nullable) NSString * userEmail; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h new file mode 100644 index 0000000..cdb5596 --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/CLSStackFrame.h @@ -0,0 +1,38 @@ +// +// CLSStackFrame.h +// Crashlytics +// +// Copyright 2015 Crashlytics, Inc. All rights reserved. +// + +#import +#import "CLSAttributes.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * + * This class is used in conjunction with -[Crashlytics recordCustomExceptionName:reason:frameArray:] to + * record information about non-ObjC/C++ exceptions. All information included here will be displayed + * in the Crashlytics UI, and can influence crash grouping. Be particularly careful with the use of the + * address property. If set, Crashlytics will attempt symbolication and could overwrite other properities + * in the process. + * + **/ +@interface CLSStackFrame : NSObject + ++ (instancetype)stackFrame; ++ (instancetype)stackFrameWithAddress:(NSUInteger)address; ++ (instancetype)stackFrameWithSymbol:(NSString *)symbol; + +@property (nonatomic, copy, nullable) NSString *symbol; +@property (nonatomic, copy, nullable) NSString *rawSymbol; +@property (nonatomic, copy, nullable) NSString *library; +@property (nonatomic, copy, nullable) NSString *fileName; +@property (nonatomic, assign) uint32_t lineNumber; +@property (nonatomic, assign) uint64_t offset; +@property (nonatomic, assign) uint64_t address; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h new file mode 100644 index 0000000..734dec3 --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Headers/Crashlytics.h @@ -0,0 +1,288 @@ +// +// Crashlytics.h +// Crashlytics +// +// Copyright (c) 2015 Crashlytics, Inc. All rights reserved. +// + +#import + +#import "CLSAttributes.h" +#import "CLSLogging.h" +#import "CLSReport.h" +#import "CLSStackFrame.h" +#import "Answers.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol CrashlyticsDelegate; + +/** + * Crashlytics. Handles configuration and initialization of Crashlytics. + * + * Note: The Crashlytics class cannot be subclassed. If this is causing you pain for + * testing, we suggest using either a wrapper class or a protocol extension. + */ +@interface Crashlytics : NSObject + +@property (nonatomic, readonly, copy) NSString *APIKey; +@property (nonatomic, readonly, copy) NSString *version; +@property (nonatomic, assign) BOOL debugMode; + +/** + * + * The delegate can be used to influence decisions on reporting and behavior, as well as reacting + * to previous crashes. + * + * Make certain that the delegate is setup before starting Crashlytics with startWithAPIKey:... or + * via +[Fabric with:...]. Failure to do will result in missing any delegate callbacks that occur + * synchronously during start. + * + **/ +@property (nonatomic, assign, nullable) id delegate; + +/** + * The recommended way to install Crashlytics into your application is to place a call to +startWithAPIKey: + * in your -application:didFinishLaunchingWithOptions: or -applicationDidFinishLaunching: + * method. + * + * Note: Starting with 3.0, the submission process has been significantly improved. The delay parameter + * is no longer required to throttle submissions on launch, performance will be great without it. + * + * @param apiKey The Crashlytics API Key for this app + * + * @return The singleton Crashlytics instance + */ ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey; ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay CLS_DEPRECATED("Crashlytics no longer needs or uses the delay parameter. Please use +startWithAPIKey: instead."); + +/** + * If you need the functionality provided by the CrashlyticsDelegate protocol, you can use + * these convenience methods to activate the framework and set the delegate in one call. + * + * @param apiKey The Crashlytics API Key for this app + * @param delegate A delegate object which conforms to CrashlyticsDelegate. + * + * @return The singleton Crashlytics instance + */ ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(nullable id)delegate; ++ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(nullable id)delegate afterDelay:(NSTimeInterval)delay CLS_DEPRECATED("Crashlytics no longer needs or uses the delay parameter. Please use +startWithAPIKey:delegate: instead."); + +/** + * Access the singleton Crashlytics instance. + * + * @return The singleton Crashlytics instance + */ ++ (Crashlytics *)sharedInstance; + +/** + * The easiest way to cause a crash - great for testing! + */ +- (void)crash; + +/** + * The easiest way to cause a crash with an exception - great for testing. + */ +- (void)throwException; + +/** + * Specify a user identifier which will be visible in the Crashlytics UI. + * + * Many of our customers have requested the ability to tie crashes to specific end-users of their + * application in order to facilitate responses to support requests or permit the ability to reach + * out for more information. We allow you to specify up to three separate values for display within + * the Crashlytics UI - but please be mindful of your end-user's privacy. + * + * We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record + * in your system. This could be a database id, hash, or other value that is meaningless to a + * third-party observer but can be indexed and queried by you. + * + * Optionally, you may also specify the end-user's name or username, as well as email address if you + * do not have a system that works well with obscured identifiers. + * + * Pursuant to our EULA, this data is transferred securely throughout our system and we will not + * disseminate end-user data unless required to by law. That said, if you choose to provide end-user + * contact information, we strongly recommend that you disclose this in your application's privacy + * policy. Data privacy is of our utmost concern. + * + * @param identifier An arbitrary user identifier string which ties an end-user to a record in your system. + */ +- (void)setUserIdentifier:(nullable NSString *)identifier; + +/** + * Specify a user name which will be visible in the Crashlytics UI. + * Please be mindful of your end-user's privacy and see if setUserIdentifier: can fulfil your needs. + * @see setUserIdentifier: + * + * @param name An end user's name. + */ +- (void)setUserName:(nullable NSString *)name; + +/** + * Specify a user email which will be visible in the Crashlytics UI. + * Please be mindful of your end-user's privacy and see if setUserIdentifier: can fulfil your needs. + * + * @see setUserIdentifier: + * + * @param email An end user's email address. + */ +- (void)setUserEmail:(nullable NSString *)email; + ++ (void)setUserIdentifier:(nullable NSString *)identifier CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setUserName:(nullable NSString *)name CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setUserEmail:(nullable NSString *)email CLS_DEPRECATED("Please access this method via +sharedInstance"); + +/** + * Set a value for a for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * When setting an object value, the object is converted to a string. This is typically done by calling + * -[NSObject description]. + * + * @param value The object to be associated with the key + * @param key The key with which to associate the value + */ +- (void)setObjectValue:(nullable id)value forKey:(NSString *)key; + +/** + * Set an int value for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * + * @param value The integer value to be set + * @param key The key with which to associate the value + */ +- (void)setIntValue:(int)value forKey:(NSString *)key; + +/** + * Set an BOOL value for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * + * @param value The BOOL value to be set + * @param key The key with which to associate the value + */ +- (void)setBoolValue:(BOOL)value forKey:(NSString *)key; + +/** + * Set an float value for a key to be associated with your crash data which will be visible in the Crashlytics UI. + * + * @param value The float value to be set + * @param key The key with which to associate the value + */ +- (void)setFloatValue:(float)value forKey:(NSString *)key; + ++ (void)setObjectValue:(nullable id)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setIntValue:(int)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setBoolValue:(BOOL)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); ++ (void)setFloatValue:(float)value forKey:(NSString *)key CLS_DEPRECATED("Please access this method via +sharedInstance"); + +/** + * This method can be used to record a single exception structure in a report. This is particularly useful + * when your code interacts with non-native languages like Lua, C#, or Javascript. This call can be + * expensive and should only be used shortly before process termination. This API is not intended be to used + * to log NSException objects. All safely-reportable NSExceptions are automatically captured by + * Crashlytics. + * + * @param name The name of the custom exception + * @param reason The reason this exception occured + * @param frameArray An array of CLSStackFrame objects + */ +- (void)recordCustomExceptionName:(NSString *)name reason:(nullable NSString *)reason frameArray:(CLS_GENERIC_NSARRAY(CLSStackFrame *) *)frameArray; + +/** + * + * This allows you to record a non-fatal event, described by an NSError object. These events will be grouped and + * displayed similarly to crashes. Keep in mind that this method can be expensive. Also, the total number of + * NSErrors that can be recorded during your app's life-cycle is limited by a fixed-size circular buffer. If the + * buffer is overrun, the oldest data is dropped. Errors are relayed to Crashlytics on a subsequent launch + * of your application. + * + * You can also use the -recordError:withAdditionalUserInfo: to include additional context not represented + * by the NSError instance itself. + * + **/ +- (void)recordError:(NSError *)error; +- (void)recordError:(NSError *)error withAdditionalUserInfo:(nullable CLS_GENERIC_NSDICTIONARY(NSString *, id) *)userInfo; + +- (void)logEvent:(NSString *)eventName CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); +- (void)logEvent:(NSString *)eventName attributes:(nullable NSDictionary *) attributes CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); ++ (void)logEvent:(NSString *)eventName CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); ++ (void)logEvent:(NSString *)eventName attributes:(nullable NSDictionary *) attributes CLS_DEPRECATED("Please refer to Answers +logCustomEventWithName:"); + +@end + +/** + * + * The CrashlyticsDelegate protocol provides a mechanism for your application to take + * action on events that occur in the Crashlytics crash reporting system. You can make + * use of these calls by assigning an object to the Crashlytics' delegate property directly, + * or through the convenience +startWithAPIKey:delegate: method. + * + */ +@protocol CrashlyticsDelegate +@optional + + +- (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics CLS_DEPRECATED("Please refer to -crashlyticsDidDetectReportForLastExecution:"); +- (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id )crash CLS_DEPRECATED("Please refer to -crashlyticsDidDetectReportForLastExecution:"); + +/** + * + * Called when a Crashlytics instance has determined that the last execution of the + * application resulted in a saved report. This is called synchronously on Crashlytics + * initialization. Your delegate must invoke the completionHandler, but does not need to do so + * synchronously, or even on the main thread. Invoking completionHandler with NO will cause the + * detected report to be deleted and not submitted to Crashlytics. This is useful for + * implementing permission prompts, or other more-complex forms of logic around submitting crashes. + * + * Instead of using this method, you should try to make use of -crashlyticsDidDetectReportForLastExecution: + * if you can. + * + * @warning Failure to invoke the completionHandler will prevent submissions from being reported. Watch out. + * + * @warning Just implementing this delegate method will disable all forms of synchronous report submission. This can + * impact the reliability of reporting crashes very early in application launch. + * + * @param report The CLSReport object representing the last detected report + * @param completionHandler The completion handler to call when your logic has completed. + * + */ +- (void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report completionHandler:(void (^)(BOOL submit))completionHandler; + +/** + * + * Called when a Crashlytics instance has determined that the last execution of the + * application resulted in a saved report. This method differs from + * -crashlyticsDidDetectReportForLastExecution:completionHandler: in three important ways: + * + * - it is not called synchronously during initialization + * - it does not give you the ability to prevent the report from being submitted + * - the report object itself is immutable + * + * Thanks to these limitations, making use of this method does not impact reporting + * reliabilty in any way. + * + * @param report The read-only CLSReport object representing the last detected report + * + */ + +- (void)crashlyticsDidDetectReportForLastExecution:(CLSReport *)report; + +/** + * If your app is running on an OS that supports it (OS X 10.9+, iOS 7.0+), Crashlytics will submit + * most reports using out-of-process background networking operations. This results in a significant + * improvement in reliability of reporting, as well as power and performance wins for your users. + * If you don't want this functionality, you can disable by returning NO from this method. + * + * @warning Background submission is not supported for extensions on iOS or OS X. + * + * @param crashlytics The Crashlytics singleton instance + * + * @return Return NO if you don't want out-of-process background network operations. + * + */ +- (BOOL)crashlyticsCanUseBackgroundSessions:(Crashlytics *)crashlytics; + +@end + +/** + * `CrashlyticsKit` can be used as a parameter to `[Fabric with:@[CrashlyticsKit]];` in Objective-C. In Swift, use Crashlytics.sharedInstance() + */ +#define CrashlyticsKit [Crashlytics sharedInstance] + +NS_ASSUME_NONNULL_END diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist b/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist new file mode 100644 index 0000000..1f4e7e5 Binary files /dev/null and b/Pods/Crashlytics/iOS/Crashlytics.framework/Info.plist differ diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap b/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap new file mode 100644 index 0000000..da0845e --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/Modules/module.modulemap @@ -0,0 +1,14 @@ +framework module Crashlytics { + header "Crashlytics.h" + header "Answers.h" + header "ANSCompatibility.h" + header "CLSLogging.h" + header "CLSReport.h" + header "CLSStackFrame.h" + header "CLSAttributes.h" + + export * + + link "z" + link "c++" +} diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/run b/Pods/Crashlytics/iOS/Crashlytics.framework/run new file mode 100755 index 0000000..9058ea6 --- /dev/null +++ b/Pods/Crashlytics/iOS/Crashlytics.framework/run @@ -0,0 +1,28 @@ +#!/bin/sh + +# run +# +# Copyright (c) 2015 Crashlytics. All rights reserved. + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Quote path in case of spaces or special chars +DIR="\"${DIR}" + +PATH_SEP="/" +VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" +UPLOAD_COMMAND="uploadDSYM\" $@ run-script" + +# Ensure params are as expected, run in sync mode to validate +eval $DIR$PATH_SEP$VALIDATE_COMMAND +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, upload dSYM in background to prevent Xcode from waiting +# Note: Validation is performed again before upload. +# Output can still be found in Console.app +eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/submit b/Pods/Crashlytics/iOS/Crashlytics.framework/submit new file mode 100755 index 0000000..7cc675a Binary files /dev/null and b/Pods/Crashlytics/iOS/Crashlytics.framework/submit differ diff --git a/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM b/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM new file mode 100755 index 0000000..70f2d94 Binary files /dev/null and b/Pods/Crashlytics/iOS/Crashlytics.framework/uploadDSYM differ diff --git a/Pods/Crashlytics/submit b/Pods/Crashlytics/submit new file mode 100755 index 0000000..7cc675a Binary files /dev/null and b/Pods/Crashlytics/submit differ diff --git a/Pods/Fabric/Fabric.framework/README b/Pods/Fabric/Fabric.framework/README new file mode 100644 index 0000000..3b1fbe2 --- /dev/null +++ b/Pods/Fabric/Fabric.framework/README @@ -0,0 +1 @@ +We've now combined all our supported platforms into a single podspec. As a result, we moved our run script to a new location for Cocoapods projects: ${PODS_ROOT}/Fabric/run. To avoid breaking builds that reference the old location of the run script, we've placed this dummy script that calls to the correct location, while providing a helpful warning in Xcode if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! diff --git a/Pods/Fabric/Fabric.framework/run b/Pods/Fabric/Fabric.framework/run new file mode 100755 index 0000000..b9edd17 --- /dev/null +++ b/Pods/Fabric/Fabric.framework/run @@ -0,0 +1,6 @@ +if [[ -z $PODS_ROOT ]]; then + echo "error: The run binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Fabric/run'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the run binary to fix this issue." +else + echo "warning: The run script is now located at '$"{"PODS_ROOT"}"/Fabric/run'. To remove this warning, update your Run Script Build Phase to point to this new location." + sh "${PODS_ROOT}/Fabric/run" "$@" +fi diff --git a/Pods/Fabric/README.md b/Pods/Fabric/README.md new file mode 100644 index 0000000..9eca610 --- /dev/null +++ b/Pods/Fabric/README.md @@ -0,0 +1,42 @@ +![Fabric Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-header.png) + +# Fabric + +## Overview + +[Fabric](https://get.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Google and the team that built Crashlytics, Fabric provides an easy way to manage all your SDKs so that you’ll never have to worry about tedious configurations or juggling different accounts. We let you get right into coding and building the next big app. + +For a full list of SDK provided through Fabric visit [https://fabric.io/kits](https://fabric.io/kits). + +## Setup + +The Fabric Pod is a dependency for all Fabric SDKs and is included when installing any Fabric related Pods. General setup instructions are shown below; however, these vary depending on the selected SDK. + +1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. + +1. Open Fabric.app, login and select an SDK to install. + + ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) + +1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. + + ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) + +1. Select the Podfile option and follow the installation instructions to update your Podfile. Note: the example below is for the Crashlytics SDK. The instructions will vary based on the selected SDK. + + ![Fabric Podfile Instructions](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-podfile-instructions.png) + +1. Add a Run Script Build Phase and build your app. + + ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) + +1. Initialize the SDK by inserting code outlined in Fabric.app. + +1. Run your app to finish the installation. + +## Resources + +* [Documentation](https://docs.fabric.io/) +* [Forums](https://stackoverflow.com/questions/tagged/google-fabric) +* [Website](https://get.fabric.io) +* Follow us on Twitter: [@fabric](https://twitter.com/fabric) diff --git a/Pods/Fabric/iOS/Fabric.framework/Fabric b/Pods/Fabric/iOS/Fabric.framework/Fabric new file mode 100755 index 0000000..acc4918 Binary files /dev/null and b/Pods/Fabric/iOS/Fabric.framework/Fabric differ diff --git a/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h b/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h new file mode 100644 index 0000000..3a9355a --- /dev/null +++ b/Pods/Fabric/iOS/Fabric.framework/Headers/FABAttributes.h @@ -0,0 +1,51 @@ +// +// FABAttributes.h +// Fabric +// +// Copyright (C) 2015 Twitter, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#pragma once + +#define FAB_UNAVAILABLE(x) __attribute__((unavailable(x))) + +#if !__has_feature(nullability) + #define nonnull + #define nullable + #define _Nullable + #define _Nonnull +#endif + +#ifndef NS_ASSUME_NONNULL_BEGIN + #define NS_ASSUME_NONNULL_BEGIN +#endif + +#ifndef NS_ASSUME_NONNULL_END + #define NS_ASSUME_NONNULL_END +#endif + + +/** + * The following macros are defined here to provide + * backwards compatability. If you are still using + * them you should migrate to the native nullability + * macros. + */ +#define fab_nullable nullable +#define fab_nonnull nonnull +#define FAB_NONNULL __fab_nonnull +#define FAB_NULLABLE __fab_nullable +#define FAB_START_NONNULL NS_ASSUME_NONNULL_BEGIN +#define FAB_END_NONNULL NS_ASSUME_NONNULL_END diff --git a/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h b/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h new file mode 100644 index 0000000..ecbdb53 --- /dev/null +++ b/Pods/Fabric/iOS/Fabric.framework/Headers/Fabric.h @@ -0,0 +1,82 @@ +// +// Fabric.h +// Fabric +// +// Copyright (C) 2015 Twitter, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import "FABAttributes.h" + +NS_ASSUME_NONNULL_BEGIN + +#if TARGET_OS_IPHONE +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 + #error "Fabric's minimum iOS version is 6.0" +#endif +#else +#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070 + #error "Fabric's minimum OS X version is 10.7" +#endif +#endif + +/** + * Fabric Base. Coordinates configuration and starts all provided kits. + */ +@interface Fabric : NSObject + +/** + * Initialize Fabric and all provided kits. Call this method within your App Delegate's `application:didFinishLaunchingWithOptions:` and provide the kits you wish to use. + * + * For example, in Objective-C: + * + * `[Fabric with:@[[Crashlytics class], [Twitter class], [Digits class], [MoPub class]]];` + * + * Swift: + * + * `Fabric.with([Crashlytics.self(), Twitter.self(), Digits.self(), MoPub.self()])` + * + * Only the first call to this method is honored. Subsequent calls are no-ops. + * + * @param kitClasses An array of kit Class objects + * + * @return Returns the shared Fabric instance. In most cases this can be ignored. + */ ++ (instancetype)with:(NSArray *)kitClasses; + +/** + * Returns the Fabric singleton object. + */ ++ (instancetype)sharedSDK; + +/** + * This BOOL enables or disables debug logging, such as kit version information. The default value is NO. + */ +@property (nonatomic, assign) BOOL debug; + +/** + * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. + */ +- (id)init FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); + +/** + * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. + */ ++ (instancetype)new FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Pods/Fabric/iOS/Fabric.framework/Info.plist b/Pods/Fabric/iOS/Fabric.framework/Info.plist new file mode 100644 index 0000000..e870885 Binary files /dev/null and b/Pods/Fabric/iOS/Fabric.framework/Info.plist differ diff --git a/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap b/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap new file mode 100644 index 0000000..2a31223 --- /dev/null +++ b/Pods/Fabric/iOS/Fabric.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module Fabric { + umbrella header "Fabric.h" + + export * + module * { export * } +} \ No newline at end of file diff --git a/Pods/Fabric/iOS/Fabric.framework/run b/Pods/Fabric/iOS/Fabric.framework/run new file mode 100755 index 0000000..9058ea6 --- /dev/null +++ b/Pods/Fabric/iOS/Fabric.framework/run @@ -0,0 +1,28 @@ +#!/bin/sh + +# run +# +# Copyright (c) 2015 Crashlytics. All rights reserved. + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Quote path in case of spaces or special chars +DIR="\"${DIR}" + +PATH_SEP="/" +VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" +UPLOAD_COMMAND="uploadDSYM\" $@ run-script" + +# Ensure params are as expected, run in sync mode to validate +eval $DIR$PATH_SEP$VALIDATE_COMMAND +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, upload dSYM in background to prevent Xcode from waiting +# Note: Validation is performed again before upload. +# Output can still be found in Console.app +eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Pods/Fabric/iOS/Fabric.framework/uploadDSYM b/Pods/Fabric/iOS/Fabric.framework/uploadDSYM new file mode 100755 index 0000000..e5a9923 Binary files /dev/null and b/Pods/Fabric/iOS/Fabric.framework/uploadDSYM differ diff --git a/Pods/Fabric/run b/Pods/Fabric/run new file mode 100755 index 0000000..9058ea6 --- /dev/null +++ b/Pods/Fabric/run @@ -0,0 +1,28 @@ +#!/bin/sh + +# run +# +# Copyright (c) 2015 Crashlytics. All rights reserved. + +# Figure out where we're being called from +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# Quote path in case of spaces or special chars +DIR="\"${DIR}" + +PATH_SEP="/" +VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" +UPLOAD_COMMAND="uploadDSYM\" $@ run-script" + +# Ensure params are as expected, run in sync mode to validate +eval $DIR$PATH_SEP$VALIDATE_COMMAND +return_code=$? + +if [[ $return_code != 0 ]]; then + exit $return_code +fi + +# Verification passed, upload dSYM in background to prevent Xcode from waiting +# Note: Validation is performed again before upload. +# Output can still be found in Console.app +eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & diff --git a/Pods/Fabric/upload-symbols b/Pods/Fabric/upload-symbols new file mode 100755 index 0000000..fea6c0c Binary files /dev/null and b/Pods/Fabric/upload-symbols differ diff --git a/Pods/Fabric/uploadDSYM b/Pods/Fabric/uploadDSYM new file mode 100755 index 0000000..e5a9923 Binary files /dev/null and b/Pods/Fabric/uploadDSYM differ diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 39f37a3..746dd93 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,22 +1,32 @@ PODS: + - Crashlytics (3.8.6): + - Fabric (~> 1.6.3) + - Fabric (1.6.13) - FileMD5Hash (2.0.0) - SDWebImage (3.8.2): - SDWebImage/Core (= 3.8.2) - SDWebImage/Core (3.8.2) - - SQLite.swift (0.11.3): - - SQLite.swift/standard (= 0.11.3) - - SQLite.swift/standard (0.11.3) + - SMCalloutView (2.1.5) + - SQLite.swift (0.11.4): + - SQLite.swift/standard (= 0.11.4) + - SQLite.swift/standard (0.11.4) DEPENDENCIES: + - Crashlytics (~> 3.8.0) + - Fabric (~> 1.6.0) - FileMD5Hash (~> 2.0.0) - SDWebImage (~> 3.8) + - SMCalloutView - SQLite.swift (~> 0.11.0) SPEC CHECKSUMS: + Crashlytics: 95d05f4e4c19a771250c4bd9ce344d996de32bbf + Fabric: 2fb5676bc811af011a04513451f463dac6803206 FileMD5Hash: 3ed69cc19a21ff4d30ae8833fc104275ad2c7de0 SDWebImage: '098e97e6176540799c27e804c96653ee0833d13c' - SQLite.swift: 99b36c22084427f0abbeb957556ce1528cf10bb3 + SMCalloutView: 5c0ee363dc8e7204b2fda17dfad38c93e9e23481 + SQLite.swift: 3e3bee21da701b5b9f87c4a672cb54f233505692 -PODFILE CHECKSUM: e583277236d810a5e080371e73349e52a4aaa25e +PODFILE CHECKSUM: a1fb0ce1f1bb0e73380460cc4f946d297a4d5ff1 -COCOAPODS: 1.2.0 +COCOAPODS: 1.2.1 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 68567e9..e0dd8d0 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,204 +7,245 @@ objects = { /* Begin PBXBuildFile section */ - 098DD319E9D5AE3C4B413F1DCB7245E5 /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 241675AEEA7BA04E4FF066CECB30C637 /* FTS4.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 12CF79798B69B43D77D12724505829EB /* SQLite-Bridging.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EABCA4565E1748ED1A9D2C05B12EEEA /* SQLite-Bridging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1B1088DAF42D74567A705DC440211D12 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = BFBEDAF377DDF77D6705502797F7ECA3 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C0F95DC71B64C451857A4C991BF2AF8 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B5B4EE1BEA958CA01AF40E92CB13AA78 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1CA30DFDE14644203704970B8D9805BC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - 2888ACC8836D2E79F2F341C32AB3E0B0 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = B6D720A9863CA93098F606E3B051B62A /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 289C4C0E1B0E975621D177439BCF4B6F /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C899249698F9147D611626044C9A374 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 291D6ECA35FE23753F9EFEDA8AB633FC /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CBAE01ACACC427B178294D6628EA661D /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E66668BB25537BCAC6263434F08C9DD /* FileMD5Hash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D1F207343AA580772707DC4A28D56A6 /* FileMD5Hash-dummy.m */; }; - 32649919900BFE14972CB170A11E7A30 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DDDA5F6C08D553493A0C921F2CBCB79 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3CD0EE70D32733800E902E7C8AFEA79B /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C508CB1A3EA8E29F34FB503FC020916B /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01F6FD7829922FFEDBA0AC937221139D /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F9058D96291772916213F878DBC9D4D1 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 020AFCE363BBA923E907BD453C394A18 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = A8DD6B2CD921B3CD0CC1C8D285C3DB14 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05585238F98FFE793DC0D1BA800C0D27 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D80AD2C4486EE72A4FFDA86FC6BCD1C /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 0E8A3312FC090BE373D8B2DC9F33355C /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = F715310E4E9F5621B0A1EE26721C2053 /* SMCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0E95FFC222F9730AB5A2FA648F3DC10B /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00B00707EB4D7D4F01732D69B015ADDF /* Pods-Delta-dummy.m */; }; + 1150C57CFCC34F769A6B3A9A957FCE1E /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A53E5BCCFF16DD308B1130B5B11971F /* FTS4.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 19A8DB8810E10682948CBA8F1954F70E /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 49472E71891AFD1F328838FADB677451 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1DCE10EE2CBF5007B2BA3E4BE0465891 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 548D52A5CFF8E0AEE731320D3A7424BC /* Operators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1FAD25073BF85238A82B39CF64208138 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D1A915C60E1D50527210412A5B4094DD /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 20A087C33B817D962690FDC7E894405A /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = DDCD815809D81A5711959C3EF15ABE37 /* SQLite-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2207FDE1BA4EE2D34E6465B2C8161FC3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + 2364CBBEE6A7320F676CF8D8F4541DED /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4B5F5118F37D885793595BBEF3FE62 /* Errors.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 255360BAB2981F4F6C7C2ADFB034DD78 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4584B245DEE3A7D04444B05704046791 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29B4C7EBC553B1A96DDE7199EF7EB78A /* SMClassicCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F3E13029C6A72F6947FCFCDD4DB219D /* SMClassicCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 29D38081CE6E0C1DC7B78CB2467733EE /* SMCalloutView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C1E5EE84A074FE94CE4085F1073C5A8 /* SMCalloutView-dummy.m */; }; + 2E66668BB25537BCAC6263434F08C9DD /* FileMD5Hash-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FE3498CA7C8E4CDD1E7F0774B8954505 /* FileMD5Hash-dummy.m */; }; + 307ACA884D90D1B1AF65D152027F8037 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FFDEFB012447BDBE8EEBA4C8646C82A /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3134B683130B4C911A3B1F3269C23C0F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + 34F15EDD4167886716DE13EF3DA61525 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F6703DD83793C5DD5FAA92B71CB1DCC /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35ECA1266BE70763C47DB385321C8BDA /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = E6CB37913B03B0D1D9C660198A0BBFD0 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38ED2874ACF9C288331E3707699DC9C2 /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9F0E29E169056160CBC16EBC538F1BD /* FTS5.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B7E86A00F8C6E8F5A351516BDFC6E0A /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9573161D35C02B33C6AB094C1236CB57 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3BF50196E73DD51E6A1152973DFC27DD /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = EB00990C9F7C2C0808B9C725904197A8 /* SMCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3EEAE0A72D5F8D0397B9DF878F9ABE98 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BEE873D9C7F8F2001BB54E2DAE25C134 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 406D94A47FC41812A1A1F45997B699AA /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD2472619402C4FCE3F48DECBBF1B832 /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 425BDD464654D6CFE022E233C1229E95 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1E33DF619DCACF1C172619230749FD8 /* Helpers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 44A70B580C1AAD2907574BCA02C3B243 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - 459009460BFBB3DBB4C9168143FC967E /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F11BD5B2DFD6937D1592499598DE60 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A2DCD3F0F0A15427A7008B45E0D3463 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B6499FD22D1350C5044F4AF8D88161 /* Operators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5172EB82F181CD5C6058720F1EDBFFBA /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = B63FF3D503D48B44EAFD66ADC8E44847 /* SQLite-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58C256076C467E9132B30FA203F4682E /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CCA4CBCE80D4A28A0AB67207078D490 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59757ED380B9FD2D3529CC01940ABC17 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB5DFB460C7740203109A9B3CFBD1C1C /* Setter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 60C9DBA3EA5D0784AE9C8C87B51BBCF0 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F9A4278B24FBE80459CF484F58757536 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 662C18FEA4DFF9970E8D028B281D97EA /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DEA09D6AF8C63984F226C96BB95BACD1 /* SDWebImage-dummy.m */; }; - 66BF4CF3A7E34656616159932E27C6B6 /* FileHash.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A8DC112DC6F54D2EA44BB94BA411D13 /* FileHash.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 679DC0A54440ACE06C668426D960434B /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC5D579537725ED9E4A63A4561E5D57E /* Connection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6A00465C6CF90CE73C984F03572BE9C3 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BB68993BE9A96860C1ADDD8DFB4926F6 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6B70676C9CD3E65704CF5F345A58D7D8 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F29AB74923C754819783C81A4C51402 /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6C88898656689F997079D8C2E02D380B /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = C55038524D47D355953CFE5FAEB07705 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71A419BAB91B0BECA6617C071891BF3C /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 183B2A54F457D9B148461B8AA0021F2B /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7487C10F58C60552A3B84C47EF4AABB5 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = B69A3F2A318DB0B79961834D70E5ACB2 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7784F558B74616E8DC1818DA0A0532BC /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CF7D0F0E5A5A95A050C645EA6CDA8D /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CBFCCC7367FCCF9D53FBFA8ED86BDD7 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 00B00707EB4D7D4F01732D69B015ADDF /* Pods-Delta-dummy.m */; }; - 7E7C64643C2C3AC5F7CBCC8E044801EF /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0814B36E72C9B14547AE145584FEBB3C /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80C66AC9B65D7A9E73EAF52953078A80 /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDAB1BF528028945AFDD3711E51E1205 /* Foundation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 81EA3C6ADBF7CCBC1711693AD8966D30 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 161476EDCD7E91D1254F82F57070CEF4 /* Helpers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 843BDA3C40997300E0B3CB9E27043997 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A86AED40C9CA780168DAA07644ADC60 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 85AC71E815A41D4B45A0EB55F9A5DB1E /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E7B4776DED3F6F6F66C8D86E0014F1E /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92C60A4E3797D69E6A7725B12E25C0D0 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D9F4C3A323182EA49ED89D873228168 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 930D6D8D90701B4A6FD30E94CF42871B /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BFC4A0254C9F198D8FDD15DDBA538715 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A73EA1D60A6932BDA2B033258B82247 /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ABE9E3591A17E1E441225F098283A306 /* SQLite.swift-dummy.m */; }; - A215B295B907F3FC375FFA644649A845 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AFE10FB598C7FBDEC93CD2E6A9C6614 /* Value.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A3C78AD9387EE296772B1B4031290DE9 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 837C3E5A9502B232611753D63558BC82 /* Blob.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A5E0B4C7414F681B71DE66C07F4628C4 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = E374AE0B6BF659B8B75EE55ED6836E55 /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A66BC5F91E9B66C05262C55BABAA0421 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F88E741495BD8393808C8937BF9809B6 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A66ECB0C1037DD2A24411DF60C9362AE /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7B561A222812B0D8DF5028EBE39AE1 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A7EF436BF7DF4C8640864FBA1BA94351 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 249488BED0A0759C176A9BDE35C4FB3B /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4D2E6BDA66762C41461DE1466567A22 /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CFB29DC3DD7F12E6FCB3AF7551621F /* AggregateFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BCC3E7AF8EAD39EAB60E7F271CAAF5D7 /* FileMD5Hash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CE468B39C9C26748D747D220275F7E28 /* FileMD5Hash-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BCDE9C9E8DDB9FD7F9F0F68200854276 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = F87F17273EFF30931912CB309D1E6BFA /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE6E1EFB57D60E715B8617336436B7EB /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */; }; - C0D6EE693288E4A34090518CEE18269F /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 8325D3F84075D7B6A1F8E75249210075 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C3351D1B55FD32BBAD9B3335713FBB37 /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = AECC9D7F32828C6EAF16D71C2AF51574 /* FTS5.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C36994840D82BF702EC602A8DEC63223 /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA415739B83EF857D8215C8D4015AB57 /* Query.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CA703680A4DCD9CBED0A35283C5B26AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - CE103933627196D2BB63FCFB7DDDE1F0 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D3C88715B10C471DC2B7D6E3C4E256 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1EC729542506D0FF0FEAFC10E544BDC /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = C3FAFE6429281B92FA08328564E641D0 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D7570BC6C11012C5F53C53ABF8187CC6 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 52D6B269E25580A7A88658571A695331 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E376FD7DF6990EB5D6059FF86AA392DD /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E33F9E2E8FE4A1D8DC242453F60F3DD /* CoreFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E5102C928DC86E24E1FA70862A698132 /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 328FC874A68ECDD302B8886297697CA5 /* RTree.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E8166EA34E4BEF58C5583C06CFFB0971 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EDCC3711E9C7CF098B57C5462F37F3 /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA47189A2ADA7ABA3CAD4DAA9C862095 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = DE72C4DC688BEB8C8020235A9C39D913 /* SQLite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EAF8AC345B2B68E07E239E83AACF81E3 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF72D824371AE37AE8D113E23511058 /* Collation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EC8F07E15821E96F36AE89560D864FCD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - EEF3F3825344DF5B3B1F91C8B3D92F81 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFF023E5886316D3E4BE5E33DEFC09CD /* CustomFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F16B42DA86FEF3A85DD46658B962B61D /* FileHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CAE37BEBD94BBA16C370C90C203D71D /* FileHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F70F77BB9BD4B473EF5731A958F6CFB4 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A09EA2216C54F25B0B12DB453C2F932 /* Statement.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F713228AE3D00F1C478CF62077F73AD7 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 051635EF10CEB3E20034637DA88323F6 /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F86C46E798AA77D74381F0A299724517 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D2806C755DE9776F3A3EE67486D0B15 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F97431F8AA6A848ACA072E9DB7DCF5DF /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ACCC548A1ACA820E36EBEDA1DF0A098 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FEE67933F477210286CDEC86E60D32FF /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 286B6B4A107A970E06DACB96700648B2 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4BFD33775F72F952206DA9101BA849A2 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B02313ED3C98F0D9E8E673D608674FF0 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5378E66F36C92CCCFFD4F95053426CA2 /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1F3D5BCB62B3A3AA33F0B5318C954B /* AggregateFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 53A1E27B96743AF1526979D7C407B36E /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 73648FFFD6172035C937058B26803D6D /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 593AA045F16ABDD2E0C216A6693160A6 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C453C51E8BE33C2E172E40B18626329 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 66BF4CF3A7E34656616159932E27C6B6 /* FileHash.m in Sources */ = {isa = PBXBuildFile; fileRef = D7D4D4C83D4D81FF7570317D601B83DE /* FileHash.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 67A9DED3A799C2C1B3190757AF74C869 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = A23D5152FE861FB5B1D4950073960C6E /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6C5BAD8632B93F8B791FC5C97AE17C15 /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0945A96F1411067E758920A6B3B344D4 /* Value.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E0EAEAD314BD406BDF642C954F224A9 /* SQLite-Bridging.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CC663225143009C0D31C50E4FD21F74 /* SQLite-Bridging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 711CA407D0376A72931BDF50AF5979F9 /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02CB6780A2B665939923D55644234747 /* RTree.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7321CB11628493652E10C9FF47B1E3CE /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1235F5A17D0DD4EC0AD2D22672582DA5 /* SQLite.swift-dummy.m */; }; + 7E1E4E7C559B3DCBC6FB1E3F91303A61 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 032AB538856BB66C33BCF3A6EFEBAEDC /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8288FE73D4A817A73306848AF872DD3B /* SMCalloutView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F4A02F29281568B9C5A5FDAE342EB996 /* SMCalloutView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8408E852421C1BE1E32DF2E314EC8E43 /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF8D107AB0FD8CC31571E3F4EFD1DCFF /* Query.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 867ED479D87B069987F16CC84F1CB314 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B3B201E9287A29A9C7DB3E6E89A7C60 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8F0F89B097957C37D6E53A6E0623D08D /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EAF5150B1F1751DB4E090CAD73037EE /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8F7D92A4E63CC4056DFD5C0B1FD14910 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D5D667758C8C5F56F3D2B66A9DA77FE /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A41E5A0EF327ED9DF2D2866EF78F30A5 /* SMClassicCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 77F129F1BA8E7E54902E13651560B797 /* SMClassicCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A5F83FD5E39A40A303AEE42994F6BB2D /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FC743DB5B7231D4A588B65D80A72CD /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A81EF80FB896476F7D27B1EE45FF4D7E /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E477F21875ADA4B7C1A276B048E49FCA /* Foundation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A8274F6E16ECE48FB9139B8456A31201 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 62D28F99B90C42A3A0366B72E2B1B594 /* SQLite.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AD541D0CA07079BA817282E47531170C /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */; }; + AEB1C8816D845293F320C53668E56595 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36D5153C832FA47CE24314740F4636C1 /* Setter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF71FA11F33D4FF8286DE4191247F4B9 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = CDB4230F44759F4F6161E3A256B3BB05 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B4FF0763F545E55DDF9FB358526B21C5 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = EBD8E993B110532376D18B7F68AB317A /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B771F2C5509A5462CC27977AECB8A05E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + B9AC8B5C153CD4028E20BDA493F3E8E9 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 36D00FF6092D42D9710DAB8238D6B0F4 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BACF769130EA8F084781334E3F5487D6 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 527BDC649D5F7705A1725233BEC21CEC /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BB19B505BC3000C14CD0C6539F716F6F /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 83AD613EABACF4F682DD38C393197F4E /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BBCBA2E5DAC6C3BD2404A5628A0AB512 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F77D044B81F32AB9D7E58E85EA1C5F /* Statement.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BC369BDF43EB991D6BDA5C129249D052 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + BCC3E7AF8EAD39EAB60E7F271CAAF5D7 /* FileMD5Hash-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C43F044D76D5174F1A3472D15441FAC9 /* FileMD5Hash-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD93645C73A232461BAFDCD2D583A48F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 52C0F64FF5BD9D05D0DDD439AB4B4B4C /* SDWebImage-dummy.m */; }; + CB0C7E4A7184D8CB11F07ABB7E01BCBF /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 286FB5B86F6E898E75403C870CC05011 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1B81917966545E8201CA9A7C53EAD86 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = C7966176FA5D69F9D29BD871712BC02C /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D2B6204B0FDB37AE2282418510B5DC90 /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B772FF2CD1B27DD4BA7BBBCB5323456 /* Coding.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D4291536C582A6ADAC6F18F7D8179876 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC13A2CB88857A3DE05C855ACAAFD681 /* Blob.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D47F030F3EE8210B84E275A72194BD50 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D1BEC9E736FAF5A1F921744894A5521 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5BFFB0A8A27452013266BFFC8DB1DBF /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 579EDE09C2AFB6C42BFC19A2F449884F /* Collation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D76E41A83001A863D0EF9A3F0EC0F68B /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 40A8B4F2D02BC863608186A20E0C9C0D /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD3018D33ABEB0BAA61C562F8A5FFC45 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 19644E545E27F0ABCAEA0D43C6DFB21E /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2280C9C262A949A476A9EAC56214884 /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85480F525C5B282EF9EEA86B606F0514 /* CoreFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E282C5080C3257C180B32B1F15F2842E /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F29B2603D0AC4578F3F268097EF73E /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4A2641C95DDD1AEE0BA851321A07FC8 /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A1CF7D0F0E5A5A95A050C645EA6CDA8D /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E7479C47D52374BB8E42CC5698D76981 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFD86ED37239043D822717C836B4096 /* CustomFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E93FFD6F5E098B71ECBBACD79E1560EC /* DateAndTimeFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87F772F5D1108D9405EB497FC0F11A66 /* DateAndTimeFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F01610EE244331A9AE359D92682841FB /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 87ED074865B1A0718B5980D1F6B32FD3 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F16B42DA86FEF3A85DD46658B962B61D /* FileHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F58644292785B4F7A515DB8B0CDEDD6 /* FileHash.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F608A0FA0233A07E7B7085294F183823 /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07004039F06D09685DD871754FF9373E /* Connection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC2D34D5B376D1F700CAFB0E04439235 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E3FC8531E544D920F83AC90536903AD /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 43751C8F4A1E0FED8A513B6C736B2141 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = D88F755329BB917F99DFC5405AC691FE; - remoteInfo = SQLite.swift; - }; - B1786652CDC10C9D41868B80152892A5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 95AEAD50DEA1563D4D1E2AD6EEE0E7B4; - remoteInfo = SDWebImage; - }; - F1D70524142DB2A888CA1F6E3F0F67CC /* PBXContainerItemProxy */ = { + 0E57566421DC7C04ED10FBFF02AE3217 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 924057B2A88FC4B5526EC3FC7483ABE2; remoteInfo = FileMD5Hash; }; + 387F41711D87C3D2C8716FF754189765 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = E02CAC9BD02FC53AAA763EA4830E4884; + remoteInfo = SDWebImage; + }; + 3AAE57E02BD6B50C58159D299DCA0C4F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = D71D7949D6292CD21BE206D00103E682; + remoteInfo = SQLite.swift; + }; + 7713FF1D874368FBE2D22D4E4CB7C6A7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5A0A16E27351F849E411E94C505CF452; + remoteInfo = SMCalloutView; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 00B00707EB4D7D4F01732D69B015ADDF /* Pods-Delta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Delta-dummy.m"; sourceTree = ""; }; - 02CFB29DC3DD7F12E6FCB3AF7551621F /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; - 051635EF10CEB3E20034637DA88323F6 /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; - 068843C76381C7713BED164CDF6DB372 /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; - 0814B36E72C9B14547AE145584FEBB3C /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - 0B33A43387DF59869F2A6002F1DC3785 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SQLite.framework; path = SQLite.swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0C899249698F9147D611626044C9A374 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 0EABCA4565E1748ED1A9D2C05B12EEEA /* SQLite-Bridging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SQLite-Bridging.m"; path = "Sources/SQLiteObjc/SQLite-Bridging.m"; sourceTree = ""; }; - 161476EDCD7E91D1254F82F57070CEF4 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; - 183B2A54F457D9B148461B8AA0021F2B /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - 1A09EA2216C54F25B0B12DB453C2F932 /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; - 1BFCD9CD29832788C2D7A21CB2D8BC15 /* FileMD5Hash.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FileMD5Hash.xcconfig; sourceTree = ""; }; + 0159C36B78547E23EBA1867CAE65F002 /* FileMD5Hash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FileMD5Hash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 02CB6780A2B665939923D55644234747 /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; + 032AB538856BB66C33BCF3A6EFEBAEDC /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SMCalloutView.xcconfig; sourceTree = ""; }; + 07004039F06D09685DD871754FF9373E /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; + 0945A96F1411067E758920A6B3B344D4 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; + 0BC95251B8ED1E506925B002BC5B1352 /* SMCalloutView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SMCalloutView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0C1F3D5BCB62B3A3AA33F0B5318C954B /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; + 1139D439341C37EB96BC7E48A90BAD34 /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; + 1235F5A17D0DD4EC0AD2D22672582DA5 /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; + 16C12BA1CDC4BAA71A94C08D894DAE28 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 19644E545E27F0ABCAEA0D43C6DFB21E /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 1BE982AA859EE1A9210D02D6E759A38A /* FileMD5Hash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = FileMD5Hash.modulemap; sourceTree = ""; }; 1C3BA8511D0F025064897F6EC408296A /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.debug.xcconfig"; sourceTree = ""; }; - 1FF7872FA7FDE3563D940E59B783D289 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SDWebImage.modulemap; sourceTree = ""; }; - 241675AEEA7BA04E4FF066CECB30C637 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; - 249488BED0A0759C176A9BDE35C4FB3B /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; - 286B6B4A107A970E06DACB96700648B2 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - 328FC874A68ECDD302B8886297697CA5 /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; - 32CA5695E88A5637B79D100F29969924 /* Pods_Delta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Delta.framework; path = "Pods-Delta.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3869DD0236542A3354407B601307ACD0 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + 1DEFD8D91DD8CE3B57B0A51BDB561E2D /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + 1F46051C1128C9358A3A710DEB82AA24 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 286FB5B86F6E898E75403C870CC05011 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 2D1BEC9E736FAF5A1F921744894A5521 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + 2D6E5A84EF07D22B853F28AE193B4E53 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2F3E13029C6A72F6947FCFCDD4DB219D /* SMClassicCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMClassicCalloutView.m; sourceTree = ""; }; + 2F58644292785B4F7A515DB8B0CDEDD6 /* FileHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FileHash.h; path = Library/FileHash.h; sourceTree = ""; }; + 32F29B2603D0AC4578F3F268097EF73E /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + 32F77D044B81F32AB9D7E58E85EA1C5F /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; + 36D00FF6092D42D9710DAB8238D6B0F4 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + 36D5153C832FA47CE24314740F4636C1 /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; 393CFF172E48171DCE02DEF123ED6B4F /* Pods-Delta-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Delta-resources.sh"; sourceTree = ""; }; - 3B0E16E5FDD2625E529346492266BAC7 /* FileMD5Hash.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = FileMD5Hash.modulemap; sourceTree = ""; }; - 3D2806C755DE9776F3A3EE67486D0B15 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - 3E7B4776DED3F6F6F66C8D86E0014F1E /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 412DD0329DB764513A93EE33E0F0D208 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 4AFE10FB598C7FBDEC93CD2E6A9C6614 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; - 52B6499FD22D1350C5044F4AF8D88161 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; - 52D6B269E25580A7A88658571A695331 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 59D3C88715B10C471DC2B7D6E3C4E256 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; - 5A86AED40C9CA780168DAA07644ADC60 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 5ACCC548A1ACA820E36EBEDA1DF0A098 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - 5BF72D824371AE37AE8D113E23511058 /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; - 5CCA4CBCE80D4A28A0AB67207078D490 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 5FCD868A676A88E3BCD88B68E97008AF /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 60F5A11EC6812F99454B862E5D25421F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3B772FF2CD1B27DD4BA7BBBCB5323456 /* Coding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coding.swift; path = Sources/SQLite/Typed/Coding.swift; sourceTree = ""; }; + 3C1E5EE84A074FE94CE4085F1073C5A8 /* SMCalloutView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SMCalloutView-dummy.m"; sourceTree = ""; }; + 3D80AD2C4486EE72A4FFDA86FC6BCD1C /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; + 40A8B4F2D02BC863608186A20E0C9C0D /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 4144DB38E332A91B6D069713AE85CA9B /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SQLite.swift.modulemap; sourceTree = ""; }; + 4584B245DEE3A7D04444B05704046791 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + 49472E71891AFD1F328838FADB677451 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + 4C4C366461DA3B92968A67361C700AB8 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; + 4E1FBC10E4C47720883970DAA89DFF1B /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; + 4E3FC8531E544D920F83AC90536903AD /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + 4E665218EE93EC4DF2ED23D10582E0BD /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; + 527BDC649D5F7705A1725233BEC21CEC /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 52C0F64FF5BD9D05D0DDD439AB4B4B4C /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + 548D52A5CFF8E0AEE731320D3A7424BC /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; + 56A4DC976BA7F3D768D97E2892BF9921 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 579EDE09C2AFB6C42BFC19A2F449884F /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; + 5A53E5BCCFF16DD308B1130B5B11971F /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; + 5C453C51E8BE33C2E172E40B18626329 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + 5F6703DD83793C5DD5FAA92B71CB1DCC /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; 61D07C2D20A62CF35439BF6540AAF69F /* Pods-Delta-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Delta-acknowledgements.markdown"; sourceTree = ""; }; + 62D28F99B90C42A3A0366B72E2B1B594 /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 64BBAED01933096F1844A17E2A6E9ECF /* FileMD5Hash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FileMD5Hash.framework; path = FileMD5Hash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 65F28DCB78E819DC3CE0D7757782DD39 /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SQLite.swift.modulemap; sourceTree = ""; }; 6701BAAE1472B7CB200DB15361C648B4 /* Pods-Delta-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Delta-frameworks.sh"; sourceTree = ""; }; - 6A8DC112DC6F54D2EA44BB94BA411D13 /* FileHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FileHash.m; path = Library/FileHash.m; sourceTree = ""; }; - 6CAE37BEBD94BBA16C370C90C203D71D /* FileHash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FileHash.h; path = Library/FileHash.h; sourceTree = ""; }; 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 70F7F78874A3F503DC5B92E837976CD8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7DDDA5F6C08D553493A0C921F2CBCB79 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; - 7E33F9E2E8FE4A1D8DC242453F60F3DD /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; - 7F29AB74923C754819783C81A4C51402 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; - 8325D3F84075D7B6A1F8E75249210075 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 837C3E5A9502B232611753D63558BC82 /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; - 8D1F207343AA580772707DC4A28D56A6 /* FileMD5Hash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FileMD5Hash-dummy.m"; sourceTree = ""; }; - 8D9F4C3A323182EA49ED89D873228168 /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 999B0F668F9024311EE886DF8548A51B /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; + 72FC743DB5B7231D4A588B65D80A72CD /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + 73648FFFD6172035C937058B26803D6D /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + 77F129F1BA8E7E54902E13651560B797 /* SMClassicCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMClassicCalloutView.h; sourceTree = ""; }; + 7B3B201E9287A29A9C7DB3E6E89A7C60 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + 7CC663225143009C0D31C50E4FD21F74 /* SQLite-Bridging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SQLite-Bridging.m"; path = "Sources/SQLiteObjc/SQLite-Bridging.m"; sourceTree = ""; }; + 7CFD86ED37239043D822717C836B4096 /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; + 7EAF5150B1F1751DB4E090CAD73037EE /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; + 83AD613EABACF4F682DD38C393197F4E /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + 85480F525C5B282EF9EEA86B606F0514 /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; + 86BA498830EB51ADEDC937DDFAA4E3D6 /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; + 87ED074865B1A0718B5980D1F6B32FD3 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 87F772F5D1108D9405EB497FC0F11A66 /* DateAndTimeFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateAndTimeFunctions.swift; path = Sources/SQLite/Typed/DateAndTimeFunctions.swift; sourceTree = ""; }; + 89B0CCDB31FD33BDF5CA65821F697C4F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8D5D667758C8C5F56F3D2B66A9DA77FE /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; + 9260283D302E99A4DF1407BB314DE094 /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9549FD9572AD09182CBFC5AF4C3806EC /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SDWebImage.modulemap; sourceTree = ""; }; + 9573161D35C02B33C6AB094C1236CB57 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + 99F8E44ACB5CF087E4BF8F904DE04F47 /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; + 9FFDEFB012447BDBE8EEBA4C8646C82A /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; A1CF7D0F0E5A5A95A050C645EA6CDA8D /* Pods-Delta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Delta-umbrella.h"; sourceTree = ""; }; - ABE9E3591A17E1E441225F098283A306 /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; - AECC9D7F32828C6EAF16D71C2AF51574 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; - B5B4EE1BEA958CA01AF40E92CB13AA78 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - B5EDCC3711E9C7CF098B57C5462F37F3 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - B63FF3D503D48B44EAFD66ADC8E44847 /* SQLite-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SQLite-Bridging.h"; path = "Sources/SQLiteObjc/include/SQLite-Bridging.h"; sourceTree = ""; }; - B69A3F2A318DB0B79961834D70E5ACB2 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - B6D720A9863CA93098F606E3B051B62A /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - BA1F09AF89D60F53382DF398D3795D71 /* Pods-Delta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Delta.modulemap"; sourceTree = ""; }; - BB68993BE9A96860C1ADDD8DFB4926F6 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - BFBEDAF377DDF77D6705502797F7ECA3 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - BFC4A0254C9F198D8FDD15DDBA538715 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - C3FAFE6429281B92FA08328564E641D0 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - C508CB1A3EA8E29F34FB503FC020916B /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - C55038524D47D355953CFE5FAEB07705 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - CB5DFB460C7740203109A9B3CFBD1C1C /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; - CBAE01ACACC427B178294D6628EA661D /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - CE468B39C9C26748D747D220275F7E28 /* FileMD5Hash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-umbrella.h"; sourceTree = ""; }; - CE7B561A222812B0D8DF5028EBE39AE1 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - D08836B2071BB4727C71D229B96E924B /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DA415739B83EF857D8215C8D4015AB57 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; - DE72C4DC688BEB8C8020235A9C39D913 /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; - DEA09D6AF8C63984F226C96BB95BACD1 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - E374AE0B6BF659B8B75EE55ED6836E55 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; + A23D5152FE861FB5B1D4950073960C6E /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + A3EA54BEF017871554C81FBD89870EF7 /* SMCalloutView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = SMCalloutView.modulemap; sourceTree = ""; }; + A8DD6B2CD921B3CD0CC1C8D285C3DB14 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + ACDD71A4691EF17778DC6EACBDAC34F1 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SQLite.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AD2472619402C4FCE3F48DECBBF1B832 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; + B02313ED3C98F0D9E8E673D608674FF0 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + BA1F09AF89D60F53382DF398D3795D71 /* Pods-Delta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Delta.modulemap"; sourceTree = ""; }; + BC13A2CB88857A3DE05C855ACAAFD681 /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; + BD4B5F5118F37D885793595BBEF3FE62 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/SQLite/Core/Errors.swift; sourceTree = ""; }; + BEE873D9C7F8F2001BB54E2DAE25C134 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + BF8D107AB0FD8CC31571E3F4EFD1DCFF /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; + C1E33DF619DCACF1C172619230749FD8 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; + C43F044D76D5174F1A3472D15441FAC9 /* FileMD5Hash-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-umbrella.h"; sourceTree = ""; }; + C7966176FA5D69F9D29BD871712BC02C /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + CDB4230F44759F4F6161E3A256B3BB05 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + D1A915C60E1D50527210412A5B4094DD /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + D7D4D4C83D4D81FF7570317D601B83DE /* FileHash.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FileHash.m; path = Library/FileHash.m; sourceTree = ""; }; + D8C077D2CD74FE7022E6E86BA03B9BAA /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; + D9F0E29E169056160CBC16EBC538F1BD /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; + DDCD815809D81A5711959C3EF15ABE37 /* SQLite-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SQLite-Bridging.h"; path = "Sources/SQLiteObjc/include/SQLite-Bridging.h"; sourceTree = ""; }; + DDE976DADC01C9F233C73181B7C677FA /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FileMD5Hash.xcconfig; sourceTree = ""; }; + E477F21875ADA4B7C1A276B048E49FCA /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; + E52BF635FC2EF1621E67C61344C81C24 /* SMCalloutView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-prefix.pch"; sourceTree = ""; }; + E6CB37913B03B0D1D9C660198A0BBFD0 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; EA65B5484E3BB3284577BD4EA4FA7147 /* Pods-Delta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.release.xcconfig"; sourceTree = ""; }; - EC5D579537725ED9E4A63A4561E5D57E /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; + EA7149D3D08F2A6BC584BEBC314A9BFB /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; + EB00990C9F7C2C0808B9C725904197A8 /* SMCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMCalloutView.m; sourceTree = ""; }; + EBD8E993B110532376D18B7F68AB317A /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; EDB35A7ED3324B1E48397C86891B1362 /* Pods-Delta-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Delta-acknowledgements.plist"; sourceTree = ""; }; - EDEA087E34F2CCDD2C994729BF5713A0 /* FileMD5Hash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-prefix.pch"; sourceTree = ""; }; - EFF023E5886316D3E4BE5E33DEFC09CD /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; - F100CB2591E800D05D116DFFF6E113FB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F5F11BD5B2DFD6937D1592499598DE60 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - F87F17273EFF30931912CB309D1E6BFA /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - F88E741495BD8393808C8937BF9809B6 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - F9A4278B24FBE80459CF484F58757536 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - FDAB1BF528028945AFDD3711E51E1205 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; + F1850435281691489E29EABB9E6D1EE9 /* FileMD5Hash-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FileMD5Hash-prefix.pch"; sourceTree = ""; }; + F4A02F29281568B9C5A5FDAE342EB996 /* SMCalloutView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-umbrella.h"; sourceTree = ""; }; + F715310E4E9F5621B0A1EE26721C2053 /* SMCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMCalloutView.h; sourceTree = ""; }; + F9058D96291772916213F878DBC9D4D1 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + F9B93EC3996C232919BB4F98458C45D5 /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; + FA5CE005707B6583BF9CE4DF86B180DC /* Pods_Delta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Delta.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FA9BCD1E0FC20F3166C12E76650B9006 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; + FC75BF94BACA3E271CFB55F764B1439B /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; + FE3498CA7C8E4CDD1E7F0774B8954505 /* FileMD5Hash-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FileMD5Hash-dummy.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 54F1511A803376CB9F7035A4D9F764D3 /* Frameworks */ = { + 5C0DF94230C9EECDA7269ACD38F80BB8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EC8F07E15821E96F36AE89560D864FCD /* Foundation.framework in Frameworks */, + B771F2C5509A5462CC27977AECB8A05E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5DA87AB35B47EC77EC2088FBAF257BF6 /* Frameworks */ = { + 6A87A94DB2110DBC645F09B6863C840A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1CA30DFDE14644203704970B8D9805BC /* Foundation.framework in Frameworks */, - BE6E1EFB57D60E715B8617336436B7EB /* ImageIO.framework in Frameworks */, + BC369BDF43EB991D6BDA5C129249D052 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -216,17 +257,40 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DA6FF3BA4FD643976251EC15FE2B2DDE /* Frameworks */ = { + 98F7206242604EADE5687F25134FD6E4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CA703680A4DCD9CBED0A35283C5B26AD /* Foundation.framework in Frameworks */, + 2207FDE1BA4EE2D34E6465B2C8161FC3 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D97354725A51F45FDD2257F6907CC168 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3134B683130B4C911A3B1F3269C23C0F /* Foundation.framework in Frameworks */, + AD541D0CA07079BA817282E47531170C /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 06F093DEB80530D69626327B53498E5F /* Support Files */ = { + isa = PBXGroup; + children = ( + 1BE982AA859EE1A9210D02D6E759A38A /* FileMD5Hash.modulemap */, + DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */, + FE3498CA7C8E4CDD1E7F0774B8954505 /* FileMD5Hash-dummy.m */, + F1850435281691489E29EABB9E6D1EE9 /* FileMD5Hash-prefix.pch */, + C43F044D76D5174F1A3472D15441FAC9 /* FileMD5Hash-umbrella.h */, + 89B0CCDB31FD33BDF5CA65821F697C4F /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/FileMD5Hash"; + sourceTree = ""; + }; 07F64EF51F4E28A5F31A5BD497F93D43 /* Pods-Delta */ = { isa = PBXGroup; children = ( @@ -254,28 +318,14 @@ name = iOS; sourceTree = ""; }; - 215EA3E47DCB9179F10F002F23BF2205 /* Support Files */ = { + 331CA75B5D0363D2AF243E44D661F9A3 /* FileMD5Hash */ = { isa = PBXGroup; children = ( - 3B0E16E5FDD2625E529346492266BAC7 /* FileMD5Hash.modulemap */, - 1BFCD9CD29832788C2D7A21CB2D8BC15 /* FileMD5Hash.xcconfig */, - 8D1F207343AA580772707DC4A28D56A6 /* FileMD5Hash-dummy.m */, - EDEA087E34F2CCDD2C994729BF5713A0 /* FileMD5Hash-prefix.pch */, - CE468B39C9C26748D747D220275F7E28 /* FileMD5Hash-umbrella.h */, - 412DD0329DB764513A93EE33E0F0D208 /* Info.plist */, + 2F58644292785B4F7A515DB8B0CDEDD6 /* FileHash.h */, + D7D4D4C83D4D81FF7570317D601B83DE /* FileHash.m */, + 06F093DEB80530D69626327B53498E5F /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/FileMD5Hash"; - sourceTree = ""; - }; - 23D15DDCFAD80F3CD489F0CE51D0A734 /* SQLite.swift */ = { - isa = PBXGroup; - children = ( - 9C78FBA6F5920D351FA53433C6454C94 /* standard */, - EA5E93A1CF79406AD07CE34BCE184C83 /* Support Files */, - ); - name = SQLite.swift; - path = SQLite.swift; + path = FileMD5Hash; sourceTree = ""; }; 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { @@ -286,27 +336,129 @@ name = Frameworks; sourceTree = ""; }; - 4D5958D0272F66FCAF199366E2F43E22 /* SDWebImage */ = { + 4AEE49E68EBF02CC7DFCA37C7B4949CE /* Support Files */ = { isa = PBXGroup; children = ( - FFDFED1DCC9B86F2081DCE3A61A63E8A /* Core */, - C7748537892B89AC3C7EA2A931B22DA4 /* Support Files */, + 56A4DC976BA7F3D768D97E2892BF9921 /* Info.plist */, + 4144DB38E332A91B6D069713AE85CA9B /* SQLite.swift.modulemap */, + 1139D439341C37EB96BC7E48A90BAD34 /* SQLite.swift.xcconfig */, + 1235F5A17D0DD4EC0AD2D22672582DA5 /* SQLite.swift-dummy.m */, + 86BA498830EB51ADEDC937DDFAA4E3D6 /* SQLite.swift-prefix.pch */, + 8D5D667758C8C5F56F3D2B66A9DA77FE /* SQLite.swift-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SQLite.swift"; + sourceTree = ""; + }; + 531E03EB9BDA837BD15E5CFA33950AA3 /* Fabric */ = { + isa = PBXGroup; + children = ( + 4E665218EE93EC4DF2ED23D10582E0BD /* FABAttributes.h */, + 9260283D302E99A4DF1407BB314DE094 /* Fabric.h */, + 9D50E7E44A83A074A5B27405071C555A /* Frameworks */, + ); + path = Fabric; + sourceTree = ""; + }; + 5427BBB5C33A290393604304A6049893 /* SDWebImage */ = { + isa = PBXGroup; + children = ( + 96D9DE7FF8E7331E3EF2EBA90FC85661 /* Core */, + EF5B18EEB9983E18AAF90F03F5AC0920 /* Support Files */, ); - name = SDWebImage; path = SDWebImage; sourceTree = ""; }; + 642FB49D7D332492EB8A1E85DA527C8D /* SQLite.swift */ = { + isa = PBXGroup; + children = ( + 7179E67470056D0D0709452C84C04005 /* standard */, + 4AEE49E68EBF02CC7DFCA37C7B4949CE /* Support Files */, + ); + path = SQLite.swift; + sourceTree = ""; + }; + 6E588658A8888B4B213D36BBF2905D46 /* Products */ = { + isa = PBXGroup; + children = ( + 0159C36B78547E23EBA1867CAE65F002 /* FileMD5Hash.framework */, + FA5CE005707B6583BF9CE4DF86B180DC /* Pods_Delta.framework */, + 16C12BA1CDC4BAA71A94C08D894DAE28 /* SDWebImage.framework */, + 0BC95251B8ED1E506925B002BC5B1352 /* SMCalloutView.framework */, + ACDD71A4691EF17778DC6EACBDAC34F1 /* SQLite.framework */, + ); + name = Products; + sourceTree = ""; + }; + 7179E67470056D0D0709452C84C04005 /* standard */ = { + isa = PBXGroup; + children = ( + 0C1F3D5BCB62B3A3AA33F0B5318C954B /* AggregateFunctions.swift */, + BC13A2CB88857A3DE05C855ACAAFD681 /* Blob.swift */, + 3B772FF2CD1B27DD4BA7BBBCB5323456 /* Coding.swift */, + 579EDE09C2AFB6C42BFC19A2F449884F /* Collation.swift */, + 07004039F06D09685DD871754FF9373E /* Connection.swift */, + 85480F525C5B282EF9EEA86B606F0514 /* CoreFunctions.swift */, + 7CFD86ED37239043D822717C836B4096 /* CustomFunctions.swift */, + 87F772F5D1108D9405EB497FC0F11A66 /* DateAndTimeFunctions.swift */, + BD4B5F5118F37D885793595BBEF3FE62 /* Errors.swift */, + AD2472619402C4FCE3F48DECBBF1B832 /* Expression.swift */, + E477F21875ADA4B7C1A276B048E49FCA /* Foundation.swift */, + 3D80AD2C4486EE72A4FFDA86FC6BCD1C /* fts3_tokenizer.h */, + 5A53E5BCCFF16DD308B1130B5B11971F /* FTS4.swift */, + D9F0E29E169056160CBC16EBC538F1BD /* FTS5.swift */, + C1E33DF619DCACF1C172619230749FD8 /* Helpers.swift */, + 548D52A5CFF8E0AEE731320D3A7424BC /* Operators.swift */, + BF8D107AB0FD8CC31571E3F4EFD1DCFF /* Query.swift */, + 02CB6780A2B665939923D55644234747 /* RTree.swift */, + 7EAF5150B1F1751DB4E090CAD73037EE /* Schema.swift */, + 36D5153C832FA47CE24314740F4636C1 /* Setter.swift */, + 62D28F99B90C42A3A0366B72E2B1B594 /* SQLite.h */, + DDCD815809D81A5711959C3EF15ABE37 /* SQLite-Bridging.h */, + 7CC663225143009C0D31C50E4FD21F74 /* SQLite-Bridging.m */, + 32F77D044B81F32AB9D7E58E85EA1C5F /* Statement.swift */, + 0945A96F1411067E758920A6B3B344D4 /* Value.swift */, + ); + name = standard; + sourceTree = ""; + }; + 795312991DF0976E153D01C3DB2D7EFF /* SMCalloutView */ = { + isa = PBXGroup; + children = ( + F715310E4E9F5621B0A1EE26721C2053 /* SMCalloutView.h */, + EB00990C9F7C2C0808B9C725904197A8 /* SMCalloutView.m */, + 77F129F1BA8E7E54902E13651560B797 /* SMClassicCalloutView.h */, + 2F3E13029C6A72F6947FCFCDD4DB219D /* SMClassicCalloutView.m */, + 85F172A17732362EF6633B33B6123F17 /* Support Files */, + ); + path = SMCalloutView; + sourceTree = ""; + }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, - F852E6B609DA8770FCD008B1AA388D4B /* Pods */, - C324234DA460FB6DAF1832F14EE1451F /* Products */, + B2C53D5F4CD7C3A5EA2C240CFAEC0936 /* Pods */, + 6E588658A8888B4B213D36BBF2905D46 /* Products */, 94AA82DA44BA457749B76A54853CD74C /* Targets Support Files */, ); sourceTree = ""; }; + 85F172A17732362EF6633B33B6123F17 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2D6E5A84EF07D22B853F28AE193B4E53 /* Info.plist */, + A3EA54BEF017871554C81FBD89870EF7 /* SMCalloutView.modulemap */, + 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */, + 3C1E5EE84A074FE94CE4085F1073C5A8 /* SMCalloutView-dummy.m */, + E52BF635FC2EF1621E67C61344C81C24 /* SMCalloutView-prefix.pch */, + F4A02F29281568B9C5A5FDAE342EB996 /* SMCalloutView-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SMCalloutView"; + sourceTree = ""; + }; 94AA82DA44BA457749B76A54853CD74C /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -315,173 +467,152 @@ name = "Targets Support Files"; sourceTree = ""; }; - 9C78FBA6F5920D351FA53433C6454C94 /* standard */ = { + 96D9DE7FF8E7331E3EF2EBA90FC85661 /* Core */ = { isa = PBXGroup; children = ( - 02CFB29DC3DD7F12E6FCB3AF7551621F /* AggregateFunctions.swift */, - 837C3E5A9502B232611753D63558BC82 /* Blob.swift */, - 5BF72D824371AE37AE8D113E23511058 /* Collation.swift */, - EC5D579537725ED9E4A63A4561E5D57E /* Connection.swift */, - 7E33F9E2E8FE4A1D8DC242453F60F3DD /* CoreFunctions.swift */, - EFF023E5886316D3E4BE5E33DEFC09CD /* CustomFunctions.swift */, - 7F29AB74923C754819783C81A4C51402 /* Expression.swift */, - FDAB1BF528028945AFDD3711E51E1205 /* Foundation.swift */, - 8D9F4C3A323182EA49ED89D873228168 /* fts3_tokenizer.h */, - 241675AEEA7BA04E4FF066CECB30C637 /* FTS4.swift */, - AECC9D7F32828C6EAF16D71C2AF51574 /* FTS5.swift */, - 161476EDCD7E91D1254F82F57070CEF4 /* Helpers.swift */, - 52B6499FD22D1350C5044F4AF8D88161 /* Operators.swift */, - DA415739B83EF857D8215C8D4015AB57 /* Query.swift */, - 328FC874A68ECDD302B8886297697CA5 /* RTree.swift */, - E374AE0B6BF659B8B75EE55ED6836E55 /* Schema.swift */, - CB5DFB460C7740203109A9B3CFBD1C1C /* Setter.swift */, - DE72C4DC688BEB8C8020235A9C39D913 /* SQLite.h */, - B63FF3D503D48B44EAFD66ADC8E44847 /* SQLite-Bridging.h */, - 0EABCA4565E1748ED1A9D2C05B12EEEA /* SQLite-Bridging.m */, - 1A09EA2216C54F25B0B12DB453C2F932 /* Statement.swift */, - 4AFE10FB598C7FBDEC93CD2E6A9C6614 /* Value.swift */, + CDB4230F44759F4F6161E3A256B3BB05 /* NSData+ImageContentType.h */, + A23D5152FE861FB5B1D4950073960C6E /* NSData+ImageContentType.m */, + 9FFDEFB012447BDBE8EEBA4C8646C82A /* SDImageCache.h */, + 73648FFFD6172035C937058B26803D6D /* SDImageCache.m */, + A8DD6B2CD921B3CD0CC1C8D285C3DB14 /* SDWebImageCompat.h */, + 2D1BEC9E736FAF5A1F921744894A5521 /* SDWebImageCompat.m */, + 40A8B4F2D02BC863608186A20E0C9C0D /* SDWebImageDecoder.h */, + 7B3B201E9287A29A9C7DB3E6E89A7C60 /* SDWebImageDecoder.m */, + 5C453C51E8BE33C2E172E40B18626329 /* SDWebImageDownloader.h */, + C7966176FA5D69F9D29BD871712BC02C /* SDWebImageDownloader.m */, + D1A915C60E1D50527210412A5B4094DD /* SDWebImageDownloaderOperation.h */, + 286FB5B86F6E898E75403C870CC05011 /* SDWebImageDownloaderOperation.m */, + 4584B245DEE3A7D04444B05704046791 /* SDWebImageManager.h */, + 83AD613EABACF4F682DD38C393197F4E /* SDWebImageManager.m */, + 72FC743DB5B7231D4A588B65D80A72CD /* SDWebImageOperation.h */, + 36D00FF6092D42D9710DAB8238D6B0F4 /* SDWebImagePrefetcher.h */, + 9573161D35C02B33C6AB094C1236CB57 /* SDWebImagePrefetcher.m */, + 87ED074865B1A0718B5980D1F6B32FD3 /* UIButton+WebCache.h */, + 5F6703DD83793C5DD5FAA92B71CB1DCC /* UIButton+WebCache.m */, + 49472E71891AFD1F328838FADB677451 /* UIImage+GIF.h */, + 527BDC649D5F7705A1725233BEC21CEC /* UIImage+GIF.m */, + E6CB37913B03B0D1D9C660198A0BBFD0 /* UIImage+MultiFormat.h */, + F9058D96291772916213F878DBC9D4D1 /* UIImage+MultiFormat.m */, + BEE873D9C7F8F2001BB54E2DAE25C134 /* UIImageView+HighlightedWebCache.h */, + 032AB538856BB66C33BCF3A6EFEBAEDC /* UIImageView+HighlightedWebCache.m */, + 32F29B2603D0AC4578F3F268097EF73E /* UIImageView+WebCache.h */, + EBD8E993B110532376D18B7F68AB317A /* UIImageView+WebCache.m */, + 4E3FC8531E544D920F83AC90536903AD /* UIView+WebCacheOperation.h */, + B02313ED3C98F0D9E8E673D608674FF0 /* UIView+WebCacheOperation.m */, ); - name = standard; + name = Core; sourceTree = ""; }; - C324234DA460FB6DAF1832F14EE1451F /* Products */ = { + 9D50E7E44A83A074A5B27405071C555A /* Frameworks */ = { isa = PBXGroup; children = ( - 64BBAED01933096F1844A17E2A6E9ECF /* FileMD5Hash.framework */, - 32CA5695E88A5637B79D100F29969924 /* Pods_Delta.framework */, - D08836B2071BB4727C71D229B96E924B /* SDWebImage.framework */, - 0B33A43387DF59869F2A6002F1DC3785 /* SQLite.framework */, + 1DEFD8D91DD8CE3B57B0A51BDB561E2D /* Fabric.framework */, ); - name = Products; + name = Frameworks; sourceTree = ""; }; - C7748537892B89AC3C7EA2A931B22DA4 /* Support Files */ = { + B2C53D5F4CD7C3A5EA2C240CFAEC0936 /* Pods */ = { isa = PBXGroup; children = ( - F100CB2591E800D05D116DFFF6E113FB /* Info.plist */, - 1FF7872FA7FDE3563D940E59B783D289 /* SDWebImage.modulemap */, - 3869DD0236542A3354407B601307ACD0 /* SDWebImage.xcconfig */, - DEA09D6AF8C63984F226C96BB95BACD1 /* SDWebImage-dummy.m */, - 5FCD868A676A88E3BCD88B68E97008AF /* SDWebImage-prefix.pch */, - F5F11BD5B2DFD6937D1592499598DE60 /* SDWebImage-umbrella.h */, + E2A13FB89351C8CBD4E4D5F5253B714E /* Crashlytics */, + 531E03EB9BDA837BD15E5CFA33950AA3 /* Fabric */, + 331CA75B5D0363D2AF243E44D661F9A3 /* FileMD5Hash */, + 5427BBB5C33A290393604304A6049893 /* SDWebImage */, + 795312991DF0976E153D01C3DB2D7EFF /* SMCalloutView */, + 642FB49D7D332492EB8A1E85DA527C8D /* SQLite.swift */, + ); + name = Pods; + sourceTree = ""; + }; + E2A13FB89351C8CBD4E4D5F5253B714E /* Crashlytics */ = { + isa = PBXGroup; + children = ( + EA7149D3D08F2A6BC584BEBC314A9BFB /* ANSCompatibility.h */, + 4C4C366461DA3B92968A67361C700AB8 /* Answers.h */, + FC75BF94BACA3E271CFB55F764B1439B /* CLSAttributes.h */, + 99F8E44ACB5CF087E4BF8F904DE04F47 /* CLSLogging.h */, + FA9BCD1E0FC20F3166C12E76650B9006 /* CLSReport.h */, + 4E1FBC10E4C47720883970DAA89DFF1B /* CLSStackFrame.h */, + F9B93EC3996C232919BB4F98458C45D5 /* Crashlytics.h */, + EFCB351B3EEC448C22F06D7285DE95E6 /* Frameworks */, + ); + path = Crashlytics; + sourceTree = ""; + }; + EF5B18EEB9983E18AAF90F03F5AC0920 /* Support Files */ = { + isa = PBXGroup; + children = ( + 1F46051C1128C9358A3A710DEB82AA24 /* Info.plist */, + 9549FD9572AD09182CBFC5AF4C3806EC /* SDWebImage.modulemap */, + CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */, + 52C0F64FF5BD9D05D0DDD439AB4B4B4C /* SDWebImage-dummy.m */, + DDE976DADC01C9F233C73181B7C677FA /* SDWebImage-prefix.pch */, + 19644E545E27F0ABCAEA0D43C6DFB21E /* SDWebImage-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - EA5E93A1CF79406AD07CE34BCE184C83 /* Support Files */ = { + EFCB351B3EEC448C22F06D7285DE95E6 /* Frameworks */ = { isa = PBXGroup; children = ( - 60F5A11EC6812F99454B862E5D25421F /* Info.plist */, - 65F28DCB78E819DC3CE0D7757782DD39 /* SQLite.swift.modulemap */, - 068843C76381C7713BED164CDF6DB372 /* SQLite.swift.xcconfig */, - ABE9E3591A17E1E441225F098283A306 /* SQLite.swift-dummy.m */, - 999B0F668F9024311EE886DF8548A51B /* SQLite.swift-prefix.pch */, - 051635EF10CEB3E20034637DA88323F6 /* SQLite.swift-umbrella.h */, + D8C077D2CD74FE7022E6E86BA03B9BAA /* Crashlytics.framework */, ); - name = "Support Files"; - path = "../Target Support Files/SQLite.swift"; - sourceTree = ""; - }; - EA6A6AF973D3F3B1A36A3D7DEA8667E1 /* FileMD5Hash */ = { - isa = PBXGroup; - children = ( - 6CAE37BEBD94BBA16C370C90C203D71D /* FileHash.h */, - 6A8DC112DC6F54D2EA44BB94BA411D13 /* FileHash.m */, - 215EA3E47DCB9179F10F002F23BF2205 /* Support Files */, - ); - name = FileMD5Hash; - path = FileMD5Hash; - sourceTree = ""; - }; - F852E6B609DA8770FCD008B1AA388D4B /* Pods */ = { - isa = PBXGroup; - children = ( - EA6A6AF973D3F3B1A36A3D7DEA8667E1 /* FileMD5Hash */, - 4D5958D0272F66FCAF199366E2F43E22 /* SDWebImage */, - 23D15DDCFAD80F3CD489F0CE51D0A734 /* SQLite.swift */, - ); - name = Pods; - sourceTree = ""; - }; - FFDFED1DCC9B86F2081DCE3A61A63E8A /* Core */ = { - isa = PBXGroup; - children = ( - BFBEDAF377DDF77D6705502797F7ECA3 /* NSData+ImageContentType.h */, - F87F17273EFF30931912CB309D1E6BFA /* NSData+ImageContentType.m */, - B5B4EE1BEA958CA01AF40E92CB13AA78 /* SDImageCache.h */, - 286B6B4A107A970E06DACB96700648B2 /* SDImageCache.m */, - B6D720A9863CA93098F606E3B051B62A /* SDWebImageCompat.h */, - C3FAFE6429281B92FA08328564E641D0 /* SDWebImageCompat.m */, - 249488BED0A0759C176A9BDE35C4FB3B /* SDWebImageDecoder.h */, - 7DDDA5F6C08D553493A0C921F2CBCB79 /* SDWebImageDecoder.m */, - C55038524D47D355953CFE5FAEB07705 /* SDWebImageDownloader.h */, - B69A3F2A318DB0B79961834D70E5ACB2 /* SDWebImageDownloader.m */, - 5CCA4CBCE80D4A28A0AB67207078D490 /* SDWebImageDownloaderOperation.h */, - 5A86AED40C9CA780168DAA07644ADC60 /* SDWebImageDownloaderOperation.m */, - F9A4278B24FBE80459CF484F58757536 /* SDWebImageManager.h */, - 5ACCC548A1ACA820E36EBEDA1DF0A098 /* SDWebImageManager.m */, - BFC4A0254C9F198D8FDD15DDBA538715 /* SDWebImageOperation.h */, - 3E7B4776DED3F6F6F66C8D86E0014F1E /* SDWebImagePrefetcher.h */, - 52D6B269E25580A7A88658571A695331 /* SDWebImagePrefetcher.m */, - C508CB1A3EA8E29F34FB503FC020916B /* UIButton+WebCache.h */, - 8325D3F84075D7B6A1F8E75249210075 /* UIButton+WebCache.m */, - 59D3C88715B10C471DC2B7D6E3C4E256 /* UIImage+GIF.h */, - CE7B561A222812B0D8DF5028EBE39AE1 /* UIImage+GIF.m */, - 0814B36E72C9B14547AE145584FEBB3C /* UIImage+MultiFormat.h */, - BB68993BE9A96860C1ADDD8DFB4926F6 /* UIImage+MultiFormat.m */, - CBAE01ACACC427B178294D6628EA661D /* UIImageView+HighlightedWebCache.h */, - B5EDCC3711E9C7CF098B57C5462F37F3 /* UIImageView+HighlightedWebCache.m */, - 3D2806C755DE9776F3A3EE67486D0B15 /* UIImageView+WebCache.h */, - 183B2A54F457D9B148461B8AA0021F2B /* UIImageView+WebCache.m */, - 0C899249698F9147D611626044C9A374 /* UIView+WebCacheOperation.h */, - F88E741495BD8393808C8937BF9809B6 /* UIView+WebCacheOperation.m */, - ); - name = Core; + name = Frameworks; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 35D56EB4CB117295F095C80B2F024E20 /* Headers */ = { + 45644FD3D44A25933E73FC65465227F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1B1088DAF42D74567A705DC440211D12 /* NSData+ImageContentType.h in Headers */, - 1C0F95DC71B64C451857A4C991BF2AF8 /* SDImageCache.h in Headers */, - 459009460BFBB3DBB4C9168143FC967E /* SDWebImage-umbrella.h in Headers */, - 2888ACC8836D2E79F2F341C32AB3E0B0 /* SDWebImageCompat.h in Headers */, - A7EF436BF7DF4C8640864FBA1BA94351 /* SDWebImageDecoder.h in Headers */, - 6C88898656689F997079D8C2E02D380B /* SDWebImageDownloader.h in Headers */, - 58C256076C467E9132B30FA203F4682E /* SDWebImageDownloaderOperation.h in Headers */, - 60C9DBA3EA5D0784AE9C8C87B51BBCF0 /* SDWebImageManager.h in Headers */, - 930D6D8D90701B4A6FD30E94CF42871B /* SDWebImageOperation.h in Headers */, - 85AC71E815A41D4B45A0EB55F9A5DB1E /* SDWebImagePrefetcher.h in Headers */, - 3CD0EE70D32733800E902E7C8AFEA79B /* UIButton+WebCache.h in Headers */, - CE103933627196D2BB63FCFB7DDDE1F0 /* UIImage+GIF.h in Headers */, - 7E7C64643C2C3AC5F7CBCC8E044801EF /* UIImage+MultiFormat.h in Headers */, - 291D6ECA35FE23753F9EFEDA8AB633FC /* UIImageView+HighlightedWebCache.h in Headers */, - F86C46E798AA77D74381F0A299724517 /* UIImageView+WebCache.h in Headers */, - 289C4C0E1B0E975621D177439BCF4B6F /* UIView+WebCacheOperation.h in Headers */, + AF71FA11F33D4FF8286DE4191247F4B9 /* NSData+ImageContentType.h in Headers */, + 307ACA884D90D1B1AF65D152027F8037 /* SDImageCache.h in Headers */, + DD3018D33ABEB0BAA61C562F8A5FFC45 /* SDWebImage-umbrella.h in Headers */, + 020AFCE363BBA923E907BD453C394A18 /* SDWebImageCompat.h in Headers */, + D76E41A83001A863D0EF9A3F0EC0F68B /* SDWebImageDecoder.h in Headers */, + 593AA045F16ABDD2E0C216A6693160A6 /* SDWebImageDownloader.h in Headers */, + 1FAD25073BF85238A82B39CF64208138 /* SDWebImageDownloaderOperation.h in Headers */, + 255360BAB2981F4F6C7C2ADFB034DD78 /* SDWebImageManager.h in Headers */, + A5F83FD5E39A40A303AEE42994F6BB2D /* SDWebImageOperation.h in Headers */, + B9AC8B5C153CD4028E20BDA493F3E8E9 /* SDWebImagePrefetcher.h in Headers */, + F01610EE244331A9AE359D92682841FB /* UIButton+WebCache.h in Headers */, + 19A8DB8810E10682948CBA8F1954F70E /* UIImage+GIF.h in Headers */, + 35ECA1266BE70763C47DB385321C8BDA /* UIImage+MultiFormat.h in Headers */, + 3EEAE0A72D5F8D0397B9DF878F9ABE98 /* UIImageView+HighlightedWebCache.h in Headers */, + E282C5080C3257C180B32B1F15F2842E /* UIImageView+WebCache.h in Headers */, + FC2D34D5B376D1F700CAFB0E04439235 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5357A79BD0A1FE37AA0F4EE4EE9D05A5 /* Headers */ = { + 60803EF6FD8B9CEB9F583958E5B9C104 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 92C60A4E3797D69E6A7725B12E25C0D0 /* fts3_tokenizer.h in Headers */, - 5172EB82F181CD5C6058720F1EDBFFBA /* SQLite-Bridging.h in Headers */, - EA47189A2ADA7ABA3CAD4DAA9C862095 /* SQLite.h in Headers */, - F713228AE3D00F1C478CF62077F73AD7 /* SQLite.swift-umbrella.h in Headers */, + 8288FE73D4A817A73306848AF872DD3B /* SMCalloutView-umbrella.h in Headers */, + 0E8A3312FC090BE373D8B2DC9F33355C /* SMCalloutView.h in Headers */, + A41E5A0EF327ED9DF2D2866EF78F30A5 /* SMClassicCalloutView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - EB96366D2C78C813C41EBAEF56FC0ED9 /* Headers */ = { + 8FBE883C1E351BF2AB6A893697981986 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7784F558B74616E8DC1818DA0A0532BC /* Pods-Delta-umbrella.h in Headers */, + E4A2641C95DDD1AEE0BA851321A07FC8 /* Pods-Delta-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9E79C31AF032218761B7231BED8BA825 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 05585238F98FFE793DC0D1BA800C0D27 /* fts3_tokenizer.h in Headers */, + 20A087C33B817D962690FDC7E894405A /* SQLite-Bridging.h in Headers */, + A8274F6E16ECE48FB9139B8456A31201 /* SQLite.h in Headers */, + 8F7D92A4E63CC4056DFD5C0B1FD14910 /* SQLite.swift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -497,24 +628,42 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 3E23F405271B35BEEA87F9840F74A510 /* Pods-Delta */ = { + 4B110CBCF3EEB0093F08DE352A1B92DA /* Pods-Delta */ = { isa = PBXNativeTarget; - buildConfigurationList = 0ABB0BB9AFF3C8D8FF7C2460E438B5E6 /* Build configuration list for PBXNativeTarget "Pods-Delta" */; + buildConfigurationList = 8CEDF6F3DB0895E0DA8B67EF2A37C22C /* Build configuration list for PBXNativeTarget "Pods-Delta" */; buildPhases = ( - 4B8CABDD309337BA47058081211D728F /* Sources */, - 54F1511A803376CB9F7035A4D9F764D3 /* Frameworks */, - EB96366D2C78C813C41EBAEF56FC0ED9 /* Headers */, + A8A7CB475AC069906F4B23BEB0BD4A7F /* Sources */, + 5C0DF94230C9EECDA7269ACD38F80BB8 /* Frameworks */, + 8FBE883C1E351BF2AB6A893697981986 /* Headers */, ); buildRules = ( ); dependencies = ( - 4DDDB8B816F29215470EC263CE338171 /* PBXTargetDependency */, - 32FA1882D4ABC28118B91D8E6A104BFB /* PBXTargetDependency */, - 0935BBD3CFD2E9F741AC2D7E88FF5501 /* PBXTargetDependency */, + 29BDFC0FDC07E71DABA85606ECDCDFD4 /* PBXTargetDependency */, + C658BFD1115AABC95D34853360A10A3D /* PBXTargetDependency */, + 35ED1E44B53F73C54B11C67782175716 /* PBXTargetDependency */, + 7912D2146AA8F4861919949C710FE08B /* PBXTargetDependency */, ); name = "Pods-Delta"; productName = "Pods-Delta"; - productReference = 32CA5695E88A5637B79D100F29969924 /* Pods_Delta.framework */; + productReference = FA5CE005707B6583BF9CE4DF86B180DC /* Pods_Delta.framework */; + productType = "com.apple.product-type.framework"; + }; + 5A0A16E27351F849E411E94C505CF452 /* SMCalloutView */ = { + isa = PBXNativeTarget; + buildConfigurationList = F8D4561891ACE1BC67CEB8D0C6F063E4 /* Build configuration list for PBXNativeTarget "SMCalloutView" */; + buildPhases = ( + 83F4AE4AB580D4EFA51C6D39F76BD923 /* Sources */, + 98F7206242604EADE5687F25134FD6E4 /* Frameworks */, + 60803EF6FD8B9CEB9F583958E5B9C104 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SMCalloutView; + productName = SMCalloutView; + productReference = 0BC95251B8ED1E506925B002BC5B1352 /* SMCalloutView.framework */; productType = "com.apple.product-type.framework"; }; 924057B2A88FC4B5526EC3FC7483ABE2 /* FileMD5Hash */ = { @@ -531,33 +680,16 @@ ); name = FileMD5Hash; productName = FileMD5Hash; - productReference = 64BBAED01933096F1844A17E2A6E9ECF /* FileMD5Hash.framework */; + productReference = 0159C36B78547E23EBA1867CAE65F002 /* FileMD5Hash.framework */; productType = "com.apple.product-type.framework"; }; - 95AEAD50DEA1563D4D1E2AD6EEE0E7B4 /* SDWebImage */ = { + D71D7949D6292CD21BE206D00103E682 /* SQLite.swift */ = { isa = PBXNativeTarget; - buildConfigurationList = 533175F905F937DF358073A42B67A5AA /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = 668A24D62570C0D022FAD98278F67B72 /* Build configuration list for PBXNativeTarget "SQLite.swift" */; buildPhases = ( - 029BC4D3B4B34C75603230D495FF2FE6 /* Sources */, - 5DA87AB35B47EC77EC2088FBAF257BF6 /* Frameworks */, - 35D56EB4CB117295F095C80B2F024E20 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SDWebImage; - productName = SDWebImage; - productReference = D08836B2071BB4727C71D229B96E924B /* SDWebImage.framework */; - productType = "com.apple.product-type.framework"; - }; - D88F755329BB917F99DFC5405AC691FE /* SQLite.swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9679E283619E0024B3156EB387DDCBDE /* Build configuration list for PBXNativeTarget "SQLite.swift" */; - buildPhases = ( - A17AC6BBAD5FB70B85220CE98AEA2BD0 /* Sources */, - DA6FF3BA4FD643976251EC15FE2B2DDE /* Frameworks */, - 5357A79BD0A1FE37AA0F4EE4EE9D05A5 /* Headers */, + 3EB6A6CF70C75C8E82E836F84AD13EFA /* Sources */, + 6A87A94DB2110DBC645F09B6863C840A /* Frameworks */, + 9E79C31AF032218761B7231BED8BA825 /* Headers */, ); buildRules = ( ); @@ -565,7 +697,24 @@ ); name = SQLite.swift; productName = SQLite.swift; - productReference = 0B33A43387DF59869F2A6002F1DC3785 /* SQLite.framework */; + productReference = ACDD71A4691EF17778DC6EACBDAC34F1 /* SQLite.framework */; + productType = "com.apple.product-type.framework"; + }; + E02CAC9BD02FC53AAA763EA4830E4884 /* SDWebImage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 336350D22A1C45232C1FDF436E1FEBA2 /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildPhases = ( + AABCA925A95FAE4250B2D9206D3D0081 /* Sources */, + D97354725A51F45FDD2257F6907CC168 /* Frameworks */, + 45644FD3D44A25933E73FC65465227F8 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SDWebImage; + productName = SDWebImage; + productReference = 16C12BA1CDC4BAA71A94C08D894DAE28 /* SDWebImage.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -575,7 +724,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0700; + LastUpgradeCheck = 0910; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -585,73 +734,87 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = C324234DA460FB6DAF1832F14EE1451F /* Products */; + productRefGroup = 6E588658A8888B4B213D36BBF2905D46 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 924057B2A88FC4B5526EC3FC7483ABE2 /* FileMD5Hash */, - 3E23F405271B35BEEA87F9840F74A510 /* Pods-Delta */, - 95AEAD50DEA1563D4D1E2AD6EEE0E7B4 /* SDWebImage */, - D88F755329BB917F99DFC5405AC691FE /* SQLite.swift */, + 4B110CBCF3EEB0093F08DE352A1B92DA /* Pods-Delta */, + E02CAC9BD02FC53AAA763EA4830E4884 /* SDWebImage */, + 5A0A16E27351F849E411E94C505CF452 /* SMCalloutView */, + D71D7949D6292CD21BE206D00103E682 /* SQLite.swift */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 029BC4D3B4B34C75603230D495FF2FE6 /* Sources */ = { + 3EB6A6CF70C75C8E82E836F84AD13EFA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BCDE9C9E8DDB9FD7F9F0F68200854276 /* NSData+ImageContentType.m in Sources */, - FEE67933F477210286CDEC86E60D32FF /* SDImageCache.m in Sources */, - 662C18FEA4DFF9970E8D028B281D97EA /* SDWebImage-dummy.m in Sources */, - D1EC729542506D0FF0FEAFC10E544BDC /* SDWebImageCompat.m in Sources */, - 32649919900BFE14972CB170A11E7A30 /* SDWebImageDecoder.m in Sources */, - 7487C10F58C60552A3B84C47EF4AABB5 /* SDWebImageDownloader.m in Sources */, - 843BDA3C40997300E0B3CB9E27043997 /* SDWebImageDownloaderOperation.m in Sources */, - F97431F8AA6A848ACA072E9DB7DCF5DF /* SDWebImageManager.m in Sources */, - D7570BC6C11012C5F53C53ABF8187CC6 /* SDWebImagePrefetcher.m in Sources */, - C0D6EE693288E4A34090518CEE18269F /* UIButton+WebCache.m in Sources */, - A66ECB0C1037DD2A24411DF60C9362AE /* UIImage+GIF.m in Sources */, - 6A00465C6CF90CE73C984F03572BE9C3 /* UIImage+MultiFormat.m in Sources */, - E8166EA34E4BEF58C5583C06CFFB0971 /* UIImageView+HighlightedWebCache.m in Sources */, - 71A419BAB91B0BECA6617C071891BF3C /* UIImageView+WebCache.m in Sources */, - A66BC5F91E9B66C05262C55BABAA0421 /* UIView+WebCacheOperation.m in Sources */, + 5378E66F36C92CCCFFD4F95053426CA2 /* AggregateFunctions.swift in Sources */, + D4291536C582A6ADAC6F18F7D8179876 /* Blob.swift in Sources */, + D2B6204B0FDB37AE2282418510B5DC90 /* Coding.swift in Sources */, + D5BFFB0A8A27452013266BFFC8DB1DBF /* Collation.swift in Sources */, + F608A0FA0233A07E7B7085294F183823 /* Connection.swift in Sources */, + E2280C9C262A949A476A9EAC56214884 /* CoreFunctions.swift in Sources */, + E7479C47D52374BB8E42CC5698D76981 /* CustomFunctions.swift in Sources */, + E93FFD6F5E098B71ECBBACD79E1560EC /* DateAndTimeFunctions.swift in Sources */, + 2364CBBEE6A7320F676CF8D8F4541DED /* Errors.swift in Sources */, + 406D94A47FC41812A1A1F45997B699AA /* Expression.swift in Sources */, + A81EF80FB896476F7D27B1EE45FF4D7E /* Foundation.swift in Sources */, + 1150C57CFCC34F769A6B3A9A957FCE1E /* FTS4.swift in Sources */, + 38ED2874ACF9C288331E3707699DC9C2 /* FTS5.swift in Sources */, + 425BDD464654D6CFE022E233C1229E95 /* Helpers.swift in Sources */, + 1DCE10EE2CBF5007B2BA3E4BE0465891 /* Operators.swift in Sources */, + 8408E852421C1BE1E32DF2E314EC8E43 /* Query.swift in Sources */, + 711CA407D0376A72931BDF50AF5979F9 /* RTree.swift in Sources */, + 8F0F89B097957C37D6E53A6E0623D08D /* Schema.swift in Sources */, + AEB1C8816D845293F320C53668E56595 /* Setter.swift in Sources */, + 6E0EAEAD314BD406BDF642C954F224A9 /* SQLite-Bridging.m in Sources */, + 7321CB11628493652E10C9FF47B1E3CE /* SQLite.swift-dummy.m in Sources */, + BBCBA2E5DAC6C3BD2404A5628A0AB512 /* Statement.swift in Sources */, + 6C5BAD8632B93F8B791FC5C97AE17C15 /* Value.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4B8CABDD309337BA47058081211D728F /* Sources */ = { + 83F4AE4AB580D4EFA51C6D39F76BD923 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7CBFCCC7367FCCF9D53FBFA8ED86BDD7 /* Pods-Delta-dummy.m in Sources */, + 29D38081CE6E0C1DC7B78CB2467733EE /* SMCalloutView-dummy.m in Sources */, + 3BF50196E73DD51E6A1152973DFC27DD /* SMCalloutView.m in Sources */, + 29B4C7EBC553B1A96DDE7199EF7EB78A /* SMClassicCalloutView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - A17AC6BBAD5FB70B85220CE98AEA2BD0 /* Sources */ = { + A8A7CB475AC069906F4B23BEB0BD4A7F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B4D2E6BDA66762C41461DE1466567A22 /* AggregateFunctions.swift in Sources */, - A3C78AD9387EE296772B1B4031290DE9 /* Blob.swift in Sources */, - EAF8AC345B2B68E07E239E83AACF81E3 /* Collation.swift in Sources */, - 679DC0A54440ACE06C668426D960434B /* Connection.swift in Sources */, - E376FD7DF6990EB5D6059FF86AA392DD /* CoreFunctions.swift in Sources */, - EEF3F3825344DF5B3B1F91C8B3D92F81 /* CustomFunctions.swift in Sources */, - 6B70676C9CD3E65704CF5F345A58D7D8 /* Expression.swift in Sources */, - 80C66AC9B65D7A9E73EAF52953078A80 /* Foundation.swift in Sources */, - 098DD319E9D5AE3C4B413F1DCB7245E5 /* FTS4.swift in Sources */, - C3351D1B55FD32BBAD9B3335713FBB37 /* FTS5.swift in Sources */, - 81EA3C6ADBF7CCBC1711693AD8966D30 /* Helpers.swift in Sources */, - 4A2DCD3F0F0A15427A7008B45E0D3463 /* Operators.swift in Sources */, - C36994840D82BF702EC602A8DEC63223 /* Query.swift in Sources */, - E5102C928DC86E24E1FA70862A698132 /* RTree.swift in Sources */, - A5E0B4C7414F681B71DE66C07F4628C4 /* Schema.swift in Sources */, - 59757ED380B9FD2D3529CC01940ABC17 /* Setter.swift in Sources */, - 12CF79798B69B43D77D12724505829EB /* SQLite-Bridging.m in Sources */, - 9A73EA1D60A6932BDA2B033258B82247 /* SQLite.swift-dummy.m in Sources */, - F70F77BB9BD4B473EF5731A958F6CFB4 /* Statement.swift in Sources */, - A215B295B907F3FC375FFA644649A845 /* Value.swift in Sources */, + 0E95FFC222F9730AB5A2FA648F3DC10B /* Pods-Delta-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AABCA925A95FAE4250B2D9206D3D0081 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 67A9DED3A799C2C1B3190757AF74C869 /* NSData+ImageContentType.m in Sources */, + 53A1E27B96743AF1526979D7C407B36E /* SDImageCache.m in Sources */, + BD93645C73A232461BAFDCD2D583A48F /* SDWebImage-dummy.m in Sources */, + D47F030F3EE8210B84E275A72194BD50 /* SDWebImageCompat.m in Sources */, + 867ED479D87B069987F16CC84F1CB314 /* SDWebImageDecoder.m in Sources */, + D1B81917966545E8201CA9A7C53EAD86 /* SDWebImageDownloader.m in Sources */, + CB0C7E4A7184D8CB11F07ABB7E01BCBF /* SDWebImageDownloaderOperation.m in Sources */, + BB19B505BC3000C14CD0C6539F716F6F /* SDWebImageManager.m in Sources */, + 3B7E86A00F8C6E8F5A351516BDFC6E0A /* SDWebImagePrefetcher.m in Sources */, + 34F15EDD4167886716DE13EF3DA61525 /* UIButton+WebCache.m in Sources */, + BACF769130EA8F084781334E3F5487D6 /* UIImage+GIF.m in Sources */, + 01F6FD7829922FFEDBA0AC937221139D /* UIImage+MultiFormat.m in Sources */, + 7E1E4E7C559B3DCBC6FB1E3F91303A61 /* UIImageView+HighlightedWebCache.m in Sources */, + B4FF0763F545E55DDF9FB358526B21C5 /* UIImageView+WebCache.m in Sources */, + 4BFD33775F72F952206DA9101BA849A2 /* UIView+WebCacheOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -667,30 +830,69 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0935BBD3CFD2E9F741AC2D7E88FF5501 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SQLite.swift; - target = D88F755329BB917F99DFC5405AC691FE /* SQLite.swift */; - targetProxy = 43751C8F4A1E0FED8A513B6C736B2141 /* PBXContainerItemProxy */; - }; - 32FA1882D4ABC28118B91D8E6A104BFB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 95AEAD50DEA1563D4D1E2AD6EEE0E7B4 /* SDWebImage */; - targetProxy = B1786652CDC10C9D41868B80152892A5 /* PBXContainerItemProxy */; - }; - 4DDDB8B816F29215470EC263CE338171 /* PBXTargetDependency */ = { + 29BDFC0FDC07E71DABA85606ECDCDFD4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FileMD5Hash; target = 924057B2A88FC4B5526EC3FC7483ABE2 /* FileMD5Hash */; - targetProxy = F1D70524142DB2A888CA1F6E3F0F67CC /* PBXContainerItemProxy */; + targetProxy = 0E57566421DC7C04ED10FBFF02AE3217 /* PBXContainerItemProxy */; + }; + 35ED1E44B53F73C54B11C67782175716 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SMCalloutView; + target = 5A0A16E27351F849E411E94C505CF452 /* SMCalloutView */; + targetProxy = 7713FF1D874368FBE2D22D4E4CB7C6A7 /* PBXContainerItemProxy */; + }; + 7912D2146AA8F4861919949C710FE08B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SQLite.swift; + target = D71D7949D6292CD21BE206D00103E682 /* SQLite.swift */; + targetProxy = 3AAE57E02BD6B50C58159D299DCA0C4F /* PBXContainerItemProxy */; + }; + C658BFD1115AABC95D34853360A10A3D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = E02CAC9BD02FC53AAA763EA4830E4884 /* SDWebImage */; + targetProxy = 387F41711D87C3D2C8716FF754189765 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 34CC1AA0F2C62D3C5C3A2AEF38F2FE78 /* Release */ = { + 1B44B1BF03D632C0068C58FAC03F1357 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3869DD0236542A3354407B601307ACD0 /* SDWebImage.xcconfig */; + baseConfigurationReference = DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FileMD5Hash/FileMD5Hash-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FileMD5Hash/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FileMD5Hash/FileMD5Hash.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = FileMD5Hash; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 20BA7269FACC47ABAD2D3CC89BC89EC6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EA65B5484E3BB3284577BD4EA4FA7147 /* Pods-Delta.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -704,16 +906,21 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Delta/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SDWebImage; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Delta; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -721,6 +928,39 @@ }; name = Release; }; + 2C31D69ABFA4B7F5C89129C61741805C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SDWebImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 643C76AA582046977B7877822ED7A258 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -731,7 +971,9 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; @@ -739,15 +981,21 @@ CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_DEBUG=1", @@ -769,7 +1017,194 @@ }; name = Debug; }; - 75EE5B0ED6DB7C6D167C2008C7D4D49C /* Debug */ = { + 74A47D0F220DFB19B577E2691188FA2A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DFB799765277CB092B656E76446C5A75 /* FileMD5Hash.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/FileMD5Hash/FileMD5Hash-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/FileMD5Hash/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/FileMD5Hash/FileMD5Hash.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = FileMD5Hash; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 8AE307153D8088BAC8D8FD071BFEDC00 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SMCalloutView/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SMCalloutView/SMCalloutView.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SMCalloutView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8F0F2A3A08EEBADC27F8A52324D49467 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 061C525038BE58FCE9A6013CBA4162B5 /* SMCalloutView.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SMCalloutView/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SMCalloutView/SMCalloutView.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SMCalloutView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 9E691F7751DB4F8128A08C1C3226B961 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1139D439341C37EB96BC7E48A90BAD34 /* SQLite.swift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SQLite; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + C03B8870130C98D1B02B59D003687524 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + DC6449F204C483A3EC3E347DD20187E8 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1C3BA8511D0F025064897F6EC408296A /* Pods-Delta.debug.xcconfig */; buildSettings = { @@ -808,9 +1243,9 @@ }; name = Debug; }; - 7CB79771FB206E08213038425109B42C /* Release */ = { + E957D1AB3BBDFCB34BDE5B889C0504A4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EA65B5484E3BB3284577BD4EA4FA7147 /* Pods-Delta.release.xcconfig */; + baseConfigurationReference = CC448D70D2D84A30A4A4D226A8ABD13F /* SDWebImage.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -824,239 +1259,56 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Delta/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Delta; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 9ED0ADE0EA3D1E3B4EA7EFBE25BB4D6F /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1BFCD9CD29832788C2D7A21CB2D8BC15 /* FileMD5Hash.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FileMD5Hash/FileMD5Hash-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FileMD5Hash/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FileMD5Hash/FileMD5Hash.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = FileMD5Hash; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - B284F3DC897E0D103E422DDAA04F371D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 068843C76381C7713BED164CDF6DB372 /* SQLite.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = SQLite; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - B848EC96B1CE2C5324C340E1F1935FD8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 068843C76381C7713BED164CDF6DB372 /* SQLite.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SQLite; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C03B8870130C98D1B02B59D003687524 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - D49B8E408047BA5314BE2727D48E1834 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1BFCD9CD29832788C2D7A21CB2D8BC15 /* FileMD5Hash.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/FileMD5Hash/FileMD5Hash-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FileMD5Hash/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FileMD5Hash/FileMD5Hash.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = FileMD5Hash; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - FF2643C8017F1A3A64AA8C00C06221D7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3869DD0236542A3354407B601307ACD0 /* SDWebImage.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SDWebImage/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; + }; + FD3646A686FD0F45448A0DC78390B092 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1139D439341C37EB96BC7E48A90BAD34 /* SQLite.swift.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SQLite.swift/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SQLite; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; }; /* End XCBuildConfiguration section */ @@ -1064,17 +1316,8 @@ 004E731E53979ED2864268A8A0D2BFBE /* Build configuration list for PBXNativeTarget "FileMD5Hash" */ = { isa = XCConfigurationList; buildConfigurations = ( - D49B8E408047BA5314BE2727D48E1834 /* Debug */, - 9ED0ADE0EA3D1E3B4EA7EFBE25BB4D6F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 0ABB0BB9AFF3C8D8FF7C2460E438B5E6 /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 75EE5B0ED6DB7C6D167C2008C7D4D49C /* Debug */, - 7CB79771FB206E08213038425109B42C /* Release */, + 1B44B1BF03D632C0068C58FAC03F1357 /* Debug */, + 74A47D0F220DFB19B577E2691188FA2A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1088,20 +1331,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 533175F905F937DF358073A42B67A5AA /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + 336350D22A1C45232C1FDF436E1FEBA2 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - FF2643C8017F1A3A64AA8C00C06221D7 /* Debug */, - 34CC1AA0F2C62D3C5C3A2AEF38F2FE78 /* Release */, + 2C31D69ABFA4B7F5C89129C61741805C /* Debug */, + E957D1AB3BBDFCB34BDE5B889C0504A4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9679E283619E0024B3156EB387DDCBDE /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = { + 668A24D62570C0D022FAD98278F67B72 /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = { isa = XCConfigurationList; buildConfigurations = ( - B284F3DC897E0D103E422DDAA04F371D /* Debug */, - B848EC96B1CE2C5324C340E1F1935FD8 /* Release */, + 9E691F7751DB4F8128A08C1C3226B961 /* Debug */, + FD3646A686FD0F45448A0DC78390B092 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8CEDF6F3DB0895E0DA8B67EF2A37C22C /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DC6449F204C483A3EC3E347DD20187E8 /* Debug */, + 20BA7269FACC47ABAD2D3CC89BC89EC6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F8D4561891ACE1BC67CEB8D0C6F063E4 /* Build configuration list for PBXNativeTarget "SMCalloutView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8AE307153D8088BAC8D8FD071BFEDC00 /* Debug */, + 8F0F2A3A08EEBADC27F8A52324D49467 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/SMCalloutView/LICENSE b/Pods/SMCalloutView/LICENSE new file mode 100644 index 0000000..2bb9ad2 --- /dev/null +++ b/Pods/SMCalloutView/LICENSE @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/Pods/SMCalloutView/README.md b/Pods/SMCalloutView/README.md new file mode 100644 index 0000000..4ce2939 --- /dev/null +++ b/Pods/SMCalloutView/README.md @@ -0,0 +1,99 @@ +![Example Screenshot](SampleAssets/CalloutScreenshot.png) + + +Overview +-------- + +SMCalloutView aims to be an exact replica of the private UICalloutView system +control. + +We all love those "bubbles" you get when clicking pins in MKMapView. But +sadly, it's impossible to present this bubble-style "Callout" UI anywhere +outside MKMapView. Phooey! So this class _painstakingly_ recreates this handy +control for your pleasure. + + +Usage +----- + +To use SMCalloutView in your own projects, simply copy the files +`SMCalloutView.h` and `SMCalloutView.m`. + +SMCalloutView, by default, will render in the new style introduced with +iOS 7. If you need the old style, simply include `SMClassicCalloutView.h` +and `SMClassicCalloutView.m` in your project as well. There is a special +class constructor, `+[SMCalloutView platformCalloutView]` which will +automatically select the appropriate callout class for the current platform. + +The comments in `SMCalloutView.h` do a lot of explaining on how to use the +class, but the main function you'll need is `presentCalloutFromRect:`. You'll +specify the view you'd like to add the callout to, as well as the rect +defining the "target" that the popup should point at. The target rect should +be _in the coordinate system of the target view_ (just like the similarly- +named `UIPopover` method). Most likely this will be `target.frame` if you're +adding the callout view as a sibling of the target view, or it would be +`target.bounds` if you're adding the callout view to the target itself. + +You can study the included project's UIViewController subclasses for a working +example. + + +Questions +--------- + +#### How do I change the height of the callout? + +If you use only the `title/titleView/subtitle/subtitleView` properties, the +callout will always be the "system standard" height. If you assign the +`contentView` property however, then the callout will size to fit the +`contentView` and the other properties are ignored. + + [#29]: https://github.com/nfarina/calloutview/issues/29 + + +#### Can I customize the background graphics? + +Yes, the callout background is an instance of `SMCalloutBackgroundView`. You +can set your own custom `View` subclass to be the background, or you can use +one of the built-in subclasses: + + - `SMCalloutMaskedBackgroundView` renders an iOS-7 style background. + + - `SMCalloutImageBackgroundView` lets you specify each of the image + "fragments" that make up a horizontally-stretchable background. + + - `SMCalloutDrawnBackgroundView` draws the background at any size using + CoreGraphics methods. You can copy the `-drawRect` method and change the + parameters to suit your needs. + + +#### Can I use the callout with the Google Maps iOS SDK? + +Check out [ryanmaxwell's demo project][googlemaps] for an example of one way +to do this. ([More discussion on this topic][#25]) + + [googlemaps]: https://github.com/ryanmaxwell/GoogleMapsCalloutView + [#25]: https://github.com/nfarina/calloutview/issues/25 + + +#### Have you recreated more of MapKit? + +Nope, but other intrepid coders have! + +- For an awesome replacement of the pulsing blue "Current Location" dot, check + out [Sam Vermette's SVPulsingAnnotationView][dot]. + +- And for the outdoor map data and tiles themselves, check out [Mapbox's iOS + SDK][mapbox], a complete open-source solution for custom maps. They even use + `SMCalloutView` out of the box! + + [dot]: https://github.com/samvermette/SVPulsingAnnotationView + [mapbox]: https://www.mapbox.com/mobile/ + + +More Info +--------- + +You can read more info if you wish in the [blog post][]. + + [blog post]: http://nfarina.com/post/78014139253/smcalloutview-for-ios-7 diff --git a/Pods/SMCalloutView/SMCalloutView.h b/Pods/SMCalloutView/SMCalloutView.h new file mode 100755 index 0000000..96fd744 --- /dev/null +++ b/Pods/SMCalloutView/SMCalloutView.h @@ -0,0 +1,200 @@ +#import +#import + +/* + +SMCalloutView +------------- +Created by Nick Farina (nfarina@gmail.com) +Version 2.1.5 + +*/ + +/// options for which directions the callout is allowed to "point" in. +typedef NS_OPTIONS(NSUInteger, SMCalloutArrowDirection) { + SMCalloutArrowDirectionUp = 1 << 0, + SMCalloutArrowDirectionDown = 1 << 1, + SMCalloutArrowDirectionAny = SMCalloutArrowDirectionUp | SMCalloutArrowDirectionDown +}; + +/// options for the callout present/dismiss animation +typedef NS_ENUM(NSInteger, SMCalloutAnimation) { + /// the "bounce" animation we all know and love from @c UIAlertView + SMCalloutAnimationBounce, + /// a simple fade in or out + SMCalloutAnimationFade, + /// grow or shrink linearly, like in the iPad Calendar app + SMCalloutAnimationStretch +}; + +NS_ASSUME_NONNULL_BEGIN + +/// when delaying our popup in order to scroll content into view, you can use this amount to match the +/// animation duration of UIScrollView when using @c -setContentOffset:animated. +extern NSTimeInterval const kSMCalloutViewRepositionDelayForUIScrollView; + +@protocol SMCalloutViewDelegate; +@class SMCalloutBackgroundView; + +// +// Callout view. +// + +@interface SMCalloutView : UIView + +@property (nonatomic, weak, nullable) id delegate; +/// title/titleView relationship mimics UINavigationBar. +@property (nonatomic, copy, nullable) NSString *title; +@property (nonatomic, copy, nullable) NSString *subtitle; + +/// Left accessory view for the call out +@property (nonatomic, strong, nullable) UIView *leftAccessoryView; +/// Right accessoty view for the call out +@property (nonatomic, strong, nullable) UIView *rightAccessoryView; +/// Default @c SMCalloutArrowDirectionDown +@property (nonatomic, assign) SMCalloutArrowDirection permittedArrowDirection; +/// The current arrow direction +@property (nonatomic, readonly) SMCalloutArrowDirection currentArrowDirection; +/// if the @c UIView you're constraining to has portions that are overlapped by nav bar, tab bar, etc. you'll need to tell us those insets. +@property (nonatomic, assign) UIEdgeInsets constrainedInsets; +/// default is @c SMCalloutMaskedBackgroundView, or @c SMCalloutDrawnBackgroundView when using @c SMClassicCalloutView +@property (nonatomic, strong) SMCalloutBackgroundView *backgroundView; + +/** + @brief Custom title view. + + @disucssion Keep in mind that @c SMCalloutView calls @c -sizeThatFits on titleView/subtitleView if defined, so your view + may be resized as a result of that (especially if you're using @c UILabel/UITextField). You may want to subclass and override @c -sizeThatFits, or just wrap your view in a "generic" @c UIView if you do not want it to be auto-sized. + + @warning If this is set, the respective @c title property will be ignored. + */ +@property (nonatomic, strong, nullable) UIView *titleView; + +/** + @brief Custom subtitle view. + + @discussion Keep in mind that @c SMCalloutView calls @c -sizeThatFits on subtitleView if defined, so your view + may be resized as a result of that (especially if you're using @c UILabel/UITextField). You may want to subclass and override @c -sizeThatFits, or just wrap your view in a "generic" @c UIView if you do not want it to be auto-sized. + + @warning If this is set, the respective @c subtitle property will be ignored. + */ +@property (nonatomic, strong, nullable) UIView *subtitleView; + +/// Custom "content" view that can be any width/height. If this is set, title/subtitle/titleView/subtitleView are all ignored. +@property (nonatomic, retain, nullable) UIView *contentView; + +/// Custom content view margin +@property (nonatomic, assign) UIEdgeInsets contentViewInset; + +/// calloutOffset is the offset in screen points from the top-middle of the target view, where the anchor of the callout should be shown. +@property (nonatomic, assign) CGPoint calloutOffset; + +/// default SMCalloutAnimationBounce, SMCalloutAnimationFade respectively +@property (nonatomic, assign) SMCalloutAnimation presentAnimation, dismissAnimation; + +/// Returns a new instance of SMCalloutView if running on iOS 7 or better, otherwise a new instance of SMClassicCalloutView if available. ++ (SMCalloutView *)platformCalloutView; + +/** + @brief Presents a callout view by adding it to "inView" and pointing at the given rect of inView's bounds. + + @discussion Constrains the callout to the bounds of the given view. Optionally scrolls the given rect into view (plus margins) + if @c -delegate is set and responds to @c -delayForRepositionWithSize. + + @param rect @c CGRect to present the view from + @param view view to 'constrain' the @c constrainedView to + @param constrainedView @c UIView to be constrainted in @c view + @param animated @c BOOL if presentation should be animated + */ +- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated; + +/** + @brief Present a callout layer in the `layer` and pointing at the given rect of the `layer` bounds + + @discussion Same as the view-based presentation, but inserts the callout into a CALayer hierarchy instead. + @note Be aware that you'll have to direct your own touches to any accessory views, since CALayer doesn't relay touch events. + + @param rect @c CGRect to present the view from + @param layer layer to 'constrain' the @c constrainedLayer to + @param constrainedLayer @c CALayer to be constrained in @c layer + @param animated @c BOOL if presentation should be animated + */ +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated; + +/** + Dismiss the callout view + + @param animated @c BOOL if dismissal should be animated + */ +- (void)dismissCalloutAnimated:(BOOL)animated; + +/// For subclassers. You can override this method to provide your own custom animation for presenting/dismissing the callout. +- (CAAnimation *)animationWithType:(SMCalloutAnimation)type presenting:(BOOL)presenting; + +@end + +// +// Background view - default draws the iOS 7 system background style (translucent white with rounded arrow). +// + +/// Abstract base class +@interface SMCalloutBackgroundView : UIView +/// indicates where the tip of the arrow should be drawn, as a pixel offset +@property (nonatomic, assign) CGPoint arrowPoint; +/// will be set by the callout when the callout is in a highlighted state +@property (nonatomic, assign) BOOL highlighted; +/// returns an optional layer whose contents should mask the callout view's contents (not honored by @c SMClassicCalloutView ) +@property (nonatomic, assign) CALayer *contentMask; +/// height of the callout "arrow" +@property (nonatomic, assign) CGFloat anchorHeight; +/// the smallest possible distance from the edge of our control to the "tip" of the anchor, from either left or right +@property (nonatomic, assign) CGFloat anchorMargin; +@end + +/// Default for iOS 7, this reproduces the "masked" behavior of the iOS 7-style callout view. +/// Accessories are masked by the shape of the callout (including the arrow itself). +@interface SMCalloutMaskedBackgroundView : SMCalloutBackgroundView +@end + +// +// Delegate methods +// + +@protocol SMCalloutViewDelegate +@optional + +/// Controls whether the callout "highlights" when pressed. default YES. You must also respond to @c -calloutViewClicked below. +/// Not honored by @c SMClassicCalloutView. +- (BOOL)calloutViewShouldHighlight:(SMCalloutView *)calloutView; + +/// Called when the callout view is clicked. Not honored by @c SMClassicCalloutView. +- (void)calloutViewClicked:(SMCalloutView *)calloutView; + +/** + Called when the callout view detects that it will be outside the constrained view when it appears, + or if the target rect was already outside the constrained view. You can implement this selector + to respond to this situation by repositioning your content first in order to make everything visible. + The @c CGSize passed is the calculated offset necessary to make everything visible (plus a nice margin). + It expects you to return the amount of time you need to reposition things so the popup can be delayed. + Typically you would return @c kSMCalloutViewRepositionDelayForUIScrollView if you're repositioning by calling @c [UIScrollView @c setContentOffset:animated:]. + + @param calloutView the @c SMCalloutView to reposition + @param offset caluclated offset necessary to make everything visible + @returns @c NSTimeInterval to delay the repositioning + */ +- (NSTimeInterval)calloutView:(SMCalloutView *)calloutView delayForRepositionWithSize:(CGSize)offset; + +/// Called before the callout view appears on screen, or before the appearance animation will start. +- (void)calloutViewWillAppear:(SMCalloutView *)calloutView; + +/// Called after the callout view appears on screen, or after the appearance animation is complete. +- (void)calloutViewDidAppear:(SMCalloutView *)calloutView; + +/// Called before the callout view is removed from the screen, or before the disappearance animation is complete. +- (void)calloutViewWillDisappear:(SMCalloutView *)calloutView; + +/// Called after the callout view is removed from the screen, or after the disappearance animation is complete. +- (void)calloutViewDidDisappear:(SMCalloutView *)calloutView; + +NS_ASSUME_NONNULL_END +@end diff --git a/Pods/SMCalloutView/SMCalloutView.m b/Pods/SMCalloutView/SMCalloutView.m new file mode 100755 index 0000000..5943c50 --- /dev/null +++ b/Pods/SMCalloutView/SMCalloutView.m @@ -0,0 +1,859 @@ +#import "SMCalloutView.h" + +// +// UIView frame helpers - we do a lot of UIView frame fiddling in this class; these functions help keep things readable. +// + +@interface UIView (SMFrameAdditions) +@property (nonatomic, assign) CGPoint frameOrigin; +@property (nonatomic, assign) CGSize frameSize; +@property (nonatomic, assign) CGFloat frameX, frameY, frameWidth, frameHeight; // normal rect properties +@property (nonatomic, assign) CGFloat frameLeft, frameTop, frameRight, frameBottom; // these will stretch/shrink the rect +@end + +// +// Callout View. +// + +#define CALLOUT_DEFAULT_CONTAINER_HEIGHT 44 // height of just the main portion without arrow +#define CALLOUT_SUB_DEFAULT_CONTAINER_HEIGHT 52 // height of just the main portion without arrow (when subtitle is present) +#define CALLOUT_MIN_WIDTH 61 // minimum width of system callout +#define TITLE_HMARGIN 12 // the title/subtitle view's normal horizontal margin from the edges of our callout view or from the accessories +#define TITLE_TOP 11 // the top of the title view when no subtitle is present +#define TITLE_SUB_TOP 4 // the top of the title view when a subtitle IS present +#define TITLE_HEIGHT 21 // title height, fixed +#define SUBTITLE_TOP 28 // the top of the subtitle, when present +#define SUBTITLE_HEIGHT 15 // subtitle height, fixed +#define BETWEEN_ACCESSORIES_MARGIN 7 // margin between accessories when no title/subtitle is present +#define TOP_ANCHOR_MARGIN 13 // all the above measurements assume a bottom anchor! if we're pointing "up" we'll need to add this top margin to everything. +#define COMFORTABLE_MARGIN 10 // when we try to reposition content to be visible, we'll consider this margin around your target rect + +NSTimeInterval const kSMCalloutViewRepositionDelayForUIScrollView = 1.0/3.0; + +@interface SMCalloutView () +@property (nonatomic, strong) UIButton *containerView; // for masking and interaction +@property (nonatomic, strong) UILabel *titleLabel, *subtitleLabel; +@property (nonatomic, assign) SMCalloutArrowDirection currentArrowDirection; +@property (nonatomic, assign) BOOL popupCancelled; +@end + +@implementation SMCalloutView + ++ (SMCalloutView *)platformCalloutView { + + // if you haven't compiled SMClassicCalloutView into your app, then we can't possibly create an instance of it! + if (!NSClassFromString(@"SMClassicCalloutView")) + return [SMCalloutView new]; + + // ok we have both - so choose the best one based on current platform + if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) + return [SMCalloutView new]; // iOS 7+ + else + return [NSClassFromString(@"SMClassicCalloutView") new]; +} + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + self.permittedArrowDirection = SMCalloutArrowDirectionDown; + self.presentAnimation = SMCalloutAnimationBounce; + self.dismissAnimation = SMCalloutAnimationFade; + self.backgroundColor = [UIColor clearColor]; + self.containerView = [UIButton new]; + self.containerView.isAccessibilityElement = NO; + self.isAccessibilityElement = NO; + self.contentViewInset = UIEdgeInsetsMake(12, 12, 12, 12); + + [self.containerView addTarget:self action:@selector(highlightIfNecessary) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragInside]; + [self.containerView addTarget:self action:@selector(unhighlightIfNecessary) forControlEvents:UIControlEventTouchDragOutside | UIControlEventTouchCancel | UIControlEventTouchUpOutside | UIControlEventTouchUpInside]; + [self.containerView addTarget:self action:@selector(calloutClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return self; +} + +- (BOOL)supportsHighlighting { + if (![self.delegate respondsToSelector:@selector(calloutViewClicked:)]) + return NO; + if ([self.delegate respondsToSelector:@selector(calloutViewShouldHighlight:)]) + return [self.delegate calloutViewShouldHighlight:self]; + return YES; +} + +- (void)highlightIfNecessary { if (self.supportsHighlighting) self.backgroundView.highlighted = YES; } +- (void)unhighlightIfNecessary { if (self.supportsHighlighting) self.backgroundView.highlighted = NO; } + +- (void)calloutClicked { + if ([self.delegate respondsToSelector:@selector(calloutViewClicked:)]) + [self.delegate calloutViewClicked:self]; +} + +- (UIView *)titleViewOrDefault { + if (self.titleView) + // if you have a custom title view defined, return that. + return self.titleView; + else { + if (!self.titleLabel) { + // create a default titleView + self.titleLabel = [UILabel new]; + self.titleLabel.frameHeight = TITLE_HEIGHT; + self.titleLabel.opaque = NO; + self.titleLabel.backgroundColor = [UIColor clearColor]; + self.titleLabel.font = [UIFont systemFontOfSize:17]; + self.titleLabel.textColor = [UIColor blackColor]; + } + return self.titleLabel; + } +} + +- (UIView *)subtitleViewOrDefault { + if (self.subtitleView) + // if you have a custom subtitle view defined, return that. + return self.subtitleView; + else { + if (!self.subtitleLabel) { + // create a default subtitleView + self.subtitleLabel = [UILabel new]; + self.subtitleLabel.frameHeight = SUBTITLE_HEIGHT; + self.subtitleLabel.opaque = NO; + self.subtitleLabel.backgroundColor = [UIColor clearColor]; + self.subtitleLabel.font = [UIFont systemFontOfSize:12]; + self.subtitleLabel.textColor = [UIColor blackColor]; + } + return self.subtitleLabel; + } +} + +- (SMCalloutBackgroundView *)backgroundView { + // create our default background on first access only if it's nil, since you might have set your own background anyway. + return _backgroundView ? _backgroundView : (_backgroundView = [self defaultBackgroundView]); +} + +- (SMCalloutBackgroundView *)defaultBackgroundView { + return [SMCalloutMaskedBackgroundView new]; +} + +- (void)rebuildSubviews { + // remove and re-add our appropriate subviews in the appropriate order + [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [self.containerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [self setNeedsDisplay]; + + [self addSubview:self.backgroundView]; + [self addSubview:self.containerView]; + + if (self.contentView) { + [self.containerView addSubview:self.contentView]; + } + else { + if (self.titleViewOrDefault) [self.containerView addSubview:self.titleViewOrDefault]; + if (self.subtitleViewOrDefault) [self.containerView addSubview:self.subtitleViewOrDefault]; + } + if (self.leftAccessoryView) [self.containerView addSubview:self.leftAccessoryView]; + if (self.rightAccessoryView) [self.containerView addSubview:self.rightAccessoryView]; +} + +// Accessory margins. Accessories are centered vertically when shorter +// than the callout, otherwise they grow from the upper corner. + +- (CGFloat)leftAccessoryVerticalMargin { + if (self.leftAccessoryView.frameHeight < self.calloutContainerHeight) + return roundf((self.calloutContainerHeight - self.leftAccessoryView.frameHeight) / 2); + else + return 0; +} + +- (CGFloat)leftAccessoryHorizontalMargin { + return fminf(self.leftAccessoryVerticalMargin, TITLE_HMARGIN); +} + +- (CGFloat)rightAccessoryVerticalMargin { + if (self.rightAccessoryView.frameHeight < self.calloutContainerHeight) + return roundf((self.calloutContainerHeight - self.rightAccessoryView.frameHeight) / 2); + else + return 0; +} + +- (CGFloat)rightAccessoryHorizontalMargin { + return fminf(self.rightAccessoryVerticalMargin, TITLE_HMARGIN); +} + +- (CGFloat)innerContentMarginLeft { + if (self.leftAccessoryView) + return self.leftAccessoryHorizontalMargin + self.leftAccessoryView.frameWidth + TITLE_HMARGIN; + else + return self.contentViewInset.left; +} + +- (CGFloat)innerContentMarginRight { + if (self.rightAccessoryView) + return self.rightAccessoryHorizontalMargin + self.rightAccessoryView.frameWidth + TITLE_HMARGIN; + else + return self.contentViewInset.right; +} + +- (CGFloat)calloutHeight { + return self.calloutContainerHeight + self.backgroundView.anchorHeight; +} + +- (CGFloat)calloutContainerHeight { + if (self.contentView) + return self.contentView.frameHeight + self.contentViewInset.bottom + self.contentViewInset.top; + else if (self.subtitleView || self.subtitle.length > 0) + return CALLOUT_SUB_DEFAULT_CONTAINER_HEIGHT; + else + return CALLOUT_DEFAULT_CONTAINER_HEIGHT; +} + +- (CGSize)sizeThatFits:(CGSize)size { + + // calculate how much non-negotiable space we need to reserve for margin and accessories + CGFloat margin = self.innerContentMarginLeft + self.innerContentMarginRight; + + // how much room is left for text? + CGFloat availableWidthForText = size.width - margin - 1; + + // no room for text? then we'll have to squeeze into the given size somehow. + if (availableWidthForText < 0) + availableWidthForText = 0; + + CGSize preferredTitleSize = [self.titleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, TITLE_HEIGHT)]; + CGSize preferredSubtitleSize = [self.subtitleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, SUBTITLE_HEIGHT)]; + + // total width we'd like + CGFloat preferredWidth; + + if (self.contentView) { + + // if we have a content view, then take our preferred size directly from that + preferredWidth = self.contentView.frameWidth + margin; + } + else if (preferredTitleSize.width >= 0.000001 || preferredSubtitleSize.width >= 0.000001) { + + // if we have a title or subtitle, then our assumed margins are valid, and we can apply them + preferredWidth = fmaxf(preferredTitleSize.width, preferredSubtitleSize.width) + margin; + } + else { + // ok we have no title or subtitle to speak of. In this case, the system callout would actually not display + // at all! But we can handle it. + preferredWidth = self.leftAccessoryView.frameWidth + self.rightAccessoryView.frameWidth + self.leftAccessoryHorizontalMargin + self.rightAccessoryHorizontalMargin; + + if (self.leftAccessoryView && self.rightAccessoryView) + preferredWidth += BETWEEN_ACCESSORIES_MARGIN; + } + + // ensure we're big enough to fit our graphics! + preferredWidth = fmaxf(preferredWidth, CALLOUT_MIN_WIDTH); + + // ask to be smaller if we have space, otherwise we'll fit into what we have by truncating the title/subtitle. + return CGSizeMake(fminf(preferredWidth, size.width), self.calloutHeight); +} + +- (CGSize)offsetToContainRect:(CGRect)innerRect inRect:(CGRect)outerRect { + CGFloat nudgeRight = fmaxf(0, CGRectGetMinX(outerRect) - CGRectGetMinX(innerRect)); + CGFloat nudgeLeft = fminf(0, CGRectGetMaxX(outerRect) - CGRectGetMaxX(innerRect)); + CGFloat nudgeTop = fmaxf(0, CGRectGetMinY(outerRect) - CGRectGetMinY(innerRect)); + CGFloat nudgeBottom = fminf(0, CGRectGetMaxY(outerRect) - CGRectGetMaxY(innerRect)); + return CGSizeMake(nudgeLeft ? nudgeLeft : nudgeRight, nudgeTop ? nudgeTop : nudgeBottom); +} + +- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:view.layer ofView:view constrainedToLayer:constrainedView.layer animated:animated]; +} + +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:layer ofView:nil constrainedToLayer:constrainedLayer animated:animated]; +} + +// this private method handles both CALayer and UIView parents depending on what's passed. +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer ofView:(UIView *)view constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + + // Sanity check: dismiss this callout immediately if it's displayed somewhere + if (self.layer.superlayer) [self dismissCalloutAnimated:NO]; + + // cancel all animations that may be in progress + [self.layer removeAnimationForKey:@"present"]; + [self.layer removeAnimationForKey:@"dismiss"]; + + // figure out the constrained view's rect in our popup view's coordinate system + CGRect constrainedRect = [constrainedLayer convertRect:constrainedLayer.bounds toLayer:layer]; + + // apply our edge constraints + constrainedRect = UIEdgeInsetsInsetRect(constrainedRect, self.constrainedInsets); + + constrainedRect = CGRectInset(constrainedRect, COMFORTABLE_MARGIN, COMFORTABLE_MARGIN); + + // form our subviews based on our content set so far + [self rebuildSubviews]; + + // apply title/subtitle (if present + self.titleLabel.text = self.title; + self.subtitleLabel.text = self.subtitle; + + // size the callout to fit the width constraint as best as possible + self.frameSize = [self sizeThatFits:CGSizeMake(constrainedRect.size.width, self.calloutHeight)]; + + // how much room do we have in the constraint box, both above and below our target rect? + CGFloat topSpace = CGRectGetMinY(rect) - CGRectGetMinY(constrainedRect); + CGFloat bottomSpace = CGRectGetMaxY(constrainedRect) - CGRectGetMaxY(rect); + + // we prefer to point our arrow down. + SMCalloutArrowDirection bestDirection = SMCalloutArrowDirectionDown; + + // we'll point it up though if that's the only option you gave us. + if (self.permittedArrowDirection == SMCalloutArrowDirectionUp) + bestDirection = SMCalloutArrowDirectionUp; + + // or, if we don't have enough space on the top and have more space on the bottom, and you + // gave us a choice, then pointing up is the better option. + if (self.permittedArrowDirection == SMCalloutArrowDirectionAny && topSpace < self.calloutHeight && bottomSpace > topSpace) + bestDirection = SMCalloutArrowDirectionUp; + + self.currentArrowDirection = bestDirection; + + // we want to point directly at the horizontal center of the given rect. calculate our "anchor point" in terms of our + // target view's coordinate system. make sure to offset the anchor point as requested if necessary. + CGFloat anchorX = self.calloutOffset.x + CGRectGetMidX(rect); + CGFloat anchorY = self.calloutOffset.y + (bestDirection == SMCalloutArrowDirectionDown ? CGRectGetMinY(rect) : CGRectGetMaxY(rect)); + + // we prefer to sit centered directly above our anchor + CGFloat calloutX = roundf(anchorX - self.frameWidth / 2); + + // but not if it's going to get too close to the edge of our constraints + if (calloutX < constrainedRect.origin.x) + calloutX = constrainedRect.origin.x; + + if (calloutX > constrainedRect.origin.x+constrainedRect.size.width-self.frameWidth) + calloutX = constrainedRect.origin.x+constrainedRect.size.width-self.frameWidth; + + // what's the farthest to the left and right that we could point to, given our background image constraints? + CGFloat minPointX = calloutX + self.backgroundView.anchorMargin; + CGFloat maxPointX = calloutX + self.frameWidth - self.backgroundView.anchorMargin; + + // we may need to scoot over to the left or right to point at the correct spot + CGFloat adjustX = 0; + if (anchorX < minPointX) adjustX = anchorX - minPointX; + if (anchorX > maxPointX) adjustX = anchorX - maxPointX; + + // add the callout to the given layer (or view if possible, to receive touch events) + if (view) + [view addSubview:self]; + else + [layer addSublayer:self.layer]; + + CGPoint calloutOrigin = { + .x = calloutX + adjustX, + .y = bestDirection == SMCalloutArrowDirectionDown ? (anchorY - self.calloutHeight) : anchorY + }; + + self.frameOrigin = calloutOrigin; + + // now set the *actual* anchor point for our layer so that our "popup" animation starts from this point. + CGPoint anchorPoint = [layer convertPoint:CGPointMake(anchorX, anchorY) toLayer:self.layer]; + + // pass on the anchor point to our background view so it knows where to draw the arrow + self.backgroundView.arrowPoint = anchorPoint; + + // adjust it to unit coordinates for the actual layer.anchorPoint property + anchorPoint.x /= self.frameWidth; + anchorPoint.y /= self.frameHeight; + self.layer.anchorPoint = anchorPoint; + + // setting the anchor point moves the view a bit, so we need to reset + self.frameOrigin = calloutOrigin; + + // make sure our frame is not on half-pixels or else we may be blurry! + CGFloat scale = [UIScreen mainScreen].scale; + self.frameX = floorf(self.frameX*scale)/scale; + self.frameY = floorf(self.frameY*scale)/scale; + + // layout now so we can immediately start animating to the final position if needed + [self setNeedsLayout]; + [self layoutIfNeeded]; + + // if we're outside the bounds of our constraint rect, we'll give our delegate an opportunity to shift us into position. + // consider both our size and the size of our target rect (which we'll assume to be the size of the content you want to scroll into view. + CGRect contentRect = CGRectUnion(self.frame, rect); + CGSize offset = [self offsetToContainRect:contentRect inRect:constrainedRect]; + + NSTimeInterval delay = 0; + self.popupCancelled = NO; // reset this before calling our delegate below + + if ([self.delegate respondsToSelector:@selector(calloutView:delayForRepositionWithSize:)] && !CGSizeEqualToSize(offset, CGSizeZero)) + delay = [self.delegate calloutView:(id)self delayForRepositionWithSize:offset]; + + // there's a chance that user code in the delegate method may have called -dismissCalloutAnimated to cancel things; if that + // happened then we need to bail! + if (self.popupCancelled) return; + + // now we want to mask our contents to our background view (if requested) to match the iOS 7 style + self.containerView.layer.mask = self.backgroundView.contentMask; + + // if we need to delay, we don't want to be visible while we're delaying, so hide us in preparation for our popup + self.hidden = YES; + + // create the appropriate animation, even if we're not animated + CAAnimation *animation = [self animationWithType:self.presentAnimation presenting:YES]; + + // nuke the duration if no animation requested - we'll still need to "run" the animation to get delays and callbacks + if (!animated) + animation.duration = 0.0000001; // can't be zero or the animation won't "run" + + animation.beginTime = CACurrentMediaTime() + delay; + animation.delegate = self; + + [self.layer addAnimation:animation forKey:@"present"]; +} + +- (void)animationDidStart:(CAAnimation *)anim { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting) { + if ([_delegate respondsToSelector:@selector(calloutViewWillAppear:)]) + [_delegate calloutViewWillAppear:(id)self]; + + // ok, animation is on, let's make ourselves visible! + self.hidden = NO; + } + else if (!presenting) { + if ([_delegate respondsToSelector:@selector(calloutViewWillDisappear:)]) + [_delegate calloutViewWillDisappear:(id)self]; + } +} + +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)finished { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting && finished) { + if ([_delegate respondsToSelector:@selector(calloutViewDidAppear:)]) + [_delegate calloutViewDidAppear:(id)self]; + } + else if (!presenting && finished) { + + [self removeFromParent]; + [self.layer removeAnimationForKey:@"dismiss"]; + + if ([_delegate respondsToSelector:@selector(calloutViewDidDisappear:)]) + [_delegate calloutViewDidDisappear:(id)self]; + } +} + +- (void)dismissCalloutAnimated:(BOOL)animated { + + // cancel all animations that may be in progress + [self.layer removeAnimationForKey:@"present"]; + [self.layer removeAnimationForKey:@"dismiss"]; + + self.popupCancelled = YES; + + if (animated) { + CAAnimation *animation = [self animationWithType:self.dismissAnimation presenting:NO]; + animation.delegate = self; + [self.layer addAnimation:animation forKey:@"dismiss"]; + } + else { + [self removeFromParent]; + } +} + +- (void)removeFromParent { + if (self.superview) + [self removeFromSuperview]; + else { + // removing a layer from a superlayer causes an implicit fade-out animation that we wish to disable. + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + [self.layer removeFromSuperlayer]; + [CATransaction commit]; + } +} + +- (CAAnimation *)animationWithType:(SMCalloutAnimation)type presenting:(BOOL)presenting { + CAAnimation *animation = nil; + + if (type == SMCalloutAnimationBounce) { + + CABasicAnimation *fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fade.duration = 0.23; + fade.fromValue = presenting ? @0.0 : @1.0; + fade.toValue = presenting ? @1.0 : @0.0; + fade.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + + CABasicAnimation *bounce = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + bounce.duration = 0.23; + bounce.fromValue = presenting ? @0.7 : @1.0; + bounce.toValue = presenting ? @1.0 : @0.7; + bounce.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.59367:0.12066:0.18878:1.5814]; + + CAAnimationGroup *group = [CAAnimationGroup animation]; + group.animations = @[fade, bounce]; + group.duration = 0.23; + + animation = group; + } + else if (type == SMCalloutAnimationFade) { + CABasicAnimation *fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fade.duration = 1.0/3.0; + fade.fromValue = presenting ? @0.0 : @1.0; + fade.toValue = presenting ? @1.0 : @0.0; + animation = fade; + } + else if (type == SMCalloutAnimationStretch) { + CABasicAnimation *stretch = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + stretch.duration = 0.1; + stretch.fromValue = presenting ? @0.0 : @1.0; + stretch.toValue = presenting ? @1.0 : @0.0; + animation = stretch; + } + + // CAAnimation is KVC compliant, so we can store whether we're presenting for lookup in our delegate methods + [animation setValue:@(presenting) forKey:@"presenting"]; + + animation.fillMode = kCAFillModeForwards; + animation.removedOnCompletion = NO; + return animation; +} + +- (void)layoutSubviews { + + self.containerView.frame = self.bounds; + self.backgroundView.frame = self.bounds; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = self.currentArrowDirection == SMCalloutArrowDirectionUp ? TOP_ANCHOR_MARGIN : 0; + + self.titleViewOrDefault.frameX = self.innerContentMarginLeft; + self.titleViewOrDefault.frameY = (self.subtitleView || self.subtitle.length ? TITLE_SUB_TOP : TITLE_TOP) + dy; + self.titleViewOrDefault.frameWidth = self.frameWidth - self.innerContentMarginLeft - self.innerContentMarginRight; + + self.subtitleViewOrDefault.frameX = self.titleViewOrDefault.frameX; + self.subtitleViewOrDefault.frameY = SUBTITLE_TOP + dy; + self.subtitleViewOrDefault.frameWidth = self.titleViewOrDefault.frameWidth; + + self.leftAccessoryView.frameX = self.leftAccessoryHorizontalMargin; + self.leftAccessoryView.frameY = self.leftAccessoryVerticalMargin + dy; + + self.rightAccessoryView.frameX = self.frameWidth - self.rightAccessoryHorizontalMargin - self.rightAccessoryView.frameWidth; + self.rightAccessoryView.frameY = self.rightAccessoryVerticalMargin + dy; + + if (self.contentView) { + self.contentView.frameX = self.innerContentMarginLeft; + self.contentView.frameY = self.contentViewInset.top + dy; + } +} + +#pragma mark - Accessibility + +- (NSInteger)accessibilityElementCount { + return (!!self.leftAccessoryView + !!self.titleViewOrDefault + + !!self.subtitleViewOrDefault + !!self.rightAccessoryView); +} + +- (id)accessibilityElementAtIndex:(NSInteger)index { + if (index == 0) { + return self.leftAccessoryView ? self.leftAccessoryView : self.titleViewOrDefault; + } + if (index == 1) { + return self.leftAccessoryView ? self.titleViewOrDefault : self.subtitleViewOrDefault; + } + if (index == 2) { + return self.leftAccessoryView ? self.subtitleViewOrDefault : self.rightAccessoryView; + } + if (index == 3) { + return self.leftAccessoryView ? self.rightAccessoryView : nil; + } + return nil; +} + +- (NSInteger)indexOfAccessibilityElement:(id)element { + if (element == nil) return NSNotFound; + if (element == self.leftAccessoryView) return 0; + if (element == self.titleViewOrDefault) { + return self.leftAccessoryView ? 1 : 0; + } + if (element == self.subtitleViewOrDefault) { + return self.leftAccessoryView ? 2 : 1; + } + if (element == self.rightAccessoryView) { + return self.leftAccessoryView ? 3 : 2; + } + return NSNotFound; +} + +@end + +// import this known "private API" from SMCalloutBackgroundView +@interface SMCalloutBackgroundView (EmbeddedImages) ++ (UIImage *)embeddedImageNamed:(NSString *)name; +@end + +// +// Callout Background View. +// + +@interface SMCalloutMaskedBackgroundView () +@property (nonatomic, strong) UIView *containerView, *containerBorderView, *arrowView; +@property (nonatomic, strong) UIImageView *arrowImageView, *arrowHighlightedImageView, *arrowBorderView; +@end + +static UIImage *blackArrowImage = nil, *whiteArrowImage = nil, *grayArrowImage = nil; + +@implementation SMCalloutMaskedBackgroundView + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + + // Here we're mimicking the very particular (and odd) structure of the system callout view. + // The hierarchy and view/layer values were discovered by inspecting map kit using Reveal.app + + self.containerView = [UIView new]; + self.containerView.backgroundColor = [UIColor whiteColor]; + self.containerView.alpha = 0.96; + self.containerView.layer.cornerRadius = 8; + self.containerView.layer.shadowRadius = 30; + self.containerView.layer.shadowOpacity = 0.1; + + self.containerBorderView = [UIView new]; + self.containerBorderView.layer.borderColor = [UIColor colorWithWhite:0 alpha:0.1].CGColor; + self.containerBorderView.layer.borderWidth = 0.5; + self.containerBorderView.layer.cornerRadius = 8.5; + + if (!blackArrowImage) { + blackArrowImage = [SMCalloutBackgroundView embeddedImageNamed:@"CalloutArrow"]; + whiteArrowImage = [self image:blackArrowImage withColor:[UIColor whiteColor]]; + grayArrowImage = [self image:blackArrowImage withColor:[UIColor colorWithWhite:0.85 alpha:1]]; + } + + self.anchorHeight = 13; + self.anchorMargin = 27; + + self.arrowView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, blackArrowImage.size.width, blackArrowImage.size.height)]; + self.arrowView.alpha = 0.96; + self.arrowImageView = [[UIImageView alloc] initWithImage:whiteArrowImage]; + self.arrowHighlightedImageView = [[UIImageView alloc] initWithImage:grayArrowImage]; + self.arrowHighlightedImageView.hidden = YES; + self.arrowBorderView = [[UIImageView alloc] initWithImage:blackArrowImage]; + self.arrowBorderView.alpha = 0.1; + self.arrowBorderView.frameY = 0.5; + + [self addSubview:self.containerView]; + [self.containerView addSubview:self.containerBorderView]; + [self addSubview:self.arrowView]; + [self.arrowView addSubview:self.arrowBorderView]; + [self.arrowView addSubview:self.arrowImageView]; + [self.arrowView addSubview:self.arrowHighlightedImageView]; + } + return self; +} + +// Make sure we relayout our images when our arrow point changes! +- (void)setArrowPoint:(CGPoint)arrowPoint { + [super setArrowPoint:arrowPoint]; + [self setNeedsLayout]; +} + +- (void)setHighlighted:(BOOL)highlighted { + [super setHighlighted:highlighted]; + self.containerView.backgroundColor = highlighted ? [UIColor colorWithWhite:0.85 alpha:1] : [UIColor whiteColor]; + self.arrowImageView.hidden = highlighted; + self.arrowHighlightedImageView.hidden = !highlighted; +} + +- (UIImage *)image:(UIImage *)image withColor:(UIColor *)color { + + UIGraphicsBeginImageContextWithOptions(image.size, NO, 0); + CGRect imageRect = (CGRect){.size=image.size}; + CGContextRef c = UIGraphicsGetCurrentContext(); + CGContextTranslateCTM(c, 0, image.size.height); + CGContextScaleCTM(c, 1, -1); + CGContextClipToMask(c, imageRect, image.CGImage); + [color setFill]; + CGContextFillRect(c, imageRect); + UIImage *whiteImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return whiteImage; +} + +- (void)layoutSubviews { + + BOOL pointingUp = self.arrowPoint.y < self.frameHeight/2; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = pointingUp ? TOP_ANCHOR_MARGIN : 0; + + self.containerView.frame = CGRectMake(0, dy, self.frameWidth, self.frameHeight - self.arrowView.frameHeight + 0.5); + self.containerBorderView.frame = CGRectInset(self.containerView.bounds, -0.5, -0.5); + + self.arrowView.frameX = roundf(self.arrowPoint.x - self.arrowView.frameWidth / 2); + + if (pointingUp) { + self.arrowView.frameY = 1; + self.arrowView.transform = CGAffineTransformMakeRotation(M_PI); + } + else { + self.arrowView.frameY = self.containerView.frameHeight - 0.5; + self.arrowView.transform = CGAffineTransformIdentity; + } +} + +- (CALayer *)contentMask { + + UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0); + + [self.layer renderInContext:UIGraphicsGetCurrentContext()]; + + UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + CALayer *layer = [CALayer layer]; + layer.frame = self.bounds; + layer.contents = (id)maskImage.CGImage; + return layer; +} + +@end + +@implementation SMCalloutBackgroundView + ++ (NSData *)dataWithBase64EncodedString:(NSString *)string { + // + // NSData+Base64.m + // + // Version 1.0.2 + // + // Created by Nick Lockwood on 12/01/2012. + // Copyright (C) 2012 Charcoal Design + // + // Distributed under the permissive zlib License + // Get the latest version from here: + // + // https://github.com/nicklockwood/Base64 + // + // This software is provided 'as-is', without any express or implied + // warranty. In no event will the authors be held liable for any damages + // arising from the use of this software. + // + // Permission is granted to anyone to use this software for any purpose, + // including commercial applications, and to alter it and redistribute it + // freely, subject to the following restrictions: + // + // 1. The origin of this software must not be misrepresented; you must not + // claim that you wrote the original software. If you use this software + // in a product, an acknowledgment in the product documentation would be + // appreciated but is not required. + // + // 2. Altered source versions must be plainly marked as such, and must not be + // misrepresented as being the original software. + // + // 3. This notice may not be removed or altered from any source distribution. + // + const char lookup[] = { + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 62, 99, 99, 99, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 99, 99, 99, 99, 99, 99, + 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 99, 99, 99, 99, 99, + 99, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 99, 99, 99, 99, 99 + }; + + NSData *inputData = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; + long long inputLength = [inputData length]; + const unsigned char *inputBytes = [inputData bytes]; + + long long maxOutputLength = (inputLength / 4 + 1) * 3; + NSMutableData *outputData = [NSMutableData dataWithLength:(NSUInteger)maxOutputLength]; + unsigned char *outputBytes = (unsigned char *)[outputData mutableBytes]; + + int accumulator = 0; + long long outputLength = 0; + unsigned char accumulated[] = {0, 0, 0, 0}; + for (long long i = 0; i < inputLength; i++) { + unsigned char decoded = lookup[inputBytes[i] & 0x7F]; + if (decoded != 99) { + accumulated[accumulator] = decoded; + if (accumulator == 3) { + outputBytes[outputLength++] = (accumulated[0] << 2) | (accumulated[1] >> 4); + outputBytes[outputLength++] = (accumulated[1] << 4) | (accumulated[2] >> 2); + outputBytes[outputLength++] = (accumulated[2] << 6) | accumulated[3]; + } + accumulator = (accumulator + 1) % 4; + } + } + + //handle left-over data + if (accumulator > 0) outputBytes[outputLength] = (accumulated[0] << 2) | (accumulated[1] >> 4); + if (accumulator > 1) outputBytes[++outputLength] = (accumulated[1] << 4) | (accumulated[2] >> 2); + if (accumulator > 2) outputLength++; + + //truncate data to match actual output length + outputData.length = (NSUInteger)outputLength; + return outputLength? outputData: nil; +} + ++ (UIImage *)embeddedImageNamed:(NSString *)name { + CGFloat screenScale = [UIScreen mainScreen].scale; + if (screenScale > 1.0) { + name = [name stringByAppendingString:@"_2x"]; + screenScale = 2.0; + } + + SEL selector = NSSelectorFromString(name); + + if (![(id)self respondsToSelector:selector]) { + NSLog(@"Could not find an embedded image. Ensure that you've added a class-level method named +%@", name); + return nil; + } + + // We need to hush the compiler here - but we know what we're doing! + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Warc-performSelector-leaks" + NSString *base64String = [(id)self performSelector:selector]; + #pragma clang diagnostic pop + + UIImage *rawImage = [UIImage imageWithData:[self dataWithBase64EncodedString:base64String]]; + return [UIImage imageWithCGImage:rawImage.CGImage scale:screenScale orientation:UIImageOrientationUp]; +} + ++ (NSString *)CalloutArrow { return @"iVBORw0KGgoAAAANSUhEUgAAACcAAAANCAYAAAAqlHdlAAAAHGlET1QAAAACAAAAAAAAAAcAAAAoAAAABwAAAAYAAADJEgYpIwAAAJVJREFUOBFiYIAAdn5+fkFOTkE5Dg5eW05O3lJOTr6zQPyfDhhoD28pxF5BOZA7gE5ih7oLN8XJyR8MdNwrGjkQaC5/MG7biZDh4OBXBDruLpUdeBdkLhHWE1bCzs6nAnTcUyo58DnIPMK2kqAC6DALIP5JoQNB+i1IsJZ4pcBEm0iJ40D6ibeNDJVAx00k04ETSbUOAAAA//+SwicfAAAAe0lEQVRjYCAdMHNy8u7l5OT7Tzzm3Qu0hpl0q8jQwcPDIwp02B0iHXeHl5dXhAxryNfCzc2tC3TcJwIO/ARSR74tFOjk4uL1BzruHw4H/gPJU2A85Vq5uPjTgY77g+bAPyBxyk2nggkcHPxOnJz8B4AOfAGiQXwqGMsAACGK1kPPMHNBAAAAAElFTkSuQmCC"; } + ++ (NSString *)CalloutArrow_2x { return @"iVBORw0KGgoAAAANSUhEUgAAAE4AAAAaCAYAAAAZtWr8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAHGlET1QAAAACAAAAAAAAAA0AAAAoAAAADQAAAA0AAAFMRh0LGwAAARhJREFUWAnclbENwjAQRZ0mih2fDYgsQEVDxQZMgKjpWYAJkBANI8AGDIEoM0WkzBDRAf8klB44g0OkU1zE3/+9RIpS7VVY730/y/woTWlsjJ9iPcN9pbXfY85auyvm/qcDNmb0e2Z+sk/ZBTthN0oVttX12mJIWeaWEFf+kbySmZQa0msu3nzaGJprTXV3BVLNDG/if7bNOTeAvFP35NGJu39GL7Abb27bFXncVQBZLgJf3jp+ebSWIxZMgrxdvPJoJ4gqHpXgV36ITR46HUGaiNMKB6YQd4lI3gV8qTBjmDhrbQFxVQTyKu4ShjJQap7nE4hrfiiv4Q6B8MLGat1bQNztB/JwZm8Rli5wujFu821xfGZgLPUAAAD//4wvm4gAAAD7SURBVOWXMQ6CMBiFgaFpi6VyBEedXJy4hMQTeBSvRDgJEySegI3EQWOivkZnqUB/k0LyL7R9L++D9G+DwP0TCZGUqCdRlYgUuY9F4JCmqQa0hgBcY7wIItFZMLZYS5l0ruAZbXhs6BIROgmhcoB7OIAHTZUTRqG3wp9xmhqc0aRPQu8YAlwxIbwCEUL6GH9wfDcLXY2HpyvvmkHf9+BcrwCuHQGvNRp9Pl6OY0PPAO42AB7WqMxLKLahpFR7gLv/AA9zPe+gtvAMCIC7WMC7CqEPtrqzmBfHyy3A1V/g1Th27GYBY0BIxrk6Ap65254/VZp30GID9JwteQEZrVMWXqGn8gAAAABJRU5ErkJggg=="; } + +@end + +// +// Our UIView frame helpers implementation +// + +@implementation UIView (SMFrameAdditions) + +- (CGPoint)frameOrigin { return self.frame.origin; } +- (void)setFrameOrigin:(CGPoint)origin { self.frame = (CGRect){ .origin=origin, .size=self.frame.size }; } + +- (CGFloat)frameX { return self.frame.origin.x; } +- (void)setFrameX:(CGFloat)x { self.frame = (CGRect){ .origin.x=x, .origin.y=self.frame.origin.y, .size=self.frame.size }; } + +- (CGFloat)frameY { return self.frame.origin.y; } +- (void)setFrameY:(CGFloat)y { self.frame = (CGRect){ .origin.x=self.frame.origin.x, .origin.y=y, .size=self.frame.size }; } + +- (CGSize)frameSize { return self.frame.size; } +- (void)setFrameSize:(CGSize)size { self.frame = (CGRect){ .origin=self.frame.origin, .size=size }; } + +- (CGFloat)frameWidth { return self.frame.size.width; } +- (void)setFrameWidth:(CGFloat)width { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=width, .size.height=self.frame.size.height }; } + +- (CGFloat)frameHeight { return self.frame.size.height; } +- (void)setFrameHeight:(CGFloat)height { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=self.frame.size.width, .size.height=height }; } + +- (CGFloat)frameLeft { return self.frame.origin.x; } +- (void)setFrameLeft:(CGFloat)left { self.frame = (CGRect){ .origin.x=left, .origin.y=self.frame.origin.y, .size.width=fmaxf(self.frame.origin.x+self.frame.size.width-left,0), .size.height=self.frame.size.height }; } + +- (CGFloat)frameTop { return self.frame.origin.y; } +- (void)setFrameTop:(CGFloat)top { self.frame = (CGRect){ .origin.x=self.frame.origin.x, .origin.y=top, .size.width=self.frame.size.width, .size.height=fmaxf(self.frame.origin.y+self.frame.size.height-top,0) }; } + +- (CGFloat)frameRight { return self.frame.origin.x + self.frame.size.width; } +- (void)setFrameRight:(CGFloat)right { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=fmaxf(right-self.frame.origin.x,0), .size.height=self.frame.size.height }; } + +- (CGFloat)frameBottom { return self.frame.origin.y + self.frame.size.height; } +- (void)setFrameBottom:(CGFloat)bottom { self.frame = (CGRect){ .origin=self.frame.origin, .size.width=self.frame.size.width, .size.height=fmaxf(bottom-self.frame.origin.y,0) }; } + +@end diff --git a/Pods/SMCalloutView/SMClassicCalloutView.h b/Pods/SMCalloutView/SMClassicCalloutView.h new file mode 100644 index 0000000..724c987 --- /dev/null +++ b/Pods/SMCalloutView/SMClassicCalloutView.h @@ -0,0 +1,39 @@ +#import +#import "SMCalloutView.h" + +/* + + SMClassicCalloutView + -------------------- + Created by Nick Farina (nfarina@gmail.com) + Version 1.1 + + */ + +@protocol SMCalloutViewDelegate; +@class SMCalloutBackgroundView; + +// +// Classic Callout view. +// + +@interface SMClassicCalloutView : SMCalloutView + +// One thing to note about the classic callout is that it will ignore the "constrainedInsets" property. That property is designed for iOS-7 +// style presentation where your target view surface may be operlapped by navigation bars, tab bars, etc. + +@end + +// +// Classes responsible for drawing the background graphic with the pointy arrow. +// + +// Draws a background composed of stretched prerendered images that you can customize. Uses the embedded iOS 6 graphics by default. +@interface SMCalloutImageBackgroundView : SMCalloutBackgroundView +@property (nonatomic, strong) UIImage *leftCapImage, *rightCapImage, *topAnchorImage, *bottomAnchorImage, *backgroundImage; +@end + +// Draws a custom background matching the system background but can grow in height. +@interface SMCalloutDrawnBackgroundView : SMCalloutBackgroundView +@end + diff --git a/Pods/SMCalloutView/SMClassicCalloutView.m b/Pods/SMCalloutView/SMClassicCalloutView.m new file mode 100644 index 0000000..4c98303 --- /dev/null +++ b/Pods/SMCalloutView/SMClassicCalloutView.m @@ -0,0 +1,871 @@ +#import "SMClassicCalloutView.h" +#import + +// +// UIView frame helpers - we do a lot of UIView frame fiddling in this class; these functions help keep things readable. +// + +@interface UIView (SMFrameAdditions) +@property (nonatomic, assign) CGPoint frameOrigin; +@property (nonatomic, assign) CGSize frameSize; +@property (nonatomic, assign) CGFloat frameX, frameY, frameWidth, frameHeight; // normal rect properties +@property (nonatomic, assign) CGFloat frameLeft, frameTop, frameRight, frameBottom; // these will stretch/shrink the rect +@end + +// +// Callout View. +// + +#define CALLOUT_DEFAULT_MIN_WIDTH 75 // our image-based background graphics limit us to this minimum width... +#define CALLOUT_DEFAULT_HEIGHT 70 // ...and allow only for this exact height. +#define CALLOUT_DEFAULT_WIDTH 153 // default "I give up" width when we are asked to present in a space less than our min width +#define TITLE_MARGIN 17 // the title view's normal horizontal margin from the edges of our callout view +#define TITLE_TOP 11 // the top of the title view when no subtitle is present +#define TITLE_SUB_TOP 3 // the top of the title view when a subtitle IS present +#define TITLE_HEIGHT 22 // title height, fixed +#define SUBTITLE_TOP 25 // the top of the subtitle, when present +#define SUBTITLE_HEIGHT 16 // subtitle height, fixed +#define TITLE_ACCESSORY_MARGIN 6 // the margin between the title and an accessory if one is present (on either side) +#define ACCESSORY_MARGIN 14 // the accessory's margin from the edges of our callout view +#define ACCESSORY_TOP 8 // the top of the accessory "area" in which accessory views are placed +#define ACCESSORY_HEIGHT 32 // the "suggested" maximum height of an accessory view. shorter accessories will be vertically centered +#define BETWEEN_ACCESSORIES_MARGIN 7 // if we have no title or subtitle, but have two accessory views, then this is the space between them +#define ANCHOR_MARGIN 39 // the smallest possible distance from the edge of our control to the "tip" of the anchor, from either left or right +#define TOP_ANCHOR_MARGIN 13 // all the above measurements assume a bottom anchor! if we're pointing "up" we'll need to add this top margin to everything. +#define BOTTOM_ANCHOR_MARGIN 10 // if using a bottom anchor, we'll need to account for the shadow below the "tip" +#define REPOSITION_MARGIN 10 // when we try to reposition content to be visible, we'll consider this margin around your target rect + +#define TOP_SHADOW_BUFFER 2 // height offset buffer to account for top shadow +#define BOTTOM_SHADOW_BUFFER 5 // height offset buffer to account for bottom shadow +#define OFFSET_FROM_ORIGIN 5 // distance to offset vertically from the rect origin of the callout +#define ANCHOR_HEIGHT 14 // height to use for the anchor +#define ANCHOR_MARGIN_MIN 24 // the smallest possible distance from the edge of our control to the edge of the anchor, from either left or right + +@interface SMCalloutView (PrivateMethods) +@property (nonatomic, strong) UILabel *titleLabel, *subtitleLabel; +@property (nonatomic, assign) SMCalloutArrowDirection currentArrowDirection; +@property (nonatomic, assign) BOOL popupCancelled; +//@property (nonatomic, strong) UIImageView *leftCap, *rightCap, *topAnchor, *bottomAnchor, *leftBackground, *rightBackground; +@end + +@interface SMClassicCalloutView () + +@end + +@implementation SMClassicCalloutView + +- (UIView *)titleViewOrDefault { + if (self.titleView) + // if you have a custom title view defined, return that. + return self.titleView; + else { + if (!self.titleLabel) { + // create a default titleView + self.titleLabel = [UILabel new]; + self.titleLabel.frameHeight = TITLE_HEIGHT; + self.titleLabel.opaque = NO; + self.titleLabel.backgroundColor = [UIColor clearColor]; + self.titleLabel.font = [UIFont boldSystemFontOfSize:17]; + self.titleLabel.textColor = [UIColor whiteColor]; + self.titleLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.5]; + self.titleLabel.shadowOffset = CGSizeMake(0, -1); + } + return self.titleLabel; + } +} + +- (UIView *)subtitleViewOrDefault { + if (self.subtitleView) + // if you have a custom subtitle view defined, return that. + return self.subtitleView; + else { + if (!self.subtitleLabel) { + // create a default subtitleView + self.subtitleLabel = [UILabel new]; + self.subtitleLabel.frameHeight = SUBTITLE_HEIGHT; + self.subtitleLabel.opaque = NO; + self.subtitleLabel.backgroundColor = [UIColor clearColor]; + self.subtitleLabel.font = [UIFont systemFontOfSize:12]; + self.subtitleLabel.textColor = [UIColor whiteColor]; + self.subtitleLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.5]; + self.subtitleLabel.shadowOffset = CGSizeMake(0, -1); + } + return self.subtitleLabel; + } +} + +- (SMCalloutBackgroundView *)defaultBackgroundView { + return [SMCalloutDrawnBackgroundView new]; +} + +- (void)rebuildSubviews { + // remove and re-add our appropriate subviews in the appropriate order + [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [self setNeedsDisplay]; + + [self addSubview:self.backgroundView]; + + if (self.contentView) { + [self addSubview:self.contentView]; + } + else { + if (self.titleViewOrDefault) [self addSubview:self.titleViewOrDefault]; + if (self.subtitleViewOrDefault) [self addSubview:self.subtitleViewOrDefault]; + } + if (self.leftAccessoryView) [self addSubview:self.leftAccessoryView]; + if (self.rightAccessoryView) [self addSubview:self.rightAccessoryView]; +} + +- (CGFloat)innerContentMarginLeft { + if (self.leftAccessoryView) + return ACCESSORY_MARGIN + self.leftAccessoryView.frameWidth + TITLE_ACCESSORY_MARGIN; + else + return TITLE_MARGIN; +} + +- (CGFloat)innerContentMarginRight { + if (self.rightAccessoryView) + return ACCESSORY_MARGIN + self.rightAccessoryView.frameWidth + TITLE_ACCESSORY_MARGIN; + else + return TITLE_MARGIN; +} + +- (CGFloat)calloutHeight { + if (self.contentView) + return self.contentView.frameHeight + TITLE_TOP*2 + ANCHOR_HEIGHT + BOTTOM_ANCHOR_MARGIN; + else + return CALLOUT_DEFAULT_HEIGHT; +} + +- (CGSize)sizeThatFits:(CGSize)size { + + // odd behavior, but mimicking the system callout view + if (size.width < CALLOUT_DEFAULT_MIN_WIDTH) + return CGSizeMake(CALLOUT_DEFAULT_WIDTH, self.calloutHeight); + + // calculate how much non-negotiable space we need to reserve for margin and accessories + CGFloat margin = self.innerContentMarginLeft + self.innerContentMarginRight; + + // how much room is left for text? + CGFloat availableWidthForText = size.width - margin; + + // no room for text? then we'll have to squeeze into the given size somehow. + if (availableWidthForText < 0) + availableWidthForText = 0; + + CGSize preferredTitleSize = [self.titleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, TITLE_HEIGHT)]; + CGSize preferredSubtitleSize = [self.subtitleViewOrDefault sizeThatFits:CGSizeMake(availableWidthForText, SUBTITLE_HEIGHT)]; + + // total width we'd like + CGFloat preferredWidth; + + if (self.contentView) { + + // if we have a content view, then take our preferred size directly from that + preferredWidth = self.contentView.frameWidth + margin; + } + else if (preferredTitleSize.width >= 0.000001 || preferredSubtitleSize.width >= 0.000001) { + + // if we have a title or subtitle, then our assumed margins are valid, and we can apply them + preferredWidth = fmaxf(preferredTitleSize.width, preferredSubtitleSize.width) + margin; + } + else { + // ok we have no title or subtitle to speak of. In this case, the system callout would actually not display + // at all! But we can handle it. + preferredWidth = self.leftAccessoryView.frameWidth + self.rightAccessoryView.frameWidth + ACCESSORY_MARGIN*2; + + if (self.leftAccessoryView && self.rightAccessoryView) + preferredWidth += BETWEEN_ACCESSORIES_MARGIN; + } + + // ensure we're big enough to fit our graphics! + preferredWidth = fmaxf(preferredWidth, CALLOUT_DEFAULT_MIN_WIDTH); + + // ask to be smaller if we have space, otherwise we'll fit into what we have by truncating the title/subtitle. + return CGSizeMake(fminf(preferredWidth, size.width), self.calloutHeight); +} + +- (CGSize)offsetToContainRect:(CGRect)innerRect inRect:(CGRect)outerRect { + CGFloat nudgeRight = fmaxf(0, CGRectGetMinX(outerRect) - CGRectGetMinX(innerRect)); + CGFloat nudgeLeft = fminf(0, CGRectGetMaxX(outerRect) - CGRectGetMaxX(innerRect)); + CGFloat nudgeTop = fmaxf(0, CGRectGetMinY(outerRect) - CGRectGetMinY(innerRect)); + CGFloat nudgeBottom = fminf(0, CGRectGetMaxY(outerRect) - CGRectGetMaxY(innerRect)); + return CGSizeMake(nudgeLeft ? nudgeLeft : nudgeRight, nudgeTop ? nudgeTop : nudgeBottom); +} + +- (void)presentCalloutFromRect:(CGRect)rect inView:(UIView *)view constrainedToView:(UIView *)constrainedView animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:view.layer ofView:view constrainedToLayer:constrainedView.layer animated:animated]; +} + +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + [self presentCalloutFromRect:rect inLayer:layer ofView:nil constrainedToLayer:constrainedLayer animated:animated]; +} + +// this private method handles both CALayer and UIView parents depending on what's passed. +- (void)presentCalloutFromRect:(CGRect)rect inLayer:(CALayer *)layer ofView:(UIView *)view constrainedToLayer:(CALayer *)constrainedLayer animated:(BOOL)animated { + + // Sanity check: dismiss this callout immediately if it's displayed somewhere + if (self.layer.superlayer) [self dismissCalloutAnimated:NO]; + + // figure out the constrained view's rect in our popup view's coordinate system + CGRect constrainedRect = [constrainedLayer convertRect:constrainedLayer.bounds toLayer:layer]; + + // apply our edge constraints + constrainedRect = UIEdgeInsetsInsetRect(constrainedRect, self.constrainedInsets); + + // form our subviews based on our content set so far + [self rebuildSubviews]; + + // apply title/subtitle (if present + self.titleLabel.text = self.title; + self.subtitleLabel.text = self.subtitle; + + // size the callout to fit the width constraint as best as possible + self.frameSize = [self sizeThatFits:CGSizeMake(constrainedRect.size.width, self.calloutHeight)]; + + // how much room do we have in the constraint box, both above and below our target rect? + CGFloat topSpace = CGRectGetMinY(rect) - CGRectGetMinY(constrainedRect); + CGFloat bottomSpace = CGRectGetMaxY(constrainedRect) - CGRectGetMaxY(rect); + + // we prefer to point our arrow down. + SMCalloutArrowDirection bestDirection = SMCalloutArrowDirectionDown; + + // we'll point it up though if that's the only option you gave us. + if (self.permittedArrowDirection == SMCalloutArrowDirectionUp) + bestDirection = SMCalloutArrowDirectionUp; + + // or, if we don't have enough space on the top and have more space on the bottom, and you + // gave us a choice, then pointing up is the better option. + if (self.permittedArrowDirection == SMCalloutArrowDirectionAny && topSpace < self.calloutHeight && bottomSpace > topSpace) + bestDirection = SMCalloutArrowDirectionUp; + + // we want to point directly at the horizontal center of the given rect. calculate our "anchor point" in terms of our + // target view's coordinate system. make sure to offset the anchor point as requested if necessary. + CGFloat anchorX = self.calloutOffset.x + CGRectGetMidX(rect); + CGFloat anchorY = self.calloutOffset.y + (bestDirection == SMCalloutArrowDirectionDown ? CGRectGetMinY(rect) : CGRectGetMaxY(rect)); + + // we prefer to sit in the exact center of our constrained view, so we have visually pleasing equal left/right margins. + CGFloat calloutX = roundf(CGRectGetMidX(constrainedRect) - self.frameWidth / 2); + + // what's the farthest to the left and right that we could point to, given our background image constraints? + CGFloat minPointX = calloutX + ANCHOR_MARGIN; + CGFloat maxPointX = calloutX + self.frameWidth - ANCHOR_MARGIN; + + // we may need to scoot over to the left or right to point at the correct spot + CGFloat adjustX = 0; + if (anchorX < minPointX) adjustX = anchorX - minPointX; + if (anchorX > maxPointX) adjustX = anchorX - maxPointX; + + // add the callout to the given layer (or view if possible, to receive touch events) + if (view) + [view addSubview:self]; + else + [layer addSublayer:self.layer]; + + CGPoint calloutOrigin = { + .x = calloutX + adjustX, + .y = bestDirection == SMCalloutArrowDirectionDown ? (anchorY - self.calloutHeight + BOTTOM_ANCHOR_MARGIN) : anchorY + }; + + self.currentArrowDirection = bestDirection; + + self.frameOrigin = calloutOrigin; + + // now set the *actual* anchor point for our layer so that our "popup" animation starts from this point. + CGPoint anchorPoint = [layer convertPoint:CGPointMake(anchorX, anchorY) toLayer:self.layer]; + + // pass on the anchor point to our background view so it knows where to draw the arrow + self.backgroundView.arrowPoint = anchorPoint; + + // adjust it to unit coordinates for the actual layer.anchorPoint property + anchorPoint.x /= self.frameWidth; + anchorPoint.y /= self.frameHeight; + self.layer.anchorPoint = anchorPoint; + + // setting the anchor point moves the view a bit, so we need to reset + self.frameOrigin = calloutOrigin; + + // make sure our frame is not on half-pixels or else we may be blurry! + self.frame = CGRectIntegral(self.frame); + + // layout now so we can immediately start animating to the final position if needed + [self setNeedsLayout]; + [self layoutIfNeeded]; + + // if we're outside the bounds of our constraint rect, we'll give our delegate an opportunity to shift us into position. + // consider both our size and the size of our target rect (which we'll assume to be the size of the content you want to scroll into view. + CGRect contentRect = CGRectUnion(self.frame, CGRectInset(rect, -REPOSITION_MARGIN, -REPOSITION_MARGIN)); + CGSize offset = [self offsetToContainRect:contentRect inRect:constrainedRect]; + + NSTimeInterval delay = 0; + self.popupCancelled = NO; // reset this before calling our delegate below + + if ([self.delegate respondsToSelector:@selector(calloutView:delayForRepositionWithSize:)] && !CGSizeEqualToSize(offset, CGSizeZero)) + delay = [self.delegate calloutView:(id)self delayForRepositionWithSize:offset]; + + // there's a chance that user code in the delegate method may have called -dismissCalloutAnimated to cancel things; if that + // happened then we need to bail! + if (self.popupCancelled) return; + + // if we need to delay, we don't want to be visible while we're delaying, so hide us in preparation for our popup + self.hidden = YES; + + // create the appropriate animation, even if we're not animated + CAAnimation *animation = [self animationWithType:self.presentAnimation presenting:YES]; + + // nuke the duration if no animation requested - we'll still need to "run" the animation to get delays and callbacks + if (!animated) + animation.duration = 0.0000001; // can't be zero or the animation won't "run" + + animation.beginTime = CACurrentMediaTime() + delay; + animation.delegate = self; + + [self.layer addAnimation:animation forKey:@"present"]; +} + +- (void)animationDidStart:(CAAnimation *)anim { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting) { + if ([self.delegate respondsToSelector:@selector(calloutViewWillAppear:)]) + [self.delegate calloutViewWillAppear:(id)self]; + + // ok, animation is on, let's make ourselves visible! + self.hidden = NO; + } + else if (!presenting) { + if ([self.delegate respondsToSelector:@selector(calloutViewWillDisappear:)]) + [self.delegate calloutViewWillDisappear:(id)self]; + } +} + +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)finished { + BOOL presenting = [[anim valueForKey:@"presenting"] boolValue]; + + if (presenting) { + if ([self.delegate respondsToSelector:@selector(calloutViewDidAppear:)]) + [self.delegate calloutViewDidAppear:(id)self]; + } + else if (!presenting) { + + [self removeFromParent]; + [self.layer removeAnimationForKey:@"dismiss"]; + + if ([self.delegate respondsToSelector:@selector(calloutViewDidDisappear:)]) + [self.delegate calloutViewDidDisappear:(id)self]; + } +} + +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { + // we want to match the system callout view, which doesn't "capture" touches outside the accessory areas. This way you can click on other pins and things *behind* a translucent callout. + return + [self.leftAccessoryView pointInside:[self.leftAccessoryView convertPoint:point fromView:self] withEvent:nil] || + [self.rightAccessoryView pointInside:[self.rightAccessoryView convertPoint:point fromView:self] withEvent:nil] || + [self.contentView pointInside:[self.contentView convertPoint:point fromView:self] withEvent:nil] || + (!self.contentView && [self.titleView pointInside:[self.titleView convertPoint:point fromView:self] withEvent:nil]) || + (!self.contentView && [self.subtitleView pointInside:[self.subtitleView convertPoint:point fromView:self] withEvent:nil]); +} + +- (void)dismissCalloutAnimated:(BOOL)animated { + [self.layer removeAnimationForKey:@"present"]; + + self.popupCancelled = YES; + + if (animated) { + CAAnimation *animation = [self animationWithType:self.dismissAnimation presenting:NO]; + animation.delegate = self; + [self.layer addAnimation:animation forKey:@"dismiss"]; + } + else [self removeFromParent]; +} + +- (void)removeFromParent { + if (self.superview) + [self removeFromSuperview]; + else { + // removing a layer from a superlayer causes an implicit fade-out animation that we wish to disable. + [CATransaction begin]; + [CATransaction setDisableActions:YES]; + [self.layer removeFromSuperlayer]; + [CATransaction commit]; + } +} + +- (CAAnimation *)animationWithType:(SMCalloutAnimation)type presenting:(BOOL)presenting { + CAAnimation *animation = nil; + + if (type == SMCalloutAnimationBounce) { + CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"]; + CAMediaTimingFunction *easeInOut = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + + bounceAnimation.values = @[@0.05, @1.11245, @0.951807, @1.0]; + bounceAnimation.keyTimes = @[@0, @(4.0/9.0), @(4.0/9.0+5.0/18.0), @1.0]; + bounceAnimation.duration = 1.0/3.0; // the official bounce animation duration adds up to 0.3 seconds; but there is a bit of delay introduced by Apple using a sequence of callback-based CABasicAnimations rather than a single CAKeyframeAnimation. So we bump it up to 0.33333 to make it feel identical on the device + bounceAnimation.timingFunctions = @[easeInOut, easeInOut, easeInOut, easeInOut]; + + if (!presenting) + bounceAnimation.values = [[bounceAnimation.values reverseObjectEnumerator] allObjects]; // reverse values + + animation = bounceAnimation; + } + else if (type == SMCalloutAnimationFade) { + CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fadeAnimation.duration = 1.0/3.0; + fadeAnimation.fromValue = presenting ? @0.0 : @1.0; + fadeAnimation.toValue = presenting ? @1.0 : @0.0; + animation = fadeAnimation; + } + else if (type == SMCalloutAnimationStretch) { + CABasicAnimation *stretchAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + stretchAnimation.duration = 0.1; + stretchAnimation.fromValue = presenting ? @0.0 : @1.0; + stretchAnimation.toValue = presenting ? @1.0 : @0.0; + animation = stretchAnimation; + } + + // CAAnimation is KVC compliant, so we can store whether we're presenting for lookup in our delegate methods + [animation setValue:@(presenting) forKey:@"presenting"]; + + animation.fillMode = kCAFillModeForwards; + animation.removedOnCompletion = NO; + return animation; +} + +- (CGFloat)centeredPositionOfView:(UIView *)view ifSmallerThan:(CGFloat)height { + return view.frameHeight < height ? floorf(height/2 - view.frameHeight/2) : 0; +} + +- (CGFloat)centeredPositionOfView:(UIView *)view relativeToView:(UIView *)parentView { + return roundf((parentView.frameHeight - view.frameHeight) / 2); +} + +- (void)layoutSubviews { + + self.backgroundView.frame = self.bounds; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = self.currentArrowDirection == SMCalloutArrowDirectionUp ? TOP_ANCHOR_MARGIN : 0; + + self.titleViewOrDefault.frameX = self.innerContentMarginLeft; + self.titleViewOrDefault.frameY = (self.subtitleView || self.subtitle.length ? TITLE_SUB_TOP : TITLE_TOP) + dy; + self.titleViewOrDefault.frameWidth = self.frameWidth - self.innerContentMarginLeft - self.innerContentMarginRight; + + self.subtitleViewOrDefault.frameX = self.titleViewOrDefault.frameX; + self.subtitleViewOrDefault.frameY = SUBTITLE_TOP + dy; + self.subtitleViewOrDefault.frameWidth = self.titleViewOrDefault.frameWidth; + + self.leftAccessoryView.frameX = ACCESSORY_MARGIN; + if (self.contentView) + self.leftAccessoryView.frameY = TITLE_TOP + [self centeredPositionOfView:self.leftAccessoryView relativeToView:self.contentView] + dy; + else + self.leftAccessoryView.frameY = ACCESSORY_TOP + [self centeredPositionOfView:self.leftAccessoryView ifSmallerThan:ACCESSORY_HEIGHT] + dy; + + self.rightAccessoryView.frameX = self.frameWidth-ACCESSORY_MARGIN-self.rightAccessoryView.frameWidth; + if (self.contentView) + self.rightAccessoryView.frameY = TITLE_TOP + [self centeredPositionOfView:self.rightAccessoryView relativeToView:self.contentView] + dy; + else + self.rightAccessoryView.frameY = ACCESSORY_TOP + [self centeredPositionOfView:self.rightAccessoryView ifSmallerThan:ACCESSORY_HEIGHT] + dy; + + + if (self.contentView) { + self.contentView.frameX = self.innerContentMarginLeft; + self.contentView.frameY = TITLE_TOP + dy; + } +} + +@end + +// import this known "private API" from SMCalloutView.m +@interface SMCalloutBackgroundView (EmbeddedImages) ++ (UIImage *)embeddedImageNamed:(NSString *)name; +@end + +// +// Callout background assembled from predrawn stretched images. +// +@implementation SMCalloutImageBackgroundView { + UIImageView *leftCap, *rightCap, *topAnchor, *bottomAnchor, *leftBackground, *rightBackground; +} + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + leftCap = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 17, 57)]; + rightCap = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 17, 57)]; + topAnchor = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 41, 70)]; + bottomAnchor = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 41, 70)]; + leftBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1, 57)]; + rightBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1, 57)]; + [self addSubview:leftCap]; + [self addSubview:rightCap]; + [self addSubview:topAnchor]; + [self addSubview:bottomAnchor]; + [self addSubview:leftBackground]; + [self addSubview:rightBackground]; + } + return self; +} + +- (UIImage *)leftCapImage { return _leftCapImage ? _leftCapImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewLeftCap"] stretchableImageWithLeftCapWidth:16 topCapHeight:20]; } +- (UIImage *)rightCapImage { return _rightCapImage ? _rightCapImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewRightCap"] stretchableImageWithLeftCapWidth:0 topCapHeight:20]; } +- (UIImage *)topAnchorImage { return _topAnchorImage ? _topAnchorImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewTopAnchor"] stretchableImageWithLeftCapWidth:0 topCapHeight:33]; } +- (UIImage *)bottomAnchorImage { return _bottomAnchorImage ? _bottomAnchorImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewBottomAnchor"] stretchableImageWithLeftCapWidth:0 topCapHeight:20]; } +- (UIImage *)backgroundImage { return _backgroundImage ? _backgroundImage : [[SMCalloutBackgroundView embeddedImageNamed:@"SMCalloutViewBackground"] stretchableImageWithLeftCapWidth:0 topCapHeight:20]; } + +// Make sure we relayout our images when our arrow point changes! +- (void)setArrowPoint:(CGPoint)arrowPoint { + [super setArrowPoint:arrowPoint]; + [self setNeedsLayout]; +} + +- (void)layoutSubviews { + + // apply our background graphics + leftCap.image = self.leftCapImage; + rightCap.image = self.rightCapImage; + topAnchor.image = self.topAnchorImage; + bottomAnchor.image = self.bottomAnchorImage; + leftBackground.image = self.backgroundImage; + rightBackground.image = self.backgroundImage; + + // stretch the images to fill our vertical space. The system background images aren't really stretchable, + // but that's OK because you'll probably be using title/subtitle rather than contentView if you're using the + // system images, and in that case the height will match the system background heights exactly and no stretching + // will occur. However, if you wish to define your own custom background using prerendered images, you could + // define stretchable images using -stretchableImageWithLeftCapWidth:TopCapHeight and they'd get stretched + // properly here if necessary. + leftCap.frameHeight = rightCap.frameHeight = leftBackground.frameHeight = rightBackground.frameHeight = self.frameHeight - 13; + topAnchor.frameHeight = bottomAnchor.frameHeight = self.frameHeight; + + BOOL pointingUp = self.arrowPoint.y < self.frameHeight/2; + + // show the correct anchor based on our direction + topAnchor.hidden = !pointingUp; + bottomAnchor.hidden = pointingUp; + + // if we're pointing up, we'll need to push almost everything down a bit + CGFloat dy = pointingUp ? TOP_ANCHOR_MARGIN : 0; + leftCap.frameY = rightCap.frameY = leftBackground.frameY = rightBackground.frameY = dy; + + leftCap.frameX = 0; + rightCap.frameX = self.frameWidth - rightCap.frameWidth; + + // move both anchors, only one will have been made visible in our -popup method + CGFloat anchorX = roundf(self.arrowPoint.x - bottomAnchor.frameWidth / 2); + topAnchor.frameOrigin = CGPointMake(anchorX, 0); + + // make sure the anchor graphic isn't overlapping with an endcap + if (topAnchor.frameLeft < leftCap.frameRight) topAnchor.frameX = leftCap.frameRight; + if (topAnchor.frameRight > rightCap.frameLeft) topAnchor.frameX = rightCap.frameLeft - topAnchor.frameWidth; // don't stretch it + + bottomAnchor.frameOrigin = topAnchor.frameOrigin; // match + + leftBackground.frameLeft = leftCap.frameRight; + leftBackground.frameRight = topAnchor.frameLeft; + rightBackground.frameLeft = topAnchor.frameRight; + rightBackground.frameRight = rightCap.frameLeft; +} + +@end + +@implementation SMCalloutBackgroundView (ClassicEmbeddedImages) + +// +// I didn't want this class to require adding any images to your Xcode project. So instead the images needed are embedded below. +// + ++ (NSString *)SMCalloutViewBackground { return @"iVBORw0KGgoAAAANSUhEUgAAAAEAAAA5CAYAAAD3PEFJAAAAHGlET1QAAAACAAAAAAAAAB0AAAAoAAAAHQAAABwAAACkF8Y1LgAAAHBJREFUGBlMy6ENQyEARdGXJh2CBEZAgAABhoQgEASDQBCWYqy3wt/lt80XFfe4CwCvT3gjpXThnEPsvYm1FjHnJMYYRO+daK0RtVailELknPndiBjjQwiB8N4TzrkHay3xwxhDaK0JpRQhpfxHCMEbAAD//2TbkE8AAAA9SURBVGOQlJQ8w0AJIScnd4ZBQ0PjDIOysvJdBiCIARFhIMIPRLiACEsQoQMiFEGEBIgQABFcIIIVRDABAL6ePTfutWY6AAAAAElFTkSuQmCC"; } ++ (NSString *)SMCalloutViewBackground_2x { return @"iVBORw0KGgoAAAANSUhEUgAAAAIAAAByCAYAAAB5lADlAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAHGlET1QAAAACAAAAAAAAADkAAAAoAAAAOQAAADkAAAD3bjNTjgAAAMNJREFUOBGkz72JhGAAhOGpwyZUVESFVfAPFFRcFfypwmJsa4KNtxaPucAvuuiCZ3jTwX3fkN/5I7Iso2Acx4/guq6v4DzPj+A4Dgr2faeY2LaNgifWdaVgWRYK5nmmmJimiYL3+03BMAwU9H1PMdF1HQVt21LQNA3FRF3XFFRVRUFZlhQURUFBnucUPJfTNKXgidfrRUGSJBTEcUwxEUURBWEYUhAEAcWE7/sUeJ5HMeG6LgWO41Bg2zbFhGVZFPwvfgAAAP//7zgpOQAAAGxJREFU5cYhCkJBAEXRqyAYLJOECTLFaDXafjNZDIKgLniWNL73eXxwDYZzudRau/HP01rrxjKllG4sA3yCt8Z4BU+N8QjuGuMWXDXGFFw0xjk4aYxjcNAY+6BojF2w1RibYK0xVrMxBjbnZ75mdyKsdyBPxAAAAABJRU5ErkJggg=="; } ++ (NSString *)SMCalloutViewBottomAnchor { return @"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"; } ++ (NSString *)SMCalloutViewBottomAnchor_2x { return @"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"; } ++ (NSString *)SMCalloutViewLeftCap { return @"iVBORw0KGgoAAAANSUhEUgAAABEAAAA5CAYAAADQksChAAAAHGlET1QAAAACAAAAAAAAAB0AAAAoAAAAHQAAABwAAAKS6krCNQAAAl5JREFUSA2klNmKGkEUhs0yM9nIglnctQc3zKioqOCKwQVXFBRUcLnxwvtci88gPkpeIlATEshVSM2rmP9UUo3dajuQi49TVX3OZ3mquk273c50DpPJ9OAID7H2l2MCXYFMfoT1xzouML842MU/gabQ4XAUo9Ho10KhcFcqlbgejWRPIH/10ul0fq7X67/X6/X3zWZzu91umR5VohPQNq/MZvOndrv9a7VafVssFmw+n7PZbKYi50JyTIC1Zz6f78tyufwxnU7ZZDI5iV5CjbsiAXiZy+V+jsfjW8BGo9FJ9iXUh0vwlATAnEwm74bDIRsMBoZICZ2G3MULjN8ASzgc5v1+n3W73QN6vR4j6BlyxUUiCTVT7uIdxo5QKMQpqdPpaGi1WmIuI3KFRP6V55iLXSAqgUCAUyKOmDWbTdZoNESUY5oT+xJqKP0VM7ADL06HU0GtVlOpVqtMIteRK3ZC/XgCqKFvgRMEvF4vp4JyuWwIcg8k77HmBiFFUXilUmG45oaQRJ4MNfUV+AA84KPH46H3hBWLRZbP50WUY5pLkKuRvMbcAhRwQxIqwqUzBLlCQsdLt1QjcblcnASZTEZDNptV5zQ+JbnGgxuSUFI6nTbESBLGZ4DTLlKplGBfJtconpVQId4hVUTj/flZCb5oPBaLsXg8LkgkEuwYhjux2+0cF06VkExKZaS1sxJcOOb3+0UxFR7DUGK1WjlJcEqMYjAYZPg8sEgkouGsxO12M5wSQ380kdYk95KQwIj/kthsNiE3lFgsFk79oGRZIMcy0g7vJUGDVZEslpGe/QEAAP//KqClBgAAAfBJREFU7ZTRatNQHIfjdFaj1El1prW2Sbti2aZeKEMFB+pAEFREFAa79d5n8YF8gkzUi93M7VXq9x08I82y7QH04iNpOP34/37nJEmSJAuwCCksQQYjuJdl2cFgMCh7vV6g2+2WVXzub9aeLan+sen+v2S+3H+12Hioms7IWZ2ss+AwntiTBKdJCk6hkr08z3f7/f7cca8L44m9wM1liO9OkHQ6nW/j8fjncDgsFZ0Uqy65xoNbkMNamqafEexPJpPvo9GoNFoTrE3OgZNcgjYswxBWYaPdbn9lmt/T6fQH7EJZh3XHJDd4dgfuwkPYbLVaX4jyqyiKQ4QHdVgTJOe5tuAqdOA2rMADeAov4DW8h0+wDTsVjiQXeXgFroMfJstdg0fwDLZA0Tv4AB9BoQRJ/Lq5Q/ZyE/owgfuwAYpewitQ9gbeBmazGdfwdbPcGClOY8F2o8iJjLYJz0Gh020lfyXukL0YKU5jN11Q5ERGsyPLdrLH8CRQkRgpTpNybyxF9mM0O1oBJ1sFpeuBmsRp/PIbK4qMZkfK3DW33+lyUFyEOKeIjOa2O5UyJ1O4DJ5sxdmRpEFkNDvyJCtz+6NQqa+I79rSnKQmsiPjKTOiQmMqjWLl6TFJReSOibKqUGlE+WKjRFEVFkZh9RrlC38A3S8C8jPZQY0AAAAASUVORK5CYII="; } ++ (NSString *)SMCalloutViewLeftCap_2x { return @"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"; } ++ (NSString *)SMCalloutViewRightCap { return @"iVBORw0KGgoAAAANSUhEUgAAABEAAAA5CAYAAADQksChAAAAHGlET1QAAAACAAAAAAAAAB0AAAAoAAAAHQAAABwAAAKdevXfpAAAAmlJREFUSA2UlNlqWlEUhredJzpgB41zcAi2JiRiBE0UiwNxQsGACibeeJH7XovPEPIofYnCSmmhV6XJq6T/f3SfHg/xmF58rH22rm+vvfY+Ryml7llwYbzEzc2NWgdy1MMFDxCt3MezXsAU3yZUpVLpyk6hULje2dn55vf7iwvxktAuUhcXF2Ln/Pz8cjab/Tg6OvoTCAS+QPTIJnNZRer09FTG47Ewavg8mUxkOp1+b7Vav91u92dIHgNuXVdlitRoNJJVnJycyNnZ2c9YLPYVyc9WidRgMJBVDIdDAZcHBwe/IHhpEfEA2HSjGnV8fCxO9Pt9yWQy10hwA4qeAvaI25pLOp2OdLtdA47t9Ho9SaVSV0jwgDfgBWB/jGrYYNVut6XZbIo1cqyhNJlMUuIH74Cuhk02tqTq9bpoGo2GED4z4oiNBRKJBCURoKt5jrG5JVWr1YRUq1UTPcdIGU6HkijwAfZGb8noiyqXy+IE5dFolJIECIC3gFt6AtgXF6+9OFGpVCQSiVCSBCHwHixLDg8PxUqxWBTCOUYuEA6HKfkIwuADeAV41PP7goskTlC0kHxCkm7u6yVJPp+XXC5nYB3rOS4QDAZZiV3C12B+zNlsVpyg2CLZRCKPmZX8k+zv74vGKtNzrAifA1aSAusleEf4nphSjileK0mn03Ibe3t7QnZ3dwVfOOdKrH/WSXqOERdNfD6fs4QrrSIej/OirZdsb2+LFbz2srW1ZSTjVIzo9XqdK0HT2DgT7N8Y6xgKhWSthH924s6SjY2NlaL/klCkYWV6zL54PB7nnmC/ZoJO1JG/3UXyFwAA//9HuzCQAAAB80lEQVTtlc1qU1EURk9iNXqVqERrEmNykzQY/B0oooKCPyAIbRGpIDh17rP4QD7BragDJ9q+SlwrZsd7NRQFhx0szulhf9/Z+7uHJnU6naLb7RauZTyTfr9ftNvtvZTSdRhBG85ABkehnsrCVftDk2q4ZnSYSTWT//LYwoSA93mZ1+DfX2yv1yvyPN/F5OvCZMj6d8/eDjQYDAbFeDz+3Gq1PqwwOcHZGtST72AVo9GomEwmHzH6lmXZW4qvQg4X4DT8MplOp8UKdjn7RBffm83mewR34AoMYB2acBzspJYo3Pud4XC4z0hfGo3GO4oewi24DJfgHFRNOHhT4jX7V/ACnsNjuA83YQMuQgtOQQOOQA3mIoU78BK2QYOn8ABug3nElznL/iQcg6XJFn/IJih+Bk9AA7O4ARPowXlwFEP9+V9t0Yk3isJHYAaOYAcamIWB+j7sIkZZY1+fzWYsKd1bcJfVmw3RDBzBDjTogFlEF8tRwsTnLIr8jN68AWbgCHYQBhl7A513wVoLE4slB2/1M/oVFJuBI9hBGJiFgdZhaWKx+BLXQaE3h9gMDNIO/jCITvwNEZ+yN4pCP6NiX6YZOEKlAw3CxDYtDoEib1XozWXxcoQwCBMLo1hBELfOhZzXpCyOPefzgCysFCuQKDxo/QHd3ALyX+9lLwAAAABJRU5ErkJggg=="; } ++ (NSString *)SMCalloutViewRightCap_2x { return @"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"; } ++ (NSString *)SMCalloutViewTopAnchor { return @"iVBORw0KGgoAAAANSUhEUgAAACkAAABGCAYAAABRwr15AAAAHGlET1QAAAACAAAAAAAAACMAAAAoAAAAIwAAACMAAAQYDCloiwAAA+RJREFUaAXMVslKHFEUfSaaaPIFunDaulJj2/QQBxxwVtCFC9GFCxVRUHHAARVx1pWf9QKVNCGb5FvMPUWf5vazqu0qFVwc7nTuvaeedr0yj4+P5qUwxlQoVCq/4qWz0R9boBLyQXwfzc3N31paWn7CMpe3/kPEFRxLZF4gxX2UuLKpqSkxOTn56/T09DcsYuQFqJMb62Qji5SFOBUs9cWJ/dTY2JiEsPv7e+/s7OwHLGLkURdosZGFRhIpyygQS6sE1Q0NDampqakchMkpWgIx8qiDl+ejDw8YSWjZIjE4vwCLcDrV9fX1aQi5u7vzBZ6cnBREQiyFggd+vi+y0LJEynBXYI0szsif1BcIccfHx0+APB4APPBlTk0coc+KDBM4MTGRu7299SDk6OgoFKiDB35coSVFhgkcGxvLXV1deRB3eHhoDw4OiixyGjjlm5sbD31xhIaKDBM4Ojqau7y89AXu7+/bvb09C/sc8EDoQ39UoYEiwwQODw/nLi4uPJzc7u5uZKAP/SMjI5GEPhEZJnBoaCh3fn7uQdzW1pbd3t72resjZg4cgnn0Yw7mlXuiRSKDBNbV1WUwUF4p3s7Ojt3Y2CjC5uamH8NqHzzmXIs5mIe5mC97S/7qpV64svQt8lnyX2pra7MDAwO+QCxaW1vzsb6+bgk3FxSTqy3myS/fw3zswT4B9uI9qq9S6PJvDtweeEGDhKf6Ko3f+/v7c/LL9DB8dXX11YG5mI892Ie9+f3QAT3QVWV6enr+uejt7f07PT39R14j3srKil1aWirC8vJyUezW3bgUH/OxB/uw19WC2Dw8PNggXF9f+0IWFxftWwMPhX1BOpAzCwsL1sX8/LwFmKdPyzxsGJecoB7Wwix7aM3c3Jx97zCzs7P2vcPMzMxY+ae1sHERpd/lunGQBiOfUVa+CS2si7C85mlOmB+2o1y+GR8ft4Bc/EXWzSOWz60iDnuCuMwFWfbBBvnoYR6+kY8GqyGXvx/D0medsVuT660wgxy3h7Fr2cs+WvJQN3It2cHBQR/wCZ2DX4rHGnvd2J3lztN13Uue6evrs4C87X0bFjP/mtbdGTYb16Iluru7C36pHGvavqRXz6Gv55lsNmuJrq4uq4E8YteSwz7WycUCnWMeljW3l3zWdY/JZDL2vcOkUikbhGQyWcin0+mCH8SNmtPz6Ot97jzT2dlpCRDpw7qxrr2l7+41iUTCamA5Y/raUhw5sMyR59Y0R9eYD8txXpHIjo4OXyCtbg7K6Tr953il6m6NsWlvb7floq2trWyunhm3jzMMBgShtbXVAlFq5MfpxR7dz73I/QcAAP//R6Pt0AAAASZJREFU7VK7asNAEBwCblKltISkImrUWEhl+tQuU+WT7xfyL94TjNksdzIkZ7yGMwyzj9m9YWWs6xpuYVmWm5rcjhKzmOc55BAfYE/HrO2x1ut4b4Y9rY8x+r4PFl3XhQjWGVtmX/M9ZsGlnnkz2bbtdjkaZU5mPcVWY/PUDGvUWmafjCjQIuY5joO2l6pZTcxTulTNzl5NNk0TiCjKxXaB1sYZndv4r7PQi/VSmiTzAeZkzpBZ1/zf2c0kF+49RE2O7zn7y2TOwKPr1WSpL1AvWS9Z6gKl9tT/ZL1kqQuU2oNhGIJ3YJqm4B0Yx/HHOyC/7ycAvsSkd+AsJr0Dn2LSO/AhJr0DJzHpHXgXk96Bo5j0DryJSe/Aq5j0DhzEpHfgRUy6xgX1iUkAQX47jAAAAABJRU5ErkJggg=="; } ++ (NSString *)SMCalloutViewTopAnchor_2x { return @"iVBORw0KGgoAAAANSUhEUgAAAFIAAACMCAYAAADvGP7EAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5QUY0RkNERjZENDMxMUUyQTAzNEREMUIxRjIzOEVCNSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo5QUY0RkNFMDZENDMxMUUyQTAzNEREMUIxRjIzOEVCNSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjdFQUM5NTk0NkJGQjExRTJBMDM0REQxQjFGMjM4RUI1IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjlBRjRGQ0RFNkQ0MzExRTJBMDM0REQxQjFGMjM4RUI1Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+zk9a9AAABhtJREFUeNrsnclO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"; } + +@end + +// +// Custom-drawn flexible-height background implementation. +// Contributed by Nicholas Shipes: https://github.com/u10int +// +@implementation SMCalloutDrawnBackgroundView + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + self.backgroundColor = [UIColor clearColor]; + self.opaque = NO; + } + return self; +} + +// Make sure we redraw our graphics when the arrow point changes! +- (void)setArrowPoint:(CGPoint)arrowPoint { + [super setArrowPoint:arrowPoint]; + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)rect { + + BOOL pointingUp = self.arrowPoint.y < self.frameHeight/2; + CGSize anchorSize = CGSizeMake(27, ANCHOR_HEIGHT); + CGFloat anchorX = roundf(self.arrowPoint.x - anchorSize.width / 2); + CGRect anchorRect = CGRectMake(anchorX, 0, anchorSize.width, anchorSize.height); + + // make sure the anchor is not too close to the end caps + if (anchorRect.origin.x < ANCHOR_MARGIN_MIN) + anchorRect.origin.x = ANCHOR_MARGIN_MIN; + + else if (anchorRect.origin.x + anchorRect.size.width > self.frameWidth - ANCHOR_MARGIN_MIN) + anchorRect.origin.x = self.frameWidth - anchorRect.size.width - ANCHOR_MARGIN_MIN; + + // determine size + CGFloat stroke = 1.0; + CGFloat radius = [UIScreen mainScreen].scale == 1 ? 4.5 : 6.0; + + rect = CGRectMake(self.bounds.origin.x, self.bounds.origin.y + TOP_SHADOW_BUFFER, self.bounds.size.width, self.bounds.size.height - ANCHOR_HEIGHT); + rect.size.width -= stroke + 14; + rect.size.height -= stroke * 2 + TOP_SHADOW_BUFFER + BOTTOM_SHADOW_BUFFER + OFFSET_FROM_ORIGIN; + rect.origin.x += stroke / 2.0 + 7; + rect.origin.y += pointingUp ? ANCHOR_HEIGHT - stroke / 2.0 : stroke / 2.0; + + + // General Declarations + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGContextRef context = UIGraphicsGetCurrentContext(); + + // Color Declarations + UIColor* fillBlack = [UIColor colorWithRed: 0.11 green: 0.11 blue: 0.11 alpha: 1]; + UIColor* shadowBlack = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 0.47]; + UIColor* glossBottom = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 0.2]; + UIColor* glossTop = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 0.85]; + UIColor* strokeColor = [UIColor colorWithRed: 0.199 green: 0.199 blue: 0.199 alpha: 1]; + UIColor* innerShadowColor = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 0.4]; + UIColor* innerStrokeColor = [UIColor colorWithRed: 0.821 green: 0.821 blue: 0.821 alpha: 0.04]; + UIColor* outerStrokeColor = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 0.35]; + + // Gradient Declarations + NSArray* glossFillColors = [NSArray arrayWithObjects: + (id)glossBottom.CGColor, + (id)glossTop.CGColor, nil]; + CGFloat glossFillLocations[] = {0, 1}; + CGGradientRef glossFill = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)glossFillColors, glossFillLocations); + + // Shadow Declarations + UIColor* baseShadow = shadowBlack; + CGSize baseShadowOffset = CGSizeMake(0.1, 6.1); + CGFloat baseShadowBlurRadius = 6; + UIColor* innerShadow = innerShadowColor; + CGSize innerShadowOffset = CGSizeMake(0.1, 1.1); + CGFloat innerShadowBlurRadius = 1; + + CGFloat backgroundStrokeWidth = 1; + CGFloat outerStrokeStrokeWidth = 1; + + // Frames + CGRect frame = rect; + CGRect innerFrame = CGRectMake(frame.origin.x + backgroundStrokeWidth, frame.origin.y + backgroundStrokeWidth, frame.size.width - backgroundStrokeWidth * 2, frame.size.height - backgroundStrokeWidth * 2); + CGRect glossFrame = CGRectMake(frame.origin.x - backgroundStrokeWidth / 2, frame.origin.y - backgroundStrokeWidth / 2, frame.size.width + backgroundStrokeWidth, frame.size.height / 2 + backgroundStrokeWidth + 0.5); + + //// CoreGroup //// + { + CGContextSaveGState(context); + CGContextSetAlpha(context, 0.83); + CGContextBeginTransparencyLayer(context, NULL); + + // Background Drawing + UIBezierPath* backgroundPath = [UIBezierPath bezierPath]; + [backgroundPath moveToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMaxY(frame) - radius)]; // left + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + + // pointer down + if (!pointingUp) { + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMaxY(frame))]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMaxY(frame) + anchorRect.size.height)]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMaxY(frame))]; + } + + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame))]; // bottom + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [backgroundPath addLineToPoint: CGPointMake(CGRectGetMaxX(frame), CGRectGetMinY(frame) + radius)]; // right + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMinY(frame))]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMinY(frame) - anchorRect.size.height)]; + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMinY(frame))]; + } + + [backgroundPath addLineToPoint:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame))]; // top + [backgroundPath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [backgroundPath closePath]; + CGContextSaveGState(context); + CGContextSetShadowWithColor(context, baseShadowOffset, baseShadowBlurRadius, baseShadow.CGColor); + [fillBlack setFill]; + [backgroundPath fill]; + + // Background Inner Shadow + CGRect backgroundBorderRect = CGRectInset([backgroundPath bounds], -innerShadowBlurRadius, -innerShadowBlurRadius); + backgroundBorderRect = CGRectOffset(backgroundBorderRect, -innerShadowOffset.width, -innerShadowOffset.height); + backgroundBorderRect = CGRectInset(CGRectUnion(backgroundBorderRect, [backgroundPath bounds]), -1, -1); + + UIBezierPath* backgroundNegativePath = [UIBezierPath bezierPathWithRect: backgroundBorderRect]; + [backgroundNegativePath appendPath: backgroundPath]; + backgroundNegativePath.usesEvenOddFillRule = YES; + + CGContextSaveGState(context); + { + CGFloat xOffset = innerShadowOffset.width + round(backgroundBorderRect.size.width); + CGFloat yOffset = innerShadowOffset.height; + CGContextSetShadowWithColor(context, + CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)), + innerShadowBlurRadius, + innerShadow.CGColor); + + [backgroundPath addClip]; + CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(backgroundBorderRect.size.width), 0); + [backgroundNegativePath applyTransform: transform]; + [[UIColor grayColor] setFill]; + [backgroundNegativePath fill]; + } + CGContextRestoreGState(context); + + CGContextRestoreGState(context); + + [strokeColor setStroke]; + backgroundPath.lineWidth = backgroundStrokeWidth; + [backgroundPath stroke]; + + + // Inner Stroke Drawing + CGFloat innerRadius = radius - 1.0; + CGRect anchorInnerRect = anchorRect; + anchorInnerRect.origin.x += backgroundStrokeWidth / 2; + anchorInnerRect.origin.y -= backgroundStrokeWidth / 2; + anchorInnerRect.size.width -= backgroundStrokeWidth; + anchorInnerRect.size.height -= backgroundStrokeWidth / 2; + + UIBezierPath* innerStrokePath = [UIBezierPath bezierPath]; + [innerStrokePath moveToPoint:CGPointMake(CGRectGetMinX(innerFrame), CGRectGetMinY(innerFrame) + innerRadius)]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(innerFrame), CGRectGetMaxY(innerFrame) - innerRadius)]; // left + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(innerFrame) + innerRadius, CGRectGetMaxY(innerFrame) - innerRadius) radius:innerRadius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + + // pointer down + if (!pointingUp) { + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect), CGRectGetMaxY(innerFrame))]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect) + anchorInnerRect.size.width / 2, CGRectGetMaxY(innerFrame) + anchorInnerRect.size.height)]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorInnerRect), CGRectGetMaxY(innerFrame))]; + } + + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(innerFrame) - innerRadius, CGRectGetMaxY(innerFrame))]; // bottom + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(innerFrame) - innerRadius, CGRectGetMaxY(innerFrame) - innerRadius) radius:innerRadius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [innerStrokePath addLineToPoint: CGPointMake(CGRectGetMaxX(innerFrame), CGRectGetMinY(innerFrame) + innerRadius)]; // right + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(innerFrame) - innerRadius, CGRectGetMinY(innerFrame) + innerRadius) radius:innerRadius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorInnerRect), CGRectGetMinY(innerFrame))]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect) + anchorRect.size.width / 2, CGRectGetMinY(innerFrame) - anchorInnerRect.size.height)]; + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorInnerRect), CGRectGetMinY(innerFrame))]; + } + + [innerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(innerFrame) + innerRadius, CGRectGetMinY(innerFrame))]; // top + [innerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(innerFrame) + innerRadius, CGRectGetMinY(innerFrame) + innerRadius) radius:innerRadius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [innerStrokePath closePath]; + + [innerStrokeColor setStroke]; + innerStrokePath.lineWidth = backgroundStrokeWidth; + [innerStrokePath stroke]; + + + //// GlossGroup //// + { + CGContextSaveGState(context); + CGContextSetAlpha(context, 0.45); + CGContextBeginTransparencyLayer(context, NULL); + + CGFloat glossRadius = radius + 0.5; + + // Gloss Drawing + UIBezierPath* glossPath = [UIBezierPath bezierPath]; + [glossPath moveToPoint:CGPointMake(CGRectGetMinX(glossFrame), CGRectGetMinY(glossFrame))]; + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(glossFrame), CGRectGetMaxY(glossFrame) - glossRadius)]; // left + [glossPath addArcWithCenter:CGPointMake(CGRectGetMinX(glossFrame) + glossRadius, CGRectGetMaxY(glossFrame) - glossRadius) radius:glossRadius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + [glossPath addLineToPoint:CGPointMake(CGRectGetMaxX(glossFrame) - glossRadius, CGRectGetMaxY(glossFrame))]; // bottom + [glossPath addArcWithCenter:CGPointMake(CGRectGetMaxX(glossFrame) - glossRadius, CGRectGetMaxY(glossFrame) - glossRadius) radius:glossRadius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [glossPath addLineToPoint: CGPointMake(CGRectGetMaxX(glossFrame), CGRectGetMinY(glossFrame) - glossRadius)]; // right + [glossPath addArcWithCenter:CGPointMake(CGRectGetMaxX(glossFrame) - glossRadius, CGRectGetMinY(glossFrame) + glossRadius) radius:glossRadius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [glossPath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMinY(glossFrame))]; + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + roundf(anchorRect.size.width / 2), CGRectGetMinY(glossFrame) - anchorRect.size.height)]; + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMinY(glossFrame))]; + } + + [glossPath addLineToPoint:CGPointMake(CGRectGetMinX(glossFrame) + glossRadius, CGRectGetMinY(glossFrame))]; // top + [glossPath addArcWithCenter:CGPointMake(CGRectGetMinX(glossFrame) + glossRadius, CGRectGetMinY(glossFrame) + glossRadius) radius:glossRadius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [glossPath closePath]; + + CGContextSaveGState(context); + [glossPath addClip]; + CGRect glossBounds = glossPath.bounds; + CGContextDrawLinearGradient(context, glossFill, + CGPointMake(CGRectGetMidX(glossBounds), CGRectGetMaxY(glossBounds)), + CGPointMake(CGRectGetMidX(glossBounds), CGRectGetMinY(glossBounds)), + 0); + CGContextRestoreGState(context); + + CGContextEndTransparencyLayer(context); + CGContextRestoreGState(context); + } + + CGContextEndTransparencyLayer(context); + CGContextRestoreGState(context); + } + + // Outer Stroke Drawing + UIBezierPath* outerStrokePath = [UIBezierPath bezierPath]; + [outerStrokePath moveToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMaxY(frame) - radius)]; // left + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI endAngle:M_PI / 2 clockwise:NO]; // bottom-left corner + + // pointer down + if (!pointingUp) { + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMaxY(frame))]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMaxY(frame) + anchorRect.size.height)]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMaxY(frame))]; + } + + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame))]; // bottom + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMaxY(frame) - radius) radius:radius startAngle:M_PI / 2 endAngle:0.0f clockwise:NO]; // bottom-right corner + [outerStrokePath addLineToPoint: CGPointMake(CGRectGetMaxX(frame), CGRectGetMinY(frame) + radius)]; // right + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMaxX(frame) - radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:0.0f endAngle:-M_PI / 2 clockwise:NO]; // top-right corner + + // pointer up + if (pointingUp) { + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMaxX(anchorRect), CGRectGetMinY(frame))]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect) + anchorRect.size.width / 2, CGRectGetMinY(frame) - anchorRect.size.height)]; + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(anchorRect), CGRectGetMinY(frame))]; + } + + [outerStrokePath addLineToPoint:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame))]; // top + [outerStrokePath addArcWithCenter:CGPointMake(CGRectGetMinX(frame) + radius, CGRectGetMinY(frame) + radius) radius:radius startAngle:-M_PI / 2 endAngle:M_PI clockwise:NO]; // top-left corner + [outerStrokePath closePath]; + CGContextSaveGState(context); + CGContextSetShadowWithColor(context, baseShadowOffset, baseShadowBlurRadius, baseShadow.CGColor); + CGContextRestoreGState(context); + + [outerStrokeColor setStroke]; + outerStrokePath.lineWidth = outerStrokeStrokeWidth; + [outerStrokePath stroke]; + + //// Cleanup + CGGradientRelease(glossFill); + CGColorSpaceRelease(colorSpace); +} + +@end diff --git a/Pods/SQLite.swift/CocoaPods/appletvos/module.modulemap b/Pods/SQLite.swift/CocoaPods/appletvos/module.modulemap deleted file mode 100644 index 637d993..0000000 --- a/Pods/SQLite.swift/CocoaPods/appletvos/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/appletvsimulator/module.modulemap b/Pods/SQLite.swift/CocoaPods/appletvsimulator/module.modulemap deleted file mode 100644 index f8b9b67..0000000 --- a/Pods/SQLite.swift/CocoaPods/appletvsimulator/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/iphoneos-10.0/module.modulemap b/Pods/SQLite.swift/CocoaPods/iphoneos-10.0/module.modulemap deleted file mode 100644 index 67a6c20..0000000 --- a/Pods/SQLite.swift/CocoaPods/iphoneos-10.0/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/iphoneos/module.modulemap b/Pods/SQLite.swift/CocoaPods/iphoneos/module.modulemap deleted file mode 100644 index 043db6c..0000000 --- a/Pods/SQLite.swift/CocoaPods/iphoneos/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/iphonesimulator-10.0/module.modulemap b/Pods/SQLite.swift/CocoaPods/iphonesimulator-10.0/module.modulemap deleted file mode 100644 index c8b84ab..0000000 --- a/Pods/SQLite.swift/CocoaPods/iphonesimulator-10.0/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.0.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/iphonesimulator/module.modulemap b/Pods/SQLite.swift/CocoaPods/iphonesimulator/module.modulemap deleted file mode 100644 index a7b14cb..0000000 --- a/Pods/SQLite.swift/CocoaPods/iphonesimulator/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/macosx-10.11/module.modulemap b/Pods/SQLite.swift/CocoaPods/macosx-10.11/module.modulemap deleted file mode 100644 index 9e09129..0000000 --- a/Pods/SQLite.swift/CocoaPods/macosx-10.11/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/macosx-10.12/module.modulemap b/Pods/SQLite.swift/CocoaPods/macosx-10.12/module.modulemap deleted file mode 100644 index 8fc958e..0000000 --- a/Pods/SQLite.swift/CocoaPods/macosx-10.12/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/macosx/module.modulemap b/Pods/SQLite.swift/CocoaPods/macosx/module.modulemap deleted file mode 100644 index cc8370e..0000000 --- a/Pods/SQLite.swift/CocoaPods/macosx/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/watchos/module.modulemap b/Pods/SQLite.swift/CocoaPods/watchos/module.modulemap deleted file mode 100644 index 62a6c4e..0000000 --- a/Pods/SQLite.swift/CocoaPods/watchos/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/CocoaPods/watchsimulator/module.modulemap b/Pods/SQLite.swift/CocoaPods/watchsimulator/module.modulemap deleted file mode 100644 index 086fbab..0000000 --- a/Pods/SQLite.swift/CocoaPods/watchsimulator/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module CSQLite [system] { - header "/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator.sdk/usr/include/sqlite3.h" - export * -} diff --git a/Pods/SQLite.swift/README.md b/Pods/SQLite.swift/README.md index a7fe608..3900c0a 100644 --- a/Pods/SQLite.swift/README.md +++ b/Pods/SQLite.swift/README.md @@ -1,19 +1,12 @@ # SQLite.swift -[![Build Status][Badge]][Travis] [![CocoaPods Version](https://cocoapod-badges.herokuapp.com/v/SQLite.swift/badge.png)](http://cocoadocs.org/docsets/SQLite.swift) [![Swift](https://img.shields.io/badge/swift-3-orange.svg?style=flat)](https://developer.apple.com/swift/) [![Platform](https://cocoapod-badges.herokuapp.com/p/SQLite.swift/badge.png)](http://cocoadocs.org/docsets/SQLite.swift) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Join the chat at https://gitter.im/stephencelis/SQLite.swift](https://badges.gitter.im/stephencelis/SQLite.swift.svg)](https://gitter.im/stephencelis/SQLite.swift) +[![Build Status][TravisBadge]][TravisLink] [![CocoaPods Version][CocoaPodsVersionBadge]][CocoaPodsVersionLink] [![Swift4 compatible][Swift4Badge]][Swift4Link] [![Platform][PlatformBadge]][PlatformLink] [![Carthage compatible][CartagheBadge]][CarthageLink] [![Join the chat at https://gitter.im/stephencelis/SQLite.swift][GitterBadge]][GitterLink] A type-safe, [Swift][]-language layer over [SQLite3][]. [SQLite.swift][] provides compile-time confidence in SQL statement syntax _and_ intent. -[Badge]: https://img.shields.io/travis/stephencelis/SQLite.swift/master.svg?style=flat -[Travis]: https://travis-ci.org/stephencelis/SQLite.swift -[Swift]: https://developer.apple.com/swift/ -[SQLite3]: http://www.sqlite.org -[SQLite.swift]: https://github.com/stephencelis/SQLite.swift - - ## Features - A pure-Swift interface @@ -25,16 +18,20 @@ syntax _and_ intent. - [Full-text search][] support - [Well-documented][See Documentation] - Extensively tested - - SQLCipher support via CocoaPods - - Active support at [StackOverflow](http://stackoverflow.com/questions/tagged/sqlite.swift), and [Gitter Chat Room](https://gitter.im/stephencelis/SQLite.swift) (_experimental_) + - [SQLCipher][] support via CocoaPods + - Active support at + [StackOverflow](http://stackoverflow.com/questions/tagged/sqlite.swift), + and [Gitter Chat Room](https://gitter.im/stephencelis/SQLite.swift) + (_experimental_) +[SQLCipher]: https://www.zetetic.net/sqlcipher/ [Full-text search]: Documentation/Index.md#full-text-search [See Documentation]: Documentation/Index.md#sqliteswift-documentation ## Usage -``` swift +```swift import SQLite let db = try Connection("path/to/db.sqlite3") @@ -74,14 +71,14 @@ try db.run(alice.update(email <- email.replace("mac.com", with: "me.com"))) try db.run(alice.delete()) // DELETE FROM "users" WHERE ("id" = 1) -db.scalar(users.count) // 0 +try db.scalar(users.count) // 0 // SELECT count(*) FROM "users" ``` SQLite.swift also works as a lightweight, Swift-friendly wrapper over the C API. -``` swift +```swift let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)") for email in ["betty@icloud.com", "cathy@icloud.com"] { try stmt.run(email) @@ -97,7 +94,7 @@ for row in try db.prepare("SELECT id, email FROM users") { // id: Optional(3), email: Optional("cathy@icloud.com") } -db.scalar("SELECT count(*) FROM users") // 2 +try db.scalar("SELECT count(*) FROM users") // 2 ``` [Read the documentation][See Documentation] or explore more, @@ -105,13 +102,17 @@ interactively, from the Xcode project’s playground. ![SQLite.playground Screen Shot](Documentation/Resources/playground@2x.png) -For a more comprehensive example, see [this article](http://masteringswift.blogspot.com/2015/09/create-data-access-layer-with.html) and the [companion repository](https://github.com/hoffmanjon/SQLiteDataAccessLayer2/tree/master). +For a more comprehensive example, see +[this article][Create a Data Access Layer with SQLite.swift and Swift 2] +and the [companion repository][SQLiteDataAccessLayer2]. + + +[Create a Data Access Layer with SQLite.swift and Swift 2]: http://masteringswift.blogspot.com/2015/09/create-data-access-layer-with.html +[SQLiteDataAccessLayer2]: https://github.com/hoffmanjon/SQLiteDataAccessLayer2/tree/master ## Installation -> _Note:_ SQLite.swift requires Swift 3 (and [Xcode][] 8) or greater. If you absolutely -> need compatibility with Swift 2.3 you can use the [swift-2.3][] branch or older -> released versions. New development will happen exclusively on the master/Swift 3 branch. +> _Note:_ SQLite.swift requires Swift 4 (and [Xcode][] 9). ### Carthage @@ -122,11 +123,12 @@ install SQLite.swift with Carthage: 2. Update your Cartfile to include the following: - ``` - github "stephencelis/SQLite.swift" ~> 0.11.3 + ```ruby + github "stephencelis/SQLite.swift" ~> 0.11.4 ``` - 3. Run `carthage update` and [add the appropriate framework][Carthage Usage]. + 3. Run `carthage update` and + [add the appropriate framework][Carthage Usage]. [Carthage]: https://github.com/Carthage/Carthage @@ -139,51 +141,47 @@ install SQLite.swift with Carthage: [CocoaPods][] is a dependency manager for Cocoa projects. To install SQLite.swift with CocoaPods: - 1. Verify that your copy of Xcode is installed and active in the default location (`/Applications/Xcode.app`). + 1. Make sure CocoaPods is [installed][CocoaPods Installation]. (SQLite.swift + requires version 1.0.0 or greater.) ```sh - sudo xcode-select --switch /Applications/Xcode.app - ``` - - 2. Make sure CocoaPods is [installed][CocoaPods Installation]. (SQLite.swift requires version 1.0.0 or greater.) - - ``` sh # Using the default Ruby install will require you to use sudo when # installing and updating gems. [sudo] gem install cocoapods ``` - 3. Update your Podfile to include the following: + 2. Update your Podfile to include the following: - ``` ruby + ```ruby use_frameworks! target 'YourAppTargetName' do - pod 'SQLite.swift', '~> 0.11.3' + pod 'SQLite.swift', '~> 0.11.4' end ``` - 4. Run `pod install --repo-update`. + 3. Run `pod install --repo-update`. [CocoaPods]: https://cocoapods.org [CocoaPods Installation]: https://guides.cocoapods.org/using/getting-started.html#getting-started ### Swift Package Manager -The [Swift Package Manager][] is a tool for managing the distribution of Swift code. +The [Swift Package Manager][] is a tool for managing the distribution of +Swift code. 1. Add the following to your `Package.swift` file: ```swift dependencies: [ - .Package(url: "https://github.com/stephencelis/SQLite.swift.git", majorVersion: 0, minor: 11) + .package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.11.4") ] ``` 2. Build your project: - ``` sh - $ swift build -Xlinker -lsqlite3 + ```sh + $ swift build ``` [Swift Package Manager]: https://swift.org/package-manager @@ -204,9 +202,11 @@ To install SQLite.swift as an Xcode sub-project: 4. **Add**. -Some additional steps are required to install the application on an actual device: +Some additional steps are required to install the application on an actual +device: - 5. In the **General** tab, click the **+** button under **Embedded Binaries**. + 5. In the **General** tab, click the **+** button under **Embedded + Binaries**. 6. Select the appropriate **SQLite.framework** for your platform. @@ -251,7 +251,8 @@ file](./LICENSE.txt) for more information. These projects enhance or use SQLite.swift: - - [SQLiteMigrationManager.swift](https://github.com/garriguv/SQLiteMigrationManager.swift) (inspired by [FMDBMigrationManager](https://github.com/layerhq/FMDBMigrationManager)) + - [SQLiteMigrationManager.swift][] (inspired by + [FMDBMigrationManager][]) ## Alternatives @@ -265,5 +266,28 @@ Looking for something else? Try another Swift wrapper (or [FMDB][]): - [SwiftData](https://github.com/ryanfowler/SwiftData) - [SwiftSQLite](https://github.com/chrismsimpson/SwiftSQLite) +[Swift]: https://swift.org/ +[SQLite3]: http://www.sqlite.org +[SQLite.swift]: https://github.com/stephencelis/SQLite.swift + +[TravisBadge]: https://img.shields.io/travis/stephencelis/SQLite.swift/master.svg?style=flat +[TravisLink]: https://travis-ci.org/stephencelis/SQLite.swift + +[CocoaPodsVersionBadge]: https://cocoapod-badges.herokuapp.com/v/SQLite.swift/badge.png +[CocoaPodsVersionLink]: http://cocoadocs.org/docsets/SQLite.swift + +[PlatformBadge]: https://cocoapod-badges.herokuapp.com/p/SQLite.swift/badge.png +[PlatformLink]: http://cocoadocs.org/docsets/SQLite.swift + +[CartagheBadge]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat +[CarthageLink]: https://github.com/Carthage/Carthage + +[GitterBadge]: https://badges.gitter.im/stephencelis/SQLite.swift.svg +[GitterLink]: https://gitter.im/stephencelis/SQLite.swift + +[Swift4Badge]: https://img.shields.io/badge/swift-4-orange.svg?style=flat +[Swift4Link]: https://developer.apple.com/swift/ + +[SQLiteMigrationManager.swift]: https://github.com/garriguv/SQLiteMigrationManager.swift [FMDB]: https://github.com/ccgus/fmdb -[swift-2.3]: https://github.com/stephencelis/SQLite.swift/tree/swift-2.3 +[FMDBMigrationManager]: https://github.com/layerhq/FMDBMigrationManager diff --git a/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift b/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift index 490a159..f751311 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Core/Connection.swift @@ -22,14 +22,16 @@ // THE SOFTWARE. // -import Foundation.NSUUID +import Foundation import Dispatch #if SQLITE_SWIFT_STANDALONE import sqlite3 #elseif SQLITE_SWIFT_SQLCIPHER import SQLCipher -#elseif SWIFT_PACKAGE || COCOAPODS +#elseif os(Linux) import CSQLite +#else +import SQLite3 #endif /// A connection to SQLite. @@ -38,12 +40,12 @@ public final class Connection { /// The location of a SQLite database. public enum Location { - /// An in-memory database (equivalent to `.URI(":memory:")`). + /// An in-memory database (equivalent to `.uri(":memory:")`). /// /// See: case inMemory - /// A temporary, file-backed database (equivalent to `.URI("")`). + /// A temporary, file-backed database (equivalent to `.uri("")`). /// /// See: case temporary @@ -93,7 +95,7 @@ public final class Connection { /// - location: The location of the database. Creates a new database if it /// doesn’t already exist (unless in read-only mode). /// - /// Default: `.InMemory`. + /// Default: `.inMemory`. /// /// - readonly: Whether or not to open the database in a read-only state. /// @@ -321,14 +323,14 @@ public final class Connection { /// /// - mode: The mode in which a transaction acquires a lock. /// - /// Default: `.Deferred` + /// Default: `.deferred` /// /// - block: A closure to run SQL statements within the transaction. /// The transaction will be committed when the block returns. The block /// must throw to roll the transaction back. /// /// - Throws: `Result.Error`, and rethrows. - public func transaction(_ mode: TransactionMode = .deferred, block: @escaping () throws -> Void) throws { + public func transaction(_ mode: TransactionMode = .deferred, block: () throws -> Void) throws { try transaction("BEGIN \(mode.rawValue) TRANSACTION", block, "COMMIT TRANSACTION", or: "ROLLBACK TRANSACTION") } @@ -348,23 +350,23 @@ public final class Connection { /// The block must throw to roll the savepoint back. /// /// - Throws: `SQLite.Result.Error`, and rethrows. - public func savepoint(_ name: String = UUID().uuidString, block: @escaping () throws -> Void) throws { + public func savepoint(_ name: String = UUID().uuidString, block: () throws -> Void) throws { let name = name.quote("'") let savepoint = "SAVEPOINT \(name)" try transaction(savepoint, block, "RELEASE \(savepoint)", or: "ROLLBACK TO \(savepoint)") } - fileprivate func transaction(_ begin: String, _ block: @escaping () throws -> Void, _ commit: String, or rollback: String) throws { + fileprivate func transaction(_ begin: String, _ block: () throws -> Void, _ commit: String, or rollback: String) throws { return try sync { try self.run(begin) do { try block() + try self.run(commit) } catch { try self.run(rollback) throw error } - try self.run(commit) } } @@ -413,7 +415,7 @@ public final class Connection { /// /// db.trace { SQL in print(SQL) } public func trace(_ callback: ((String) -> Void)?) { - #if SQLITE_SWIFT_SQLCIPHER + #if SQLITE_SWIFT_SQLCIPHER || os(Linux) trace_v1(callback) #else if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) { @@ -583,9 +585,11 @@ public final class Connection { } } var flags = SQLITE_UTF8 + #if !os(Linux) if deterministic { flags |= SQLITE_DETERMINISTIC } + #endif sqlite3_create_function_v2(handle, function, Int32(argc), flags, unsafeBitCast(box, to: UnsafeMutableRawPointer.self), { context, argc, value in let function = unsafeBitCast(sqlite3_user_data(context), to: Function.self) function(context, argc, value) @@ -626,29 +630,12 @@ public final class Connection { // MARK: - Error Handling - func sync(_ block: @escaping () throws -> T) rethrows -> T { - var success: T? - var failure: Error? - - let box: () -> Void = { - do { - success = try block() - } catch { - failure = error - } - } - + func sync(_ block: () throws -> T) rethrows -> T { if DispatchQueue.getSpecific(key: Connection.queueKey) == queueContext { - box() + return try block() } else { - queue.sync(execute: box) // FIXME: rdar://problem/21389236 + return try queue.sync(execute: block) } - - if let failure = failure { - try { () -> Void in throw failure }() - } - - return success! } @discardableResult func check(_ resultCode: Int32, statement: Statement? = nil) throws -> Int32 { @@ -694,6 +681,13 @@ public enum Result : Error { fileprivate static let successCodes: Set = [SQLITE_OK, SQLITE_ROW, SQLITE_DONE] + /// Represents a SQLite specific [error code](https://sqlite.org/rescode.html) + /// + /// - message: English-language text that describes the error + /// + /// - code: SQLite [error code](https://sqlite.org/rescode.html#primary_result_code_list) + /// + /// - statement: the statement which produced the error case error(message: String, code: Int32, statement: Statement?) init?(errorCode: Int32, connection: Connection, statement: Statement? = nil) { @@ -719,7 +713,7 @@ extension Result : CustomStringConvertible { } } -#if !SQLITE_SWIFT_SQLCIPHER +#if !SQLITE_SWIFT_SQLCIPHER && !os(Linux) @available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) extension Connection { fileprivate func trace_v2(_ callback: ((String) -> Void)?) { diff --git a/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift b/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift new file mode 100644 index 0000000..3cd7ae9 --- /dev/null +++ b/Pods/SQLite.swift/Sources/SQLite/Core/Errors.swift @@ -0,0 +1,21 @@ +import Foundation + +public enum QueryError: Error, CustomStringConvertible { + case noSuchTable(name: String) + case noSuchColumn(name: String, columns: [String]) + case ambiguousColumn(name: String, similar: [String]) + case unexpectedNullValue(name: String) + + public var description: String { + switch self { + case .noSuchTable(let name): + return "No such table: \(name)" + case .noSuchColumn(let name, let columns): + return "No such column `\(name)` in columns \(columns)" + case .ambiguousColumn(let name, let similar): + return "Ambiguous column `\(name)` (please disambiguate: \(similar))" + case .unexpectedNullValue(let name): + return "Unexpected null value for column `\(name)`" + } + } +} diff --git a/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift b/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift index a9232bb..dc91d3d 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Core/Statement.swift @@ -26,8 +26,10 @@ import sqlite3 #elseif SQLITE_SWIFT_SQLCIPHER import SQLCipher -#elseif SWIFT_PACKAGE || COCOAPODS +#elseif os(Linux) import CSQLite +#else +import SQLite3 #endif /// A single SQL statement. @@ -200,12 +202,30 @@ extension Statement : Sequence { } -extension Statement : IteratorProtocol { +public protocol FailableIterator : IteratorProtocol { + func failableNext() throws -> Self.Element? +} - public func next() -> [Binding?]? { - return try! step() ? Array(row) : nil +extension FailableIterator { + public func next() -> Element? { + return try! failableNext() } +} +extension Array { + public init(_ failableIterator: I) throws where I.Element == Element { + self.init() + while let row = try failableIterator.failableNext() { + append(row) + } + } +} + +extension Statement : FailableIterator { + public typealias Element = [Binding?] + public func failableNext() throws -> [Binding?]? { + return try step() ? Array(row) : nil + } } extension Statement : CustomStringConvertible { diff --git a/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift b/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift index 3f28d33..5ef84dd 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Extensions/FTS4.swift @@ -151,13 +151,18 @@ extension Connection { guard let (token, range) = next(string) else { return nil } - let view = string.utf8 - offset.pointee += Int32(string.substring(to: range.lowerBound).utf8.count) - length.pointee = Int32(view.distance(from: range.lowerBound.samePosition(in: view), to: range.upperBound.samePosition(in: view))) - return token + let view:String.UTF8View = string.utf8 + + if let from = range.lowerBound.samePosition(in: view), + let to = range.upperBound.samePosition(in: view) { + offset.pointee += Int32(string[string.startIndex..… - -extension QueryType { - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { - return namespace(column) - } - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { - return namespace(column) - } - -} - -extension Row { - - public subscript(column: Expression) -> Data { - return get(column) - } - public subscript(column: Expression) -> Data? { - return get(column) - } - - public subscript(column: Expression) -> Date { - return get(column) - } - public subscript(column: Expression) -> Date? { - return get(column) - } - -} diff --git a/Pods/SQLite.swift/Sources/SQLite/Helpers.swift b/Pods/SQLite.swift/Sources/SQLite/Helpers.swift index 50b21d0..64e5eca 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Helpers.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Helpers.swift @@ -26,8 +26,10 @@ import sqlite3 #elseif SQLITE_SWIFT_SQLCIPHER import SQLCipher -#elseif SWIFT_PACKAGE || COCOAPODS +#elseif os(Linux) import CSQLite +#else +import SQLite3 #endif public typealias Star = (Expression?, Expression?) -> Expression diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift new file mode 100644 index 0000000..dd6a4ec --- /dev/null +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/Coding.swift @@ -0,0 +1,340 @@ +// +// SQLite.swift +// https://github.com/stephencelis/SQLite.swift +// Copyright © 2014-2015 Stephen Celis. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +extension QueryType { + /// Creates an `INSERT` statement by encoding the given object + /// This method converts any custom nested types to JSON data and does not handle any sort + /// of object relationships. If you want to support relationships between objects you will + /// have to provide your own Encodable implementations that encode the correct ids. + /// + /// - Parameters: + /// + /// - encodable: An encodable object to insert + /// + /// - userInfo: User info to be passed to encoder + /// + /// - otherSetters: Any other setters to include in the insert + /// + /// - Returns: An `INSERT` statement fort the encodable object + public func insert(_ encodable: Encodable, userInfo: [CodingUserInfoKey:Any] = [:], otherSetters: [Setter] = []) throws -> Insert { + let encoder = SQLiteEncoder(userInfo: userInfo) + try encodable.encode(to: encoder) + return self.insert(encoder.setters + otherSetters) + } + + /// Creates an `UPDATE` statement by encoding the given object + /// This method converts any custom nested types to JSON data and does not handle any sort + /// of object relationships. If you want to support relationships between objects you will + /// have to provide your own Encodable implementations that encode the correct ids. + /// + /// - Parameters: + /// + /// - encodable: An encodable object to insert + /// + /// - userInfo: User info to be passed to encoder + /// + /// - otherSetters: Any other setters to include in the insert + /// + /// - Returns: An `UPDATE` statement fort the encodable object + public func update(_ encodable: Encodable, userInfo: [CodingUserInfoKey:Any] = [:], otherSetters: [Setter] = []) throws -> Update { + let encoder = SQLiteEncoder(userInfo: userInfo) + try encodable.encode(to: encoder) + return self.update(encoder.setters + otherSetters) + } +} + +extension Row { + /// Decode an object from this row + /// This method expects any custom nested types to be in the form of JSON data and does not handle + /// any sort of object relationships. If you want to support relationships between objects you will + /// have to provide your own Decodable implementations that decodes the correct columns. + /// + /// - Parameter: userInfo + /// + /// - Returns: a decoded object from this row + public func decode(userInfo: [CodingUserInfoKey: Any] = [:]) throws -> V { + return try V(from: self.decoder(userInfo: userInfo)) + } + + public func decoder(userInfo: [CodingUserInfoKey: Any] = [:]) -> Decoder { + return SQLiteDecoder(row: self, userInfo: userInfo) + } +} + +/// Generates a list of settings for an Encodable object +fileprivate class SQLiteEncoder: Encoder { + class SQLiteKeyedEncodingContainer: KeyedEncodingContainerProtocol { + typealias Key = MyKey + + let encoder: SQLiteEncoder + let codingPath: [CodingKey] = [] + + init(encoder: SQLiteEncoder) { + self.encoder = encoder + } + + func superEncoder() -> Swift.Encoder { + fatalError("SQLiteEncoding does not support super encoders") + } + + func superEncoder(forKey key: Key) -> Swift.Encoder { + fatalError("SQLiteEncoding does not support super encoders") + } + + func encodeNil(forKey key: SQLiteEncoder.SQLiteKeyedEncodingContainer.Key) throws { + self.encoder.setters.append(Expression(key.stringValue) <- nil) + } + + func encode(_ value: Int, forKey key: SQLiteEncoder.SQLiteKeyedEncodingContainer.Key) throws { + self.encoder.setters.append(Expression(key.stringValue) <- value) + } + + func encode(_ value: Bool, forKey key: Key) throws { + self.encoder.setters.append(Expression(key.stringValue) <- value) + } + + func encode(_ value: Float, forKey key: Key) throws { + self.encoder.setters.append(Expression(key.stringValue) <- Double(value)) + } + + func encode(_ value: Double, forKey key: Key) throws { + self.encoder.setters.append(Expression(key.stringValue) <- value) + } + + func encode(_ value: String, forKey key: Key) throws { + self.encoder.setters.append(Expression(key.stringValue) <- value) + } + + func encode(_ value: T, forKey key: Key) throws where T : Swift.Encodable { + if let data = value as? Data { + self.encoder.setters.append(Expression(key.stringValue) <- data) + } + else { + let encoded = try JSONEncoder().encode(value) + let string = String(data: encoded, encoding: .utf8) + self.encoder.setters.append(Expression(key.stringValue) <- string) + } + } + + func encode(_ value: Int8, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int8 is not supported")) + } + + func encode(_ value: Int16, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int16 is not supported")) + } + + func encode(_ value: Int32, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int32 is not supported")) + } + + func encode(_ value: Int64, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an Int64 is not supported")) + } + + func encode(_ value: UInt, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt is not supported")) + } + + func encode(_ value: UInt8, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt8 is not supported")) + } + + func encode(_ value: UInt16, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt16 is not supported")) + } + + func encode(_ value: UInt32, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt32 is not supported")) + } + + func encode(_ value: UInt64, forKey key: Key) throws { + throw EncodingError.invalidValue(value, EncodingError.Context(codingPath: self.codingPath, debugDescription: "encoding an UInt64 is not supported")) + } + + func nestedContainer(keyedBy keyType: NestedKey.Type, forKey key: Key) -> KeyedEncodingContainer where NestedKey : CodingKey { + fatalError("encoding a nested container is not supported") + } + + func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { + fatalError("encoding nested values is not supported") + } + } + + fileprivate var setters: [SQLite.Setter] = [] + let codingPath: [CodingKey] = [] + let userInfo: [CodingUserInfoKey: Any] + + init(userInfo: [CodingUserInfoKey: Any]) { + self.userInfo = userInfo + } + + func singleValueContainer() -> SingleValueEncodingContainer { + fatalError("not supported") + } + + func unkeyedContainer() -> UnkeyedEncodingContainer { + fatalError("not supported") + } + + func container(keyedBy type: Key.Type) -> KeyedEncodingContainer where Key : CodingKey { + return KeyedEncodingContainer(SQLiteKeyedEncodingContainer(encoder: self)) + } +} + +fileprivate class SQLiteDecoder : Decoder { + class SQLiteKeyedDecodingContainer : KeyedDecodingContainerProtocol { + typealias Key = MyKey + + let codingPath: [CodingKey] = [] + let row: Row + + init(row: Row) { + self.row = row + } + + var allKeys: [Key] { + return self.row.columnNames.keys.flatMap({Key(stringValue: $0)}) + } + + func contains(_ key: Key) -> Bool { + return self.row.hasValue(for: key.stringValue) + } + + func decodeNil(forKey key: Key) throws -> Bool { + return !self.contains(key) + } + + func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { + return try self.row.get(Expression(key.stringValue)) + } + + func decode(_ type: Int.Type, forKey key: Key) throws -> Int { + return try self.row.get(Expression(key.stringValue)) + } + + func decode(_ type: Int8.Type, forKey key: Key) throws -> Int8 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int8 is not supported")) + } + + func decode(_ type: Int16.Type, forKey key: Key) throws -> Int16 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int16 is not supported")) + } + + func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an Int32 is not supported")) + } + + func decode(_ type: Int64.Type, forKey key: Key) throws -> Int64 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt64 is not supported")) + } + + func decode(_ type: UInt.Type, forKey key: Key) throws -> UInt { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt is not supported")) + + } + + func decode(_ type: UInt8.Type, forKey key: Key) throws -> UInt8 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt8 is not supported")) + } + + func decode(_ type: UInt16.Type, forKey key: Key) throws -> UInt16 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt16 is not supported")) + } + + func decode(_ type: UInt32.Type, forKey key: Key) throws -> UInt32 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt32 is not supported")) + } + + func decode(_ type: UInt64.Type, forKey key: Key) throws -> UInt64 { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an UInt64 is not supported")) + } + + func decode(_ type: Float.Type, forKey key: Key) throws -> Float { + return Float(try self.row.get(Expression(key.stringValue))) + } + + func decode(_ type: Double.Type, forKey key: Key) throws -> Double { + return try self.row.get(Expression(key.stringValue)) + } + + func decode(_ type: String.Type, forKey key: Key) throws -> String { + return try self.row.get(Expression(key.stringValue)) + } + + func decode(_ type: T.Type, forKey key: Key) throws -> T where T: Swift.Decodable { + if type == Data.self { + let data = try self.row.get(Expression(key.stringValue)) + return data as! T + } + guard let JSONString = try self.row.get(Expression(key.stringValue)) else { + throw DecodingError.typeMismatch(type, DecodingError.Context(codingPath: self.codingPath, debugDescription: "an unsupported type was found")) + } + guard let data = JSONString.data(using: .utf8) else { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "invalid utf8 data found")) + } + return try JSONDecoder().decode(type, from: data) + } + + func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer where NestedKey : CodingKey { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding nested containers is not supported")) + } + + func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding unkeyed containers is not supported")) + } + + func superDecoder() throws -> Swift.Decoder { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding super encoders containers is not supported")) + } + + func superDecoder(forKey key: Key) throws -> Swift.Decoder { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding super decoders is not supported")) + } + } + + let row: Row + let codingPath: [CodingKey] = [] + let userInfo: [CodingUserInfoKey: Any] + + init(row: Row, userInfo: [CodingUserInfoKey: Any]) { + self.row = row + self.userInfo = userInfo + } + + func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer where Key : CodingKey { + return KeyedDecodingContainer(SQLiteKeyedDecodingContainer(row: self.row)) + } + + func unkeyedContainer() throws -> UnkeyedDecodingContainer { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding an unkeyed container is not supported")) + } + + func singleValueContainer() throws -> SingleValueDecodingContainer { + throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: self.codingPath, debugDescription: "decoding a single value container is not supported")) + } +} + diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift index 9d17a32..1afe4e8 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/CoreFunctions.swift @@ -22,7 +22,7 @@ // THE SOFTWARE. // -import Foundation.NSData +import Foundation extension ExpressionType where UnderlyingType : Number { @@ -223,6 +223,31 @@ extension ExpressionType where UnderlyingType == String { return Expression("(\(template) LIKE ? ESCAPE ?)", bindings + [pattern, String(character)]) } + /// Builds a copy of the expression appended with a `LIKE` query against the + /// given pattern. + /// + /// let email = Expression("email") + /// let pattern = Expression("pattern") + /// email.like(pattern) + /// // "email" LIKE "pattern" + /// + /// - Parameters: + /// + /// - pattern: A pattern to match. + /// + /// - escape: An (optional) character designated for escaping + /// pattern-matching characters (*i.e.*, the `%` and `_` characters). + /// + /// - Returns: A copy of the expression appended with a `LIKE` query against + /// the given pattern. + public func like(_ pattern: Expression, escape character: Character? = nil) -> Expression { + guard let character = character else { + return "LIKE".infix(self, pattern) + } + let like: Expression = "LIKE".infix(self, pattern, wrap: false) + return Expression("(\(like.template) ESCAPE ?)", like.bindings + [String(character)]) + } + /// Builds a copy of the expression appended with a `GLOB` query against the /// given pattern. /// @@ -422,6 +447,31 @@ extension ExpressionType where UnderlyingType == String? { } return Expression("(\(template) LIKE ? ESCAPE ?)", bindings + [pattern, String(character)]) } + + /// Builds a copy of the expression appended with a `LIKE` query against the + /// given pattern. + /// + /// let email = Expression("email") + /// let pattern = Expression("pattern") + /// email.like(pattern) + /// // "email" LIKE "pattern" + /// + /// - Parameters: + /// + /// - pattern: A pattern to match. + /// + /// - escape: An (optional) character designated for escaping + /// pattern-matching characters (*i.e.*, the `%` and `_` characters). + /// + /// - Returns: A copy of the expression appended with a `LIKE` query against + /// the given pattern. + public func like(_ pattern: Expression, escape character: Character? = nil) -> Expression { + guard let character = character else { + return "LIKE".infix(self, pattern) + } + let like: Expression = "LIKE".infix(self, pattern, wrap: false) + return Expression("(\(like.template) ESCAPE ?)", like.bindings + [String(character)]) + } /// Builds a copy of the expression appended with a `GLOB` query against the /// given pattern. @@ -623,6 +673,35 @@ extension Collection where Iterator.Element : Value, IndexDistance == Int { } +extension String { + + /// Builds a copy of the expression appended with a `LIKE` query against the + /// given pattern. + /// + /// let email = "some@thing.com" + /// let pattern = Expression("pattern") + /// email.like(pattern) + /// // 'some@thing.com' LIKE "pattern" + /// + /// - Parameters: + /// + /// - pattern: A pattern to match. + /// + /// - escape: An (optional) character designated for escaping + /// pattern-matching characters (*i.e.*, the `%` and `_` characters). + /// + /// - Returns: A copy of the expression appended with a `LIKE` query against + /// the given pattern. + public func like(_ pattern: Expression, escape character: Character? = nil) -> Expression { + guard let character = character else { + return "LIKE".infix(self, pattern) + } + let like: Expression = "LIKE".infix(self, pattern, wrap: false) + return Expression("(\(like.template) ESCAPE ?)", like.bindings + [String(character)]) + } + +} + /// Builds a copy of the given expressions wrapped with the `ifnull` function. /// /// let name = Expression("name") diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/DateAndTimeFunctions.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/DateAndTimeFunctions.swift new file mode 100644 index 0000000..0b9a497 --- /dev/null +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/DateAndTimeFunctions.swift @@ -0,0 +1,106 @@ +// +// SQLite.swift +// https://github.com/stephencelis/SQLite.swift +// Copyright © 2014-2015 Stephen Celis. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// All five date and time functions take a time string as an argument. +/// The time string is followed by zero or more modifiers. +/// The strftime() function also takes a format string as its first argument. +/// +/// https://www.sqlite.org/lang_datefunc.html +public class DateFunctions { + /// The date() function returns the date in this format: YYYY-MM-DD. + public static func date(_ timestring: String, _ modifiers: String...) -> Expression { + return timefunction("date", timestring: timestring, modifiers: modifiers) + } + + /// The time() function returns the time as HH:MM:SS. + public static func time(_ timestring: String, _ modifiers: String...) -> Expression { + return timefunction("time", timestring: timestring, modifiers: modifiers) + } + + /// The datetime() function returns "YYYY-MM-DD HH:MM:SS". + public static func datetime(_ timestring: String, _ modifiers: String...) -> Expression { + return timefunction("datetime", timestring: timestring, modifiers: modifiers) + } + + /// The julianday() function returns the Julian day - + /// the number of days since noon in Greenwich on November 24, 4714 B.C. + public static func julianday(_ timestring: String, _ modifiers: String...) -> Expression { + return timefunction("julianday", timestring: timestring, modifiers: modifiers) + } + + /// The strftime() routine returns the date formatted according to the format string specified as the first argument. + public static func strftime(_ format: String, _ timestring: String, _ modifiers: String...) -> Expression { + if !modifiers.isEmpty { + let templates = [String](repeating: "?", count: modifiers.count).joined(separator: ", ") + return Expression("strftime(?, ?, \(templates))", [format, timestring] + modifiers) + } + return Expression("strftime(?, ?)", [format, timestring]) + } + + private static func timefunction(_ name: String, timestring: String, modifiers: [String]) -> Expression { + if !modifiers.isEmpty { + let templates = [String](repeating: "?", count: modifiers.count).joined(separator: ", ") + return Expression("\(name)(?, \(templates))", [timestring] + modifiers) + } + return Expression("\(name)(?)", [timestring]) + } +} + +extension Date { + public var date: Expression { + return DateFunctions.date(dateFormatter.string(from: self)) + } + + public var time: Expression { + return DateFunctions.time(dateFormatter.string(from: self)) + } + + public var datetime: Expression { + return DateFunctions.datetime(dateFormatter.string(from: self)) + } + + public var julianday: Expression { + return DateFunctions.julianday(dateFormatter.string(from: self)) + } +} + +extension Expression where UnderlyingType == Date { + public var date: Expression { + return Expression("date(\(template))", bindings) + } + + public var time: Expression { + return Expression("time(\(template))", bindings) + } + + public var datetime: Expression { + return Expression("datetime(\(template))", bindings) + } + + public var julianday: Expression { + return Expression("julianday(\(template))", bindings) + } +} diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift index 3198901..33329b7 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift @@ -73,7 +73,7 @@ public protocol Expressible { extension Expressible { // naïve compiler for statements that can’t be bound, e.g., CREATE TABLE - // FIXME: use @testable and make internal + // FIXME: make internal (0.12.0) public func asSQL() -> String { let expressed = expression var idx = 0 diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/Operators.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/Operators.swift index fdd293b..d97e52b 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Typed/Operators.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/Operators.swift @@ -474,11 +474,44 @@ public func <=(lhs: V, rhs: Expression) -> Expression wher return infix(lhs, rhs) } -public func ~=(lhs: ClosedRange, rhs: Expression) -> Expression where V.Datatype : Binding & Comparable { - return Expression("\(rhs.template) BETWEEN ? AND ?", rhs.bindings + [lhs.lowerBound as? Binding, lhs.upperBound as? Binding]) +public func ~=(lhs: ClosedRange, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) BETWEEN ? AND ?", rhs.bindings + [lhs.lowerBound.datatypeValue, lhs.upperBound.datatypeValue]) } -public func ~=(lhs: ClosedRange, rhs: Expression) -> Expression where V.Datatype : Binding & Comparable { - return Expression("\(rhs.template) BETWEEN ? AND ?", rhs.bindings + [lhs.lowerBound as? Binding, lhs.upperBound as? Binding]) + +public func ~=(lhs: ClosedRange, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) BETWEEN ? AND ?", rhs.bindings + [lhs.lowerBound.datatypeValue, lhs.upperBound.datatypeValue]) +} + +public func ~=(lhs: Range, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) >= ? AND \(rhs.template) < ?", rhs.bindings + [lhs.lowerBound.datatypeValue] + rhs.bindings + [lhs.upperBound.datatypeValue]) +} + +public func ~=(lhs: Range, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) >= ? AND \(rhs.template) < ?", rhs.bindings + [lhs.lowerBound.datatypeValue] + rhs.bindings + [lhs.upperBound.datatypeValue]) +} + +public func ~=(lhs: PartialRangeThrough, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) <= ?", rhs.bindings + [lhs.upperBound.datatypeValue]) +} + +public func ~=(lhs: PartialRangeThrough, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) <= ?", rhs.bindings + [lhs.upperBound.datatypeValue]) +} + +public func ~=(lhs: PartialRangeUpTo, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) < ?", rhs.bindings + [lhs.upperBound.datatypeValue]) +} + +public func ~=(lhs: PartialRangeUpTo, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) < ?", rhs.bindings + [lhs.upperBound.datatypeValue]) +} + +public func ~=(lhs: PartialRangeFrom, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) >= ?", rhs.bindings + [lhs.lowerBound.datatypeValue]) +} + +public func ~=(lhs: PartialRangeFrom, rhs: Expression) -> Expression where V.Datatype : Comparable & Value { + return Expression("\(rhs.template) >= ?", rhs.bindings + [lhs.lowerBound.datatypeValue]) } // MARK: - diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/Query.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/Query.swift index c9d2ea9..17ec715 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Typed/Query.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/Query.swift @@ -22,6 +22,8 @@ // THE SOFTWARE. // +import Foundation + public protocol QueryType : Expressible { var clauses: QueryClauses { get set } @@ -180,6 +182,27 @@ extension QueryType { return query } + // MARK: UNION + + /// Adds a `UNION` clause to the query. + /// + /// let users = Table("users") + /// let email = Expression("email") + /// + /// users.filter(email == "alice@example.com").union(users.filter(email == "sally@example.com")) + /// // SELECT * FROM "users" WHERE email = 'alice@example.com' UNION SELECT * FROM "users" WHERE email = 'sally@example.com' + /// + /// - Parameters: + /// + /// - table: A query representing the other table. + /// + /// - Returns: A query with the given `UNION` clause applied. + public func union(_ table: QueryType) -> Self { + var query = self + query.clauses.union.append(table) + return query + } + // MARK: JOIN /// Adds a `JOIN` clause to the query. @@ -494,8 +517,9 @@ extension QueryType { return nil } - return " ".join(clauses.join.map { type, query, condition in - " ".join([ + return " ".join(clauses.join.map { arg in + let (type, query, condition) = arg + return " ".join([ Expression(literal: "\(type.rawValue) JOIN"), query.tableName(alias: true), Expression(literal: "ON"), @@ -565,6 +589,19 @@ extension QueryType { Expression(literal: "OFFSET \(offset)") ]) } + + fileprivate var unionClause: Expressible? { + guard !clauses.union.isEmpty else { + return nil + } + + return " ".join(clauses.union.map { query in + " ".join([ + Expression(literal: "UNION"), + query + ]) + }) + } // MARK: - @@ -648,7 +685,9 @@ extension QueryType { tableName(), Expression(literal: "SET"), ", ".join(values.map { " = ".join([$0.column, $0.value]) }), - whereClause + whereClause, + orderClause, + limitOffsetClause ] return Update(" ".join(clauses.flatMap { $0 }).expression) @@ -660,7 +699,9 @@ extension QueryType { let clauses: [Expressible?] = [ Expression(literal: "DELETE FROM"), tableName(), - whereClause + whereClause, + orderClause, + limitOffsetClause ] return Delete(" ".join(clauses.flatMap { $0 }).expression) @@ -687,47 +728,11 @@ extension QueryType { return Expression(".".join([tableName(), column]).expression) } - // FIXME: rdar://problem/18673897 // subscript… - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { + public subscript(column: Expression) -> Expression { return namespace(column) } - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { - return namespace(column) - } - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { - return namespace(column) - } - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { - return namespace(column) - } - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { - return namespace(column) - } - - public subscript(column: Expression) -> Expression { - return namespace(column) - } - public subscript(column: Expression) -> Expression { + public subscript(column: Expression) -> Expression { return namespace(column) } @@ -779,6 +784,7 @@ extension QueryType { joinClause, whereClause, groupByClause, + unionClause, orderClause, limitOffsetClause ] @@ -890,59 +896,88 @@ public struct Delete : ExpressionType { } + +public struct RowIterator: FailableIterator { + public typealias Element = Row + let statement: Statement + let columnNames: [String: Int] + + public func failableNext() throws -> Row? { + return try statement.failableNext().flatMap { Row(columnNames, $0) } + } + + public func map(_ transform: (Element) throws -> T) throws -> [T] { + var elements = [T]() + while let row = try failableNext() { + elements.append(try transform(row)) + } + return elements + } +} + extension Connection { public func prepare(_ query: QueryType) throws -> AnySequence { let expression = query.expression let statement = try prepare(expression.template, expression.bindings) - let columnNames: [String: Int] = try { - var (columnNames, idx) = ([String: Int](), 0) - column: for each in query.clauses.select.columns { - var names = each.expression.template.characters.split { $0 == "." }.map(String.init) - let column = names.removeLast() - let namespace = names.joined(separator: ".") - - func expandGlob(_ namespace: Bool) -> ((QueryType) throws -> Void) { - return { (query: QueryType) throws -> (Void) in - var q = type(of: query).init(query.clauses.from.name, database: query.clauses.from.database) - q.clauses.select = query.clauses.select - let e = q.expression - var names = try self.prepare(e.template, e.bindings).columnNames.map { $0.quote() } - if namespace { names = names.map { "\(query.tableName().expression.template).\($0)" } } - for name in names { columnNames[name] = idx; idx += 1 } - } - } - - if column == "*" { - var select = query - select.clauses.select = (false, [Expression(literal: "*") as Expressible]) - let queries = [select] + query.clauses.join.map { $0.query } - if !namespace.isEmpty { - for q in queries { - if q.tableName().expression.template == namespace { - try expandGlob(true)(q) - continue column - } - } - fatalError("no such table: \(namespace)") - } - for q in queries { - try expandGlob(query.clauses.join.count > 0)(q) - } - continue - } - - columnNames[each.expression.template] = idx - idx += 1 - } - return columnNames - }() + let columnNames = try columnNamesForQuery(query) return AnySequence { AnyIterator { statement.next().map { Row(columnNames, $0) } } } } + + + public func prepareRowIterator(_ query: QueryType) throws -> RowIterator { + let expression = query.expression + let statement = try prepare(expression.template, expression.bindings) + return RowIterator(statement: statement, columnNames: try columnNamesForQuery(query)) + } + + private func columnNamesForQuery(_ query: QueryType) throws -> [String: Int] { + var (columnNames, idx) = ([String: Int](), 0) + column: for each in query.clauses.select.columns { + var names = each.expression.template.characters.split { $0 == "." }.map(String.init) + let column = names.removeLast() + let namespace = names.joined(separator: ".") + + func expandGlob(_ namespace: Bool) -> ((QueryType) throws -> Void) { + return { (query: QueryType) throws -> (Void) in + var q = type(of: query).init(query.clauses.from.name, database: query.clauses.from.database) + q.clauses.select = query.clauses.select + let e = q.expression + var names = try self.prepare(e.template, e.bindings).columnNames.map { $0.quote() } + if namespace { names = names.map { "\(query.tableName().expression.template).\($0)" } } + for name in names { columnNames[name] = idx; idx += 1 } + } + } + + if column == "*" { + var select = query + select.clauses.select = (false, [Expression(literal: "*") as Expressible]) + let queries = [select] + query.clauses.join.map { $0.query } + if !namespace.isEmpty { + for q in queries { + if q.tableName().expression.template == namespace { + try expandGlob(true)(q) + continue column + } + throw QueryError.noSuchTable(name: namespace) + } + throw QueryError.noSuchTable(name: namespace) + } + for q in queries { + try expandGlob(query.clauses.join.count > 0)(q) + } + continue + } + + columnNames[each.expression.template] = idx + idx += 1 + } + return columnNames + } public func scalar(_ query: ScalarQuery) throws -> V { let expression = query.expression @@ -967,7 +1002,7 @@ extension Connection { } public func pluck(_ query: QueryType) throws -> Row? { - return try prepare(query.limit(1, query.clauses.limit?.offset)).makeIterator().next() + return try prepareRowIterator(query.limit(1, query.clauses.limit?.offset)).failableNext() } /// Runs an `Insert` query. @@ -1023,27 +1058,39 @@ extension Connection { public struct Row { - fileprivate let columnNames: [String: Int] + let columnNames: [String: Int] fileprivate let values: [Binding?] - fileprivate init(_ columnNames: [String: Int], _ values: [Binding?]) { + internal init(_ columnNames: [String: Int], _ values: [Binding?]) { self.columnNames = columnNames self.values = values } + func hasValue(for column: String) -> Bool { + guard let idx = columnNames[column.quote()] else { + return false + } + return values[idx] != nil + } + /// Returns a row’s value for the given column. /// /// - Parameter column: An expression representing a column selected in a Query. /// /// - Returns: The value for the given column. - public func get(_ column: Expression) -> V { - return get(Expression(column))! + public func get(_ column: Expression) throws -> V { + if let value = try get(Expression(column)) { + return value + } else { + throw QueryError.unexpectedNullValue(name: column.template) + } } - public func get(_ column: Expression) -> V? { + + public func get(_ column: Expression) throws -> V? { func valueAtIndex(_ idx: Int) -> V? { guard let value = values[idx] as? V.Datatype else { return nil } - return (V.fromDatatypeValue(value) as? V)! + return V.fromDatatypeValue(value) as? V } guard let idx = columnNames[column.template] else { @@ -1051,61 +1098,24 @@ public struct Row { switch similar.count { case 0: - fatalError("no such column '\(column.template)' in columns: \(columnNames.keys.sorted())") + throw QueryError.noSuchColumn(name: column.template, columns: columnNames.keys.sorted()) case 1: return valueAtIndex(columnNames[similar[0]]!) default: - fatalError("ambiguous column '\(column.template)' (please disambiguate: \(similar))") + throw QueryError.ambiguousColumn(name: column.template, similar: similar) } } return valueAtIndex(idx) } - // FIXME: rdar://problem/18673897 // subscript… - - public subscript(column: Expression) -> Blob { - return get(column) - } - public subscript(column: Expression) -> Blob? { - return get(column) + public subscript(column: Expression) -> T { + return try! get(column) } - public subscript(column: Expression) -> Bool { - return get(column) + public subscript(column: Expression) -> T? { + return try! get(column) } - public subscript(column: Expression) -> Bool? { - return get(column) - } - - public subscript(column: Expression) -> Double { - return get(column) - } - public subscript(column: Expression) -> Double? { - return get(column) - } - - public subscript(column: Expression) -> Int { - return get(column) - } - public subscript(column: Expression) -> Int? { - return get(column) - } - - public subscript(column: Expression) -> Int64 { - return get(column) - } - public subscript(column: Expression) -> Int64? { - return get(column) - } - - public subscript(column: Expression) -> String { - return get(column) - } - public subscript(column: Expression) -> String? { - return get(column) - } - } /// Determines the join operator for a query’s `JOIN` clause. @@ -1154,9 +1164,12 @@ public struct QueryClauses { var order = [Expressible]() var limit: (length: Int, offset: Int?)? + + var union = [QueryType]() fileprivate init(_ name: String, alias: String?, database: String?) { self.from = (name, alias, database) } } + diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift index 6550929..46a1f87 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift @@ -42,7 +42,7 @@ extension Table { block(builder) let clauses: [Expressible?] = [ - create(Table.identifier, tableName(), temporary ? .Temporary : nil, ifNotExists), + create(Table.identifier, tableName(), temporary ? .temporary : nil, ifNotExists), "".wrap(builder.definitions) as Expression, withoutRowid ? Expression(literal: "WITHOUT ROWID") : nil ] @@ -52,7 +52,7 @@ extension Table { public func create(_ query: QueryType, temporary: Bool = false, ifNotExists: Bool = false) -> String { let clauses: [Expressible?] = [ - create(Table.identifier, tableName(), temporary ? .Temporary : nil, ifNotExists), + create(Table.identifier, tableName(), temporary ? .temporary : nil, ifNotExists), Expression(literal: "AS"), query ] @@ -127,13 +127,9 @@ extension Table { // MARK: - CREATE INDEX - public func createIndex(_ columns: Expressible...) -> String { - return createIndex(columns) - } - - public func createIndex(_ columns: [Expressible], unique: Bool = false, ifNotExists: Bool = false) -> String { + public func createIndex(_ columns: Expressible..., unique: Bool = false, ifNotExists: Bool = false) -> String { let clauses: [Expressible?] = [ - create("INDEX", indexName(columns), unique ? .Unique : nil, ifNotExists), + create("INDEX", indexName(columns), unique ? .unique : nil, ifNotExists), Expression(literal: "ON"), tableName(qualified: false), "".wrap(columns) as Expression @@ -144,11 +140,8 @@ extension Table { // MARK: - DROP INDEX - public func dropIndex(_ columns: Expressible...) -> String { - return dropIndex(columns) - } - public func dropIndex(_ columns: [Expressible], ifExists: Bool = false) -> String { + public func dropIndex(_ columns: Expressible..., ifExists: Bool = false) -> String { return drop("INDEX", indexName(columns), ifExists) } @@ -176,7 +169,7 @@ extension View { public func create(_ query: QueryType, temporary: Bool = false, ifNotExists: Bool = false) -> String { let clauses: [Expressible?] = [ - create(View.identifier, tableName(), temporary ? .Temporary : nil, ifNotExists), + create(View.identifier, tableName(), temporary ? .temporary : nil, ifNotExists), Expression(literal: "AS"), query ] @@ -307,27 +300,27 @@ public final class TableBuilder { } public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression? = nil, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) + column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) } public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: Expression, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) + column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) } public func column(_ name: Expression, unique: Bool = false, check: Expression? = nil, defaultValue: V, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) + column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) } public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression? = nil, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) + column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) } public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: Expression, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) + column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) } public func column(_ name: Expression, unique: Bool = false, check: Expression, defaultValue: V, collate: Collation) where V.Datatype == String { - column(name, V.declaredDatatype, nil, false, unique, check, defaultValue, nil, collate) + column(name, V.declaredDatatype, nil, true, unique, check, defaultValue, nil, collate) } fileprivate func column(_ name: Expressible, _ datatype: String, _ primaryKey: PrimaryKey?, _ null: Bool, _ unique: Bool, _ check: Expressible?, _ defaultValue: Expressible?, _ references: (QueryType, Expressible)?, _ collate: Collation?) { @@ -513,8 +506,8 @@ private func reference(_ primary: (QueryType, Expressible)) -> Expressible { private enum Modifier : String { - case Unique = "UNIQUE" + case unique = "UNIQUE" - case Temporary = "TEMPORARY" + case temporary = "TEMPORARY" } diff --git a/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m b/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m index d8fe6b6..e00a731 100644 --- a/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m +++ b/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m @@ -112,14 +112,14 @@ static const sqlite3_tokenizer_module __SQLiteTokenizerModule = { __SQLiteTokenizerNext }; -int _SQLiteRegisterTokenizer(SQLiteHandle * db, const char * moduleName, const char * submoduleName, _SQLiteTokenizerNextCallback callback) { +int _SQLiteRegisterTokenizer(sqlite3 *db, const char * moduleName, const char * submoduleName, _SQLiteTokenizerNextCallback callback) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ __SQLiteTokenizerMap = [NSMutableDictionary new]; }); sqlite3_stmt * stmt; - int status = sqlite3_prepare_v2((sqlite3 *)db, "SELECT fts3_tokenizer(?, ?)", -1, &stmt, 0); + int status = sqlite3_prepare_v2(db, "SELECT fts3_tokenizer(?, ?)", -1, &stmt, 0); if (status != SQLITE_OK ){ return status; } diff --git a/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h b/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h index d15e8d5..5b35659 100644 --- a/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h +++ b/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h @@ -24,14 +24,10 @@ @import Foundation; -#ifndef COCOAPODS #import "sqlite3.h" -#endif - -typedef struct SQLiteHandle SQLiteHandle; // CocoaPods workaround NS_ASSUME_NONNULL_BEGIN -typedef NSString * _Nullable (^_SQLiteTokenizerNextCallback)(const char * input, int * inputOffset, int * inputLength); -int _SQLiteRegisterTokenizer(SQLiteHandle * db, const char * module, const char * tokenizer, _Nullable _SQLiteTokenizerNextCallback callback); +typedef NSString * _Nullable (^_SQLiteTokenizerNextCallback)(const char *input, int *inputOffset, int *inputLength); +int _SQLiteRegisterTokenizer(sqlite3 *db, const char *module, const char *tokenizer, _Nullable _SQLiteTokenizerNextCallback callback); NS_ASSUME_NONNULL_END diff --git a/Pods/Target Support Files/FileMD5Hash/FileMD5Hash.xcconfig b/Pods/Target Support Files/FileMD5Hash/FileMD5Hash.xcconfig index 8aadf66..af9d32b 100644 --- a/Pods/Target Support Files/FileMD5Hash/FileMD5Hash.xcconfig +++ b/Pods/Target Support Files/FileMD5Hash/FileMD5Hash.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown index f1424f8..06a3127 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown @@ -1,6 +1,14 @@ # Acknowledgements This application makes use of the following third party libraries: +## Crashlytics + +Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2017 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + +## Fabric + +Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + ## FileMD5Hash @@ -231,6 +239,185 @@ THE SOFTWARE. +## SMCalloutView + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + ## SQLite.swift (The MIT License) diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist index 9801131..e2d7eae 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist @@ -12,6 +12,26 @@ Type PSGroupSpecifier + + FooterText + Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2017 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt + License + Commercial + Title + Crashlytics + Type + PSGroupSpecifier + + + FooterText + Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt + License + Commercial + Title + Fabric + Type + PSGroupSpecifier + FooterText @@ -254,6 +274,191 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + License + Apache License, Version 2.0 + Title + SMCalloutView + Type + PSGroupSpecifier + FooterText (The MIT License) diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh index c984c6b..124ffbc 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh @@ -91,11 +91,13 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "$BUILT_PRODUCTS_DIR/FileMD5Hash/FileMD5Hash.framework" install_framework "$BUILT_PRODUCTS_DIR/SDWebImage/SDWebImage.framework" + install_framework "$BUILT_PRODUCTS_DIR/SMCalloutView/SMCalloutView.framework" install_framework "$BUILT_PRODUCTS_DIR/SQLite.swift/SQLite.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "$BUILT_PRODUCTS_DIR/FileMD5Hash/FileMD5Hash.framework" install_framework "$BUILT_PRODUCTS_DIR/SDWebImage/SDWebImage.framework" + install_framework "$BUILT_PRODUCTS_DIR/SMCalloutView/SMCalloutView.framework" install_framework "$BUILT_PRODUCTS_DIR/SQLite.swift/SQLite.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh index 4602c68..aed060f 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh @@ -21,6 +21,9 @@ case "${TARGETED_DEVICE_FAMILY}" in 3) TARGET_DEVICE_ARGS="--target-device tv" ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig index 6b509ca..186d9d8 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig @@ -1,10 +1,12 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "FileMD5Hash" -framework "SDWebImage" -framework "SQLite" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView/SMCalloutView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "FileMD5Hash" -framework "SDWebImage" -framework "SMCalloutView" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig index 6b509ca..186d9d8 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig @@ -1,10 +1,12 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView" "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "FileMD5Hash" -framework "SDWebImage" -framework "SQLite" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FileMD5Hash/FileMD5Hash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SMCalloutView/SMCalloutView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SQLite.swift/SQLite.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "FileMD5Hash" -framework "SDWebImage" -framework "SMCalloutView" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig index 60359db..ca0e731 100644 --- a/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig +++ b/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SDWebImage GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" OTHER_LDFLAGS = -framework "ImageIO" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/SMCalloutView/Info.plist b/Pods/Target Support Files/SMCalloutView/Info.plist new file mode 100644 index 0000000..a73567e --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.1.5 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView-dummy.m b/Pods/Target Support Files/SMCalloutView/SMCalloutView-dummy.m new file mode 100644 index 0000000..f570a18 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SMCalloutView : NSObject +@end +@implementation PodsDummy_SMCalloutView +@end diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView-prefix.pch b/Pods/Target Support Files/SMCalloutView/SMCalloutView-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView-umbrella.h b/Pods/Target Support Files/SMCalloutView/SMCalloutView-umbrella.h new file mode 100644 index 0000000..01c9303 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "SMCalloutView.h" +#import "SMClassicCalloutView.h" + +FOUNDATION_EXPORT double SMCalloutViewVersionNumber; +FOUNDATION_EXPORT const unsigned char SMCalloutViewVersionString[]; + diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap b/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap new file mode 100644 index 0000000..72f1d32 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap @@ -0,0 +1,6 @@ +framework module SMCalloutView { + umbrella header "SMCalloutView-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig b/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig new file mode 100644 index 0000000..7164995 --- /dev/null +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SMCalloutView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SMCalloutView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/SQLite.swift/Info.plist b/Pods/Target Support Files/SQLite.swift/Info.plist index ace78f5..742241b 100644 --- a/Pods/Target Support Files/SQLite.swift/Info.plist +++ b/Pods/Target Support Files/SQLite.swift/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.11.3 + 0.11.4 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig b/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig index 73a814d..830ac41 100644 --- a/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig +++ b/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SQLite.swift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" OTHER_LDFLAGS = -l"sqlite3" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" "-suppress-warnings" PODS_BUILD_DIR = $BUILD_DIR @@ -9,15 +9,4 @@ PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SQLite.swift PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES -SWIFT_INCLUDE_PATHS[sdk=appletvos*] = $(SRCROOT)/SQLite.swift/CocoaPods/appletvos -SWIFT_INCLUDE_PATHS[sdk=appletvsimulator*] = $(SRCROOT)/SQLite.swift/CocoaPods/appletvsimulator -SWIFT_INCLUDE_PATHS[sdk=iphoneos*] = $(SRCROOT)/SQLite.swift/CocoaPods/iphoneos -SWIFT_INCLUDE_PATHS[sdk=iphoneos10.0] = $(SRCROOT)/SQLite.swift/CocoaPods/iphoneos-10.0 -SWIFT_INCLUDE_PATHS[sdk=iphonesimulator*] = $(SRCROOT)/SQLite.swift/CocoaPods/iphonesimulator -SWIFT_INCLUDE_PATHS[sdk=iphonesimulator10.0] = $(SRCROOT)/SQLite.swift/CocoaPods/iphonesimulator-10.0 -SWIFT_INCLUDE_PATHS[sdk=macosx*] = $(SRCROOT)/SQLite.swift/CocoaPods/macosx -SWIFT_INCLUDE_PATHS[sdk=macosx10.11] = $(SRCROOT)/SQLite.swift/CocoaPods/macosx-10.11 -SWIFT_INCLUDE_PATHS[sdk=macosx10.12] = $(SRCROOT)/SQLite.swift/CocoaPods/macosx-10.12 -SWIFT_INCLUDE_PATHS[sdk=watchos*] = $(SRCROOT)/SQLite.swift/CocoaPods/watchos -SWIFT_INCLUDE_PATHS[sdk=watchsimulator*] = $(SRCROOT)/SQLite.swift/CocoaPods/watchsimulator -SWIFT_VERSION = 3.0 +SWIFT_VERSION = 4.0 diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json index e518368..f3677f9 100644 --- a/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -41,6 +41,12 @@ "idiom" : "iphone", "filename" : "icon-180.png", "scale" : "3x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", + "scale" : "1x" } ], "info" : { diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000..e4851ed Binary files /dev/null and b/Resources/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon-120.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon-120.png index 2443a70..1f0e424 100644 Binary files a/Resources/Assets.xcassets/AppIcon.appiconset/icon-120.png and b/Resources/Assets.xcassets/AppIcon.appiconset/icon-120.png differ diff --git a/Resources/Assets.xcassets/AppIcon.appiconset/icon-180.png b/Resources/Assets.xcassets/AppIcon.appiconset/icon-180.png index 29a523e..7118e82 100644 Binary files a/Resources/Assets.xcassets/AppIcon.appiconset/icon-180.png and b/Resources/Assets.xcassets/AppIcon.appiconset/icon-180.png differ diff --git a/Resources/Assets.xcassets/BoxArt.imageset/Contents.json b/Resources/Assets.xcassets/BoxArt.imageset/Contents.json index fe97d60..9ea3edc 100644 --- a/Resources/Assets.xcassets/BoxArt.imageset/Contents.json +++ b/Resources/Assets.xcassets/BoxArt.imageset/Contents.json @@ -14,10 +14,6 @@ "idiom" : "universal", "filename" : "boxart-300.png", "scale" : "3x" - }, - { - "idiom" : "tv", - "scale" : "1x" } ], "info" : { diff --git a/Resources/Assets.xcassets/BoxArt.imageset/boxart-100.png b/Resources/Assets.xcassets/BoxArt.imageset/boxart-100.png index 9112657..55cb13a 100644 Binary files a/Resources/Assets.xcassets/BoxArt.imageset/boxart-100.png and b/Resources/Assets.xcassets/BoxArt.imageset/boxart-100.png differ diff --git a/Resources/Assets.xcassets/BoxArt.imageset/boxart-200.png b/Resources/Assets.xcassets/BoxArt.imageset/boxart-200.png index 168e910..2f3717b 100644 Binary files a/Resources/Assets.xcassets/BoxArt.imageset/boxart-200.png and b/Resources/Assets.xcassets/BoxArt.imageset/boxart-200.png differ diff --git a/Resources/Assets.xcassets/BoxArt.imageset/boxart-300.png b/Resources/Assets.xcassets/BoxArt.imageset/boxart-300.png index 81fbe43..9cc7c77 100644 Binary files a/Resources/Assets.xcassets/BoxArt.imageset/boxart-300.png and b/Resources/Assets.xcassets/BoxArt.imageset/boxart-300.png differ diff --git a/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json b/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index 29d94c7..0000000 --- a/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "orientation" : "landscape", - "idiom" : "tv", - "extent" : "full-screen", - "minimum-system-version" : "9.0", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Resources/Assets.xcassets/Settings_Button.imageset/Contents.json b/Resources/Assets.xcassets/SettingsButton.imageset/Contents.json similarity index 100% rename from Resources/Assets.xcassets/Settings_Button.imageset/Contents.json rename to Resources/Assets.xcassets/SettingsButton.imageset/Contents.json diff --git a/Resources/Assets.xcassets/Settings_Button.imageset/gear_1.pdf b/Resources/Assets.xcassets/SettingsButton.imageset/gear_1.pdf similarity index 100% rename from Resources/Assets.xcassets/Settings_Button.imageset/gear_1.pdf rename to Resources/Assets.xcassets/SettingsButton.imageset/gear_1.pdf