Refaktoryzacja kodu – #1

Na grupie dla początkujących programistów natknęłam się na prośbę z gatunku: coś jest nie tak z moim kodem. Czy ktoś mógłby mi pomóc go ogarnąć? Program miał rozwiązywać zadanie z jednych z popularnych puzzli programistycznych – Advent of Code 2016 -> Day 4.

Przyjrzyjmy się temu 🙂

Treść zadania tu.

Zadanie w skrócie – jest podany ciąg znaków aaaaa-bbb-z-y-x-123[abxyz]. Litery tworzą zakodowaną nazwę pokoju, liczby to ID, a w nawiasach kwadratowych podana jest suma kontrolna. Suma kontrolna jest wyliczana następująco: pięć najczęściej występujących liter z zakodowanej nazwy, posortowanych alfabetycznie. Rozwiązaniem jest suma ID z ciągów, które mają poprawnie wyliczoną sumę kontrolną.

Pierwotna wersja kodu o tu. Będę wrzucać komity po każdej zmianie do tego repozytorium (o tu) żeby można było prześledzić spokojnie kolejne zmiany albo po prostu zobaczyć jak to wygląda ostatecznie 😉

Wciągnęłam kod do IDE, popatrzyłam, sformatowałam kod, IDE uzupełniło brakujące średniki na końcach linii. I czytam. Dorzuciłam wypisywanie sumy końcowej na konsolę. Dopisałam też instrukcję, która wyrzuci mi na konsolę błędne sumy kontrolne.

for (i = 0; i < checksum.length; i++) {
if (checksum[i] === finall[i]) {
sumId += id[i]
} else {
console.log(checksum[i] + " <> " + finall[i]);
}
}
// 89274 – zły wynik
console.log(sumId);

view raw

day4.js

hosted with ❤ by GitHub

Pierwszym problemem, który został poprawnie zdiagnozowany przez autorkę kodu, było sortowanie: w momencie kiedy dwie litery pojawiły się w nazwie taką samą liczbę razy, niekoniecznie były posortowane alfabetycznie. Dla ciągu molgbzqfib-bdd-mrozexpfkd-289[bdfmo] program wyliczał sumę kontrolną jako bdofm.

To jest pierwsza rzecz, którą poprawiłam wychodząc z założenia, że moim zadaniem nie jest tworzenie kodu za Autorkę, bo to nie jest problemem zaorać wszystko i zacząć na nowo, ale raczej nikt z tego nic nie wyciągnie.

return a.sort(function (a, b) {
if (o[b] !== o[a]) {
return o[b] o[a];
}
return a.charCodeAt(0) b.charCodeAt(0);
});

view raw

day4.js

hosted with ❤ by GitHub

Do sortowania dodałam sprawdzanie, czy częstotliwość występowania liter jest różna. Jeśli jest różna, sortuj tak jak było. W przeciwnym wypadku sortuj alfabetycznie (przez porównywanie kodów ASCII).

Myślałam, że to załatwi sprawę, ale wieczorem otrzymałam feedback, że dalej nie działa. Rano skontaktowałam się z Autorką i otrzymałam zgodę na tą zabawę kodem, którą chcę tu przedstawić 🙂 Dziecko uśpione, lecimy z koksem 😉

Na początku wyciągnę kod js z HTML-a, w którym go na szybko osadziłam, i wsadzę go w funkcję. Stworzyłam folder o nazwie js, w którym umieściłam plik main.js. W pliku main.js stworzyłam funkcję solution(), do której przeniosłam cały kod javaScriptowy. Dzięki temu plik HTML wygląda teraz tak:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Day 4</title>
<script type="text/javascript" src="js/main.js"></script>
</head>
<body>
<script type="text/javascript">
solution();
</script>
</body>
</html>

view raw

day4.html

hosted with ❤ by GitHub

W zadaniu mamy podany mniejszy przykład, który możemy wykorzystać jako nasz “test jednostkowy”. Wiemy, że dla takich danych

aaaaa-bbb-z-y-x-123[abxyz] a-b-c-d-e-f-g-h-987[abcde] not-a-real-room-404[oarel] totally-real-room-200[decoy]

suma ID poprawnych pokoi wynosi 1514.

Żebym mogła stworzyć taki test potrzebowałam wyciągnąć z funkcji solution kod odpowiedzialny za wyliczenie sumy dla podanych danych. Nowa funkcja powinna przyjmować jeden argument, którym są dane wejściowe i zwracać sumę ID dla poprawnych pokoi. Stworzyłam funkcję countSum(dane), do której przeniosłam prawie cały kod funkcji solution. Po tej operacji solution wygląda tak:

function solution() {
var dane = "aczupnetwp-mfyyj-opalcexpye-977[peyac] qzchnzbshud-cxd-trdq-sdrshmf-105[jqexn] molgbzqfib-bdd-mrozexpfkd-289[bdfmo] enzcntvat-pnaql-qrfvta-351[antqv] otzkxtgzoutgr-jek-vaxingyotm-670[tgokx] fmsledevhsyw-gerhc-gsexmrk-qerekiqirx-126[ersgh] yknnkoera-zua-ykjpwejiajp-212[rfzym] dfcxsqhwzs-qobrm-gvwddwbu-532[dwbqs] oqnidbshkd-eknvdq-cdozqsldms-261[vygwn] kwvacumz-ozilm-akidmvomz-pcvb-ikycqaqbqwv-538[mvaci] sno-rdbqds-qzaahs-rsnqzfd-599[sdqan] zekvierkzferc-treup-ivrthlzjzkzfe-633[ezrkf] aoubshwq-suu-difqvogwbu-922[uboqs] dpotvnfs-hsbef-kfmmzcfbo-nbobhfnfou-571[fbonh] hcd-gsqfsh-qobrm-qcohwbu-gsfjwqsg-792[qsghb] nbhofujd-cvooz-mbcpsbupsz-649[bocps] pxtihgbsxw-ktuubm-tgterlbl-735[mxauz] mvydjvxodqz-xviyt-hvivbzhzio-369[vizdh] bqxnfdmhb-bzmcx-bnzshmf-cdozqsldms-755[bmdsz] lxwbdvna-pajmn-snuuhknjw-mnbrpw-199[nwabj] molgbzqfib-zxkav-zlxqfkd-ildfpqfzp-627[fzlqb] iuruxlar-vrgyzoi-mxgyy-sgtgmksktz-904[gryik] bkzrrhehdc-azrjds-qdzbpthrhshnm-729[hrdzb] hplazytkpo-dnlgpyrpc-sfye-epnsyzwzrj-457[pyzel] ajyqqgdgcb-hcjjwzcyl-umpiqfmn-366[cjqgm] kzgwomvqk-kpwkwtibm-xczkpiaqvo-772[kwimo] bqvvu-nwilwcejc-ydkykhwpa-ykjpwejiajp-628[jwkpy] amlqskcp-epybc-afmamjyrc-pcqcypaf-574[capmy] gcfcnuls-aluxy-zfiqyl-guleyncha-994[lcuya] zgmfyxypbmsq-djmucp-umpiqfmn-444[qwrxz] vrurcjah-pajmn-ljwmh-bnaerlnb-771[ajnrb] nwlddtqtpo-awldetn-rcldd-opawzjxpye-457[ztsxm] crwwv-bdd-rpbo-qbpqfkd-393[bdpqr] dzczkrip-xiruv-srjbvk-rercpjzj-607[rjzci] sno-rdbqds-dff-qdbdhuhmf-313[orjnb] bnqqnrhud-bzmcx-qdrdzqbg-781[qbdnr] upq-tfdsfu-kfmmzcfbo-tupsbhf-779[fubmp] xgjougizobk-vrgyzoi-mxgyy-yzuxgmk-826[gyoxz] zgmfyxypbmsq-zyqicr-bcnjmwkclr-756[jluaw] joufsobujpobm-cvooz-vtfs-uftujoh-857[mghad] lnkfaypeha-pkl-oaynap-xqjju-ykjpwejiajp-342[ajpky] esyfwlau-wyy-vwhdgqewfl-580[pqlsd] lhkhszqx-fqzcd-rbzudmfdq-gtms-trdq-sdrshmf-859[jzybf] dmbttjgjfe-kfmmzcfbo-eftjho-623[kzlyx] qcffcgwjs-xszzmpsob-zopcfohcfm-246[cfosz] pbeebfvir-ovbunmneqbhf-cynfgvp-tenff-freivprf-273[jlves] dpssptjwf-cvooz-sftfbsdi-727[sfdop] vdzonmhydc-bzmcx-nodqzshnmr-391[dmnzc] ynssr-vahvhetmx-tgterlbl-891[ldyzb] zilqwikbqdm-akidmvomz-pcvb-lmdmtwxumvb-824[mbdiv] qfkkj-nlyoj-xlcvpetyr-379[qsztm] sbejpbdujwf-cvooz-nbobhfnfou-181[bofjn] ipvohghykvbz-ihzrla-lunpullypun-383[jfptx] clotzlnetgp-prr-lnbftdtetzy-665[tlenp] fhezusjybu-rkddo-bqrehqjeho-894[ehbdj] xlrypetn-ojp-lnbftdtetzy-327[uwdtq] ovbunmneqbhf-pbafhzre-tenqr-enoovg-bcrengvbaf-299[benfo] xmtjbzidx-zbb-gjbdnodxn-291[bdxjn] raphhxuxts-ytaanqtpc-stktadebtci-739[tachp] lejkrscv-avccpsvre-uvgcfpdvek-269[vtewy] esyfwlau-xdgowj-umklgewj-kwjnauw-944[zntcg] bnmrtldq-fqzcd-azrjds-rsnqzfd-261[dqrzf] npmhcargjc-qaytclecp-fslr-yaosgqgrgml-184[cgalr] iutyaskx-mxgjk-houngfgxjuay-vrgyzoi-mxgyy-lotgtiotm-280[reypq] mhi-lxvkxm-cxeeruxtg-nlxk-mxlmbgz-891[ymnuv] avw-zljyla-jovjvshal-dvyrzovw-331[vajlo] jxdkbqfz-ciltbo-zlkqxfkjbkq-627[cvump] kpvgtpcvkqpcn-lgnnadgcp-eqpvckpogpv-154[ikqst] eadalsjq-yjsvw-hjgbwuladw-wyy-mkwj-lwklafy-944[wajly] iuruxlar-iuxxuyobk-igtje-iutzgotsktz-644[uitxg] pdjqhwlf-hjj-hqjlqhhulqj-179[hjqld] drxevkzt-irsszk-kvtyefcfxp-997[kefrs] houngfgxjuay-iuruxlar-inuiurgzk-vaxingyotm-644[yiowt] lzfmdshb-bgnbnkzsd-dmfhmddqhmf-755[klhim] mvkccspson-bkllsd-wkxkqowoxd-120[koscd] rgndvtcxr-rpcsn-hpath-245[sitjk] apuut-xviyt-nzmqdxzn-317[mgons] udglrdfwlyh-vfdyhqjhu-kxqw-pdunhwlqj-829[dhlqu] lejkrscv-gcrjkzt-xirjj-drerxvdvek-659[qftns] zotts-mwupyhayl-bohn-uhufsmcm-604[imljo] vcibutulxiom-jfumncw-alumm-mbcjjcha-370[mcuja] nvrgfezqvu-tcrjjzwzvu-avccpsvre-ivjvrity-217[vrcjz] myxcewob-qbkno-bkllsd-nocsqx-744[bockl] zlilocri-pzxsbkdbo-erkq-ildfpqfzp-887[ilpzb] zntargvp-pnaql-pbngvat-pbagnvazrag-377[agnpv] rgndvtcxr-uadltg-prfjxhxixdc-921[xdrcg] pbeebfvir-cynfgvp-tenff-ernpdhvfvgvba-663[fvebn] bqvvu-ywjzu-ykwpejc-hwxknwpknu-290[wkujn] xjmmjndqz-xviyt-xjvodib-vivgtndn-785[vdijn] szfyrqriuflj-srjbvk-tljkfdvi-jvimztv-919[jvfir] ucynmlgxcb-afmamjyrc-pcacgtgle-574[cagml] zntargvp-pnaql-pbngvat-npdhvfvgvba-299[vanpg] gcfcnuls-aluxy-xsy-jolwbumcha-110[cluas] yuxufmdk-sdmpq-nuatmlmdpage-omzpk-oamfuzs-mzmxkeue-170[muade] qfmcusbwq-pibbm-aobousasbh-792[bsamo] zsxyfgqj-wfggny-qfgtwfytwd-515[lmnry] rwcnawjcrxwju-ljwmh-lxjcrwp-anjlzdrbrcrxw-667[rwjcl] ocipgvke-gii-vtckpkpi-466[ikpcg] iruzfrtkzmv-treup-tfrkzex-kirzezex-945[rzekt] drxevkzt-gcrjkzt-xirjj-glityrjzex-659[psznt] htqtwkzq-gzssd-tujwfyntsx-125[tsqwz] wbhsfbohwcboz-qobrm-igsf-hsghwbu-584[bhosw] diozmivodjivg-wpiit-gvwjmvojmt-655[bknca] vkppo-vbemuh-qsgkyiyjyed-478[yekpv] enzcntvat-hafgnoyr-qlr-ratvarrevat-325[artnv] atyzghrk-yigbktmkx-natz-yzuxgmk-644[inshw] votubcmf-fhh-bobmztjt-415[nmolz] pualyuhapvuhs-jhukf-jvhapun-shivyhavyf-773[asijb] zovldbkfz-zxkav-zrpqljbo-pbosfzb-211[bdtuy] ocipgvke-dcumgv-octmgvkpi-180[cgvik] udglrdfwlyh-exqqb-ghyhorsphqw-595[hqdgl] vhehkyne-vtgwr-vhtmbgz-ybgtgvbgz-657[gvbht] bknsykmdsfo-bkwzkqsxq-oqq-ckvoc-458[sxmzy] shoewudys-uww-tuiywd-426[wudsy] krxqjijamxdb-kjbtnc-mnyjacvnwc-979[jcnab] irdgrxzex-srjbvk-tljkfdvi-jvimztv-555[stqrm] bxaxipgn-vgpst-rpcsn-pcpanhxh-869[pnxac] tcrjjzwzvu-jtrmvexvi-ylek-jkfirxv-165[jvrei] ugjjgkanw-vqw-vwkayf-476[qbskp] sgmtkzoi-yigbktmkx-natz-iutzgotsktz-540[tkzgi] wpuvcdng-dwppa-eqpvckpogpv-284[pvcdg] tcfkqcevkxg-lgnnadgcp-ocpcigogpv-700[rcqwm] tfejldvi-xiruv-avccpsvre-ivtvzmzex-503[stzno] oknkvcta-itcfg-tcddkv-fgrnqaogpv-596[zcmwx] udpsdjlqj-fdqgb-uhdftxlvlwlrq-491[hqpoz] bpvctixr-ltpedcxots-rwdrdapit-bpcpvtbtci-687[eklrj] kzgwomvqk-kivlg-bmkpvwtwog-590[kgvwm] tcrjjzwzvu-tyftfcrkv-ivrthlzjzkzfe-607[ztfjr] vqr-ugetgv-hnqygt-fgxgnqrogpv-440[gqvnr] ahngzyzqcntr-azrjds-nodqzshnmr-417[khyzv] gsrwyqiv-kvehi-hci-vigimzmrk-386[ivghk] lgh-kwujwl-uzgugdslw-hmjuzskafy-450[umnbs] xfbqpojafe-gmpxfs-bobmztjt-779[vztym] lzfmdshb-eknvdq-rzkdr-339[dkrzb] dmybmsuzs-qss-qzsuzqqduzs-690[sqzud] nzwzcqfw-upwwjmply-opawzjxpye-925[wpzjy] qvbmzvibqwvit-akidmvomz-pcvb-zmkmqdqvo-954[vmqbi] ykjoqian-cnwza-oywrajcan-dqjp-hwxknwpknu-420[nawjk] gzefmnxq-otaoaxmfq-efadmsq-846[sdilh] dkqjcbctfqwu-lgnnadgcp-ujkrrkpi-830[ckdgj] zilqwikbqdm-kivlg-kwibqvo-amzdqkma-980[ilkqv] dszphfojd-ezf-qvsdibtjoh-883[dfhjo] sno-rdbqds-idkkxadzm-btrsnldq-rdquhbd-339[utyem] ckgvutofkj-igtje-iugzotm-giwaoyozout-514[ogtiu] zekvierkzferc-sleep-jyzggzex-295[hjkop] ktiaaqnqml-akidmvomz-pcvb-mvoqvmmzqvo-226[mvqao] kyelcrga-qaytclecp-fslr-bcqgel-652[cleag] pbybeshy-pnaql-pbngvat-qrirybczrag-715[bapry] pbybeshy-onfxrg-qrfvta-611[bnziy] glrcplyrgmlyj-zyqicr-qyjcq-782[yclqr] nbhofujd-dboez-efqmpznfou-909[clnqa] udskkaxawv-kusnwfywj-zmfl-hmjuzskafy-242[kafsu] hjgbwuladw-vqw-esfsywewfl-476[lcezk] tfejldvi-xiruv-wcfnvi-rercpjzj-477[ijrvc] qyujihctyx-luvvcn-lyuwkocmcncih-162[cuyhi] wlsiayhcw-wuhxs-wiuncha-uhufsmcm-266[qsifr] wkqxodsm-oqq-kxkvicsc-926[kqcos] tfcfiwlc-avccpsvre-rercpjzj-815[crefj] sxdobxkdsyxkv-zvkcdsm-qbkcc-bokmaescsdsyx-614[lmhny] ovbunmneqbhf-cynfgvp-tenff-nanylfvf-845[fnvbe] chnylhuncihuf-wuhxs-lymyulwb-682[bsntk] ckgvutofkj-igtje-jkbkruvsktz-436[kjtgu] vhkkhlbox-ietlmbv-zktll-kxvxbobgz-267[bklvx] oazegyqd-sdmpq-rxaiqd-iadwetab-898[adqei] hdgdovmt-bmvyz-wpiit-hvivbzhzio-993[ljcbw] nwlddtqtpo-tyepcyletzylw-ojp-cplnbftdtetzy-691[mdzsc] ixccb-vfdyhqjhu-kxqw-whfkqrorjb-283[ichrd] pelbtravp-pubpbyngr-qrcyblzrag-143[bprag] kzgwomvqk-uiovmbqk-kivlg-abwziom-200[watbs] vxupkizork-kmm-yzuxgmk-150[kmuxz] xlrypetn-qwzhpc-epnsyzwzrj-847[pzenr] egdytrixat-gpqqxi-gtrtxkxcv-661[txgiq] lxuxaodu-lxwbdvna-pajmn-kjbtnc-mnbrpw-979[nabxd] hqfxxnknji-kqtbjw-yjhmstqtld-125[bfzoy] pyknyegle-hcjjwzcyl-bcnyprkclr-678[cylej] rgndvtcxr-rpcsn-rdpixcv-gtprfjxhxixdc-791[rxcdp] kyelcrga-djmucp-cleglccpgle-834[clegp] oknkvcta-itcfg-hnqygt-tgceswkukvkqp-180[ktcgn] yknnkoera-fahhuxawj-pnwejejc-784[aejnh] jfifqxov-doxab-zxkav-zlxqfkd-lmboxqflkp-731[kreil] tpspahyf-nyhkl-lnn-thyrlapun-435[vtsgw] ktwbhtvmbox-vtgwr-mktbgbgz-631[btgkm] hqfxxnknji-hfsid-htfynsl-htsyfnsrjsy-723[qymsp] shmml-onfxrg-svanapvat-559[amnsv] ugfkmewj-yjsvw-wyy-mkwj-lwklafy-138[wyjkf] zilqwikbqdm-jiasmb-zmkmqdqvo-382[mqibd] vqr-ugetgv-gii-ugtxkegu-414[gueit] nuatmlmdpage-omzpk-oamfuzs-fqotzaxask-846[zpwto] tfcfiwlc-irsszk-drerxvdvek-165[rcdef] ykhknbqh-nwxxep-iwngapejc-368[nehkp] zloolpfsb-tbxmlkfwba-oxyyfq-ixyloxqlov-887[loxbf] surmhfwloh-mhoobehdq-zrunvkrs-127[horms] uwtojhynqj-jll-wjhjnansl-437[jlnhw] ziuxioqvo-ntwemz-lmaqov-824[oimqv] yuxufmdk-sdmpq-nmewqf-abqdmfuaze-794[mdfqu] nzwzcqfw-hplazytkpo-mfyyj-fdpc-epdetyr-951[pyfzc] etyyx-eknvdq-zmzkxrhr-625[iltus] oazegyqd-sdmpq-ngzzk-qzsuzqqduzs-300[osxtp] eadalsjq-yjsvw-kusnwfywj-zmfl-ghwjslagfk-814[jswaf] yuxufmdk-sdmpq-nmewqf-emxqe-378[rqsbf] iwcjapey-ywjzu-odellejc-888[ejclw] pdjqhwlf-gbh-ilqdqflqj-413[qldfh] ide-htrgti-snt-hpath-479[thiad] bnknqetk-azrjds-sdbgmnknfx-209[nkbds] tfcfiwlc-irdgrxzex-wcfnvi-uvgcfpdvek-555[cfivd] clxalrtyr-ojp-epnsyzwzrj-249[rjlpy] aietsrmdih-veffmx-gywxsqiv-wivzmgi-360[imvef] fkqbokxqflkxi-zelzlixqb-cfkxkzfkd-549[afuiz] zekvierkzferc-upv-dribvkzex-347[ekrvz] pbafhzre-tenqr-onfxrg-ybtvfgvpf-507[yrjit] willimcpy-vohhs-guleyncha-240[swucm] gpewwmjmih-veffmx-pefsvexsvc-360[ryciz] amjmpdsj-zsllw-umpiqfmn-418[itmwe] myxcewob-qbkno-lkcuod-mecdywob-cobfsmo-666[obcmd] zsxyfgqj-uqfxynh-lwfxx-fhvznxnynts-515[zymab] zovldbkfz-tbxmlkfwba-ciltbo-tlohpelm-237[ijhlk] nwilwcejc-nwxxep-zalwnpiajp-992[wnpac] amppmqgtc-qaytclecp-fslr-qyjcq-210[sytev] wsvsdkbi-qbkno-cmkfoxqob-rexd-bokmaescsdsyx-302[sbkod] hcd-gsqfsh-xszzmpsob-fsgsofqv-480[sfgho] wfummczcyx-mwupyhayl-bohn-nywbhifias-318[yhmwa] ygcrqpkbgf-fag-tgceswkukvkqp-154[gkcfp] hqcfqwydw-uww-iuhlysui-894[dcqnf] mvydjvxodqz-xviyt-rjmfncjk-421[jvdmx] froruixo-hjj-vhuylfhv-569[hfjor] froruixo-hjj-ghyhorsphqw-855[horjf] vdzonmhydc-eknvdq-qdbdhuhmf-157[dhmnq] cxy-bnlanc-bljenwpna-qdwc-bqryyrwp-901[nbcwy] ocipgvke-rncuvke-itcuu-tgegkxkpi-284[kcegi] npmhcargjc-afmamjyrc-rpyglgle-600[acgmr] npmhcargjc-qaytclecp-fslr-mncpyrgmlq-262[clmpr] sgmtkzoi-xghhoz-sgtgmksktz-176[gkstz] ohmnuvfy-xsy-fiacmncwm-162[mcfny] xekdwvwnzkqo-acc-ykjpwejiajp-706[jkwac] gvcskirmg-tpewxmg-kveww-erepcwmw-256[hvuwt] esyfwlau-usfvq-wfyafwwjafy-398[icojl] ujoon-gpqqxi-rjhidbtg-htgkxrt-349[gthij] votubcmf-ezf-sfbdrvjtjujpo-571[fjbot] zixppfcfba-zelzlixqb-mrozexpfkd-549[yknmt]fbebmtkr-zktwx-utldxm-nlxk-mxlmbgz-423[mxbkl] pybgmyargtc-glrcplyrgmlyj-aylbw-amyrgle-qcptgacq-964[tszdw] sebehvkb-vbemuh-iqbui-920[behiu] lugjuacha-zfiqyl-guleyncha-292[xtqyp] jsehsyafy-wyy-esfsywewfl-190[oztvg] esyfwlau-tskcwl-kzahhafy-918[afhkl] nzwzcqfw-mfyyj-nfdezxpc-dpcgtnp-717[yoapc] dszphfojd-fhh-efqmpznfou-259[igfar] ajmrxjlcren-kjbtnc-xynajcrxwb-823[jcnrx] vehmsegxmzi-nippcfier-pefsvexsvc-594[eipsv] dlhwvupglk-yhiipa-klzpnu-747[taxwo] frqvxphu-judgh-udglrdfwlyh-mhoobehdq-fxvwrphu-vhuylfh-257[mswnl] mvkccspson-pvygob-nocsqx-718[cosnp] avw-zljyla-msvdly-klwhyatlua-955[layvw] ryexqpqhteki-sxesebqju-iqbui-140[tyxfz] ygcrqpkbgf-ecpfa-eqcvkpi-tgceswkukvkqp-856[kcpeg] oazegyqd-sdmpq-nmewqf-ymdwqfuzs-560[qdmef] qxdwpopgsdjh-qphzti-gtprfjxhxixdc-323[pxdhg] zloolpfsb-zxkav-obxznrfpfqflk-783[flozb] xgvnndadzy-kgvnodx-bmvnn-vxlpdndodji-473[xbwpm] muqfedyput-sqdto-vydqdsydw-322[kqmys] jlidywncfy-mwupyhayl-bohn-lywycpcha-838[ychlw] votubcmf-cvooz-mphjtujdt-285[otcjm] etaqigpke-dcumgv-tgugctej-778[getcu] amlqskcp-epybc-pyzzgr-mncpyrgmlq-496[veyij] excdklvo-pvygob-kxkvicsc-380[ckvox] bjfutsneji-idj-xmnuunsl-437[jnuis] crwwv-avb-zlkqxfkjbkq-835[kbqvw] clxalrtyr-nlyoj-nzletyr-dstaatyr-561[lrtya] bjfutsneji-uqfxynh-lwfxx-ijxnls-957[uaybk] drxevkzt-gcrjkzt-xirjj-rthlzjzkzfe-737[zjrkt] lahxpnwrl-npp-jwjuhbrb-329[pbhjl] jyddc-nippcfier-hitevxqirx-646[pyzmv] tagzsrsjvgmk-jsttal-klgjsyw-398[jtkyl] kwzzwaqdm-ntwemz-lmxizbumvb-148[mzwba] jyddc-gerhc-gsexmrk-vigimzmrk-906[zmtql] oqnidbshkd-atmmx-bnmszhmldms-729[vcsyn] hcd-gsqfsh-foppwh-rsjszcdasbh-558[shcdf] fydelmwp-mfyyj-cpnptgtyr-353[udkrq] willimcpy-mwupyhayl-bohn-mniluay-214[lyima] nzwzcqfw-nlyoj-nzletyr-cplnbftdtetzy-925[blcjr] ytu-xjhwjy-uqfxynh-lwfxx-wjfhvznxnynts-567[xnyfh] lejkrscv-vxx-vexzevvizex-373[tgvkh] rnqnyfwd-lwfij-hfsid-htfynsl-ijajqturjsy-229[anmsk] chnylhuncihuf-vumeyn-mylpcwym-162[naygw] xjinphzm-bmvyz-agjrzm-hvmfzodib-239[mzbhi] elrkdcdugrxv-mhoobehdq-vwrudjh-751[dhreo] mbggf-kfl-zopwwpun-721[fzbwt] zilqwikbqdm-rmttgjmiv-mvoqvmmzqvo-954[mqvio] qczcftiz-rms-aofyshwbu-610[cfsza] ibghopzs-qvcqczohs-rsjszcdasbh-272[usani] mbiyqoxsm-mkxni-mykdsxq-oxqsxoobsxq-146[zplsb] zekvierkzferc-irsszk-uvgrikdvek-191[keriv] wkqxodsm-lkcuod-nozvyiwoxd-328[odkwx] frqvxphu-judgh-edvnhw-sxufkdvlqj-387[csdlt] kwvacumz-ozilm-lgm-abwziom-668[mzail] vdzonmhydc-cxd-rdquhbdr-209[dchrb] molgbzqfib-mixpqfz-doxpp-qoxfkfkd-939[fopqx] xzwrmkbqtm-xtiabqk-oziaa-camz-bmabqvo-642[goucj] houngfgxjuay-yigbktmkx-natz-xkykgxin-228[fhiyr] oxmeeuruqp-pkq-abqdmfuaze-612[equam] gpewwmjmih-tpewxmg-kveww-jmrergmrk-542[mwegr] pelbtravp-qlr-grpuabybtl-143[byozf] cqwdujys-rkddo-iqbui-114[hdywo] gpsxdprixkt-tvv-gtprfjxhxixdc-817[xptdg] amlqskcp-epybc-aylbw-amyrgle-qfgnngle-964[laegy] yuxufmdk-sdmpq-eomhqzsqd-tgzf-qzsuzqqduzs-482[tlzym] plolwdub-judgh-fdqgb-frdwlqj-uhdftxlvlwlrq-127[izfao] egdytrixat-ytaanqtpc-detgpixdch-505[tadce] awzwhofm-ufors-gqojsbusf-vibh-difqvogwbu-922[phblt] hafgnoyr-ohaal-chepunfvat-221[ahfno] vagreangvbany-cynfgvp-tenff-chepunfvat-559[nafve] tcorcikpi-ecpfa-eqcvkpi-wugt-vguvkpi-388[cipkv] zloolpfsb-zlkprjbo-doxab-zxkav-zlxqfkd-obzbfsfkd-757[bozfk] ykhknbqh-ywjzu-ykjpwejiajp-966[jkyhp] kwvacumz-ozilm-moo-aitma-512[maoiz] wfruflnsl-nsyjwsfyntsfq-xhfajsljw-mzsy-jslnsjjwnsl-229[sjfln] sno-rdbqds-okzrshb-fqzrr-nodqzshnmr-781[xqzdf] yrwxefpi-tvsnigxmpi-veffmx-stivexmsrw-724[ixefm] hqtyeqsjylu-isqludwuh-xkdj-huiuqhsx-712[uhqsd] yhkpvhjapcl-ibuuf-zavyhnl-903[halpu] forwcoqhwjs-pogysh-gvwddwbu-818[wodgh] oqnidbshkd-dff-nodqzshnmr-573[ysdzb] gzefmnxq-dmnnuf-dqeqmdot-482[dmnqe] lnkfaypeha-oywrajcan-dqjp-zaoecj-576[ajcen] xtwtelcj-rclop-mldvpe-afcnsldtyr-899[dxnhp] rmn-qcapcr-hcjjwzcyl-umpiqfmn-522[cmjnp] egdytrixat-gpqqxi-tcvxcttgxcv-271[txcgi] njmjubsz-hsbef-fhh-tfswjdft-103[fhjsb] ugjjgkanw-tmffq-umklgewj-kwjnauw-996[jwgku] gifavtkzcv-gcrjkzt-xirjj-glityrjzex-737[jgirt] bgmxkgtmbhgte-unggr-xgzbgxxkbgz-137[gbxkm] xgvnndadzy-agjrzm-kpmxcvndib-317[yqtlw] nwilwcejc-zua-ykjpwejiajp-758[jwace] ykhknbqh-oywrajcan-dqjp-naoawnyd-264[anydh] iutyaskx-mxgjk-yigbktmkx-natz-yzuxgmk-904[imkry] vhkkhlbox-vahvhetmx-kxlxtkva-163[hkvxa] ktiaaqnqml-moo-amzdqkma-148[gklmn] shoewudys-sxesebqju-kiuh-juijydw-998[suejd] houngfgxjuay-ckgvutofkj-pkrrehkgt-cuxqynuv-410[ugkcf] aczupnetwp-mldvpe-xlcvpetyr-249[mcajd] zvyvgnel-tenqr-enzcntvat-wryylorna-znexrgvat-507[nertv] dyz-combod-oqq-bocokbmr-250[yvlka] qmpmxevc-kvehi-tpewxmg-kveww-qerekiqirx-880[eikmq] rflsjynh-xhfajsljw-mzsy-xmnuunsl-411[cpyxn] ibghopzs-qobrm-qcohwbu-qcbhowbasbh-740[yajfh] pinovwgz-zbb-yzndbi-291[rqzob] emixwvqhml-kivlg-ivitgaqa-278[ivagl] jchipqat-rpcsn-rdpixcv-jhtg-ithixcv-635[cihpt] xtwtelcj-rclop-ojp-wlmzclezcj-275[cljeo] cybyjqho-whqtu-sxesebqju-huqsgkyiyjyed-712[yqehj] htqtwkzq-xhfajsljw-mzsy-knsfshnsl-489[gbywx] ncjzrpytn-ojp-xlcvpetyr-405[pcjnr] enqvbnpgvir-onfxrg-ybtvfgvpf-455[qsbad] xgvnndadzy-ytz-yzndbi-967[dnyza] lujbbrornm-kdwwh-orwjwlrwp-615[wrbjl] yhwooebeaz-ydkykhwpa-bejwjyejc-368[eyjwa] hqtyeqsjylu-sxesebqju-tulubefcudj-894[sizkn] zbytomdsvo-mrymyvkdo-crszzsxq-458[mosyz] ojk-nzxmzo-agjrzm-yzndbi-343[zjmno] bdavqofuxq-oazegyqd-sdmpq-omzpk-oamfuzs-fdmuzuzs-664[zdmoq] dfcxsqhwzs-qobrm-fsoqeiwgwhwcb-792[wqsbc] dpssptjwf-kfmmzcfbo-sfbdrvjtjujpo-649[fjpsb] rgndvtcxr-tvv-detgpixdch-297[xnstm] tmrszakd-cxd-kzanqzsnqx-235[zadkn] zhdsrqlchg-fdqgb-frdwlqj-ghsduwphqw-725[dhqgw] tyepcyletzylw-dnlgpyrpc-sfye-pyrtyppctyr-405[yptce] ynukcajey-xwogap-zalhkuiajp-524[sgmwy] eadalsjq-yjsvw-kusnwfywj-zmfl-sfsdqkak-190[safjk] clotzlnetgp-ojp-cpdplcns-899[pclno] pbybeshy-onfxrg-phfgbzre-freivpr-507[rbefp] hwbba-rncuvke-itcuu-yqtmujqr-414[ubcqr] uiovmbqk-xtiabqk-oziaa-wxmzibqwva-902[aibqk] kgjgrypw-epybc-qaytclecp-fslr-pcacgtgle-288[cgpel] dmybmsuzs-rxaiqd-fdmuzuzs-664[dmsuz] jsvagsulanw-kusnwfywj-zmfl-esfsywewfl-528[swfla] jvuzbtly-nyhkl-ibuuf-mpuhujpun-149[ubhjl] zsxyfgqj-gfxpjy-xjwanhjx-307[jxfgy] wifilzof-wuhxs-womnigyl-mylpcwy-448[wilyf] dwbcjkun-kjbtnc-ujkxajcxah-537[jckab] ucynmlgxcb-afmamjyrc-pcyaosgqgrgml-652[cgmay] gpewwmjmih-mrxivrexmsrep-veffmx-pefsvexsvc-490[emvxf] wifilzof-vumeyn-mbcjjcha-682[cfijm] ujqgywfau-bwddqtwsf-ljsafafy-658[fawdj] ujqgywfau-usfvq-ugslafy-suimakalagf-788[aufgs] lgh-kwujwl-jsttal-ogjckzgh-294[gjlhk] votubcmf-qmbtujd-hsbtt-sfdfjwjoh-909[tbfjd] zntargvp-wryylorna-qrcnegzrag-221[ragny] nvrgfezqvu-jtrmvexvi-ylek-nfibjyfg-763[duyon] myvybpev-oqq-crszzsxq-276[qsvyz] nzcczdtgp-nlyoj-nzletyr-nfdezxpc-dpcgtnp-535[ncpzd] wyvqljapsl-jovjvshal-svnpzapjz-877[jvalp] lxuxaodu-lqxlxujcn-bqryyrwp-381[xluqr] iuxxuyobk-jek-iayzuskx-ykxboik-826[kxiuy] dmybmsuzs-omzpk-oamfuzs-efadmsq-690[mszad] ymszqfuo-dmnnuf-pqbmdfyqzf-300[fmqdn] xfbqpojafe-cvooz-xpsltipq-649[opfqx] mvkccspson-bknsykmdsfo-oqq-domrxyvyqi-536[oskmq] ykhknbqh-zua-iwjwcaiajp-420[ahijk] pbafhzre-tenqr-rtt-phfgbzre-freivpr-299[docru] pynffvsvrq-enoovg-fnyrf-585[fnvor] oaddaeuhq-qss-efadmsq-794[xjkyr]oaxadrgx-dmpuamofuhq-qss-oazfmuzyqzf-586[mfaud] yaxsnlcrun-ljwmh-ldbcxvna-bnaerln-173[nlabc] ksodcbwnsr-qcffcgwjs-qobrm-igsf-hsghwbu-714[sbcfg] chnylhuncihuf-vohhs-xypyfijgyhn-136[yzkfs] zgmfyxypbmsq-aylbw-dglylagle-236[lygab] zadftbaxq-anvqof-efadmsq-482[afqdb] jrncbavmrq-cynfgvp-tenff-fuvccvat-325[cfvna] veqtekmrk-fyrrc-xiglrspskc-880[tscqj] jsehsyafy-usfvq-ogjckzgh-814[sfghj] zilqwikbqdm-zijjqb-ivitgaqa-850[pjgiu] upq-tfdsfu-cvooz-dvtupnfs-tfswjdf-519[fdstu] dszphfojd-qmbtujd-hsbtt-ufdiopmphz-441[dhptb] bkwzkqsxq-pvygob-cdybkqo-198[bkqoy] nzcczdtgp-clmmte-ecltytyr-275[ctelm] vehmsegxmzi-gerhc-wxsveki-308[eghim] hvbizodx-xjgjmapg-kgvnodx-bmvnn-vivgtndn-421[museg] oxmeeuruqp-rxaiqd-mocgueufuaz-508[tysvw] vagreangvbany-pnaql-znantrzrag-559[angrv] qspkfdujmf-dboez-dpbujoh-qvsdibtjoh-441[dbjof] nzydfxpc-rclop-qwzhpc-pyrtyppctyr-847[bdick] iuruxlar-hgyqkz-xkikobotm-618[kioru] zilqwikbqdm-akidmvomz-pcvb-camz-bmabqvo-512[mbaiq] ohmnuvfy-wuhxs-wiuncha-nywbhifias-136[hinuw] myvybpev-mrymyvkdo-nozvyiwoxd-770[sinbh] sorozgxe-mxgjk-xghhoz-rghuxgzuxe-904[gxhoz] ujoon-rpcsn-detgpixdch-661[cdnop] nzwzcqfw-awldetn-rcldd-hzcvdsza-561[dzcwa] oknkvcta-itcfg-eqpuwogt-itcfg-dwppa-gpikpggtkpi-830[gptik] hcd-gsqfsh-suu-rsdofhasbh-454[shdfu] aczupnetwp-mldvpe-hzcvdsza-613[pzacd] hwbba-lgnnadgcp-fgrnqaogpv-128[xzspm] drxevkzt-vxx-dribvkzex-581[xvdek] esyfwlau-usfvq-ghwjslagfk-710[fsagl] zlkprjbo-doxab-pzxsbkdbo-erkq-obxznrfpfqflk-861[bkofp] mbiyqoxsm-mkxni-psxkxmsxq-536[xmsik] wihmogyl-aluxy-lugjuacha-wuhxs-uwkocmcncih-942[uchal] aoubshwq-gqojsbusf-vibh-difqvogwbu-116[boqsu] tfejldvi-xiruv-vxx-fgvirkzfej-321[vfixe] eqpuwogt-itcfg-hnqygt-uvqtcig-128[gtqci] forwcoqhwjs-foppwh-gozsg-376[owfgh] xjmmjndqz-wpiit-yzndbi-447[idjmn] ixccb-exqqb-ghsduwphqw-595[zxtyc] ynukcajey-ywjzu-hwxknwpknu-186[tsayq] jlidywncfy-mwupyhayl-bohn-guhuaygyhn-396[yhnua] wyvqljapsl-jovjvshal-lunpullypun-721[ljpuv] surmhfwloh-fdqgb-frdwlqj-fxvwrphu-vhuylfh-413[fhlru] cybyjqho-whqtu-kdijqrbu-sxesebqju-tulubefcudj-374[ubjqe] hqtyeqsjylu-vbemuh-fkhsxqiydw-842[inepa] rdggdhxkt-hrpktcvtg-wjci-apqdgpidgn-557[ahtds] bnknqetk-bgnbnkzsd-dmfhmddqhmf-339[dnbkm] bqxnfdmhb-cxd-bnmszhmldms-131[mbdhn] jsehsyafy-usfvq-ugslafy-jwsuimakalagf-788[asfuy] ltpedcxots-rpcsn-rdpixcv-hwxeexcv-609[cxepd] ojk-nzxmzo-pinovwgz-agjrzm-hvmfzodib-915[scjyr] krxqjijamxdb-kdwwh-jwjuhbrb-849[jbwdh] sbejpbdujwf-cbtlfu-vtfs-uftujoh-285[dsgnt] dkqjcbctfqwu-dwppa-fgukip-622[pcdfk] cvabijtm-kivlg-kwibqvo-aitma-200[iavbk] dsxxw-aylbw-dglylagle-652[gsakl] gpbepvxcv-gpsxdprixkt-eaphixr-vgphh-htgkxrth-453[phxgr] bnqqnrhud-rbzudmfdq-gtms-sdbgmnknfx-365[dnbmq] etyyx-qzaahs-lzqjdshmf-547[ahqsy] kpvgtpcvkqpcn-lgnnadgcp-ujkrrkpi-154[pkcgn] cvabijtm-ntwemz-bmkpvwtwog-226[mtwbv] guahyncw-mwupyhayl-bohn-uwkocmcncih-864[chnuw] aczupnetwp-mldvpe-nzyeltyxpye-171[bwvxh] ryexqpqhteki-sqdto-seqjydw-jhqydydw-920[qdyeh] aietsrmdih-hci-vigimzmrk-568[imhra] zilqwikbqdm-lgm-xczkpiaqvo-356[iqklm] zvyvgnel-tenqr-pubpbyngr-npdhvfvgvba-533[vnbgp] vrurcjah-pajmn-lxuxaodu-kdwwh-mnbrpw-875[fnqea] mrxivrexmsrep-jpsaiv-irkmriivmrk-958[rimve] mvhkvbdib-wvnfzo-omvdidib-733[stayi] ryexqpqhteki-kdijqrbu-zubboruqd-fkhsxqiydw-192[tsdpw] oxjmxdfkd-zxkav-zlxqfkd-xkxivpfp-497[smpbo] cebwrpgvyr-pnaql-znantrzrag-117[rangp] qfmcusbwq-qvcqczohs-obozmgwg-766[qcobg] dmbttjgjfe-ezf-bdrvjtjujpo-129[gbjwt] rflsjynh-hmthtqfyj-zxjw-yjxynsl-593[jyhfl] ncjzrpytn-awldetn-rcldd-afcnsldtyr-769[ntqrm] pdjqhwlf-fdqgb-frdwlqj-vwrudjh-699[dfjqw] slqryzjc-zsllw-yaosgqgrgml-210[lgsqr] bkwzkqsxq-oqq-vyqscdsmc-718[qsckb] lsyrkjkbnyec-oqq-vklybkdybi-224[kyblq] vkppo-rqiauj-skijecuh-iuhlysu-530[uihjk] guahyncw-wifilzof-zfiqyl-xyjfisgyhn-526[uhsvy] gsvvswmzi-hci-viwievgl-984[ivgsw] ftzgxmbv-vahvhetmx-vnlmhfxk-lxkobvx-345[vxhmb] eqttqukxg-hnqygt-rwtejcukpi-882[tqegk] ygcrqpkbgf-gii-rwtejcukpi-674[gickp] ibghopzs-pogysh-qcbhowbasbh-558[bhosg] ocipgvke-uecxgpigt-jwpv-ncdqtcvqta-544[cgptv] drxevkzt-sleep-ivjvrity-685[tkwzb] qekrixmg-gsvvswmzi-jpsaiv-hitpscqirx-256[isvgm] qjopwxha-bhksan-lqnydwoejc-862[ahjno] vjpwncrl-ljwmh-mnbrpw-277[wjlmn] zbytomdsvo-tovvilokx-nofovyzwoxd-796[ysvjp] ajyqqgdgcb-aylbw-amyrgle-pcacgtgle-522[gacly] zixppfcfba-zxkav-abpfdk-835[afpbk] gzefmnxq-oaddaeuhq-nmewqf-oazfmuzyqzf-924[fqzae] drxevkzt-sleep-glityrjzex-841[elrtx] yflexwxoalrp-yrkkv-zrpqljbo-pbosfzb-367[blopr] lugjuacha-dyffsvyuh-omyl-nymncha-578[yahuc] tpspahyf-nyhkl-jovjvshal-aljouvsvnf-175[vahjl] htwwtxnaj-rnqnyfwd-lwfij-jll-wjfhvznxnynts-567[nwjfl] tipfxvezt-avccpsvre-ivjvrity-503[vitce] myvybpev-bkllsd-yzobkdsyxc-198[ybdkl] cqwdujys-sqdto-seqjydw-vydqdsydw-348[asypt] bqxnfdmhb-qzaahs-otqbgzrhmf-339[hgfsm] jshzzpmplk-lnn-aljouvsvnf-175[lnjps] jxdkbqfz-zlilocri-pzxsbkdbo-erkq-zlkqxfkjbkq-679[kbqzl] irgyyolokj-hatte-xkikobotm-488[oktiy] buzahisl-jhukf-zavyhnl-123[haluz] odiih-lqxlxujcn-orwjwlrwp-823[qoruw] vhehkyne-utldxm-kxtvjnblbmbhg-293[bhekl] fmsledevhsyw-gerhc-gsexmrk-vieguymwmxmsr-282[emsgr] xgsvgmotm-igtje-lotgtiotm-852[qsejd] xfbqpojafe-cbtlfu-tbmft-311[fbtac] zlkprjbo-doxab-mixpqfz-doxpp-obzbfsfkd-601[bopdf] szfyrqriuflj-srjbvk-wzeretzex-789[rezfj] xjgjmapg-pinovwgz-xviyt-hvivbzhzio-759[wlrju] hjgbwuladw-usfvq-ghwjslagfk-918[gwafh] pbeebfvir-pubpbyngr-fgbentr-221[beprf] ujqgywfau-usfvq-ogjckzgh-164[gufjq] fkqbokxqflkxi-bdd-pqloxdb-497[bdkqx] froruixo-sodvwlf-judvv-vdohv-855[aijkw] oxaflxzqfsb-gbiivybxk-obzbfsfkd-601[bfxik] gsvvswmzi-gerhc-gsexmrk-hiwmkr-594[gmrse] xzwrmkbqtm-akidmvomz-pcvb-uizsmbqvo-252[wfzme] hdgdovmt-bmvyz-xjinphzm-bmvyz-zbb-pnzm-oznodib-109[zbmdn] pejji-myvybpev-pvygob-kmaescsdsyx-978[vqufp] hdgdovmt-bmvyz-agjrzm-vivgtndn-369[vdgmn] rkpqxyib-zelzlixqb-obxznrfpfqflk-835[bflqx] aczupnetwp-awldetn-rcldd-lnbftdtetzy-483[tdeln] rwcnawjcrxwju-bljenwpna-qdwc-anjlzdrbrcrxw-719[huwmx] gbc-frperg-pnaql-znantrzrag-637[ragnp] houngfgxjuay-xghhoz-jkvruesktz-306[nsazy] ugjjgkanw-kusnwfywj-zmfl-mkwj-lwklafy-918[wjkfl] ykhknbqh-nwxxep-bejwjyejc-992[sgbzr] drxevkzt-nvrgfezqvu-treup-ivjvrity-269[vreti] qfmcusbwq-gqojsbusf-vibh-ghcfous-272[zobty] pbafhzre-tenqr-qlr-znantrzrag-481[ranze] wpuvcdng-ecpfa-vgejpqnqia-154[paceg] mhi-lxvkxm-unggr-etuhktmhkr-605[hkmgr] bnqqnrhud-atmmx-sqzhmhmf-157[mhqna] vetllbybxw-vahvhetmx-hixktmbhgl-891[hbltv] dpssptjwf-gvaaz-ezf-fohjoffsjoh-597[fjosa] molgbzqfib-pzxsbkdbo-erkq-qoxfkfkd-289[zcjum] myxcewob-qbkno-cmkfoxqob-rexd-dbksxsxq-562[ysjzt] vhglnfxk-zktwx-xzz-xgzbgxxkbgz-215[sgtyf] jlidywncfy-xsy-xymcah-110[ycxad] ktiaaqnqml-kivlg-wxmzibqwva-330[aiqkl] etaqigpke-rncuvke-itcuu-fgukip-934[ueikc] ksodcbwnsr-qvcqczohs-oqeiwgwhwcb-922[cwoqs] raphhxuxts-gpqqxi-gtprfjxhxixdc-219[oytzu] fab-eqodqf-dmnnuf-emxqe-872[zsbvi] zlkprjbo-doxab-oxyyfq-rpbo-qbpqfkd-991[bopqd] drxevkzt-vxx-tfekrzedvek-217[lkyzs] qekrixmg-aietsrmdih-hci-qerekiqirx-412[tasnf] nsyjwsfyntsfq-idj-hzxytrjw-xjwanhj-463[jnswy] cxy-bnlanc-ljwmh-lxjcrwp-vjatncrwp-173[cjlnw] apuut-nxvqzibzm-cpio-nzmqdxzn-889[cvjhy] wsvsdkbi-qbkno-lexxi-wkbuodsxq-172[bksxd] clotzlnetgp-awldetn-rcldd-ecltytyr-327[ltcde] qspkfdujmf-dboez-dpbujoh-ufdiopmphz-571[dpfou] willimcpy-wuhxs-wiuncha-lywycpcha-266[gzrbt] jvsvymbs-ibuuf-ylhjxbpzpapvu-227[dbpkh] bnmrtldq-fqzcd-bgnbnkzsd-rsnqzfd-599[dnbqz] tbxmlkfwba-ciltbo-abmilvjbkq-549[blaik] ujoon-hrpktcvtg-wjci-sthxvc-115[cthjo] cybyjqho-whqtu-sxesebqju-ijehqwu-998[qehju] qcbgiasf-ufors-awzwhofm-ufors-pibbm-qighcasf-gsfjwqs-948[rfsbq] mvydjvxodqz-kgvnodx-bmvnn-mzvxlpdndodji-369[dvnmo] iutyaskx-mxgjk-ckgvutofkj-yigbktmkx-natz-xkikobotm-852[ktxgi] ohmnuvfy-yaa-lywycpcha-994[xwflv] xjinphzm-bmvyz-agjrzm-ncdkkdib-499[mzbdi] luxciuwncpy-dyffsvyuh-omyl-nymncha-630[fcgdy] rwcnawjcrxwju-ajkkrc-uxprbcrlb-511[rcjwa] oqnidbshkd-eknvdq-qdzbpthrhshnm-703[upwnl] vhglnfxk-zktwx-cxeeruxtg-lxkobvxl-761[xkleg] dmybmsuzs-yuxufmdk-sdmpq-rxaiqd-efadmsq-612[nlayh] fbebmtkr-zktwx-ynssr-vahvhetmx-inkvatlbgz-761[drsyx] xmrrq-tskcwl-klgjsyw-164[qbztu] tcrjjzwzvu-upv-uvgcfpdvek-945[nheck] vkrhzxgbv-ietlmbv-zktll-hixktmbhgl-839[lbhkt] drxevkzt-irsszk-crsfirkfip-971[riksf] tpspahyf-nyhkl-zjhclunly-obua-zavyhnl-201[hlyan] enzcntvat-enqvbnpgvir-enoovg-freivprf-403[nverf] iehepwnu-cnwza-ydkykhwpa-qoan-paopejc-888[apenw] laffe-vrgyzoi-mxgyy-xkgiwaoyozout-878[fzrnp] luxciuwncpy-wuhxs-wiuncha-xyjfisgyhn-812[uchin] houngfgxjuay-yigbktmkx-natz-ktmotkkxotm-358[ktgmo] qzlozfhmf-bgnbnkzsd-qdzbpthrhshnm-911[hzbnd] mvkccspson-tovvilokx-zebmrkcsxq-432[ckosv] pybgmyargtc-zyqicr-ylyjwqgq-652[gyezv] gvaaz-tdbwfohfs-ivou-mbcpsbupsz-129[ojwuz] ftzgxmbv-xzz-wxitkmfxgm-163[xmzfg] ujqgywfau-wyy-ksdwk-970[wykua] nwlddtqtpo-ojp-dezclrp-119[dplot] rgllk-qss-ymdwqfuzs-274[lzpkf] ugfkmewj-yjsvw-xdgowj-jwuwanafy-918[wjafg] lxaaxbren-bljenwpna-qdwc-ydalqjbrwp-537[amnfi] jfifqxov-doxab-mixpqfz-doxpp-obxznrfpfqflk-263[fxopq] ygcrqpkbgf-hnqygt-vtckpkpi-310[gkpcq] nzcczdtgp-nsznzwlep-opgpwzaxpye-353[kfyqu] iutyaskx-mxgjk-laffe-xghhoz-zxgototm-436[csnwy] jyfvnlupj-msvdly-yljlpcpun-617[xjyin] crwwv-zxkav-zlxqfkd-abmilvjbkq-809[kvabl] dkqjcbctfqwu-uecxgpigt-jwpv-tgceswkukvkqp-388[ckgpq] hjgbwuladw-tskcwl-vwkayf-632[waklb] gifavtkzcv-tyftfcrkv-jrcvj-607[vcftj] vcibutulxiom-lugjuacha-mwupyhayl-bohn-xymcah-110[zaukx] eadalsjq-yjsvw-tmffq-jwsuimakalagf-450[afjsl] pejji-mrymyvkdo-ecob-docdsxq-172[docej] tinnm-dzoghwq-ufogg-hfowbwbu-844[gowbf] szfyrqriuflj-upv-tljkfdvi-jvimztv-347[vfijl] emixwvqhml-xtiabqk-oziaa-abwziom-980[mzdxn] cvabijtm-kwvacumz-ozilm-lgm-mvoqvmmzqvo-382[mvoza] forwcoqhwjs-foppwh-gsfjwqsg-454[wfosg] lejkrscv-jtrmvexvi-ylek-glityrjzex-503[ejlrv] bjfutsneji-jll-qtlnxynhx-333[jlntx] xgvnndadzy-wvnfzo-nzmqdxzn-915[nzdvx] iuxxuyobk-yigbktmkx-natz-jkvruesktz-358[hkglx] yhwooebeaz-ywjzu-pnwejejc-602[ejwoy] gpsxdprixkt-rpcsn-hpath-115[phrst] qzoggwtwsr-xszzmpsob-fsoqeiwgwhwcb-766[qokpy] enzcntvat-pubpbyngr-pbagnvazrag-611[abzti] tmrszakd-dff-kzanqzsnqx-781[zadfk] gspsvjyp-tpewxmg-kveww-gywxsqiv-wivzmgi-880[wgvip] htwwtxnaj-xhfajsljw-mzsy-jslnsjjwnsl-151[jswln] mixpqfz-doxpp-absbilmjbkq-705[bjkty] ykhknbqh-oywrajcan-dqjp-opknwca-732[ulyzv] gspsvjyp-gerhc-wivzmgiw-932[gipsv] yaxsnlcrun-yujbcrl-pajbb-uxprbcrlb-407[brclu] kpvgtpcvkqpcn-lgnnadgcp-qrgtcvkqpu-128[nuklw] votubcmf-sbccju-fohjoffsjoh-571[focjb] zixppfcfba-zxkav-obzbfsfkd-549[fbzak] gbc-frperg-rtt-grpuabybtl-221[rbgtp] fhezusjybu-fbqijys-whqii-mehaixef-842[fyqxt] zlilocri-zloolpfsb-gbiivybxk-jxkxdbjbkq-497[bilko] kgjgrypw-epybc-zsllw-rcaflmjmew-964[lwceg] amjmpdsj-djmucp-qrmpyec-314[mjpcd] fruurvlyh-iorzhu-pdunhwlqj-413[ndqft] jchipqat-tvv-rjhidbtg-htgkxrt-193[mfnvi] vcibutulxiom-mwupyhayl-bohn-uwkocmcncih-968[cuhim] avw-zljyla-jovjvshal-zlycpjlz-721[ljavz] oazegyqd-sdmpq-nmewqf-pqbxakyqzf-352[qadef] rdggdhxkt-qjccn-prfjxhxixdc-297[xcdgh] hwdtljsnh-gzssd-knsfshnsl-281[shndl] tipfxvezt-nvrgfezqvu-treup-tfrkzex-rthlzjzkzfe-451[mezst] uiovmbqk-zijjqb-camz-bmabqvo-356[znrpy] zilqwikbqdm-kivlg-kwibqvo-xczkpiaqvo-876[ehjwb] shoewudys-rkddo-husuylydw-166[dsuyh] ytu-xjhwjy-jll-xfqjx-125[znmyk] zlilocri-ciltbo-cfkxkzfkd-107[ciklf] kfg-jvtivk-wcfnvi-kirzezex-581[xbemd] qvbmzvibqwvit-ntwemz-zmamizkp-356[mzivb] ajyqqgdgcb-pyzzgr-bcqgel-470[gqbcy] zgmfyxypbmsq-zyqicr-nspafyqgle-340[maipd] pxtihgbsxw-wrx-etuhktmhkr-709[htxkr] lxwbdvna-pajmn-ajvyjprwp-ljwmh-lxjcrwp-jwjuhbrb-303[jwpab] tyepcyletzylw-clmmte-pyrtyppctyr-613[ytpce] gspsvjyp-gerhc-gsexmrk-vigimzmrk-360[gmrse] tmrszakd-okzrshb-fqzrr-rghoohmf-599[rhozf] uwtojhynqj-hfsid-btwpxmtu-983[igebf] tpspahyf-nyhkl-wshzapj-nyhzz-zavyhnl-461[rhtdy] atyzghrk-xghhoz-iayzuskx-ykxboik-774[khxyz] nwlddtqtpo-qwzhpc-fdpc-epdetyr-847[hsouv] bpvctixr-snt-pcpanhxh-167[pchnt] bxaxipgn-vgpst-gpsxdprixkt-rwdrdapit-rdcipxcbtci-609[pixdr] jfifqxov-doxab-yrkkv-pxibp-991[ysvte] hqcfqwydw-rkddo-tuiywd-504[nlasz] ibghopzs-forwcoqhwjs-pibbm-twbobqwbu-792[csjyt] yrwxefpi-fmsledevhsyw-fewoix-erepcwmw-672[ewfim] jrncbavmrq-cebwrpgvyr-qlr-pbagnvazrag-533[rabgv] iwcjapey-fahhuxawj-naoawnyd-706[awhjn] houngfgxjuay-jek-ktmotkkxotm-358[kotgj] dsxxw-aylbw-amyrgle-bcnyprkclr-496[lryab] szfyrqriuflj-wcfnvi-glityrjzex-555[wpmhn] eqnqthwn-lgnnadgcp-gpikpggtkpi-544[cndbf] fnjyxwrinm-lqxlxujcn-uxprbcrlb-433[xlnrb] bwx-amkzmb-kwtwznct-kivlg-kwibqvo-bziqvqvo-772[yfklb] emixwvqhml-kivlg-zmkmqdqvo-824[mqvik] dpmpsgvm-dboez-qvsdibtjoh-181[iqunm] wlqqp-avccpsvre-tljkfdvi-jvimztv-451[neohc] ikhcxvmbex-ktuubm-mxvaghehzr-813[hmxbe] yhkpvhjapcl-ihzrla-wbyjohzpun-409[hpajl] ucynmlgxcb-kgjgrypw-epybc-zsllw-bctcjmnkclr-470[clbgy] gbc-frperg-pynffvsvrq-rtt-fgbentr-533[rfgtb] odiih-mhn-mnyuxhvnwc-693[yikst] pelbtravp-fpniratre-uhag-qrcnegzrag-897[eflsv] ojk-nzxmzo-mvwwdo-kpmxcvndib-811[qrbnz] hafgnoyr-qlr-erprvivat-949[ravef] nij-mywlyn-zfiqyl-lyuwkocmcncih-968[orsct] udpsdjlqj-udeelw-vdohv-179[dejlu] houngfgxjuay-hatte-xkgiwaoyozout-358[qeuts] zsxyfgqj-hfsid-htfynsl-uzwhmfxnsl-931[mcznp] ujqgywfau-hdsklau-yjskk-jwuwanafy-918[aujkw] buzahisl-kfl-thyrlapun-123[lahub] jshzzpmplk-ihzrla-klzpnu-591[zlphk] qmpmxevc-kvehi-fmsledevhsyw-hci-gywxsqiv-wivzmgi-984[ivemh] apwmeclga-djmucp-qfgnngle-262[vbozj] joufsobujpobm-ezf-mphjtujdt-545[enrth] wlsiayhcw-wbiwifuny-ijyluncihm-136[iwych] vehmsegxmzi-wgezirkiv-lyrx-vieguymwmxmsr-672[meigr] forwcoqhwjs-pogysh-kcfygvcd-870[cofgh] ryexqpqhteki-sqdto-seqjydw-bqrehqjeho-634[qehdj] buzahisl-jvyyvzpcl-qlssfilhu-vwlyhapvuz-591[lvhsu] vxupkizork-jek-zkinturume-852[tmzlr] xmrrq-vqw-mkwj-lwklafy-762[wklmq] irdgrxzex-tyftfcrkv-uvgrikdvek-555[rkvde] fab-eqodqf-bxmefuo-sdmee-fdmuzuzs-742[uzdoy] nij-mywlyn-vohhs-ijyluncihm-214[hwyfz] lgh-kwujwl-tmffq-esfsywewfl-190[fwles] pbeebfvir-pynffvsvrq-rtt-jbexfubc-611[izbpo] dkqjcbctfqwu-uecxgpigt-jwpv-vtckpkpi-518[cpktg] lejkrscv-srjbvk-jyzggzex-399[jegkr] cqwdujys-rkddo-huqsgkyiyjyed-322[dyjkq] apuut-xviyt-xjvodib-mznzvmxc-499[vximt] aietsrmdih-fyrrc-pskmwxmgw-776[gltyk] aczupnetwp-awldetn-rcldd-cpdplcns-743[cdpln] kpvgtpcvkqpcn-hnqygt-ncdqtcvqta-570[cqtnp] tcrjjzwzvu-sleep-uvmvcfgdvek-789[vecju] crwwv-zxkav-zlxqfkd-cfkxkzfkd-653[kfxzc] kgjgrypw-epybc-aylbw-cleglccpgle-366[cglep] sebehvkb-rkddo-udwyduuhydw-244[yxpql] wpuvcdng-ecpfa-eqcvkpi-ceswkukvkqp-648[ckpev] qcbgiasf-ufors-qvcqczohs-igsf-hsghwbu-818[qvnjb] sxdobxkdsyxkv-mkxni-mykdsxq-wkxkqowoxd-796[upngm] cxy-bnlanc-lqxlxujcn-vjatncrwp-355[cnlxa] ohmnuvfy-jfumncw-alumm-womnigyl-mylpcwy-240[biqdh] tyepcyletzylw-awldetn-rcldd-lylwjdtd-275[tsenk] vrurcjah-pajmn-yujbcrl-pajbb-fxatbqxy-511[drzlg] ikhcxvmbex-yehpxk-hixktmbhgl-397[hxkbe] kzgwomvqk-jcvvg-wxmzibqwva-824[mwzye] tfejldvi-xiruv-treup-vexzevvizex-295[evixr] frqvxphu-judgh-vfdyhqjhu-kxqw-pdqdjhphqw-361[hqdjp] yflexwxoalrp-mixpqfz-doxpp-bkdfkbbofkd-497[fpxbd] emixwvqhml-kivlg-bziqvqvo-382[nwsap] mvydjvxodqz-ytz-xpnojhzm-nzmqdxz-863[mitys] hcd-gsqfsh-gqojsbusf-vibh-ghcfous-844[shfgb] wfruflnsl-hfsid-htfynsl-hzxytrjw-xjwanhj-775[fhjln] tbxmlkfwba-zelzlixqb-qoxfkfkd-393[bfklx] xjmmjndqz-wpiit-adivixdib-395[idjmx] wyvqljapsl-jovjvshal-thuhnltlua-201[lahjv] pkl-oaynap-lhwopey-cnwoo-zalhkuiajp-446[aoplh] ugfkmewj-yjsvw-usfvq-kzahhafy-164[fahjk] sebehvkb-hqcfqwydw-sqdto-iqbui-738[qbdeh] mfklstdw-wyy-suimakalagf-814[afklm] htsxzrjw-lwfij-xhfajsljw-mzsy-uzwhmfxnsl-983[jswfh] chnylhuncihuf-vohhs-uhufsmcm-994[hucfm] otzkxtgzoutgr-kmm-iayzuskx-ykxboik-696[kotxz] htwwtxnaj-wfggny-ijufwyrjsy-307[mlrnu] wlsiayhcw-wuhxs-lywycpcha-916[wchya] htqtwkzq-gzssd-fhvznxnynts-931[nstzh] tcfkqcevkxg-ecpfa-eqcvkpi-eqpvckpogpv-570[zvtny] crwwv-yxphbq-obpbxoze-809[bopwx] xjgjmapg-wpiit-hvmfzodib-681[wtrmn] ksodcbwnsr-ibghopzs-qobrm-qcohwbu-gsfjwqsg-324[sbogq] jchipqat-hrpktcvtg-wjci-bpcpvtbtci-323[ctpib] lujbbrornm-npp-mnyjacvnwc-433[nbcjm] xgjougizobk-lruckx-zkinturume-488[ukgio] lxaaxbren-mhn-vjwjpnvnwc-459[najvw] kyelcrga-bwc-pcacgtgle-834[cgael] sgmtkzoi-vrgyzoi-mxgyy-sgxqkzotm-618[gmoyz] surmhfwloh-fdqgb-frdwlqj-uhvhdufk-777[fhdul] vxupkizork-hatte-ynovvotm-670[otvka] amlqskcp-epybc-afmamjyrc-amlryglkclr-704[aclmr] yaxsnlcrun-lqxlxujcn-jlzdrbrcrxw-719[pyomt] ohmnuvfy-vohhs-yhachyylcha-578[xkpiy] wdjcvuvmyjpn-ytz-jkzmvodjin-551[cairj] aflwjfslagfsd-tskcwl-vwhsjlewfl-892[lfswa] hcd-gsqfsh-aoubshwq-gqojsbusf-vibh-qighcasf-gsfjwqs-376[shqfg] gbc-frperg-pnaql-pbagnvazrag-767[agprb] emixwvqhml-jcvvg-wxmzibqwva-876[vmwiq] nuatmlmdpage-omzpk-oamfuzs-bgdotmeuzs-716[maouz] glrcplyrgmlyj-djmucp-mncpyrgmlq-340[acoxz] qczcftiz-dzoghwq-ufogg-hfowbwbu-818[fgowz] apuut-nxvqzibzm-cpio-yzkvmohzio-629[ziomp] gpsxdprixkt-bpvctixr-gpqqxi-prfjxhxixdc-323[jxkig] rmn-qcapcr-njyqrga-epyqq-bctcjmnkclr-704[cqrna] wlsiayhcw-zfiqyl-jolwbumcha-708[swavu] njmjubsz-hsbef-cvooz-usbjojoh-675[jobsh] kpvgtpcvkqpcn-dcumgv-ceswkukvkqp-492[kcpvg] egdytrixat-raphhxuxts-qphzti-steadnbtci-505[tahix] qcbgiasf-ufors-xszzmpsob-rsdzcmasbh-402[ijlzr] kfg-jvtivk-jtrmvexvi-ylek-uvjzxe-217[vejki] vetllbybxw-xzz-hixktmbhgl-917[blxht] htwwtxnaj-idj-fsfqdxnx-931[xdfjn] muqfedyput-fbqijys-whqii-skijecuh-iuhlysu-842[gsjin] dmybmsuzs-pkq-dqeqmdot-144[dmqsb] nvrgfezqvu-wcfnvi-jvimztvj-815[vfijn] aoubshwq-qvcqczohs-gsfjwqsg-272[qscgh] bknsykmdsfo-mkxni-nozvyiwoxd-510[knodi] bnmrtldq-fqzcd-dff-ehmzmbhmf-157[fmdbh] qczcftiz-pibbm-rsjszcdasbh-142[eafby] vagreangvbany-pnaql-nanylfvf-195[anvfg] oxjmxdfkd-zlilocri-yxphbq-abmilvjbkq-497[zvsko] lejkrscv-tyftfcrkv-uvjzxe-191[vcefj] qekrixmg-gerhc-gsexmrk-hitpscqirx-698[regix] xgsvgmotm-hgyqkz-xkgiwaoyozout-462[gokmt] dpssptjwf-dszphfojd-ezf-tupsbhf-961[zyots] jyfvnlupj-lnn-bzly-alzapun-123[uvkxg] jsehsyafy-hdsklau-yjskk-umklgewj-kwjnauw-840[kjsau] vdzonmhydc-bzmcx-bnzshmf-otqbgzrhmf-937[qxzpu] qmpmxevc-kvehi-jpsaiv-stivexmsrw-126[xdsef] ymszqfuo-vqxxknqmz-ymdwqfuzs-300[qmzfs] qfkkj-nsznzwlep-zapcletzyd-561[nxzqv] krxqjijamxdb-snuuhknjw-mnyjacvnwc-771[fgnhu] tfiifjzmv-tyftfcrkv-jvimztvj-529[cgbts] wfruflnsl-wfggny-qfgtwfytwd-957[fwgln] kdijqrbu-tou-vydqdsydw-218[rkftc] cebwrpgvyr-sybjre-freivprf-871[rebfp] fmsledevhsyw-gpewwmjmih-glsgspexi-ywiv-xiwxmrk-958[weims] yhtwhnpun-wshzapj-nyhzz-mpuhujpun-981[hnpuz] muqfedyput-fbqijys-whqii-tufbeocudj-166[ufiqb] vkrhzxgbv-utldxm-nlxk-mxlmbgz-137[xlmbg] jsvagsulanw-ugjjgkanw-wyy-vwhsjlewfl-398[wjagl] xtwtelcj-rclop-nsznzwlep-opawzjxpye-795[pelwz] wyvqljapsl-yhiipa-zopwwpun-383[smzin] ejpanjwpekjwh-xekdwvwnzkqo-oywrajcan-dqjp-oanreyao-264[ajwen] ugfkmewj-yjsvw-bwddqtwsf-ogjckzgh-736[wgjdf] yflexwxoalrp-bdd-qoxfkfkd-965[dfxkl] kdijqrbu-sbqiiyvyut-fbqijys-whqii-bewyijysi-660[iybqj] nzcczdtgp-mldvpe-hzcvdsza-743[tsrmc] eza-dpncpe-upwwjmply-dpcgtnpd-457[pdcen] iruzfrtkzmv-tyftfcrkv-dribvkzex-789[zcudt] tfejldvi-xiruv-srjbvk-crsfirkfip-451[irfvj] otzkxtgzoutgr-igtje-iugzotm-ykxboiky-280[tgoik] ohmnuvfy-luvvcn-ijyluncihm-682[nuvch] eadalsjq-yjsvw-usfvq-ugslafy-jwuwanafy-450[asfju] fkqbokxqflkxi-yxphbq-cfkxkzfkd-653[kfxqb] owshgfarwv-uzgugdslw-vwhsjlewfl-372[wglsf] ygcrqpkbgf-dcumgv-octmgvkpi-414[hzick] ujoon-ytaanqtpc-pcpanhxh-869[anpch] wlsiayhcw-vohhs-lymyulwb-682[areml] dlhwvupglk-zjhclunly-obua-zopwwpun-617[lupwh] iuxxuyobk-inuiurgzk-jkyomt-228[uikox] zuv-ykixkz-hgyqkz-ynovvotm-332[kvyzo] ujqgywfau-bwddqtwsf-kwjnauwk-190[wuadf] frqvxphu-judgh-udeelw-orjlvwlfv-361[luvde] vqr-ugetgv-dwppa-octmgvkpi-102[gpvta] iuxxuyobk-vrgyzoi-mxgyy-iayzuskx-ykxboik-410[yxiko] vhglnfxk-zktwx-ietlmbv-zktll-ltexl-995[ltkxe] ktiaaqnqml-kivlg-kwvbiqvumvb-746[vikqa] zlkprjbo-doxab-pzxsbkdbo-erkq-rpbo-qbpqfkd-601[bkopd] rdchjbtg-vgpst-rpcsn-rdpixcv-hidgpvt-973[pcdgr] ixccb-udeelw-ghvljq-803[celbd] uzfqdzmfuazmx-vqxxknqmz-fqotzaxask-872[uskol] qzlozfhmf-atmmx-cdoknxldms-833[mdflo] bpvctixr-ytaanqtpc-gtprfjxhxixdc-505[mainf] kgjgrypw-epybc-aylbw-bcnyprkclr-678[ybcpr] hqfxxnknji-hwdtljsnh-xhfajsljw-mzsy-fhvznxnynts-645[nhjsx] ymszqfuo-nmewqf-oazfmuzyqzf-352[fzmqo] yhwooebeaz-lhwopey-cnwoo-wjwhuoeo-862[owehy] muqfedyput-fbqijys-whqii-mehaixef-374[iefqh] xqvwdeoh-vfdyhqjhu-kxqw-vdohv-621[hvdqo] pybgmyargtc-qaytclecp-fslr-rcaflmjmew-990[cytzv] fnjyxwrinm-bljenwpna-qdwc-cajrwrwp-849[wnjra] fab-eqodqf-ymszqfuo-otaoaxmfq-pqbmdfyqzf-222[fqoam] drxevkzt-tyftfcrkv-kvtyefcfxp-685[ftkvc] pyknyegle-afmamjyrc-mncpyrgmlq-340[myace] ykhknbqh-ywjzu-ykwpejc-iwngapejc-914[ixmoc] ydjuhdqjyedqb-isqludwuh-xkdj-ijehqwu-530[cryum] dpssptjwf-kfmmzcfbo-mphjtujdt-207[fjmpt] jvuzbtly-nyhkl-yhiipa-zavyhnl-123[yhlai] eqttqukxg-dwppa-fgrnqaogpv-908[pntsf] tcorcikpi-hnqygt-fgrctvogpv-232[cgtio] zotts-wuhxs-qilembij-422[fazws] pelbtravp-sybjre-hfre-grfgvat-273[xwnyt] pbafhzre-tenqr-qlr-erfrnepu-117[refnp] luxciuwncpy-yaa-qilembij-734[iaclu] fbebmtkr-zktwx-wrx-kxtvjnblbmbhg-943[estfp] rflsjynh-hmthtqfyj-uzwhmfxnsl-827[hfjlm] ktwbhtvmbox-vahvhetmx-vhgmtbgfxgm-709[hmtvb] fodvvlilhg-mhoobehdq-vwrudjh-517[hdovl] lsyrkjkbnyec-lexxi-nozkbdwoxd-874[kxbde] njmjubsz-hsbef-gmpxfs-eftjho-597[fjsbe] qyujihctyx-luvvcn-fiacmncwm-604[cimnu] udskkaxawv-wyy-umklgewj-kwjnauw-190[wkauj] sebehvkb-zubboruqd-husuylydw-192[budeh] nzwzcqfw-upwwjmply-dpcgtnpd-795[pwcdn] zloolpfsb-bdd-qoxfkfkd-679[dfobk] fhezusjybu-rkddo-cqdqwucudj-816[enzjf] irgyyolokj-inuiurgzk-jkvruesktz-202[kirug] bnqqnrhud-hmsdqmzshnmzk-atmmx-btrsnldq-rdquhbd-599[dmqhn] avw-zljyla-jhukf-jvhapun-jbzavtly-zlycpjl-149[jlavy] sno-rdbqds-bnqqnrhud-eknvdq-sqzhmhmf-729[qdnhs] slqryzjc-aylbw-amyrgle-dglylagle-392[lyage] hqfxxnknji-hfsid-fsfqdxnx-151[fxndh] vehmsegxmzi-tpewxmg-kveww-pskmwxmgw-308[mwegx] dzczkrip-xiruv-gcrjkzt-xirjj-ljvi-kvjkzex-633[jikrz] mvhkvbdib-zbb-yzkvmohzio-915[bvzhi] ejpanjwpekjwh-xwogap-zarahkliajp-316[ajpwe] dwbcjkun-odiih-mhn-jlzdrbrcrxw-719[drbch] gifavtkzcv-sleep-jkfirxv-633[vefik] oxmeeuruqp-dmpuamofuhq-vqxxknqmz-oazfmuzyqzf-898[mquzf] myvybpev-mkxni-mykdsxq-nocsqx-432[mxykn] aczupnetwp-awldetn-rcldd-cpnptgtyr-431[ptcdn] fab-eqodqf-dmnnuf-geqd-fqefuzs-222[fqden] encuukhkgf-fag-ucngu-440[ugcfk] cvabijtm-moo-twoqabqka-980[aobmq] sawlkjevaz-lnkfaypeha-zua-opknwca-888[hlzus] wfintfhynaj-ojqqdgjfs-yjhmstqtld-281[ibnmv] kmjezxodgz-nxvqzibzm-cpio-gjbdnodxn-421[zdnox] dfcxsqhwzs-qobrm-qcohwbu-qcbhowbasbh-402[bhqco] joufsobujpobm-kfmmzcfbo-vtfs-uftujoh-441[orwsq] nvrgfezqvu-treup-rthlzjzkzfe-607[zerft] kfg-jvtivk-sleep-uvjzxe-555[evjkf] jfifqxov-doxab-oxjmxdfkd-avb-zlkqxfkjbkq-627[xfkbd] hcd-gsqfsh-qobrm-qcohwbu-rsgwub-350[bhqsc] xst-wigvix-hci-hiwmkr-464[ihwxc] yhwooebeaz-bhksan-odellejc-368[eoabh] sehheiylu-zubboruqd-sedjqydcudj-452[mvars] mybbycsfo-pvygob-cobfsmoc-302[amnsc] ziuxioqvo-xtiabqk-oziaa-lmxtwgumvb-746[iaoxb] gbc-frperg-sybjre-nanylfvf-377[xfjqz] zekvierkzferc-dzczkrip-xiruv-tyftfcrkv-tljkfdvi-jvimztv-191[rhqtz] lhkhszqx-fqzcd-idkkxadzm-cdrhfm-209[dhkzc] mvkccspson-pvygob-bokmaescsdsyx-224[lkdtm] vqr-ugetgv-dwppa-fgxgnqrogpv-336[nmitq] nzwzcqfw-clmmte-pyrtyppctyr-717[lvyuh] wsvsdkbi-qbkno-gokzyxsjon-lkcuod-bocokbmr-822[okbsc] pyknyegle-djmucp-umpiqfmn-158[mpenu] iqmbazulqp-rxaiqd-efadmsq-170[qadim] irdgrxzex-sleep-dribvkzex-789[erxdi] cxy-bnlanc-lxwbdvna-pajmn-yujbcrl-pajbb-orwjwlrwp-953[bajln] wdjcvuvmyjpn-wpiit-yzqzgjkhzio-317[mtbqs] rdchjbtg-vgpst-hrpktcvtg-wjci-hpath-661[zypto] bwx-amkzmb-kivlg-kwibqvo-kwvbiqvumvb-980[htfdv] sedikcuh-whqtu-zubboruqd-cqhaujydw-348[udhqb] mbggf-jhukf-jvhapun-ylhjxbpzpapvu-149[phjua] lzfmdshb-oqnidbshkd-cxd-sqzhmhmf-989[dhmsb] zbytomdsvo-lkcuod-bokmaescsdsyx-510[osdbc] iuxxuyobk-kmm-aykx-zkyzotm-384[nqfaj] ejpanjwpekjwh-xwogap-odellejc-654[ejpwa] dwbcjkun-yujbcrl-pajbb-anjlzdrbrcrxw-589[bjrca] diozmivodjivg-ezggtwzvi-hvivbzhzio-239[ivzgo] vqr-ugetgv-ecpfa-eqcvkpi-hkpcpekpi-362[peckv] sxdobxkdsyxkv-mybbycsfo-mkxni-cobfsmoc-926[fnpzo] yflexwxoalrp-zxkav-xkxivpfp-913[xpafk] frqvxphu-judgh-hjj-whfkqrorjb-569[hjrfq] sbqiiyvyut-rkddo-tufbeocudj-218[dubio] esyfwlau-tmffq-kzahhafy-112[sadtv] pbeebfvir-pubpbyngr-genvavat-715[zjqiy] rgllk-vqxxknqmz-etubbuzs-534[bklqu] nchhg-bwx-amkzmb-lgm-nqvivkqvo-486[mvbgh] ykhknbqh-xqjju-hkceopeyo-160[utmir] tmrszakd-okzrshb-fqzrr-sqzhmhmf-937[rzhms] zhdsrqlchg-fdqgb-frdwlqj-vwrudjh-127[dhqrf] eadalsjq-yjsvw-bwddqtwsf-ugflsafewfl-164[fswad] sbejpbdujwf-kfmmzcfbo-xpsltipq-883[bfpjm] kfg-jvtivk-vxx-rthlzjzkzfe-919[kvzfj] ltpedcxots-eaphixr-vgphh-gthtpgrw-349[hptge] bxaxipgn-vgpst-jchipqat-rpcsn-rjhidbtg-htgkxrt-531[tgphi] clotzlnetgp-ojp-lylwjdtd-743[cqzyk] zlkprjbo-doxab-zelzlixqb-pxibp-315[blpxz] etyyx-bzmcx-qdzbpthrhshnm-755[bksta] eqnqthwn-ecpfa-ceswkukvkqp-336[ekqcn] jvyyvzpcl-ihzrla-zlycpjlz-383[lzycj] wbhsfbohwcboz-pwcvonofrcig-suu-cdsfohwcbg-896[cobwf] nwzekwypera-bhksan-nayaerejc-186[aenkr] tmrszakd-eknvdq-lzmzfdldms-989[dmzkl] szfyrqriuflj-wcfnvi-rthlzjzkzfe-971[nhmbi] yflexwxoalrp-pzxsbkdbo-erkq-pbosfzbp-653[wctun] iehepwnu-cnwza-ywjzu-ykwpejc-zalwnpiajp-524[czsja] vkrhzxgbv-vtgwr-vhtmbgz-mktbgbgz-553[kweyh] vetllbybxw-vtgwr-vhtmbgz-mxvaghehzr-553[vzicb] rgllk-qss-etubbuzs-430[sblue] udglrdfwlyh-gbh-ghyhorsphqw-465[hgdlr] krxqjijamxdb-kdwwh-vjatncrwp-823[kvmoi] tpspahyf-nyhkl-kfl-aljouvsvnf-981[flahk] bxaxipgn-vgpst-qphzti-rdcipxcbtci-635[ipctx]";
var sumId = countSum(dane);
// 89274 – zły wynik
// 361301 – też zły 😉
console.log(sumId);
}

view raw

main.js

hosted with ❤ by GitHub

Funkcja countSum(dane) do podglądu tu. Poza tym, że przyjmuje argument ,to na końcu zwraca sumę za pomocą instrukcji return sumId;

Teraz mogę stworzyć funkcję test(dane)

function test() {
var data = "aaaaa-bbb-z-y-x-123[abxyz] a-b-c-d-e-f-g-h-987[abcde] not-a-real-room-404[oarel] totally-real-room-200[decoy]";
if (countSum(data) === 1514) {
console.log("Wynik testu prawidłowy")
} else {
console.log("Wynik testu nieprawidłowy")
}
}

view raw

main.js

hosted with ❤ by GitHub

Do funkcji countSum przekazuję dane testowe i potem sprawdzam, czy wynik jest równy 1514. Wywołanie funkcji test dorzuciłam do HTML-a analogicznie do wywołania funkcji solution()

<script type="text/javascript">
test();
solution();
</script>

view raw

day4.html

hosted with ❤ by GitHub

Otworzyłam plik html w przeglądarce i odpaliłam  konsolę developerską w Chromie (klawisz F12), żeby zobaczyć czy test wyszedł poprawny i jest ok 😉

Zaznaczenie_034.png

W tym miejscu mogłabym sobie przygotować jeszcze więcej testów, które będą sprawdzać dane dla kłopotliwych przypadków jak na przykład ten z sortowaniem alfabetycznym.

function test_equal_occurence_of_letters() {
var data = "molgbzqfib-bdd-mrozexpfkd-289[bdfmo]";
if (countSum(data) === 289) {
console.log("Wynik testu prawidłowy")
} else {
console.log("Wynik testu nieprawidłowy")
}
}

view raw

main.js

hosted with ❤ by GitHub

Wiemy, że ten ciąg jest prawidłowy, więc suma powinna być równa 289.

Gdybym robiła to w metodyce TDD powinnam pisać takie testy do momentu aż znajdę przypadek, dla którego wynik testu będzie nieprawidłowy. Chcę się jednak skupić na tym co w kodzie można by było poprawić i liczę na to, że w toku refaktoryzacji znajdę ukryty błąd.

Więc, czym można się teraz zająć? Może na warsztat wezmę kawałek kodu:

for (i = 0; i < instructions.length; i++) {
encrypted.push(instructions[i].substring(0, instructions[i].length 10));
id.push(parseInt(instructions[i].substring(instructions[i].length 10, instructions[i].length 7))); // od razu zmiana na liczbę, żeby nie było problemu przy sumowaniu
checksum.push(instructions[i].substring(instructions[i].length 6, instructions[i].length 1))
}

view raw

main.js

hosted with ❤ by GitHub

Ten kawałek odpowiada za to, że z instructions[i], który przedstawia pojedynczą instrukcję  wyciągamy poszczególne części odpowiedzialne za zakodowaną nazwę, id i sumę kontrolną. Jednak jedyną stałą długością jaką mamy podaną w zadaniu jest długość sumy kontrolnej. Co by było gdyby ID różną długość? Możemy się przed tym zabezpieczyć wykorzystując wyrażenia regularne, które potrafią więcej niż tylko usuwać znaki ze stringa.

for (i = 0; i < instructions.length; i++) {
var instruction = instructions[i];
encrypted.push(instruction.match(/^[a-z]+/)[0]);
id.push(parseInt(instruction.match(/\d+/)[0]));
checksum.push(instruction.match(/\[([a-z]{5})\]/)[1])
}

view raw

main.js

hosted with ❤ by GitHub

Na początek tworzę sobie zmienną instruction, do której przypisuję wartość z instructions[i] – lepiej się czyta taki kod i zajmuje mniej miejsca 😉 Teraz za pomocą wyrażeń regularnych z funkcją match wyciągam poszczególne części:

  • instruction.match(/^[a-z]+/)[0] -> można to tłumaczyć jako “zacznij wyszukiwać od początku łańcucha (^), wyszukuj dopóki znajdujesz litery[a-z], tych liter będzie jedna lub więcej (+)”. Funkcja match zwraca w odpowiedzi tablicę, w pierwszym elemencie ([0]) jest to czego szukamy, czyli nasza zakodowana nazwa pokoju.
  • <span class="pl-smi">instruction.match(/\d+/)[0] -> “wyszukuj liczby (\d), będzie ich jedna lub więcej (+)”
  • instruction.match(/\[([a-z]{5})\]/)[1]-> “znajdź [, później będą litery, będzie ich 5, a potem znowu ]. Tutaj korzystamy z () w celu zaznaczenia, że te [] nie są brane pod uwagę w końcowym wyniku. Teraz pierwszym elementem wyniku będzie ciąg razem z nawiasami klamrowymi [abcde], a dopiero drugim elementem będzie nasza szukana grupka abcde.

Do zabawy wyrażeniami regularnymi polecam różne kompilatory online np.  http://refiddle.com/. Można tam na żywo dopasowywać różne wyrażenia i sprawdzać co się dopasuje w każdym wypadku.

Teraz wezmę na warsztat kolejny kawałek kodu:

var x = encrypted[i].split("");
var y = x.sort(); // tu będzie ["a", "a", "c", "c", "e", "e", "e", "f", "j", "l", "m", "n", "o", "p", "p", "p", "p", "t", "u", "w", "x", "y", "y", "y", "z"]
var a = y.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"]
var b = a.slice(0, 5);
var c = b.toString();
var re = /,/gi;
var d = c.replace(re, ""); //dostaniemy 5 najczęściej występujących liter
finall.push(d)

view raw

main.js

hosted with ❤ by GitHub

Ten kod bierze zakodowany ciąg znaków, zamienia go na tablicę – elementem tablicy jest pojedyncza litera. Później sortujemy tablicę alfabetycznie. Metoda byCount zlicza wystąpienia poszczególnych liter i  zwraca tablicę, w której litery są posortowane po ilości wystąpień. Slice (0,5) bierze 5 pierwszych elementów z tablicy. Metoda toString łączy nam elementy w stringa rozdzielając każdy element za pomocą przecinka. Tworzymy wyrażenie regularne wyszukujące wszystkie przecinki i usuwamy je ze stringa. Wynik odkładamy do tablicy finall.

Zacznijmy poprawiać kod od końca. Jeśli zamiast metody  toString na tablicy użyjemy join('') dostaniemy od razu litery w oczekiwanej formie – bez ‘,’ pomiędzy literami.

var x = encrypted[i].split("");
var y = x.sort(); // tu będzie ["a", "a", "c", "c", "e", "e", "e", "f", "j", "l", "m", "n", "o", "p", "p", "p", "p", "t", "u", "w", "x", "y", "y", "y", "z"]
var a = y.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"]
var b = a.slice(0, 5);
var c = b.join('');
finall.push(c)

view raw

main.js

hosted with ❤ by GitHub

Jako że na samym początku poprawiony został błąd z sortowaniem, to tutaj już to sortowanie nam się nie przyda i może zostać usunięte 🙂

var x = encrypted[i].split("");
var a = x.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"]
var b = a.slice(0, 5);
var c = b.join('');
finall.push(c)

view raw

main.js

hosted with ❤ by GitHub

Na razie zostawię to tak jak jest i przejdę do metody byCount();

Array.prototype.byCount = function () {
var itm, a = [], L = this.length, o = {};
for (var i = 0; i < L; i++) {
itm = this[i];
if (!itm) continue;
if (o[itm] == undefined) o[itm] = 1;
else ++o[itm];
}
for (var p in o) a[a.length] = p;
return a.sort(function (a, b) {
if (o[b] !== o[a]) {
return o[b] o[a];
}
return a.charCodeAt(0) b.charCodeAt(0);
});
};

view raw

main.js

hosted with ❤ by GitHub

Na pierwszy rzut oka – dzieje się tutaj dużo.

  1. deklarujemy i initializujemy różne zmienne
  2. tworzymy słownik (dictionary) zawierający pary klucz-wartość, gdzie kluczem jest  litera, a liczba wystąpień to wartość
  3. wyciągamy litery ze słownika
  4. sortujemy tablicę w zależności od częstotliwości występowania danej litery + alfabetycznie jeśli występują tak samo często.

Step-by-step. Deklaracja zmiennej powinna być przypisana jak najbliżej miejsca jej pierwszego użycia.

Array.prototype.byCount = function () {
var L = this.length, o = {};
for (var i = 0; i < L; i++) {
var itm = this[i];
if (!itm) {
continue
}
if (o[itm] === undefined) {
o[itm] = 1
} else {
++o[itm]
}
}
var a = [];
for (var p in o) {
a[a.length] = p;
}
return a.sort(function (a, b) {
if (o[b] !== o[a]) {
return o[b] o[a];
}
return a.charCodeAt(0) b.charCodeAt(0);
});
};

view raw

main.js

hosted with ❤ by GitHub

Metoda troszkę się rozciągnęła, bo  ja lubię mieć klamerki – lepiej wtedy widzę co się dzieje w kodzie 🙂

Punkt 3. wyciągamy litery ze słownika – linie 16:19, to nic innego jak wyciągnięcie kluczy ze słownika, które można by zamienić na Object.keys(o), od razu zmienna a może dostać bardziej adekwatną nazwę.

Array.prototype.byCount = function () {
var L = this.length, o = {};
for (var i = 0; i < L; i++) {
var itm = this[i];
if (!itm) {
continue
}
if (o[itm] === undefined) {
o[itm] = 1
} else {
++o[itm]
}
}
var keys = Object.keys(o);
return keys.sort(function (a, b) {
if (o[b] !== o[a]) {
return o[b] o[a];
}
return a.charCodeAt(0) b.charCodeAt(0);
});
};

view raw

main.js

hosted with ❤ by GitHub

Jeszcze pozmieniam nazwy zmiennych żeby były bardziej czytelne co w nich siedzi i idziemy dalej:

Array.prototype.byCount = function () {
var array_length = this.length, dict = {};
for (var i = 0; i < array_length; i++) {
var letter = this[i];
if (!letter) {
continue
}
if (dict[letter] === undefined) {
dict[letter] = 1
} else {
++dict[letter]
}
}
var keys = Object.keys(dict);
return keys.sort(function (a, b) {
if (dict[b] !== dict[a]) {
return dict[b] dict[a];
}
return a.charCodeAt(0) b.charCodeAt(0);
});
};

view raw

main.js

hosted with ❤ by GitHub

Wróćmy jeszcze na chwilkę do poprzedniego fragmentu:

var x = encrypted[i].split("");
var a = x.byCount(); // tu uporządkowane wg częstotliwości ["p", "e", "y", "a", "c", "l", "m", "n", "z", "f", "t", "u", "w", "x", "j", "o"]
var b = a.slice(0, 5);
var c = b.join('');
finall.push(c)

view raw

main.js

hosted with ❤ by GitHub

zmienimy tu nazwy zmiennych i połączymy slice z join w jedną linijkę:

var letters_table = encrypted[i].split("");
var sorted_letters_table = letters_table.byCount();
var counted_checksum = sorted_letters_table.slice(0, 5).join('');
finall.push(counted_checksum)

view raw

main.js

hosted with ❤ by GitHub

Teraz możemy popatrzeć na kod całościowo. Możemy zauważyć, że wykonujemy 3 pętle po całości zbioru. Zbiór ma około 1000 elementów. Sprawdźmy, czy można by było to połączyć i zrobić wszystko podczas jednej pętli, bo tak naprawdę nie potrzebujemy przechowywać wszystkich pośrednich wyników parsowania i wyciągania nazw, sum kontrolnych i id. Potrzebujemy tylko sumy ID jeśli pokój jest prawidłowy. Innymi słowy, tylko sumId jest nam potrzebne poza pętlą 😉

var sumId = 0;
for (var i = 0; i < instructions.length; i++) {
var instruction = instructions[i];
var encrypted = instruction.match(/^[a-z]+/)[0];
var id = parseInt(instruction.match(/\d+/)[0]);
var checksum = instruction.match(/\[([a-z]{5})\]/)[1];
Array.prototype.byCount = function () {
var array_length = this.length, dict = {};
for (var i = 0; i < array_length; i++) {
var letter = this[i];
if (!letter) {
continue
}
if (dict[letter] === undefined) {
dict[letter] = 1
} else {
++dict[letter]
}
}
var keys = Object.keys(dict);
return keys.sort(function (a, b) {
if (dict[b] !== dict[a]) {
return dict[b] dict[a];
}
return a.charCodeAt(0) b.charCodeAt(0);
});
};
var letters_table = encrypted.split("");
var sorted_letters_table = letters_table.byCount();
var counted_checksum = sorted_letters_table.slice(0, 5).join('');
if (checksum === counted_checksum) {
sumId += id
}
}
return sumId;

view raw

main.js

hosted with ❤ by GitHub

Jeszcze wyjmę z tej funkcji funkcję byCount na zewnątrz, bo w tym miejscu tylko mi to zaciemnia. Dodatkowo przeniosę dane do osobnego pliku, bo są one mi tutaj wcale nie potrzebne 🙂

Co jeszcze można tu zrobić – można poprawiać i poprawiać, jakby się człowiek uparł, to nigdy może nie skończyć. Ja bym zrobiła jeszcze tylko jedno – zamiast 3 wyrażeń regularnych użyję tylko jednego, połączonego:

var grouped_instruction = instructions[i].match(/([a-z]+)(\d+)\[([a-z]{5})\]/);
var encrypted = grouped_instruction[1];
var id = parseInt(grouped_instruction[2]);
var checksum = grouped_instruction[3];

view raw

main.js

hosted with ❤ by GitHub

Zerowy element tablicy to dane wejściowe, a potem po kolei wszystkie dopasowane elementy z nawiasów okrągłych.

A gdzie był błąd? błąd był w danych wejściowych 😀

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

%d bloggers like this: