var jsplayermodule = (function() { var _scriptdir = typeof document !== 'undefined' && document.currentscript ? document.currentscript.src : undefined; return (function(jsplayermodule) { jsplayermodule = jsplayermodule || {}; function growable_heap_i8() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heap8 } function growable_heap_u8() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heapu8 } function growable_heap_i16() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heap16 } function growable_heap_u16() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heapu16 } function growable_heap_i32() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heap32 } function growable_heap_u32() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heapu32 } function growable_heap_f32() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heapf32 } function growable_heap_f64() { if (wasmmemory.buffer != buffer) { updateglobalbufferandviews(wasmmemory.buffer) } return heapf64 } var module = typeof jsplayermodule !== "undefined" ? jsplayermodule : {}; var readypromiseresolve, readypromisereject; module["ready"] = new promise(function(resolve, reject) { readypromiseresolve = resolve; readypromisereject = reject } ); if (!module.expecteddatafiledownloads) { module.expecteddatafiledownloads = 0 } module.expecteddatafiledownloads++; (function() { var loadpackage = function(metadata) { function runwithfs() { var filedata0 = "aaeaaaapaiaaawbwtfrtsctsvseaasp8aaabje9tlzjwxhuraaaa/aaaafzjbwfwelxsegaaavqaaarqy3z0idgera4aaaxaaaab7mzwz20h2zgkaaahsaaab7pnbhlmqd7rnwaad2waamhoagrtec7mkdoaapj0aaaxighlywtppz8aaadrvaaaadzoagvhdlugrgaa0ywaaaakag10ei2fexmaangwaaagigxvy2glifw0aadx0aaaaxjtyxhwbtgcmqaa2uqaaaagbmftzamei/maanseaaadinbvc3rn7elbaadekaaadotwcmvwyk2naaaa7rwaaavxaaeegak8aauaagtobckaaamwbm4ekqaaaxyazamgagacagccbwueagieaaaabwaaaaaaaaaaaaaaaeimsaaaiaag+dmgrp5cakchmwg1iaaakwaaaaaaaaaaaaiaaqaaaaaafaadaaeaaaeaaaabbgaaaqaaaaaaaaabawaaaaiaaaaaaaaaaaaaaaaaaaabaaadbaugbwgjcgsmdq4pebesexqvfhcygrobhb0ehyahiimkjsynkckqkywtli8wmtizndu2nzg5ojs8pt4/qefcq0rfrkdisuplte1ot1brulnuvvzxwflaw1xdxl9gyqbiy2rlzmdoawprbg1ub3bxcnn0dxz3ehl6e3x9fn+agykdhiwgh4ijioumjy6pkjgsk5svlpeymzqbnj2en6choqokpaanqkmqqwktrq+wsbkztlw2t7i5ursavl2+v8dbwspexcbhymnky8znzs/q0dlt1nxw19jz2tvc3d7f4aaea1aaaabuaeaabqauah4bfwgsahscxwljat0djgpaibagfcaaib4giiamidagoibeihqgrceiisyiaiigig8ieiiaih4ikyjiimaizsxk8al2vvgh+av4efgv+b/4m///aaaaiacgazicgalgaskc2amma8agecatibgghcagicygmca5ieqgdccsisihjiicigyidyirihkihiirikgiycjkjcrwapa++ap4cvgo+bt4h/gz////4waa/xt/vwaa/haaap5n/nvhzocfaaaaaaaa4ixglece4thhaudl32rfed6w3qleiwaaaadedn5x3l/el94w2u8aaaq6cxyjdalycxajzwluaaeaaabsaaaaaaimaaacdaaaaaaaaaaaag4cegiwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaieagyaaaaaaaaaaaaaaaab/aaaaaaaaaaaaaaaaaaaaaaaracjaiqahqc8ajya5wcgai4aiwcdakkapaeaaiobaqcdajma8qdyai0alwciaqia3qdwaj4aqgd0apma9qciak0ayadgak4aygbjajaazadkaguaxwdjam4aywdmam0a6abmaniazwdqak8azwdvajea1qdtanqaaadqaowaiqbqagkaawbtagwabgcgag8acqbwahiacwb1ahqadgb3aokaeab6ahkaewb9ahwauachah8afgcaaiea6wdtalobaweeaqubbgehaqga+wd8aqkbcgelaqwa/qd+aq0bdgepap8beaeraribeweuarubfgexargbgqeaarsa9gd3arwbhqeear8biaehasibiwekasubjgenasgbkqeqassa+adwaswblqeuas8bmaexatibmwe0atubnge3atgboqe6aoea4ge7atwbpqe+at8bqafbauibqwfeauubrgfhaugbsqcwalebsgflauwbtqfoau8buafravibuwd5apoa4wdkavqbvqfwavcbwafzavobwwfcav0bxgffawabyqfiawmbzaflawybzwfoawkauwfqawsbbaftaoua5gfuanca4adaansa3adfanga3gc2alcawwc0aluaxaccameahwczao4awgclaneavwdaaaagkwazaaafyaalaaafyaalaaaaaaaaaaaaaaaaaaaesgazaaaaap/baaaaap/naaaaap/baad+df/naaagkwam/tj/9aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaq+aaaaaaaaaaaaaaaacaaaaagaaaaeaacmagkaywciafwa0gegak4azwdfapuavaewania0gaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeaeqapoatgbaaliapgaa/07/wgaaamsatwaa/zx/sqaaaowcxgaaaaaaaaaaaaaaaaaaaaaaqf+/auaalaewaaabkabuauabhaeoaaabawbnauabhaeoapcbawbnaaabkacjag8ayqeoaloakabcaaaa8ab9afwaaab2aqkbeqcgaigaoaciajqaiabcafwbawbcaaaaaaaaaaaaaafbaueaxgbcasgbkaaaaaaaaaaaaaaaaaaaaaaalacuajqbkaeoamiaogfbaeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaf//oqaaaaaaaacuahuaxaaaaaaaaade/yiaaaaaaaaaaaaaag8axp6/ak4digehapcaaabdaeqbuajq/+oa5aaaaeyanaaaqebssug8ozo5odc2ntqzmjewly4tlcsqksgnjiukiyihib8ehrwbghkyfxyvfbmserapdg0mcwojcacgbqqdagealaeysbhdwevqsbldylami0qjeccwde7wts+wabibismridmvws0sariwgenysaursaats7auufixaea4wbagkxshixegmy9zlswbglayq1hosamlepihsaastrsgrbaejbaejsnkywswkfjyismq1huwayuq8igwabjzws0ssbpdwcehg7acjbacjumwaywwayvkysbksbbqwcehiruwaywwayvjsabqwlaaufi4/+i4iruwadghwruwafjysb44iruwadghwvlzws0sariwgenysaursaats7auufi5aad/wdhzsayrgyejesazl1ktle4bihcxdbldrlaafleadokwabw5aad/8dgasaa8scgrsailelaapc0sariwac+wartysaetsaevtbaaei0sariwgenysaursaatuqaa/+a4sayrgyejesazl1ktlaeysbhdwevkainfzgmwgunkygcwdcneixagsazwl7aaehshisckiipswbezgyehwvktlaflsmhrwlelckmjq2ukws0saeuwyffyalekc0mjqwtzlswasawjclebdd4bsawjclecdeu6sqiaca0tllask7acjuwwaivfarbai2cwaiujrcehis0ssbmrsailrbacjuvqup/ajgcwaiujrcehis0ssacweishisetllaasbmrisehlswbs7diuviwbkowb0nlclktlcbpsebhsaclileswiqmubaaymardgqjzgfcwladyvktlleaayvfafswhetqwliwayvfsamlrwboilaejsnesaqli0qbsamlievoiiojrladjuvoyladjsnews0ssamlievoiiojrladjuvkagvgsaqlsafgi0qtllajq1ihicabsbjdwidfsbersa0jrlaneuqba4pfggkgsa0jriqkhycwoffysbersa0jrlaneuqbibaneurzwvkylswgikujrwhgrc0srwpclswbgc8tlaeysbhdwlaejbaejulki0vkabbai2egsibiaracjbacjwgmsbldylami0qhihcwdpyhgyehisfzlswbsbhdwlacjuwwaivfzgbqsamlrwphilaejuvqiiqlzbaejsnejladjsneisebievqrcbfakrzlswbiewwafwwgenawevoi0vpseclyscwggjqiiojyscwaywlzbaejsnejladjsneisebisgwgstzlswbiopfzcnfzgfkqi0ssaqlsaqlsbkrsbhdwlaejbaejbadjbabkwgwaivdsebusailq7aavfpysamliewwqgfewbacjuowafswaivdsebuwliwbcugrbbayerzwsehisetlladjscwbywhbs4jiiqwbcwwbywwfcsqicqhlszalsxlulhfrbshivktllacq1g97rgb7vktletqwevegyehws0sarhlulikl+0bisehws0ss1mjs1fawladjuvosamlrwiwayvgvfghisebsailrwhgsamli0qhivkbisehws0ssajdwd3ngbvnws0sringyiqkrimgropgimg4/4biiyaqi4qxdaykcevgilaaufiwawg4/7qlg7bgjfmwegboatotlcbfsamlrljlsbnrw1iwaivgighhsamlsamlpymhobshevktlcbfsamlrlbysailriboybadjbadjt8jitgbirfzlswas7diuvgasaddsazdc1ktlioq7c0ssaxdwcebieawafjyup/wobuwedhzws0silaavvi4eabjsamlrwswayvfzggwafnysaibsebhsanzjuvpu1hfrbshivkbibacjuwwaivfywswkffyruqbisfzws0sisemzcnki7haagitlcgwgffydgqjziu4iabig7iaqc8rwbacyc0sibdauvgmzcnki7gvvwibsgcalytzsajglswmzcnki7haagjgiyetlbhlu1iwbcwwbcvjzcnfzgmwqithilcaymqwaiwwaivhjlami0qhihcwdpyhgygkesmsidkvws0ssailsailswswwfryup/4olaiobshivktllatq1gdgwjzlsywe0nyahsdws0ssaorixagplaxky0ssailup/wolaok4oqiydqi7aqk7afq1jagzxzibarsaasas0ss1mjs1fawdgbisfzlswbsailenajyqgwarowabqqsae8saewlswbsaatsagwayvjsamxolabey0ss1mjs1fawcbfimbegyehws0sgettwlaejbaejulksamlsamlswroseclyscwggjqsailsailyyywdcneibaejrajsaz2g7aejbaejresiya5l1nmisetlaeysbhdwlafjuyjrwrhgygwbcwwbcvkwbaoi0qjelao7cmqsa7slsywg0nyilabyewwaffyilabycbfigiwafvyscbgrcebisehwrsgsafgieugalaavvi4/+bgrlacs1byiewwigbegyfzgyehivlzgyfzlsxluynluvpyobshivktletuwdgbisfzlsxlulh9g3pzlqaaaaibaaaabqafaaadaacaacerirelirehaqaeapxaa4d8gaua+wbabiaaaaiaewaaaamfyaadaakaleawbgqbaalobwrobgcga8aaqaolambkmcsbghgqte0zmhdleoual93glzewnzuhfqmdesera3sbkmjmashmapf3aamc/qeo/tj9awaaagbma9sdsgyraamabwbiqcweawucaadobgroaayqbiagawbabqboaqnodwefas8bawkdacacqagjaguyoisbghgqte1fxl3leouq7v3leouapzpnmjewewmhayediqpjyweoywfayweoygpbald9sajq/baaaaiakaaabsmfyaabab8a10b6lxiblx8bdxitfhcofwwehrkydrglhxwagwobcaueaqajamcoacckaq0xdhe/ga0ugbgncrskg78acrqaaaklda8dcl4fhx4sawuagrydab4ehb0tawqfbaueaaondgmjaxcygwmaehcycqoychgkaa0ofbahgwagaiaq1sbgmhdwxmyyetk5ly8rmxezad8xmz8xmxi5os8verczeo0xmhexmxdtfzkhbrarh33ehxgqk4d9xafdxrchxmtexbchxmtexbchxmtexbchxmtexdewav1dnxmhnyetitchezmdirmzayehiqmhbyedixmhaxmheyhbcp7dgaeqwv7dgwfbbobvasftgg8bihj+2fobohj+wg+ab/7gb40bivv+4aabshsbcnwbr/5raa/+uxz+jnv+uagw/lackwfyaamarf9gbfigaqamacwamqg0qcsglqfdlgsbosmbfimbrcnuiwimedyqahycvgkwagmgahycjgidrchukaioup/gqjwsfujlkwgpkwgumqftl90vai8wehhihi0xidescw0rnicgiaiwicygvibmiaqjk3kr2svpk/krbyqx1decbde0mqijew0bcq0pdqkwdqermsaxjq0rfa0nkwqgaxkgusaccycliksgyydbiosgbjynlg32dqmsdsinaginsg0cdsarmqqkhrhacqxigj8afxaxag4xlh2bfbivbgs4/8baiqkmsasfayckmwalasaxijardskpacyssgssshuvhkpac7j/wea9cqxidy0fls8taxidluajduglltaplupkmc0llqspmbljgcmmcckaigiimwvjdwqfbc8eawqwjaapea8cd7j/wlmpekgplytd7dzx7rdwxe3u7resotkvlysbgbdfk19exssate0yeo0q7tizeri5oresotkalzpn7tlv7ss/xc3tmtvexe0rerixov1xxv1dcycqk4d9xabdxv1exxfdxxghxmqqh8temtaak3fdxv0rcxfycxfxcxjexqu1jccrmxcwfrqfescmjju0njc1mxuwfxejjycmjxexfhyvfayhfre2ntqmjwmrbhuuald+6yyiaqmbfzxfgn+6xej2iaeecmnwoxxlwko+beszokaymgeceykumrycisapqxecyg2zoryt/uotrzmv/f5kaqz5rt8noaenmltnw1abvwhbqzxraaafacp/2wxxbe0aawalabmagwajau+5aap/6echhcfiargciugyaqhiafgbaqkdur0cqr+5hwkmi7yjaqyhtiecqq25dqkpd7kpaqytthmcphg2eqi0g0qbvbsdnblegvqz1bkeoxvlfvsv2xueoxdlf1sxazqlratucwm0cuqjvanucqtybqe7busfwwxbbqq7b0shwwcdaqmca78aarqaaaeyup/wqakjdegueakmsai4//bajakmsaqqcqxiaqiedjsedg4ugbcbcamgmxgcmxqsawatxhobgrj/8eapcqxiyrybfhajdejgcgekup/wqa4jdejjbgegeakmsaiqalj/8eataqiaawagik8whk8ajq5pchjpbi/t1o0q3u3u7rdemhdemjg4k10rxstdk10apzm/7dttp+1jrpttpzmrkysrhwuqk4d9xdewaxfxcnfxcxfxcv1dxv1dxv1dxxerkxcbmwetibeqisarecuyerajiheqasarecegeralmheqiyirec0e9ct7azn+owfiawl+m4wcgwoi/qmbygfi/pugg4mlbhl57gmgaxabd/6o/otfarcbev7r/uz8wafwaxb+jv6mxwexarl+6/7saaadadr/2wyebe0akwa0adwbr0bi9iqbljwbki8bjhubphubtzubeqfzbwiemnqyhdiddgyedgqccwqbbainbhebwjyratyraq4gfrhibg4wdiyoayuueju8jzwblc4icsc8ofi8ugkafakjadw1egkucgysark4/8czcq5iclj/webscq5ieggscdkcfcusar0blqeccwfbaxsbax0llsuccyv7jzslayubax4eg6ychco5kw0ejyqmadoraxm3uaaqebagefaqobafebajoycakymcorzrab0bhaejpjwjo1iacjakqapqcgqkmfigl+3uxe0zmhde5f395bduztirejkvxe0ap+0v7ti/7ri5l+0yeri5ov1dxv0rmxezeri5orkvlysrxrezmxezm4cyecsfkxdeeh3exmteeifexmtemtabxstdcl5dxl1dxl1dxxfycgbdxsunbimiaduqjsy1ndyzmhyvfausfzy1ncyvajuhfqchigyhbgcxfhyxfxuljgmgfrqwmzidnju0iyivfaqstavp6/7aax104ku02f6qw6rhitiqewhheiwwiacsszszrwos/c7f4jtap2tpj4ckafr5arpjatwmu3imtqel8hp+wcz5l0uvawmbxv0bailhn8jiph8hav2e/qgneluv5qnfgkljrhwaaaeaywpcaaqgkwadacnaegabaanoagboaq8bqaqfaa9kmcsbghgqte3leouap80xmbmdiqpsbwfbbwpcamn9lwabad7+zajubjcadqboqdspbtkfagynfg0ccqkzcqilcqibq1kcaqk5avkcbaqcfaiccwkgaumzbgf5btkgaiqgnayccbailwcfalj/8eajajcbiqcbc4uel/3emga/7tg/7tgxmafdcxjexv5dcv5daf5dxxeffsyaeraanxugaheqegju8/7dasbwf29v2fydagcblqeoagubxhp+b/6q/qz+bgaaaqbk/swcyay3aa0abea9jgu2bqijdrknagyjfgkccwycaunwamyctgl2agqlahscagsgbgfdfgybdgagbtygaysgowycabaalwefclj/8eakcjchiqehc4uedxdw/cqyad/tod/todewav1xcl5dxl1xxl0axl1dcrm1fgareaahntyseracsvibjp7a8h5vbwxbxip9+f7t/tj99yfccwgsavqbvggraaafadmc2anfbcgabgalabaafwaeap9arhawfr9iabsbrxhxggcya9yyaqsmgwxldfsmbasiawe/2ambmaooa7gdaxsaawckdxeugakmubmbaaiqagiaehasakqmvawclww/dg8mfwypdauahradagkddaetahijca4jdggsahmbdb0jcq8nhw0vdqmpde8nagoddrkdawahchsfbqgjaqeicqueag4asxlada8rfbgffg4tdq0oexyedhizehizhx8ggutkmcsberi5gc9jrbc5gs8vgc8vfzmaee395bc5gs8vgc8vfzmap8rfxl1xmhc5gs8vgc8vly8vly9exv1dxv1yehc5xxjextewav5dxxfxacsbjrcfnju0bxchazyhayc3ficlnxcgfrq3azmdjimiagibaep+2qek3lf1kkl3sn0djf7zrvwenz/cqrgvfastmduccgciussaaq8kcv7xgcqttb3vmiembv4biv7ecgaban4aaav+bkaacwatqbyfbws+cgeacqclvuacaaqada0avwqwkwermxgqxhpn/tlgac8vm/0yztewjrehnsermxehfseraut9+giglaig/foaagauagb9+pt9+gaaaqbv/tgbsafbaakal0azabiaswawbqqeaaabcqmab68gqaolbq9kmcsbghgqte0zx15dos8al+327tewezuynscjeseveg98axsbqf7yxkoiauh4/qsaaaealaigbawcmgadaa+1ab4aawualxdgac/tmtatnsevlan4agaulaabag8aaagwaueaawabqa0bsaadrwbabauar2qwkweagbbn7qav7tewnxehew8bqqabqf6/aaaban7+2aoobcgaawauqbi4aaebawidvwabfaaaaqecawmaiaedagavztmyad8zpzkhbrarh33emtabxrmbmwheahwb/ev+2abw+raaagbb/9sevaxtaasaewejqm6rdqepdvknuq0diq2zdqjmdbynaqspaskpwq+5dwojd5kpamyptg8cpbmbjhnwe7yta4ytlhmcaro5ewkkeqemevyrthedhhgweqjpebkrahqlzasctavecwjwcwh5cwelcxslswv7cwqub2qharqhxacccacb+qcbcwcbb0sh+wcegwfraqk7acsban8bafybaqqbfafeafqbbbsfawucuwxlbqj/bqed9aubaauqbuaf8auecwqqmwyhdjsagq6jcrkja0avcxwcfan7aisraroyee3teo0ap+0/7tewav9exxffxv1xxxfdxxfdcv1dcv1xxv1xxv1xxv1dcv1dxxfdxv1xxquiabeqacegabeqacueerahibeqanf6/sqbpqebaqabpf7c/vwbcp79/v0labebvwfcaa7+u/6m/p/+vl0oar8cqp1t/weaaaea9qaabcmf1qayafjaeq8warcgfrcxjhgafbgafxuyup/wqbkyaacgcakib6gai0ayfwioebuqgroqixgwkwermxgqteqymhr95aav7ti/3tgymocrfrdemtaax15dareufh8cfse1nzc2njc2nrenncmibwc1ayaoxg0s/nitcukicawgkh1ssgxv+01+ogqiav1daqoffs0+nqm6zugudmmaaqbyaaaeuwxuab4anubsjbmbcwgbcjsiaw0ggsyznhkdfhkmgtyzawkz2rkcdgqwexziaqqbcqqbolkeazke6qqcngrgbaizbbwjd58qczssbwebhjkagsaeqatqbanwbiaeagqebgaebomafqevia5jdxykaaaqaaial13t1o0q3l3txbesos9dcc0al+05lz/t1e0rejk5xv1xxl1yk15dxxexmafexv03ntylnyq1ncyjigyvbwcjetyzmgqvfaugbwcgbyevck4bbt0bgzqcyxocayjfzvabhf7iayjtnwwcvwbj3ec2+pqrq1hguxibfflat+vjrbxcf5h3aaeao//bbgof7qamapvarcyqgr1ibhswgwizbiqbp0akarakicsgjlakbaihafihazuhauyhaqyhaq0ghwfhbh+2hwinah0bolidauiduh3shqmdup/qqespe0ggibivsbugehvisqgbrhabwrmbicanmw4obxwzn1aaybocghsbhacbnwbadhjiaaebjrmrilsgaiagcqxiia4oigerix4kiyk4/8bafreusciogekzakmpaz8bagabeaecas9dxe3w7rdek+3u7resos85k10ap+3vk+0/7dvd7resos/torkvmtabxv1dkysrcxjexv5dxl1exxfxxxfdcv5daf5dkzcrmxcwfrqzmjy1ecejntmgetqmiyipaimrnjmgerafbbeubceio4gbboabov5xzvubj4xxyggeay7g1ahx/rqbfv7r/vzxeqexejogn7wrawzcas+coypaewesqf6k/u1hup68x+caaga0aaaelwxbabyagqbnqd0zfxeoagmuagmcaguxswgaabazawcoeakqcambiambekaaaamdgywpoayiiasabjaeawqbf48cnwkvagmcl10zenrdmsbk7tkvmhdkxxeal+0ypzmsos8z7ti5l4cfkwr9emqxmaehnqezetmvixuxfbyxfxuhntc2nju3aseravp9qqlc2q2tbslgev3jemapbf3xaikbkacdo/yi0m9jph0gav1daqydpmmbqqk6aaabanx/2wrabcgagqcuqggpf7kxakaxavqxaekuacyu1hqcjbq0fajeffquakyhasqknapkcgmzcikkoqodrqq9cgise5snmasbcwsyezkobggfaaabgbkqcylwfyavkbudfrscsqeoerjkaa4qdgioup/asw0qsa4vk139xhdw7rdexe3ead/t1e0/7re5l13g/cuxmafdxxfdxxfdxv1dxtcrmxcxfjmynjuqisiheseviqm3ibeubcei1ygbbaqqe4/+oy48a039lbxgaqz+yv7yhaobehm9lbmhaycgarbk/pmc/iru9aacae3/2wstbe0aggajasnatpywpha2fgptbwerbzshewelbwtlb9shatqf5b8crh+whwieirqhakyh1iecqgnsa2ida3ydaqydasqjatsj2ymcsymbigebvaeb1aebabj/4eamfhpijge2aqlncgf5hikcaqqdaqsdacsdaxkjiqkcjak0caqjawm4/+baxrkcspejaskyorgc+rgbbhgwgajbdwsnapsnqw27dqp2dqeudvqnza0dgwaimgacaqkcag4eez8aebaqibaddwmqf5sobx6bcbkssregiwubirqjc0albxwcjat7aisraroyee3t7rdt1o0ap+0/7dvfxl3teri5l15d7tiymtabxv1dcv1dcv0rxv1dcv1dxv0rcxjxxxfxxxfdxxfdxv1xxv0bnjmyabuuacmgabeqaceyfxejjyy1ncmiahetfbizmheqiyibgolgxged/tdn/uv+zafcasfpwigba+gtxaqzgoh9/qmpqv76yot+1agiawabdag2o/71ejmsk/7h/uv+y9x+/gf9aykaaqdnaaaewqxiaaoajkbz6ambeqebbb9scqgjjgiefaicbiqilaikcmqibboiaxoiuggchaibaaibeaiboqibsgib6gibywibxalcagicqaknsagemqygcqiacqiaiqokbqqidbafaqw4/8czdxjibs8rxrdomhe5l+0zmwavmji/7tkrxv1dcxfdcv1dcl2hbrarhyvemtabxv0lnhibnye1iruaaweog7qbl5/8ugp0/aocanyblqifyva8/sj9zaadagh/2wsibe4afaaeacobyeaktakbpr0bvhqbklj/4lmahugpup/gqawahujwkeypalklaqu4/+baybqasjilogscfgebvgeboqebasauguidaa0batktaaytthpgewpbdusoalkoazql9cuc+rabesapekiwgkyythjwgoyybxqhhaeubwmebafubgqeah8qfafqfhaugbqdfbqzdxvqcgfacgeacjakkaqwcgqjcgokgzsfbysbdxmwcsakagpvfqepfr8vlxvffw8vjxwffqclfrumhaauacau0bqcvx/vh/8faxqfqa4vsaafaq0dhx8nahdmceapfugij0wmhewcup/aqbanfugciuwsqcwm1qiretqckysbghgqte3uk+0q7dqr7resorkvx15dkzndxxerejkvxl1xm10agd/tp+0sorkvxl1xcjmrejkvxxezmtabxxfdxstdxv1dxxfdk3fxcl0rcv0rk3eacv0bjju0jdmyfhuubqqvfaqjiiq1nculnjuqiyigfrqxbwyvfbyzmjy1ncynayvaaq/xzpv+3gfm/s319f7catsbsxrxxolnswevghsxb8udfzrbqna1k8ezup/c8tq2+qzrgzobah9dkh/pp6oet5h0z3ztaaacafd/2wswbe0aggajatda58kpaqkwgrypfgmscacbs9ghaeihasqhnad0b4qhbmqh1acc2x/rhwjjh5kfagshgyecsshziqjna10dbqmd2qmbcqmbvgmbkymbncpuiwjei5qjai0bavsbadsbaqegfhpikqe5aqlocgf2hiycaqsdaqqdacqdaxyjhgkckwk7casjawkggrxi/gkbjhg2gal2gaejgbkyagkedrqnja3eddqnbrihdqft+q0bgw1bdwsnaxsaipopagejagiohpsibxgfdxafec8qaw8debebdhkairujcxjjesclbualc3wcjav7aisraroyee3t1o0q7e0ap+3vx15d7t/tetkvxl3tmjixmafdxv5dxl1exv1xxstdxv1xxv1dxstxcnfdcxfxxxjdxxfdxv1xxxjexv5dcqegiyiantqamyaaeraaisinetmxfhuumziseqm0aimierazmgn7gudg/v0bl+gbfae1/qt+2tk+hwid4k3eczp/4fz+armqaqbi5qer/nj+of6m/kk7aqwtnrcsatkbfae11geb/ot+dwacahsaaagjbeoaawahac1agas0bq8btaahbaadaqkda8aaqagjambkmcsbghgqte1fxl0zmgav7t/tmta3eserarehexsbkp7yasgaasj+2amiasj+2aaaagb7/tgbowrkaaoadga/qcmltawpabiaswe0bgufaa4aaaelaaaiaqkdcmahqa8qb8bkmcsbghgqte1fxl0zm10yetkvac/t9u0/7tewezu2ntqnixehfrabesere3idbweo/tgbkp7yxbgvdbobknr+sgqiasj+2aaban4aaav+bkaabgbvqcygbqw/aqauaqeaawqevwecfaecawioia4aaqueaqyaagmgawaiblj/wluqfegfbaevmzmremyxmgavmhkvmznjrbrtmocyk30qxicyect9emqxmcubarubfqeffvtgbkd8rqntaajqalcl/lyc/lcaaaia3gfnbx4duwadaacagualbb4eal4bbwijbaevmxdgmgav7dbtmtatnsevatuhfd4eoptgbkabtzsuaxkulaaban4aaav+bkaabgbuqc4dbas/bqyubqugagebvwagfaaabgqfdiaoaaydagybaajaebriawigcaeebqmalxcyemyymisalzmzlziysuqa7tkhgbarfrdehxgqk30qxdewnzubnqe1ad4du/ytbkaapggpaggqpf2waaiaraaaa8gf7gadaciateb6crczfwirbxcbs3ybaeybarkbaqkmgqwpdamydbapekhvhgefhgeqbh4botceayce1x4cgh46hgjhcfcihwgdaqgbiqjpcaibcdsian0iar4iba0tlbqnlxyebaeahggicgeewaipigeiqa0qsciiegp/hxkbgsqsprmv7rdexe0sos8rxtptmhe5l80al93gp+3v7resotldcv1xcxfxcl5dxl1xmtabk15dxv1yxl1exsu1irubntq3nzy1ncyjigyvbwcjetyzmgqvfacgbwcgfqcvarsbkp7ymt+einjabqebilba4gesnumylvweapf3aamrpyq3icglqfndthmbfec2lpfzmrqnt7h0faaaagbb/9sgnwxtadiapahtqhhzdwe2ekys1hidsxqbaxr7fajzfafpmweznaegoaf5oag5omk42tgdoxkb6rkbzhkbhhmmgqihgqe7dusnausnaqqnfa3udqp0dqf5jyklaiuqfbdilgmbsqmbgwmra3sdiwpba+sd+wmhjc8bzc8bl7j/4ecxehvifi8bbi8bss8bcgnsceijayqjarqjjamecqm5cqebkxspamspaskgehvi2skbcskpkqijkqfgkqexlagnkwfykwfekwhek+qr9csdrgd2bwipb4khamkhqqfzbwmlbwebbyshmwcdmxmrnbe0ne0firqfir80ebyzsdq2mxohessadhitmwm7lhvadhuagiaaagkdgrj/webgdrjikjaafwq6kpsibdkbqabqaaiamjscexehqakmscefnb85trdanx8bdxcvfz8xfxcecqmtjxcfzdoyaaafj0olpi1kbs/ten7tejkvxssbx15dxroyee3tetmqxssyad/t1v3tp+0ractfxl0rmxoyee3tfziq7tiyeo0yk9shbst9emshxmqxmafdcv1xcv1xcxfxcv1xcitdcxfdcv1xxxerxxfdcxirxv1xxxfxxxfdcv1xcxfdcl1xcxelbimgabeqacegabeuacmintq3iwijiju0admyfxyxmwmgfrqzmhi1naajiaarfaazmjcdnyyjigivfdmybey+pp7n/oocogf0argbfv7j36i3jdevsafjydpecroaaa1rgd3+s/l+sp4fatjqm7gamfbkcapxhc5tav8bcafzajj+mf74+f6jbz+f/rpk9ggshwmg/fdbmvcbnbteatd9+/6r2/7ctqkr6tz+0cqgaaiaaaaabl0f1qaiacubhkddbxubbxmnewizbhibuwysrhjwegmwcbebs9cr5xh3eqo/gqezgrukcg4ijcugjsmaaiucrxw3fqivejrseoelibqljsardjjsdoicjrqcaiuiajmkiymgjualucvgjcalbyalkcxgjfalba8lhyuczyubjuaoeugljrirbaildhuygyahckzaggkvgqegdg4cjriracvqjzalocwwjeal8cuhciugdgkhxwkbdwlpcz8ja0/fcqe/cqe/cy8jzwnvcqqjl11xcl5dcfqyghndxl0ymkle9bjkmwavmxrtfzi/mzmvk11xxxe5lzptmocfecsremshgbarkxdeav0qfyfexbchxmqbetmylxezl10xmf1exv5dxl1exv0bbwyvfdmyfxcvitu3njy3nwezarcwhwivitu3nzi1nccnjsebazvlnz8jhrp+drnglhwuaidnais5jza2df2xezrmoun9vgit/vibwp91lcicav1daqqgp2iesvtnbk4fawfdxqedjsf9nmmcpwadacsaaatjbcgafgahacgbiedwmxwb2xwbgxwrhdscuxzbhosc+xwhksa5iekg2saecsb5iikg+saedqkkisqcpxkkksqcviqbgsybgsy5jgimma4tsckdauqdvapuawoea5qdpamdugebmgfiadibaykbaeyw9hycorzjfglzfgfbfgfcffiuyhqdawauebqgflauwbtqfayjbqaaf5miqcgbipmfmciteaysaxusbqyfcwabajsaqwdraauodwavad8avwdpaausawbacq1iaaiijx8vhn0cihh/qbifoasqam8ckqtraisrargqteqygu0yeo3u7resostfxl1exqav7e0/7e0raboyee3torkvmtabx15dx3fxxxfdcxfyxxfxk3fyxxfexv5dcv1xcgeeerahitu3njy1nxenncynjzuhibeqbreufjmynju0jimnmyarecejaywbnf4x/ustxykfbsziewkyaa79adzdd5dand49asn+2d4dafp+xp6pxqeght5ja4vipxsiavz+t/7/uf5ccugyfzcxyweoaryaaaeat//bbvqf7qaxaldahvybazqjpam0cqnpd3kpiq8ddxabiug+b04halkhaqihegccugfcbwk2bwe+a04dagidegmcugpcawk2awe5eqgzedkralyrphg2ecyrbdkuadkuaacuaqyuvhs2fmyubakllaakeaocdgmkejmibberabwrahmmpasae30fqbkabwiybwwckysbghgqte0q1o0ap+3v7t/t1v9exe0xmafexv1dcv1dcv1dcxfdxxfxcstdxv0lbiegabeqaceyfxejnscmisicerahmjcfvot+9f6m/l4bmafz4/2vawr+x9vtaho68dleazwbbgfyazzb/s8tosp+op67/xfuaaiakwaabgofzaawacaauubhnhwblhwbgrwbgrwphhkcirwewry5hmkca5yeph4crh8b5h8bqhvifqjwfqfmfxyvlhwmfqqlfusvwxw7ffsvbqknfu0vahupfqeworebxhebbhfweqixaheieuiraxsdebj/0eahdxniebetdkynaxusaayahx0tgh9adqcgbiitbwihbmsckysbgbbn5dia7rdtac/t7t/t7cyxmaerx15dxl1yxv5dxl1exv1xcv1xxv1xcl1xnzu3njy1nxenncynjzuhnzcgabeqaceberqwmyareaahkxnfkqufjmitaexxtwfdaxf+g/7a/rflkgho/vh+vabdaqydpmmdhwi/gwgbxamb/o7+qf6g/l0fzvu8ez4clwfparcaaqaraaaelaxiadgafkbjdygbogujnssinsumgkazmrqmhjaqlbmtdayoaziumzicpgekiucieaqqihaiecw3pa8ahwavaammawa6gn8sf0aoaaahoqdraisbgbbn5dia7e0q3l9exe0sotkvlxdteo0yac/t7eq/7e3kkwaagbbn7eqq5dewav9exsuhntc2nju3esc0jicnnseriycmntqmjychetm3mju0nzczesmnjju0iycjercwfjmxmzcypwizbjt7lxnfkqufjmitbd6uagmam0x+ws5ioaicawkcajte1qqeiknzfhjgbgublabdaqydpmmdhwi/gwgbxp73ezmjnb0dbp3oajigkrp+vxifctce/krxqcacazhfewabacsaaarjbcgamqbrqd0plwe6bsqdacmdakyhqcahiaywmbiuijmvphydbwqmcsgrryoqarmkgealdkgymwigiqf/qbyjoa8yd2sckweyee3kmhr9muqq3ivtejkv7tial+0yp+3t5csaghgqte3keoqxmaffxl0bercwfh8cfse1nzy2ntcrjzqmjyc1irejjyy1ncyjireznzi1ndc3mxejjyy1ncmnagagbb86qxp9chnfkqufjmitbdiuaqm0xv7hzmi4agjpaqico14cuf5pyzkfbaubxv0bbh0+ywofyj8bcafc/usslxm9iv2pajigkrp+vxifctceaaeat//bbeyf7qalaoe5aan/0eciehdiexclealbfosuapkuqrqcbhrgfmyua1quaussadss6xickrlzegkzeqksagysvhictwmbxqmbawmbbambbanea7qd9ameeambuapaawjpbwfdbwfrbweebweeb0qhvae0b8qhbqnabweghayehggvc5qachakagorkwgefxwtdwafaaioawacewykcwaeobd/h6aae30fqccabgimbwwckysbghgqte0q5p3kenttad/fx15d7ti/7dvd7resos/tmjewav1exxfdcxfdcv1xxxfxxv1xxxfdxv1dxsslbcmgabeqaceyfxejntqnjimgerahmjcrjzqmjyc1iruhbgyvbwvf/s7c/pz+yggzaxfp/jqhynh+oqhmsewfkwasanutycgghkmbogfoaxmbluh+3bj7h1f9wv1agqesyz4dbgjcxaight5jaaeakwaabjgfyaa7agtapgcshuaxbh2smdaujccdf6ylfgmjmjudbqy0bxildzqbcqm0ob46fyyzoc0wb6adax9afqigdj0tbgi8dmsckysbgbbn5dia/tlkmhdkmv0y5f9extiapzptfzi/m+0xmisaghgqte0xmaerfxqwfxcvitu3njy1nxenncynjzuhfqcgbhuheserjzqmjyc1iruhbgyvbxexfbyxfxuhntc2nju3eqiabslgev2le18pbqumyhmcdrjjjgucywumyhmcdrjjjgufkwas/ystxykfatb+tgm+hqybxv0bbh0+ywofyj8bcafcxaeigz9i/pgbagi/gwgbxfwbcbs/yvx7yz4dbgfdxqeght5jabqaaaeakwaaaqafyaabac1afxanpg4dgwkmaq8aobz/qa4boaccb2sckweyee3kmhr95dial+0yp+0ymtalitu3njy1nxenncynjzuhfqcgbhuhercufhcxaqd9ixnfkqufjmitanusyyyfbslgegbdaqydpmmdhwi/gwgbxfwbcbs/yvx7yz4dbgeaaah/9p7ya3mfyaadafpaookiavkiaqsbarebibsesaqbfbskg5qbbbytekyrawgudwabiamab5mcaqqbeaakf0asobkfgw4ckweyee3kgv3k1u0al+3vx15d7t/tmjewav5dk15dcxidetmxfhcwmzi2nrenncynjzuhfqcgbhuheragisimlaecagvnx0yfjmitanusyyyf4v72af73aqkthxl7irwej2i/gwgbxfwbcbs/yvxa/upyaaeakwaabf4fyaa/ab9aiygkocrijamglrytvi1mlqqxch0bogydrh0cpzcdaqg+od5ypgmmltytaiywasiyujatmiidihqdmdmdij40ujazmieaphqaad45aekaeqadbgawagyaawqeajqaauaaaqqdavydavydaxydaqcdarewhqadbhqijyotbremkbydctm2ot4fbqy4by24/6iyo0ktup+oqb8wmugdlsmtmy1tlqqibs1flyutaz81luutps21lqqtup/qqbmvg0iglqgglbytaiytni1glqmtup/gsygtsc24/+badb4hsc0izch0kaiobcmekqlkkfqpailwm2yzakyzvjnmmwnimwe4m6gzudpimwqkmwh6mwezpo84nzgcak84aq84lzg/of84bzh/ok84vzjpoakloeazhug4n0ewdwcfby8haxqdb6ewhqb/qbuioa5admsckweyee3kmhr9mjlkx15dmhdvzstexxffxtk5xxfdcv1x3f1xzxe5ossrxxfyk3jexv5dkysalzptfzi/m+0xmhexov5dxxfycv1dxl1dhwuqk4crxicigbarhwqrxafxcxeacv5dxl0xmafexv0bercufhcxfse1nzy2ntcrjzqmjyc1iruhbgyvbxebnjc3nju0iycjnsevbwcgbwcbarcwhwivituznzi1nccb8wytqxl9sbnfkqufjmitalastimfabbjfzgiocwsacismzxckf6mafzyptsrev01ei5pdqli/lpjnsgeav1daqydpmmdhwi/gwgbxfwbbh4+yv52aypcheikbbucxfwbawq+hp7b/bx5raicav1dar4wkaabacsaaasabcgaiwa+qcipdkynaykugpibpgahpaajaridiyuoobv/qa0aoaykbmsckweyee3kmhr95bdwx15d7qav7e3kp+0ymta3ntc2nju3esc0jicnnsevbwygfqcrfxywmxcznzi2ntc3mxere18pbqumyhmcdrjjjguebcjdwxxwsiadazqaxqeght5ja4vipxsiavxcaqgbp2l8e1daiaiehkr4ev6naaabacsaaacrbcgamafgqcekgqe0agemagekhbocamcddwmcrhpwgglxgggxgqcaahq4//hauhcbsggaausbwxscehsb2rsberujgwibebybsfybaqmagrqcagmuagidgwecayecgxqchbsfgw8zfxkdixkbuxn7gqiziawpsbqzayacayacary4/8bafbsesaicazicohzchamuhaeuhhqc1bzkhpqcbquzhamwpgmba2acwaichwivagicggjfgwepgwejaxsqeyudiqysixsaaaibhg8cautvaq8cal8caq8chwivagmzbaichbkhaxl/bkaroasjoqecfkaajkaqmgtuajeqawirkweyee3kmhr9muqq5ot9muqsot0vx15dcxjexv5dmzmagc8z7rcyl19exxezmy9dxt8z7rcyxxfdcstdcv0rxxfxhwuqk4d9xicyecuhfcqxmafxk11xcxfxk11xcxeacxfxcrmhaqehfqcgbhuhercufhcxfse1nzy2ntcrasmbercufhcxfse1nzy2ntcrjzqmjycrae0bmggiab0tyyyfbslfe/28e00kbp4yy/49bcrnev5ee18pbqumyhmfypxca75caqgbp2l8e2m+hqybxv0bbr89ywnu/buekfxuyz0fbqfdxqeght5ja4vipxsiaqabacz/6wycbcgajwddqcv2gafkgiqypbi0garraxsbiwedoqfjaakbuqeeabazhkjoaaexup/wqgazhkjnfweafxgxgqeafaebadkbsqfzaqmearqbajyyrhhwganjgfkyqrgdkxg7gaipgb8yagkdar4haxwmhxcdcgemcbgah6aagh4gocciobcbfkawcaapksduaigpawirkweyee3kmhr9muqq5p0y5aavmy/tmj8z7rcyx15dxv1xxxghbrarh33emtabxstdkwbdxv1dbqerfxqwfxcvitu3njy1nxenncynjzuharenncynjzuhfqcgbhuheqsw/mkfkwas/i0txykfbsziewf0azegjmitadisysygfqrh/nzjph0gav1daqydpmmdhwi/gwgbxpuiaz1ipxsiavxcaqgbp2l7raacae//2wysbe0acwataplawsknadqn5a30dqm2duynhg2mdcynbdmp4w/zdwn2dwe2d0yphg+md8ypbdwt7bp8ewn5ewe5e0ktirope8ktbdwr7bh8eqmdobfieygrqbhieqw8cwfqc3olahclaqcladql5av0cwo8bwfqb3ohahchaqchadqh5af0bwozaqflaxubahgbaqgbadsb6wh7aqozbqecygvybqizbqejbqepdwufbs8faxwdejmgbaytabmofqksfqnafqlvahqdbairkweagbbn7rdtad/tp+0xmaffxl1exxfdx11dxxfdxv1dcv1dxv1xxv1dx11dcv1dcv1dxxefiaareaahiaareaalibeqisareamz/qz+cagsav0bwwgt/mz+nwgu/ln+wsubpaflawkbop5g/pr+kv5iywkuap/9xf1waaacacsaaas7bc8ahqakaj5abcyaayqgxcduiao9igerijsisyidcsiziginviibahwbahwshaivbhwbu3yc9hwcjhw2hmyc5hz2hav2goya9hodajmehgyzjjmuphudbgmmccf9dxsfgy8bawsdgyyhob4bf0avckaojq5raisbgbbn5dia/tlken5fxl3tac/tmj/t7cysos/tmtabxv1yxl1exv1xxl1dxv0acqerfbyfahuhntc2nju3esc0jicnnse/aiarecenmyarecejafmkp0qt/x4txykfbsziewhiw2rrabj9lfw7avt+3wwcxv7edkuebqfdxqeght5ja4vipxsiavwcawl+d/4yywfvatyaaaiat/7qbyof7qarabkbqedgirnzgqizgumzuxkdbhkmgyyza5yzphnmgqm0e0qtvbmdbhmme9yta5ytphpmewm8f0wxxbcdcrcpf9kxa5kxqrfpfwm8fuwvxbudawgvkbucmbwofegva1ynatqnra0c2a0bggwbygzadaj3dafndaeccqhkcdojancjawcjatqjralucqmtawhfa9udangdawgdatsdswnbawmtbwecwgfsbwj5bwfpbwe/b08hxwcddqacco8q/xacabaqecaqawkdecapup/aqcqsgegpahstcaqyk0acew0acwuqia8sfqswfqvagwtvahofbairkweagbbn7rdt1hozzresotkagd8a7t/tgrdukxrnx15dxresotkxmafxxxfdx3fxxxfdcxfdcv1xxxfdcv1xcv1xx3fdcxfdcxfdcxfxbqyjiaareaahiaareauwbqckaxahibeqisad3e9n/ql+bqgsav0bxags/kd/ab/4/tyj/lj+wggnaacwdwggawkbaqgg/md+l/3gt2oct04dvakx/v39vgacacsaaaxfbc8ajgauasraljyfacydayydasugdhficyybdgkpaumzkykp2skdwyxrlossaxkcaxycadycarq4/9czgbtigrj/0ecwebvibhobyyvzjymla2mmcyadjgnjh3mfgx8dyx1zhymdayigarqgadqg5cd0iambjghzjukm+sydjtrshsadgsylfcymjqodsh1ahqmjjh0akycnbhkukxsmfqmjicmdbqylbzqgaqygfiamihygbdsmax0maqmajhamahifjh0bk38bicukmaehjwf/qbuioa4vdmsckweyee3kmhr9muqq1tiy1o0sotlfxl1fxv1dxqavm+0xmj/t7cysos/tmjjexycfecuhk8qbxxfdcxfdxv1dmtbdkytdcxfdcv5dxl0rcxjdarexfbyxfxuhntc2nju3esc0jicnnse/aiareaubfxyfahuhasczmjy1ecejafmfje0s/batxykfbsziewgvxvpzacz+4wehtz47mbp+r/5mfzedup7kcaki/ppjpr8fav1daqydpmmdhwi/gwgbxaidav6j/s10/m5muwudav0cigo7oaegaaabagt/2wqzbe4akgeeqlzwbmygdgydaxt7gwjzg2kbersdwqgbir0bvh0byyjbkajzkahpegfwegh2jag2ifyhaj0haqwhjcgbdwwudw8mvcqbriqbfiqmjeykzir2jkyk5iqhyiqbww/bdwijdwggdwfgdwegdxypagomdyekbaccfpqafravag4vhjmtbaguaeaoekgab5mpeyqhjh8pdaoqf6qwqawrsbykfyycpaeffxbadyybababiqmsjm8ckxbsaisrav9exv0agbbn7dbteo3uk+0rejk5eri5oqa/7dur7t/t1v5d7resfzlexxfycv1xxxfdhxarh33eaf1dxtewav1dxv1dxv1dcv03etmxfxywmzi2ntqmjyckntqkmzixesmnjyymiyigfrqwfxcwfhuubcmizjqbbasub3esv3pj/o0bdnyw4jqcawr9x1+ev3pk2ql+0vu7ege1gefny5j4w3fens3yvovc/tysq1bkiwrnaey6fswoyvmaaqaoaaafjgxiaciarkancwiuegctcqmzhkybdkqldg4iihqge38bocihpeaiccijiyqifzawkwerejkylxpn7rdk/erjrpbtac/tmj/tmu0ymtabiyigfrqhbymrirejjyc0jimjercwfh8cfse1nzc2njc3akhxxtieazqfzpqcazfe8qyehzpeev1aekq6hwqgbwyeotcxewe0/swfwzoe+7xjor8ebqfdxqefbb85ywaaaqat/9sf5gxiacgaykbklb4blg0blchuiqlzjgejhzkfsr/zhwrphweghxyfph8ddqifat8ihwgch5ifoh8disgziakha7yhaqqhfcfuiqn0ifqhatymaqy4//barrqxsgkmaqkmeqwcdqwdde0mxqztdaudciauf0gacgembrqxkamcphubawutibmvoa5+fqadaaaif0aaociqhw4cksjraisrargqteqa/eqq5p3kad/tpzptfzixmaffxl0rx3fdcitdxxfdxv1xxl1exv1xcqbxcxetiruhbgyvbxeqfjmynherjzqmjyc1iruhbgyvbxeqacegerenncynjxmcdrjhjgabucwzbsdieghremambf7t/tr9owupxxmfyfwbcbs/yv2a/vxg7qeganhipxsiavxcaqccp2l9op7a/tqcwajtyz4dbgiaaaeaap/tbgyfyaaqatraztkpargpwckckqgeiujokvgqaggaarkakqac2qabgaeb+aebcqepaqljaqgwiqehiqgiaycqmliqghiyfbisgaadnfidgrasfbaqehmyixgcuxhzgimy0xjjgpmybguynrhfgamjglj/6ealehvivbabawyqaq4dbxayhyinbwqmiakdebjgerasa3qspbicerj/webcdbbieiosacchjxgodhaskgd7eggreussagssqxicebidekeacqe/agajqamaccajbeoqcqewcqewccaj0anwcqqjup/asw8tsakvk11xcl5dx15d9diz1l5dcxiymkle9jiy5aavmzmvk11dpzptfzjexv9dk15dxxghbrarkxdehxgqkysqxaermxgvmi9dmtbdcv1xxxfxxstycqubjyymlwi1iruhbimifrqxaqe2nzy3nju0iymijyc1iruhbgcgbgchaqla/fuufyerkxmcghmnduazausbqaooeacdpikibxiboxicdyweezf+crmevgg3hqmdavxcaqmohnn89amlgc4yfawhiwebxfwbagecfi16+0qaaqaa/+0howxiaccb4edrnxjxegl3egejerkrkrednbebbyrhjaj4jigkaiqqcqxioiqbocubfscbbicmjwkwjwepj2knagkasqacgaaoafgaaxga+aacawaiexziwsyb6sybecybagamkcycftjsjcekghmvfbmtfsusexkbjiuujiylescmj4iqerqqebeanfioea6bawauawmajyb/jgiqjjamagameczgjpambcymeherpyebgseb+sebzsebuyebaqmhawj1a4udlqmdsgmbawyofrkciqcjphoiaxc4/8bahxiesbbaewfwe4atwbmdpxmbdxmfewijeyqljxmeacukhxmbdxofewi6hxnfe98ta38tjxmcexmvjwafec8qap8qaraqjg4hfa8avxocgkayg0gaabsgg2abgbseybvggwibehfpjl8mfyydjyavjs8mayyoayaiuagccaiaclai4ajwcauiby/nxxe5ornuxxeymtrdcrjnk105oresorkvxxezmxe5l3fyxl1xmzmagc8xmy9exxfdccqrpzptfzjxxxfxxv1xctmvmzmvxxfdhwuqk4crxicyecuhfcshgbarh33ehxgqk4crxdewaf1fxv1xastfxxfxxv1xcxfxk3fxxxfdcqubjyymjyc1irujbyivfbctatmbezy1ncmjnsevbwyjigyhbwejaqecdp6qjreisxmcrbm1qyhdatjxaubqkg0sayosiqwrhg4p/obh/rt+uhmeuhi3fwybxfwbiy51/vmdvvwhausajszcxaedgtf9+0wea/v9aaabaaaaaawdbcgaqag6qcoieafhigcg1yadoubjqnlaa0gaacyj1imcic4b+s8b9g4bdbj/+ea8errijwabaaeb2aibeieeiyiqehqqdiqqejmapgccmtmumqmvmtmhea4kkfiomqadlyhsbcqbdisgjaikup/wqkyvgeglawf5a4kdagmqfrhilw4kdoedlxqday/zeaf0eoqqapyq1hacbhabgrabgrbjeaiumuqxzdgkmbqx1degfjgwmqigmsyxnjfwmzyxxjegwjebczebecexaceaoamgdhixgh4hcayycamkjyovmzs+bzimktkamtevmyeqebiogx4bhhipgaeygr0kaqskas8kdylvkx8pjykekqaoechgkamoup/aqccxg0goqhq+at4zadnqoqi5ohidaqqdaq4daahgchaigagecpahaqcvxc1dotldxs/nxtk5xrdwk13nxtk5xv3uzv05ov0rejkrmxesorezac8z7rcypzptfzirotkrmxezcxjdcl1dcxfyxv2hbrarh33eastdcstdcsuhxmqqk4fexicigbarhwv9xicigbarhwv9xdewav1dcstdxv1dcxfxcqebjyymjyc1irujbyivfbctezy1ncmnizuhfqyjbgyhbwebfxyfahuhntm3mju0jwmdbhuumxczfse1nzy2nzccjv7ypycwrbmcfbmzp1k54mm2khibnqwhscyezf7lastvkjirev2fejzau9jzwzktev5de0osj0oc4wg/y0ifbqfcxaeei4j+ywe2icieavxcaquskyn+cv4qf0eeagfdxqefg4wbap6yhsifav1daquzo20aaah//aaabb4fyaauasvafqoaaboaygd6aamlbag7bmse+wqdhrj/4eczehzibcasfkhxhgexhzcfdx8dwgebargtfkgbga4rsaagfxpibcaxgkgtmlighsccermuermpnfiabacbeq8ueq8gaberkr0ofxtinh0bbaqbtatebpqea4ce5wqcowrbbhseawqhdxmxgh0hcqyycqmmkayohrmyqbkbabkqgvazcbnagquagtazobnqgqqkgrepbeajualgcqmpcqelawkij6ageregf0aooaavmab/zdarargvteqa7tkzlxgq5c/nx15dxtk5grduxl1xchjnotkal+0ypzptfzjxxv1xxsssos8zm4crhwurxicegcuhbsveassakzewassrcxfxkysaxxfdcqebjicmlwi1irujbyivfbctaty1ncmjnsevbwcgbwcbercufhcxfse1nzy2ntccp/6wpwgroduuaoiqmkrv+webvwewazcskzskv/6obihgev2le2apbqkaah5ld1eebafcxaeiiyv+zagcisamxfwbbau9h/3k/qbjph0gav1daqydpmmaaqbaaaaepaxiabyaieaxmqqbcwibaiscawkcwqkjagmcebuysa64//czfrhidrj/8ea7dhfiba4udiqoawqoaqiodq6baqiuaqecdqkscpqlaxwuaq6saainfkrgfpawahyycasqcgekdi8baqevxtpwxe0q3l3txdial+0y5d/t7tkhbrarh33emtabxxerkytdcxi3nqehigyvfachixehfqehmjy1nzczevoc9f5kwzabazqed/0razyinaublabvboodn00vdwe0b/swgd9tff7saaeaip7yalcgkwahacrafqopah4gqqcgawyfjaaaaqaaeaacac9dcf3nmga/7t/tmtatesevixezfygbz9ls/tghu1z5zvwaaaea3v7ya44fyaadacxaf7caaqedaao/ageuagedagmbacabawacl80zmga/mj8zhwurh33emtabxqejatmdjpv965v+2abwaaear/7yahygkwahacrafgapbx4dqqigbgmbjcaemarabkaebaqvxe3nmga/7t/tmtabese1mxejnqiw/jhs0gyr+k1cbptcaaeayaglbj4fyaafafxamguaal8dbbqdaaedbaabab8caxqcaweebqmcqaadawuedgmgdgidaamdiayha0jkmaeclzmratgrm0leghkqte0yabg/mxrdfzkhbst9emshcbgqkwv9emqxmaebiwebiwj//oemah8ch6yeff0obd37wwabafb/baopaaaaawaptqc+aqifas8qxgav7tewfzuhfvydu5sulaaaaqepbqmdkwzeaamae7cdgaeaaqpaai/93c0alxrnmtabiwehayuf/mkbkwudaueaaga1/+cewarjacaakadhqawzdqebibwhsakmaqu4/+bavxqcsjkkaxqkhcqc3qmbdqmbcqygfgyceasgaupbbge7bksgagsgmwycrbvufwqvawqvnbvefbqvxbufipciccculxebez4sqawpsbimlxqqhjcdgpcfalj/weaucrfiiqanlh8cfgaacckffxwphqedoxcqriarareajqejaywfbuaqf2gckqvmaisraroyee3tx15d1f3teprdxrdtmjkzlwaypzptmjireo3v7t/t1svtxresos/tmtabxxfdcxjexv5dxl1yxv0rcstyjqyjiiy1ecezntqmiyivbwcjntyziberfbyzmjcxbimijxejibuumzic0z6sksacqtjhymgcaag+zwgujtmpfa1osaj3j/7xr1l/mlwkawifjwagpxpev/6z/h6axqzdgeebbo3caaacaad/5wtbbisafaadapbathmqhcfi5h0bcxubfssvazywabktyrpzewowhkycxhzwhatpgggwggegemyqavyqatoqihacqhc6eajteh0qaismaysmarymayqylbgcglj/4ebahsbicrhjgaijgaeogbazheglcge/gwoba/8kax8kaqoqhsbiaaoqciakawsfbqchab0jg5uleaavexeweryzgw4tcrwfqaeiab8oaqiaagaakaadfqmeaguckwffxl0rargqteqa7tiyeo0ap+0ymi8/7tiyp+0xmaffxl0rxxjfcv5dk15dcitdxv1xxv1xxxfdxv1dcqbdxss3esc0jicnnsernjmyehuqaimijwc3fjmyerajigegbslfewhifve94f7utosrk3hm+tufeaafcwm+hqycxp1q6p7y+/7u/rmib95qaa0bg5aaaaeapv/na+4eywawal5altsh2wcc6wcbqqcbjacbvae0b9qha+ahaded4qmcsgpcawiuawfua3qdhamda7j/4eazhsfilqmboxebmxgrefsra1yrasstaxktaaktauytvhmcxhmbqxntewiacxalagkdc54kup/aqcepfegkejciebawaeape0gafjycfgylcwayeomfqbcfzgiraroyee3ten7u7qa/7dur7t/t1svtx15dmtabxv1xxxfxxv1xcstdcv1dxv1xxv1xjqyjiaareaahmhcriycnjimgerahmjcd7qug/up+uae3argvty4bbau7/ucbdxoogjmboweqaqybkzl+5rjklp44/i04aaacaet/5wufbisaggajaqvacekjayylxgscc7j/8ea6gsfibbsbjrwblrw9haisaiicauic8gicrgjwaglmiagziafjcahjcnki+qgdjqg1cmuia6uitqgcclj/0ea8ehvifaqbzar0biqeaykearkeatkkayykaqykacsiacsiaqpfigeaiggfhgeeeb0gsaaeqb4cab4bdgueup/wqdezhegrpxiagwsdlgkqgacaiwehlqmweqilcwejhrqifb+dbkalfggcjazmahal8cucxssraroyee3teottmjiq5aa/7tiyl+0/7tiyp+0xmaerx15dcitdxv1fcxjdcxfdcv1xk11xxxjdxv1dcxfyaf0rcv0lnqyjigi1ebizmhcrjzqmjyc1irexfbyxfxubjimierazmjcdvnv4vuh+1beibshgewhjbslfe/43dmf624v3am/oasj7aribr4gblmm+hqycxpr3yz4dbgfda2xq/lt+fjaaaga+/+ceharjabaafwdxuqap/+bambwhsj8hae0hayyhasyvnhucehwifqilcrsjarsjywnbcfsjbakqfbdifakbtxdff58xrxfvf/8xbgsxarkxard5f4kxbdsnazsnqw3rdfsnbaynayidaqmaaxadiamdaamwa2adcapaa9adbg4edjcrqbyoezcwmbaxcbaqlgaolgiweqwpegejaxkfcwsagqyfbuaybwyckweagbbn7rdomhdtx15detkap+3v7t/tkwaagbbn7tewav9exxffxv1dcv1xxv0rxxfdxv1dxsslbimgabe0admgeruheceynwehntqmiyiehms7/uj+uqen7ghj/vibhism/vkbg1bi0steat0bdvsbnv3ofv5gsag1i8ekaaabadeaaan6bkqaiwckqf02gqepebmwsauwgr1ibsaeiuh5bqhwbqepcr8jrwm/cc8jbqmecearfegidpcgarualxiddxsepx0kpqkuhkisfyubqb2iaamahwabdwbfag8ajwdpaaulayqazqirav9exxermxgqteqazf0y5m3u7qav7ti/m+0yp+3vk+1dmtabxv0rkytyeym1mzuqitixfsmnjyyjigyvfsevirexfbyxfxuhntc2nju30zqaayyzhigbbapdtz4bfv7qbilfe/2xe18pbqpnyywbzj/pej16dzepy/07yz4dbgfdxqeght5jaaadac/+xas5bgmajqatadgbkbkajf/gqa8diugjbqeeixqjjcmdhyo4/+baibmxsasoatobdgeldhsokw6ldtsobdko6q75dgp2bae3up/gqcmyhuiumqqyank0itqczgn2a4yda2kbeqgjaqmlixsjkymdhbj/4lmyhegdup/gqggjd0gjcaeuaaqbltg4iqqldhyecsixebmgezatybnwe4atbpatarmtcsendcyxcrazl0ahhc4angiecw4wbbagdsamdyobkoqpeaeqnorahgeeolayarggagecjcaeqazqbgigmiqkordw7drd7rducc1denzd7drx7v3ughnnerixoresotkagd8a7t/t1m0rejkvxxhtehc5ejkv7ri5otewav0rk11dxv1dk10axxfyxl0rxl1dkyumntq3jhe0njmyfyuhjxyvfayjiicnbhuumzmyfhuubceijdu0arazmheqiyidbhuufjmynju0iwewc9l288t/zagzptlf7rakpjpeo6jqxf7f/v3p/tkbzqurq6sfkztudqdijzxubgjcaqcw0iginh5xhaxfbqo0mz93jatihwiuawp+2aelasx8clk0unr8w3waaaeahwaabtsgkwavak65abb/wlytfkjufgewup/gqaoxh0g5aqh0aqebup/gqbwjdejbgagugaeugcqyauqyafayaqadeamgawmdup/aqdstfkgzabevahatpy4acw4iax+ndsapdqenqakmsa2ie4umogyaiaejayciabqfqc4hoicxbmgcmcdlaisrargqteqygv0y5f9exrdk/eqrcqavm+0xmj/tp+0ymjewastdxv1xcnirxxercisbnjmyfhurfxqwfxcvitu3njy1nxe0jimibxexfbyxfxuhntc2nju3esc0jicnnseb54jwlkcgkgat/zcsyckfn06ggaypxxp9lxnfkqufkv8tacgde+i3o/4zyz4dbgfdxqeght5jacv1u6p+fmm+hqybxv0bbh0+ywpnyz4dbgjcaaiahwaaaoggkwavabkaquaj1gqbf8ewfkcvdwyjpwghohkbhuavckiofg4pdgeraxoozqirav9exrezgbbn5dia/tlkac/tmj/t1u0xmafxarexfbyxfxuhntc2nju3esc0jicnntcrireb5wypxxp9lxnfkqufkv8toaeober82gm+hqybxv0bbh0+ywigyz4dbgfduqeo/tgaaal/jv5cajegkwavabkau7kaav/qsxkcsaq4//bajhsesbfbfhsnfq8abgecawaebquxaxwhpqyvohyohqfagqebawgckwermxoyee39mutw7qa/7dxtx15dp+3w7tewassrareqisinetmxfxyzmjy1esc0jicnntcrirecmf5pzy2iaqmhbu0ubshheqabkark+8z+rikbdbnfgwesa11jph0gav25asj+2aabab8aaau7bisamqfrtxqoxcgcklj/4ecqfrhibilwkwypayqovcgc5cgbcxgbggsyexge2xgbdtab/taba18wbzb/mampmh8wjzcfmaqkbdagfrhigjjskcuoibgafbgokxgamdrskcsohzewfdewkdeyqb8ggdeyohsnfqaaiiudh6cgdwkrlgmgpzahdzf/mqircxhlgajdgxgbsxhbgaipgb8ylxhvgaqjgeargegogdedajilaqilat9ijeilaiw4/9czgbtijbj/8eazdrbijroaibagicaddycvil8g/yaedamgibj/weamgx5iiqarecscfqqrup/gqbuneugrmc8zb6mxaivafqiidjiozqirargqteqygv0y5bdwmjirx15d3cvnx15dctk5kytyxl1xerczk15dcxjexv5dac8z7rcyp+0xmj/tkwaagbddm4cftsuhk8shcbgqk4cek8qxmaerx15dcv9dcv1xxxfxactxaruxfbyxfxuhntc2nju3esc0jicnnsermzc2ntqjjym1iruhbgypagexfhyxfxuhaqhnbsrnev2we18pbqupxxmbydlyhy0qewgwelizoywsatbelzzee/5k/pacevbjpr8fav1daqydpmmd52m+hqycxpwl434lfgfdxqefftr3i/6dbducbafdahiaaaeahwaaaoggkwavadzahdyearsnfqagcacib6ibhuavckiodw4beqmwdmuckwffxl0yee3kmhr95aav7ti/7tewaxebercufhcxfse1nzy2ntcrjzqmjyc1aecgkv8t/zctxykfbslfewyr+vdjph0gav1daqydpmmd52m+hqycxaabab8aaae8bgmarafytasy6xgcglj/4eajfbxiqyvrkwirup/gqbquhegegjqaahgjlqfpbc00lqiyb7j/wlmugkghup/aqa8jdkhfawhdawedeb0hsao4/+czfbpia7j/4eatcq1i1aubbauubsqfax0abqehbbj/wlmyg0gfup/aqasjdugcaqe6cgebabj/0lmyg0gbup/qqg8jdugbbbmvbi4aljugahbcp0mpdhehjdcfnkcjeduqqaonsbcjfoqpogkodjwpbaaaigeioxyeqcnacg1ii6mpdylpky8pa08pfynpkqo/kqeakqeka0vgkyrimaa1aqodnamal4raqzaipeu8zqirargqteqygv0y5f9exssbx15dxxfygbbn5csa/erdejljrptk/eqrac8zm+0xmj/tpzptmjiq7tiymtabkytxxl0rk15dxl1xkysrxxerk15dxl1exstxk3ebnjmyfzyziberfxqwfxcvitu3njy1nxe0iyihercufhcxfse1nzy2ntcrncmibxexfbyxfxuhntc2nju3esc0jicnnseb26hz7yvexweibslgev28e00kbicrcwqktrl91rnmjqsblw8fjewt/bwtxykfbslfewg8a3vo6oj+xf36yz4dbgfdxqefhz1jacpjrf4hyz0fbqfdxqefhz1jacpkq/4eyz0fbqfdxqeght5jagzjph0gav0aaqafaaafowrjac8atlkafv/athmwsnqwara4/+badxcfsdkbarqbjaec9aebabj/4eaccqxi2xgblbgbfbgkgalkgahwgaeaaxadiamda7j/wea7exzigqaxlqiqlacudwsoigmfpw0gdw0bduajdegnohofdkigacabcqmgogaahuauiainmqzoajanzqirkweyee3kmhr9murfxl0q5p3kk3ealzptfzi/7t/tmjixmaerxv1dcxjyk11xcstykwe2mziwfrexfbyxfxuhntc2nju3etqmiyihercufhcxfse1nzy2ntcrjzqmjyc1iqhnipcupwyoybp9lxjgkqu3toaabilfe/2xe18pbqupxxmbyan76lej/hljph0gav1daqydpmmbxxvto/4wyz4dbgfdxqeght5jagzjph0gav0aaga+/+ceswrjaasaewd6taqp9a8cd7j/4eavehvihg8bcq/jd9kp6q8epa30dqinup/gqf0sfuigdqejdckn2q3pdqsrefsrahegehviirebbhhgedyr5heeqxp7ewideyasfuipeweae8at0bpgewqhibqxsd8haq8h7wcc8acbcyauf0g/cwepc+8lavalaqw4/+badxqxsdafaqaf4auc/wubabj/4eaofbdimaebaahgaqiodwebhquqlwyqdjcafg6dcrkda0avcwkcfanmaisraroyee3teo0ap+0/7tewav9exv5dcstdxxerxv1xk11dcstdcstfxv1xk11dcstdxxerxqugabeqacegabeqacuyerajiheqanh+/f7qatebcgeiatl+zv709/p0gqe2aqgbcwez/s3+9/7x/s9padkb0f4r/isaaaiagf51bpqeywagacka6kabfikbuqababazieg7iushwyedngqbuijiigioup/wqikxg0gzjghgjgemhgfahmoeanoeih7ahuoebj0err4cmxqrgrsaawkaafkaavyaauyaasqkncrejapejaedpyqbpyqbjbazhegyibwfsh8yaqayebgggamlbskxj5uzebsnfq8hacowhxygcacigywdhaeiircbhuavckiokxxpaioozqiqk/aral0rkweyee3kmhr9mjlkeo0ap+0yp+0ymj/tp+0ymjewav9exv0rk11yx11xxxfdcv1dxxfxxxercxiaxstxcsuvfxqwfxcvitu3njy1nxenncynjzuhftyzmhiveaijiicwmzirecmibwhhbilfe/2xe18pbqupxxmbyh73veh+1lalegb624v4b9hjpr4gav1daqydpmmdkwm+hqybxc/o/tj7/u7+ufdqaa0bg5aaagbe/nufhwrjaboaiwdks+kjaqq4//bakrkhsaqbaribigec4ghyaqlmiagziafjbwhjb9kh+qcdnqcbpqe1bwihup/qqdysfuguayqdamqddaoeawm5awezawegcqhlighlighzigegiggzhgeeeb0gsayerh4cbh4bdh64//banbkcsbskhzyieaspiwahlqiwehwnfbsuoimkgoutog0fgwvadw1vdz8naxudjq1oaiqfzgirkwffxl0agbbn7rdk/tiy5aa/7ti/7tiypz/tmjixmaerxl1yk11dxxfyxv1xxxerxxfdcl1dxxeaxstdjqyjigi1ebizmhc1irexfbyxfxuhntc2nju3esyjiheqmzi3a1z7+l7h/tw3iaepbslfe/2xe2aobxzn+tugds/oasj7aribr4hv+01jph0gav1daqydpmmdz2n+vp59kaaaaqafaaadfwrjacmab0awvgowawlpiwhziwhzgaf5gikymrgdglj/8eatcqxidxwfhc8caxudhbsxackvgraupxupbgmncb2lhaeifwgfqbuiog4kdmuckweyee3kmhr9mutw7qav7ti/7t/tmjlvzv9extewastdcxfycqerfbyfahuhntc2nju3esc0jicnnsevnjmyfxejjycmjimiaeckp0qt/x4txykfbslfewhih9cxi4gbbaqrj4adef4rdkuebqfdxqeght5jagzjph0gav3p6aj+ohivqxoaaqbv/+cd5grjacgbd0asbcgbopqoabycaaqgtab0bgmgup/gqhmciugejqqmaksrwxhbeqmleasrajijaw8laq8lawagaqagaqsgiychdgsudg4lbcmbzcmblipwi+yja0kjwsn5iwmldgfrdge5dggzdtko6q4drg52dgildiajbacblxubfz6qfkauahqblxiqiaebaz4aup/aqdyoeugab5cnfimgjb4ocwopfqwpfqevqasusbukhsqqaqubar6ema9ad2apca8eea8gdzapaw8vxxhtmxdten7t1ctx7resotkrejk5ad/t1svtxt/t1v3txresfzlxxxfdcxfdxxghecuhfcqaxxfdcxexmafdcv0rxv1yxl03etmxfxqwmzi2ntqnjyq1ndyzmhcriycmntqjigyvfbyxfwqvfaqjim+iaqgedexpu1v+xfppplkhagg2t25rflobm/78ypgyarssnfnwykhvsir91jaxnp75exgym2zkpkcwi3bgl8qaaqa4/+cc6au3abqazua+esaug0g7a0sdwwmdcwmbaysduwplawujcqkicgsobzclca8alxqaehasahodegiwfa0ldougbuaibrufzqirarezghgqzu39ms3gad/dx15d1u0/m+0yem0ros8xmafexxerjqyjiberizuznsuvmxujeruumzi3auhdwf6oiigbkppzlje5csibbgksy7k07wp9z1wcfwaaaqaa/+cfharkaciaeubpgqipagl5age2agesmbgbsbawexzicrab6rabbeatfkgeqakmsbkmpxondygnihmbezudfg8aaqkdgqibe4uiohwphuanogykhggciwzlaisrargqteqa7rdk/tlkx15dad/tmjiv7t8z7tixmaerk11xkytxxxelnqyjiiy1esc0jicnnserfdmynxenncynjzuhercufhcxfqnthvktqaupxxmbyimndqupybibyayoybmaz+i4oghnyz4dbgfd/rnkowhsyz4dbgfd/nhjph0gav0aaqaa//qfqqrkacma9ucqxwebcsmbqwaqfr5ihbwhbwmgizrsi4gtfrqtexudadrsajatdhqtew4dfqfh8xubjhub5hubbhubdbyoatyo1g4cbg5wduyoaw0dbg4vgh0gbwmxqbsid78taqatebmge3atgbowe8at4bpwewkpeymtabujibuoia4oeymadxmbop8taqatybmcewmoo5aiaqaieahacamacgaicaiackaisajqcoaicagvxxfy9diz1l1yxl0ymklegv0ygoqalzmzl15dct8zgu0xml5dcxjexxfyxv5dhwuqkysqxicyecsremqbetmylzivmtarxl1dbqenjiynjzuhfqchbhuufxcwfxmtnju0iycnnsevbwygbwcbamz+djqinkmtamktj0yggwid2ufdntysazctqy0arp5ndamwx0albafdxqedbcihd0gfpp46acagib4eav1daqqzl3n8zqaaaqaa//qhcqrkacob1edckckbjcm0kqiakrapagivfgevewfhjwgwkkyotigdzxubmrwpfqjxfafzkghjkggkkge4aegawab4aaqdgjrsjyunibyafbywgigvfhwhksgukskofcopkogtfbqtfa40ugadaictdhqtew4ojqggjqewjtylrivwjqrzjqedjqh4awgxawega4ydajydaxmdaqmdaqkccr8iaw4ajqcgpwc/kx8pjymfkqqakuapahapickwkqmqkeapaikpfrquiacpfg8ttxmchxmvez8tawataqatebpaewmoe7j/webtexhiexmnkcoeacgndxybog8wlxzvfn8w3xyftxybfhyakgafewfaeweteykosyvbjqiajtagad8gaq8gnyacieaxgkggiq4obykvfjapaqapuclwkqnwkeapaikoa68iadaiaqaigajwcamiby/nxxfdotkz1f1xcjiysut0gm0rxxfxotlxeri5gs9dctmzetkvxxfextmzabgvfzmvk15dcxfymz8zmy8zmy9dcxjdeo0xml9exxfdcv1dxxfdcxghbrarhyvehxgrh33ehxgqk4d9xicyecuhk8qxmaffcv1dcxfdcv1xaf1dx11dcqubjyymjyc1irujbyivfbcxfhctatmbezy3nju0iycjnsevbwygbwejaqeb5p7hkrktqxmcphm3pgqlbrozaslrar6iaxiepjqtazesvdyx/tfc/tx+vwwdm2e/iqqbxv0bjgwumby1/kic1/0pabcjlksalafdxqefoyx8ywme/pwaaqaaaaae3grkaeibyka0bhpgewijm8kz+tmdftjsih8iibmvfbmojrmvntjsaeaaidm1fdmdmdm1ihmojq4zaamwjbj/6edkfrliaxgvgugwdiuohwmwfamdmectvxmcrxpne/cta1gtmbpyewmiewejuhmbmzmb9dmbttmbtjmbbjmwmyyzax8hmwfdbzm3m9czawczlzpxmwmjeyizaciakwmgdhuzhb8hcacaca8lkcswnt1abzqnkjsiexmvdgazmza1bb8bfasfat+lh9sfahsfar8vhxoblxrfggipgp8arxrfggqjgg8batobzyubdsudjqiwjq8qhyp/ko8qryq/kt8qbyoakrapickdkbj/wea/dhrikuroawecaxidag4daagbaagqcgaicaiackaisajqcagib7taayraarraaua10dsbaduqo6a7azuvpae8l13nxxe5ov1xxdtnxxe5ov1denarxc1dotldxdrexc1exxfyotldcv5dxl0rejkrmxesorezac8z7rcypzptfzirotkrmxezxl1xxl1exxfdxxfxxl1yxxghbrarh33eassrh8teeifexicigbarhwurxicigbarhwurxafdxtewaqmnjiynjzuhfsmhihuufxcwfxc3nju0iym1iruhiyipahmxfhyxfxuhntm3mju0lwihbhuumxczfse1nzc2nzcb5s9uldbcegjoeje8ccygdv9wbvgtaaqtkzg2b7vawso0rrl9nrmzodizax5zmh8s/mmmmdtpwgipar5oobseav1dar0idue2e4wggh8bxv0bpn3h/tbvnbseav1darwsskupjoqkhafdxqeca1tjaaabaad+dqu7beoaiwfxqkclabsaqwadcrybaqybatowadybanobigecpaabdymb9ymb6smbwcmbacpiiwiaacmiatrsarcpeg+qbaeubaqbrbjuegikegedegexfzjsiyejiaexfaebf9khaskharghavyhaxyharyhjifgivyhligmidyhbykesqrzbamgbdyedgqdlgsmbmye1gqeewqb0wqbagqhdxcbhiehcqcccq8sasmbabj/8ebnhcbifwebiwffegepeh8sahisccexrxy/hm8caxwqhtadub1whqqqhsadqb1qhyadkb2ghcad0b3whqodjxyeaq8eyalwcyajoakecqgvzv05oxeq0f1xzv05ori5gs9xcjmzcssagd8vmz8z7rcyx3fyxxfxxxfycxfyhwuqk4crxh2hbmqax11dhwuyecuhccvearesorgvmtbdcv1dcv0acxjexxfexrmbascmjicnnseviwcifrqxfxmtnjc3nju0iym1iruhbgyhac8bd/6pob0mrxmcbxi2qxwjzfabdxkfzhibixnwlu79fv51azcdh204fwubxv0bjbq8t/47acyzjd8kbr5dxqegkpl7swabaguaaarabeoafgdkuqab//bafbuyspomacsm2wzrdanqdqhqdqenup/asxkhsa24//bajbuysf8cad8caqjagsfiahavgegcdqwnhwecfaebagqmfawcdlj/4ebgdhficwebatsbawegdhfieakbcz4cdjckdx8varwedqgxaaimfkugfggwfgewgaildwkfcs8jawknyafwaqiqasabcaedas9dctpwce0q3l1x7cqyac/tmurdp+0y7v0rxstdhwuqk4d9xdewassrcxirk3fyaf1dkzc1aseibg8cixehfqehmjy3njc3mxflaod+zv86agqbiaoj/ymbymy5agicaygaaqoegi1tegejxfx8gjalhxl+9wabahf+2akdbisamabmqd3liqeyqakpsa8mhyycdwofcgijbbgymjsaqa4iajswma6pdr4iqsmggdana4wwlywadsmgeiojiioajwenl13t1o0qxdlu7dttem4yad/tp+0raboyee3tot0vmtabx15dxstdezmyntqvaiy1ndyzmxugfrqfahyvfacwfrqpagyvfbcviyimntq/ajy1ncmjdywpcriyhmittjihca0t3dsudqcjlk+wxrwyegmmjqkwjxkps2p8q4ozxbooicqqr2hn6vlf41dqrykyfxszxkubrntpsygrhwabatt+2ahibisaawacqa4bhgaga70aqaqfal0mmcsbghgqte0apz8xmaermxebnjt+2adt+k0aaaeaa/7yancgkwawahe1xchuiqiyup/aqeajd0gajhamagakeaoccqqygacbmeaidjcbmdaiqsmedqknibgacsmnecekiamkdxabp88qarawlywaa4wafgewl13t1o0q1f1exe3u7rdemhdomga/7t/tkwaagbbn7tk9lzewav9exv0rxqejihuuhwiwfrqgiym1nju0lwimntq3jju0pwi2ntqnntmyfhuudwigfrqzmwj3jy8kergdyznmkgcidrpe2xmncaiwt5bghrgscislalopgsllanxdg7ncfywgjcphauvpw13mvmlhktivfbhcq4fge2llksqhaaea3ggjbx4c/qazadqzdwubdrj/2eaacrbiasgjeegwvkacdqcacb4paaxidrszsaav7rdw7qav1o0aenzugu0xmaerkwbdexahmh8dfjmyntuzeceilwmmiyivfd4bewaktlxdbjasyv7wz4pnxf5unpebvafbocakjcyqcf6/ocakjsuqcf//aaaaaazdbxycmgakaaabfwcoalybqqaxqa0daganlqszjqmclqumacs1nqerntua//8aaaaabl0hjgiyacqaaaexanwasgdfaa23awiaks8lgsubkzu1ap//ae/+uavube0cmgamaaabfwddanwaaaaltggdgsqffyubkzua//8akwaabjqhhqiyacgaaaexai3//qfbabnacwfxotsoocubpaumacs1ass1ap//acz/6wycb04cmgaxaaabfwdyakwbqqatqasbdsgyfielatsfjgarnqernqd//wbp/9sglacwajiamgaaarcajgdfaueaf0anawiafrsdcsudahsfjgarntubkzu1ap//abp/2wxmbxycmga4aaabfwcoalqbqqaxqa0cataqmcgxjqibmaumacs1nqerntua//8anf/nbfggraiyaeqaaaewai3baaatqasctikrbr0laiwrjgarnqernqd//wa1/+cewazeajiaraaaaryaq9eaabawarj/qeajkykfhsuckhemacs1ass1//8anf/nbfggraiyaeqaaaewanfeaaawsak4//vacsksbr0lai8rjgarnqernf//adx/5wrybducmgbeaaabfgcozqaaf0anawiakjafhsudajarjgarntubkzu1ap//adx/5wrybg0cmgbeaaabfgdyzaaae0alagapmwudjqi8esyakzubkzua//8anf/nbfggyqiyaeqaaaewanzmaaaxqa0dagasmgudjqmckremacs1nqerntua//8apv5qa+4eywiyaeyaaaewan0gaaaltgfogcmffiubkzua//8apv/nbbwgraiyaegaaaewai3baaatqasczxgabralahsrjgarnqernqd//wa+/+cehazeajiasaaaaryaq+aaabawarj/0eajghgfecucgremacs1ass1//8apv/nbbwgraiyaegaaaewanfraaatqascgxgbbralah4rjgarnqernqd//wa+/+cehaxvajiasaaaaryajs0aabdadqmcgbkfbralawifesyakzu1ass1nqd//wafaaacngzeajia1gaaarcajf69aaaae0alat0wgbuhjqezesyakzubkzua/////qaaaoggraiyanyaaaexaep+7gaaabawabj/ueajgbyvbyubfxemacs1ass1////1qaaaqwgraiyanyaaaexanf+yqaaabawabj/7uajfhkvbyubhbemacs1ass1//8agqaaaogf1qiyanyaaaexai7+1qaaabqxagg4//pachcdfqclagedesyakzu1ass1nf//ab8aaau7bg0cmgbraaabfgdyjqaafrabup/wqakwoi4mjqfdesyakzubkzx//wa+/+ceswzeajiaugaaaryajqeaabnacwjcfbydcsucfxemacs1ass1ap//ad7/5wszbkqcmgbsaaabfgbdaqaafracup+mqakwfamjjqivesyakzubkzx//wa+/+ceswzeajiaugaaarya1weaabnacwiafbcdcsucghemacs1ass1ap//ad7/5wszbducmgbsaaabegcoaaaaf0anawiafrsdcsudahsrjgarntubkzu1ap//ad7/5wszbg0cmgbsaaabegdyaaaae0alagauhgmjjqinesyakzubkzua//8aap/nbrwgraiyafgaaaewai0faaatqasbzcmldsilasyrjgarnqernqd//waa/+cfhazeajiawaaaaryaqziaabawabj/wuajjsmniiubjbemacs1ass1//8aap/nbrwgraiyafgaaaewancwaaatqasbacmmdsilaskrjgarnqernqd//waa/+cfhaxvajiawaaaaryajiuaabdadqibdyqqdsilageqesyakzu1ass1nqaaaqcd/tgexwxiaasaaaetbtufayedjrulewhqgf6aawyzasgyawx+mxj+2arpon5kaiv91ureopuxaaialaodauqf7qalabcaieardoyadhlmbgqp5g4dcqkv5gmv7drjro0ap+307tewasimntq2mziwfrqgjzi2ntqmiyigfrqwabh5q6x8fkytfu9sbe1oa2sdna57fkurfh2sb2xotwtrtu1taaiaaaaabeqfyaaaab8asuandz4mhboxbwoiaxawfxsulgezabkkbwetshwchg6ldrchhomqbaeel13ten7u7re5l+0zmziyac/dmu0y1e0/3tltmtxtmtalnsqaeraajtuzfryxesmnjyymjxeynxugixudeqyreakv/vt+3weeaq9dpkqiaquftm2mrmsoxfeanhyblweeaqabihsrrakm/tstpvddc/xjoig0naeza4c6/m/+iwabaoaaaasdbe0ahwbgqcyebxqbfxcdew6fdrobcwcdazkad0kohyezfxqlbqcabbaeagqdas8z1l0yzf0yzrde1o0al+0yp+3v7resos/9m8uxmdc1nhe1izuznrasmzixesmnjiyjigyvetmvixuubsev4mwgonnld76iaqg6u1u+6+v+1qlhaooqaso1aaibaaeqo/77entpdax+zf13/n/qaaiarp6/bgkf7qaxad0a20b9obmuntulkcwnfduufbq1kzi8dtwspi0qdrqqea0ydsgsnqurobaujtwfeystkxmjiq8bhxscg58aizsybwabeaeccqmbnwajmzdopcwtohancxeojskknrq0frxjgykltc0ykzsmksrmftgtoowrakkbqaerpyloaj4rzqirkwermxoyee3teo0ymttteo0ymtttentteri5oresotkrejk5eri5oqa/7dxtx15dp+3v7v0rejk5gs8verczerczhxgqk4d9xbaoxmshbbgqk4d9xicoxmqxmbmrmxcwfrqxfjmyntqmjyckntq3jju0jdmyfxejjyy1nceibhuufxcefrqhfhuubcmiaty1nc8cbhuufheyiaedongu6e2bhp6fs7kbbezlwigba/7+yywuegfwmrf+8/lyadaifaepkgul/vsbgbmvdk8eoss7rty4l9qakv+yrl82/t0tmxahe1pgsdoy5oulz7ihtaknqu5wpkxro0pszekaaqcrajqebarvaasaacuiadu0admyabuuaaj2xv7hashmzgeg/tuuastjzqeh/t7pzp7iaaeaif7ya8cf0aaoacbaeaegdjojbgsoianndahndqqv3e3w7qa/mz/t1s0xmaerjiy1ecexfzmrixejeqijv9sbsfld4v3w/tgedbdcsgfoagb5eaz1+ysaaaeasp/nbvigraa8airataoynjkqdqoudq0kdjekdti2bjsvlykbib2xhggeaaaxoxy2mjgxdqojdiyeexmjmekoar4egaklaqeycva4givah6ilpjhpaj0lzqirkweyee3kgu0q7re5l+0sos8q1o0sos/teri5oresotkap+3v7s/tmj/terc5hxarh33emtalntmxfxyzmjy1nccnjju0nzc2ntqjiherfxqwfxcvitu3njy1nxeqnjmyfhuubwcgfrqfahywfrqgiyic23sbbazjplh+gb5ffdqsqaqiqxp9vbnfkqxx7mpliizyqkamm1jsl60t8bi+cghht2xvo2xwkh1zgn7+w/x4yzwhbafdxqeght5jazgbaemoewzuh0dgnzu4cocfbizdaaaeajcchwrmbe0acwaxacoamqcbqeypjsyl5iopfcoqksolgjcrkxoxhqyfjhumgikahxofghimlwaoepcgkiuyksyoluyjkxjmhhrohcmcixwvd+coawkjfecdl+3usuttetk5ly8q7tltmhdtxdiyejk5ac/t9o0rotkvlxezeo0yeo0yejkv7tiyhwuqk4d9xdewasiantqamziafrqajzi2ntqmiyigfrqwexujntmrizuzmhyvfacxmxujjyczmju0iymcemx+5aedysobhv7hzqjo56sj5+zaodexwp9vaj0+lffcp4kbqaifar/iyged/upjzp7kxoamo+fnpklpatu5xafoxdhpzkb9xllcvuaaaamavv/bbmkf7qalabcalwbxqc8ksiijgcpnhrgdgb0vd+cjdhxnaymij5cgl5cylzcaibogggwoaayslwyedjcaewa/7t/tsuqrotkvlxdt1e0q7dxnas/t9o0rotkvlxdtentf7tewbsaaeraaisaaeraajsaaeraaisaaeraaaqyjiiy1ndyzmhchjycmiyigfrqwmzi3a1b+xf47acgbqqfbacn+nv64asibk/5u/ux+5f5uazacbzcgz/zzzykqdfyny05/lk2hfhglacsbpgfcacf+of7a/rr+o1wbjwegarobkf5v/ut+6p5rarsq9srh6yi8dfcru6cywzyaaaiamqlyb9qfyaapacqaaaejfsm1irujnsmrmxuhntmfaxehntmrizuhgwehfsmrmxuheqmbzctpazrozhx+snuekkn+/w9vawaknafndxx+wlefzojq6oj91wnjjqgx/itjaiti/mybmml91wmb6f5vaaebxquda+egraadabo3ayaaasabawav3d3tac8aztewarmhaqhf8aes/mgfawfb/r8aagfebqmdrqxvaamabwayqasfalqeawdtbabtay/t1u0alzptmjewatuzftm1mxubrnlf0gud0tls0gaaaqdeadeffgrvabmaaaehnse3ituhezmdiruhbyeviqmjapn+rqhssv3kamdfj18bqv4lsgil/apfjwfnln6uarz+5jtelp7kaaacaakaaadybcgaqgbfajnau0mjcxglrqucfhgufhyyq6yjcretntusntwtjeajoysthjaaleujkxgdqpq7kgeccxmwbbcmareuk0cslaakgeu2fwggbwcaehukgkgkaecwcxesl805orde7dtteri5l+t9mzpeejkv7tialzptfziq7eq/7tlkkwaagbbn7eqq5bi5l+2hbrarh33eemtemtalitu3njy1nzuhbwyvfdmxmxuhntc2nzcbirejjyy1ncynjyermzcyntq3nzmriycmntqjjymrfxywmxcznzi/ajmbirehcvubemapbf30x1jalbp+mhncmj0c4aozlaedgzne/slayzcdayiiaqm7xueebcjdwh1yrqyfapt6cahlaf0bbh0+y5szgxogal5daqrwzqsr/vctmwk0hqme/c4cmgype/6/eiehnwt+rfdaiaidoe0saq8c6qaaawbj/9sgmgxtabmaggahahhaqwwbhbmacwajfrqcaqokaasaggekfaebcgqogsaeeretcwohbb6taqarewcrfx4ebaolih0oaaezfqraiw5vaiiebairkweagbbn7cyyeo3emhixoqa/mzptpzmz7rixoycfecuhfcshdstexmqqhw7exmtemtaxizcmeraaisaxnzmhfheqacegjxmbjimgerqbaryzibe0xn3evqguavcbh8yig8hc/mz+pp7k028c02/m/lcdj/0qc+cbqsxb4wfrawibozub3el+tf6z/l+aaqwdltz9y8scjfzt3qkq2gaaawdeaikgpwqtabmahgapaaabejmyfhuuaimiawijiiy1nbizmhmnaimibhuufjmyarcsmzi2ntqmiyid3jjslm3embjpmtctzt6zt10xwftqcxxdjqfagl5cuxb8xy0c0ae497ha/ukbq/7i97haarf+ecabbkz3czcbvyd+/kz3czcaagdeaaaffgsgaamadwbkqccjdgwhvgyobayeba0gab4adqiocw+9beagdgeeaqeqcaqqeqs9zdararezejkyl0lemxoqtf0y5jial+0vmzkvsuqq/tlmmta3nsevarehnsermxehfser3gsg/wb9+giglaig/foaljqbkafylafy/o6u/o4aaaia3gaabx4eoaadaaoaadm1iru1cqevarub3gsg+2aeopzxaw+ulo0b2ghzn/7hav7gaaacan4aaav+bkaaawakaaaznsevjtubnqe1ad4eoptgaw/88qsgljttnwe6age5n/4naaeaiqaabtafyqa/alfazbwagoiqjhqqghqqjhoufiekbxqkcgcxlgcma0ajdegdazotkhoepgchoq0kdbqcisqmbw+mig4dnzqmoroxacyciimokiwwokaukjf/abqkdg4naa0faua5oaahawbaqqb/cjararezmxgqteqaztlusutnotkq/tiy5m0yeptnotkrejkal+0ypzptfzirejkv7tmzmhi5lyvtmzkhbrarfrdehwgyecsffrdemtabituhnse1iqenjicnnquviwcifrqxfhcwfxmtnju0iycjnsevbwyhbgcbiruhfseviruxfbyxfxuhntc2nju3agn+/aee/vwbbp7bstm0ewjeeydfcw4tgq3x4lu/mbmbbbjfkcir/s0ba/79aqp+/qupybl9lxngkaybfl2txahgbvaeav0bxaeedrqyjtev/qwbvyajhgfcxaefqzpa/jtcrv1cyz4dbgfdxqeght5jaaabadh+2avnbeoaiwbiqcqge6cufagpg6cahb4nc5uiibypfaejfkiedyucohyafgelaxa4/8baeg4rsakjhuahogalfmgcjablaisrargqteqa7tirx15deot9murexqa/m+0ymi/e7t8zeo0ymtatesc0jicnnserfdmynxenncynjzuhercufhcxfse1bimijxhsbslgewhjlh94bihgewhjbshge/44f6gsop7ybfbjph0gav39fbchafjjph0gav382gm+hqybxc/ih/7maaacakp/5wr2bkqaewadaaateieyeheqaceijjuqadmyfxahigemiyicfrqzmhlgigft4pp+nv7vplwbb+cbav5iqai+zgl+v5x90wthax3+rp7h/lb92r6maqibp2mbvp2cd/7uxeebwwaaaqdeaaagggxiabkaadm1cqe1irejjyy1ncyvasejase3mj8cmxhean79watklaeegjne/eqb4f0jazhyrgyfaztfaioccwj+9xmzctqdawt98p1vbdhfev6oaaaban4aaabrbcgakwaaarexfbyfaruhntc+atu3esc0ji8bnsevbw4bfqcrfxqwhwevitu3pge1nxecswupybl9ixnfkqufkv8tbg0sxyofbslgev2le18pbqvg+8jjph0gav1daqydpmmdhwi+hqcbxfwbbx0+yvx7yz4dbgfdxqeght5jbd4aaqataaafwwrkabqaaceriyihntyzirujerqwfyemgqeheqewgxpwxbgem94vt/62xp6ba4vd4ibf/kiwrxcmatkbpvx7aaea3v7ybggguaapaaaffjmyntqnjj0bebizmhuuiyi1nd8bjimifrqxfh0beaijiju0mzivfacb2rukvw8fsmnoin8hbxulvg4fr8rnin8hpganl3p4qt4bwwgktpgqdbuubo0vc/iq3v49/na2kzamfqaaagb7assdxaxtacaakabwqcoilwgijxqclx0alx8hacewhwlqfbesc5cubagaiesdgcoqprel6/8faqw4/8czcq1ibs8rxe3u7rdcxo0ymga/7dxnepqy7tiyeo3v7resos/tmtabbimijju0itm1ncmibhuvbym1njmyfhuvfdmynxugiyinnsmifrqzmgjed3dpjagrojxawqgityvmtucleuxhojevrvi9azlufv37m7g0jrwto0egl/wcalwa3pwbwqaaaga+aswdqgxtaaoaegalqbullwdqd5cgbayjaqkdaq3rcrqr6wmv7rde7v1dad/t9o0xmaeijju0njmyfhuqjtirecmierab7svl5tdp5/5hsk2taszuvb7s0r3+blwbngez/sz+ywabafeaaaazbe0ajwaajtm3mj8cmxehnqareaijigireaevirezhwewmxczabeqacegabeqbmeuckyfbqku/v4beos7vombep1elaefbkzylp5maz0bqgfcaz2nazhfev6trqegayebdwfi/rf+8f6b/vmtavmsxzgdatgbdaekaxb+iv7c/osaawar/+cgbgrjaccalwa2akfaxcmxcr6xmea1idcxmdaynzcaghyvewetnhrada9ifa2xfhailimgliulkaaulgiwgaayackwcq8paqkdhoqpqcwxkyrkmdgfih04ekyaexatagodeyyfbua3bwyckweagbbn7drfxl3ten4y7ssbghgqtf1fxl0zxri5orkvlwayp+0ymjmq7dxtp+3vk+1detmq7tiraboyee3t1e0xmcugiyimntqkitm1ncyjigyvbwcjntyzmhc2myarfseqiti3fqyjiiynesmgfrqzmgehntqmiyic/alql8kbhaesnudgvnicaag/ydkbgsebu/1sayseptc0s9c/jv7tqfwbbggeuglsudk5irethy1mtto+e95xgid9zhb+yeiyrfmbawrmygh9i8ekaaadaal/5wt1bgmaewaaaciaeebddbscewalaakvfaibcgoacwciaqouaqekba4ziqqrf5clcgcqhpcbabewbxexhgqecgshgw4aarmdbeakdmkciwrmaisraroyee3txjiq7cyyehc5ad8zm+0/mzptehc5hwuqk4d9xicoxmtexbchdstexmqxmbcjnyy1eaahmhc3mwcwfraaisinewemiyarfaebfjmynju0goc5gge2aqjonxibuip+yp774aakadrcop77af7+lewbeo8zu5rvaqubm3t7u53r/v3+ynsbcghywv4qxaeg/irm+nrxaaiaqv5ca8yesgadaciaqkajhggnigiddxoufa2xfhwecagkaqtaaiiigrklhxmbeyqkfxkv7rdexe0ros8z7tiros/nad/t1e0/3cyrotkxmaevitubfrqhbwyvfbyzmjy1nzczeqyjiiq1ndc2nzc2ntc1au/+2aeomt+einjabqebilbb4f7unuqxlvweber39/5deawen4najkhtq04t/uxat5wrczitj0+4dbqaagb7/oibowrkaamacqasqbcjagmpbxsetgujtgecbcaiqaolcmbkmcsbghgqte0zmuuq5qa/p93gmtabfse1exmriretaap+2mjm/thmber39/5d/qp+2aeoav0aaaea3geobx4deaafabvacqqavgeevqmhac8q1u0al+3emtatnserixhebkcuausu/babvaabalh/ogaoby4acqaaeyclatebmwejadsqatubzqlgy/zswp6dadxsmv03by/4dal6aaeau/7yboqf7qayaaabasm1mzcsadmyfxejlwemiyipaieviqpc1dzufjqboubsa6acbahbizidkqef/unp/tgebl1zaq0bmit+8bnpbvgrzf37+gaaagdeamuffgpbaboanqaaexahmh8dfjmypqezeceilwimjyyjih0baxahmh8dfjmypqezeceilwimjyyjih0b3gerzopoxf1unpji/u9mik1crbptn5fjarfmik5cxw42kml+72aktvxegm03kqkaaue4icqklkoj/r84icqacyuqcf5eaue4icqklkoj/r84icqacyuqcqacan4aaaagbduabqaiaaaznqezaruliqheardraqd6vqp8/gjqbov7ferqa6caaga+ag8egwpbaauacwbgqdci7wnwcgbvc/akau8d8aqa7wxwaqckawqi7wnwcgbvc/agb4vahwobcgqc7wpwbadvbfagayuel+0agf3tep3tgbduxrrtghn97rd97qavfzp97rd97rd97rd97tewaqmtbwebbqmtbwebakfc20z+rag9aidd3ez+rag9a53+ip6ipgg2aby+/oj+izcbragyaaacag0abwrka9sabqalagpapqjvcfakbu8l8aoc7wpwbadvbfabbwodbalva/aeao8f8cabhuafbaeecgjvcfagb4vacval7yaqbiagagyvxroz/f0ago0agf3tgbduxrrtghn97rd97qavfzp97rd97rd97rd97tewjrmdnwebjrmdnwebakhc20sbvf5d/edd3ewbvp5drqf4axg+/kr+sj4beaf1n/5u/k4aawdmaaahgqdeaamabwalaaazntmvituzfse1mxxm3ghn3ghm3t7e3t7e3v//aaaaaazdb4ucmgakaaabfwbdalkbqqawsak4/6hacsgmcxklaicfjgarnqernf//aaaaaazdb04cmgakaaabfwdyalybqqatqascacywcxklajkfjgarnqernqd//wbp/9sgladoajiamgaaarca2adfaueae0alagauhgmjjqinbsyakzubkzuaaaiat//bcb4f7qa3aeyaacugiyaaeraaitixnseriycmntqmjychetm3mju0nzczesmnjju0iycjaxcwfjmxmzcypwizesereranjimiaheqejmynzyevpuv/rf+cggoaumwmgodlaeegjne/shbyjgcaoehagi7xuebbqqiq1h9cuygbqgu/dhbvaox1ds5mlhalfebqgffawabqvar/vctmwk0hqme/c4cmggne/6/eh8jnwt+rfdaiaidoe0s/v0cqafcatpzdv6r/td+wp6sdluaawa+/+chharjabkaiwaqaaalbimiabeqadmyfzyzmhirfseqiti3fqyjicuynhe0jimierabitu0jimia+ww5p7+0qev//ekmelu4p1saywdptcp/ut96xhiy3x8awabg1bi0y+oatgbbgegati2tv7f/u8w/mbimerd4qet+dx+i/4bajqjx6qaaqa+ahkdwwk5aamaabm1iru+a4ucgacgaaabafycgqepapqaawaaezuhfvyhuwize3saaaiabwpba1mgkwakabuaaaevbhuufzmrituqjxugfrqxmxehnradu3idb/7ylhidb/7ybitcezylgv7y2gfpj1wrlgsa/tjaau8aagbva9sduwyraaoafqaaatu2ntqnixehfrafnty1nccjeseveaircgnvasj9hhidbweoa9tdejumggeo2v6ykf0qlqwaasja/riaaaeabwpcabagkwajaaabfqydatmrituqabb8fp6/bitddpwh/r/4avuaaaeabwpcabagkwajaaatnty1jymriruqb3wbewfba8jddp0gauh4/qsaaama3gaabx4eoaadaacacwa/qcif7aqoab4ocqaacewiaw4ldgaiaaambwql7ahada0i7gqwkweagbbn7tmyejkvsuqq5gav7s9jrp327tewezuhfqe1mxudntmv3gsg/tx39/ccbpsuaat29vxw9/caaaiayaaabj4epgadaacaacejbgj//eechwif/eebtf6z/richwif/eh+sgfoau3+swd//waa/nufowxvajiaxaaaaryajmmaabdadqibpiurcb4lageresyakzu1ass1nqd////8aaafvgcsajiapaaaarcajgccat0af0anage3mdyigiucatyfjgarntubkzu1aaacafya0wsjbp0agwanapbavrukcryjgacifwgraaeqaq4dag8caamhcg4rfrgigkcmvwxndlcmxwzxdaziglgaabq4gsga2bogir4mqbai7iapcqwohl4aqbyc7iaxyafwayabawg4/8baqjq3saeaaamhcg4rfrgibuctvxnne7ctxxpxewzibvgfaaw4bcgf2augh70tqa8x7iaqfg4fexmlvqvacqhuiagcbs/emhoz7tiagbdt1ele3jiage0yghgq7v1dehc5ac/ek3eyghntmhoyeo303jiage0yghgq7v1dehc5eh2hdsteeicoxmqqhw7exbchdstemtabbyc3jju0nyc3fzyzmhc3fwcwfrqhfwcnbiminzi2ntqmiyigfrqwavnbqsjeycvcxx+tlh/fqszhxcfbwycxlpn6qql4d6moaztbqckajpr+xkhfywhfqcz+li6awkhbzzsoexepqxd2qwaaaqa+ag8crwpbaauaaaedewcjaqjh3ntm/kqbvqod/oj+id4btgg2aaeababvanud2wafaaa3ewm3cqfs3dxmabz+q60beaf4pv5k/koaagaxaaaftqzeadaanacmqfcved8qahcedxwxdqexwtiakqexgaopar8vayknacerpraqibaweampmqejebaqmca0dyefis8hawodiamnhscigjqamkmykovacacibgognhpoajugzqirkwermxgqtetggv0y5bezeot95f9exrdtetkvxl1d7qavm+0xmj8z7ti/7t/t1e1dmta3ntc2nju3esm1mzcqitixfsmnjzqjihuvirexfbyxfxuhntc2nju3eserfxqwfxcvarehetetxykfmpobayn7znsba0h2armgkgat/basqy0f/nuglumsarwbdwbdaqydpmmcxwm1acuv+rjkaec3/nhjph0gav1daqqonwmcxf08yjyobafebqmbkp7yaaeamqaabu0graauagpaph8hlg0beaanb5ckcg8bfhkdlacylg8ejiyodxgfgc8yawodgkmehreies6jjcifqagaogykbjaraaivbmuckysbetmyee3kxhr9muqq5p3kx15dejkvetkalzptfzi/m+0ypz/tmjewnzu3njy1nxejntm1eceyfyerfxqwfxcvitu3njy1nxemiyivftmvixexfbyxfxuxe18pbzqaayxehwgebihge/2wek0kbh1ynphxbsrnegbdaqydpmmcxwnhabmz+vdjph0gav1daqufpwmeslzxjwp9o2m9hwubxqaaaqcd/tgexwxiabmaaaetbtufequ1bqmhayuvjrelfsutaeoz/pobzv6aawyzasgyawx+mwfl/psy/tgchz7erahuon5kaiv91ureop4srn4+/eeaaqdeak0ejqp0aasaabm0njmyfhuubimijt74rk719a2x9ajvqvx2rq329gabag/+2agwaueacqaaezu2nscjeseveg98axsbqf7yxq6ciqfb+p6raaacag/+2antasgacgavaaabnty1nccjeseveau1nju0jymriruqaitya28bkp0ccgnvasj+2fwrlqwaasja/rioxbgvdbobknr+sgaabwaj/9si+gxtaamacwatabsaiwaradmaabcbmwetibeqisarecuyerajiheqasarecegeralmheqiyireaugerahibeqjtirecmieratbpxe+wgz/qmbygfi/pufgomdip6jawibyv6bhooda4f+pafiawh+niwcgyugevnuawybcaf3/o7+i18bfwes/uv+7pzaaxabdv6o/oxfarcbev7r/uxfaxabdv6o/oxfarcbev7r/uwa//8aaaaabl0hhqiyacqaaaexancaswfbabnacwiajiklgsuclaumacs1ass1ap//acsaaasub4ucmgaoaaabfwdxabybqqatqasbljk8djglat8fjgarnqernqd//waaaaagxqefajiajaaaarcajqcuaueae0alalmmkaszjqipbsyakzubkzua//8akwaabjqhfgiyacgaaaexai4abgfbabdadqibhzpadjglagfabsyakzu1ass1nqd//waraaaelaefajiakaaaarcaqwafaueafrabup/dqak7oq44jqe6bsyakzubkzx//waraaacrqefajialaaaarcajf7maueae0alatochg4bjqefbsyakzubkzua////+gaaatehhqiyacwaaaexanf+7gfbabnacweahb8ogyubigumacs1ass1ap//acsaaakgbxycmgasaaabfwco/u0bqqaxqa0caqadiw4bjqibiwumacs1nqerntua//8ahwaaaqahhqiyacwaaaexaep/eafbabawabj/yeajhhwogyubhqumacs1ass1//8at//bbiwhhqiyadiaaaexai0atgfbabnacwjmfbydcsucfwumacs1ass1ap//ae//2wysb4ucmgayaaabfwdxamybqqatqascabqxawklahofjgarnqernqd//wbp/9sglaefajiamgaaarcaqwdvaueafracup+1qakwfamjjqivbsyakzubkzx//wat/9sf5gefajiaoaaaarcajqduaueae0alacupkygxjqesbsyakzubkzua//8ae//bbeyhhqiyadgaaaexancaygfbabnacwffkswofyublwumacs1ass1ap//abp/2wxmb4ucmga4aaabfwbdalqbqqawsag4/9vacsspkbclasofjgarnqernqabab8aaakibeoafqa2qb3wbaeupxupbgmncaeiayvafqiidg8oaredfg5laisbx15dgbbn5dia/eqal+0yp+0xmafxarexfbyxfxuhntc2nju3esc0jicnnqhnbilfe/2xe18pbqupxxmesvzyyz4dbgfdxqeght5jagzjph0gav0aaqembqmd4wzeaayapkaebqubxaqgbnpaaw4fiabaqa4aby8aaqagagefbqgheri5gs8zmxrdxuleghjtghkq/roy7qavm+05lzewarmzeymnbwem8pfwdfb3bqmbqf6/wsiaaaebhauda9ugdqatactagbhdagjqcqejb8mmdbmj2w8khwocchpbac/t1f3tac8zep3octiq7tewarazmhcxfjmyntmqiyinjyyjihubhmvcrkpjjvhcxengskklvwudaqoijcnp/vyhjcnoaaebhwuda9ifnqadaa20acmaawavzqav7tewatuhfqefarmfa5qaaaabarkfawpybkqacwajqbqfacqdwwkf2zagaq8ghwycbghbac/t1f1x7qav7eqymtabmxyzmjczbgyjiiybgv1dwbpixba/iou/bksuljourgaaaqhkbqmddayraamadrubwqadwaav7qav7tewareheqhkasgfaweo/tgaaggwbqmdxabjaasafwcmtrikjyo2dlj/9rmnkjygup/2qakrldyacissnga4//zagrkdngakgr02aayxesugdgzfqaapcicqnhw4//azjyo2cbj/9kajkyw2aworldyjup/2qbyzhtydchkdngmjmq/fqa4dcqnafcudl+0a3elegu0rkysrkysrabgvgk3t9o0rkysrkysrmtabiiy1ndyzmhyvfaynmjy1ncyjigyvfbycdl2dhf9ehyvgqvpap0bzwqudhv5ehyrfyinkwue/wvlap1oaaqgu/ladqwaaaa8atlanup/gsxavsau4/9haiwwrsa8hhwcvbwmklwchca4blwadl3aoaq4ibcimaqkicgcbl9yyxtiq1o0al9rd7dxteri5l+1dmtabkysbnryzmju0izczbxyvfcmiaa5ik1y0xw046o9n/mlvfuzwu3emlp0aaaibdqudbiggraadaacakkaxbglebaagdgfb3wqbba4aapacaqid2wav7d1xsutwxe3tac8z7tixmaetmwehezmbaxxwy/6/arpwyv6/bqmbqf6/auh+vwabaap+jgnnaaaadqazqb8ema4vsacxyafwayabawemlwmicackmabaaaiacsifl+3exrezmwav1o3vce0xmaerbrugiyi1ndczbhuumzidtvjj9bvlwxq2+lchmnfntvppaaebdauda+qgraagad5ahgufbgteagbaqaaobsae2kaoawwpawediaibbquibxesorkvmzma3v1jrboy7rozep0ago0al+0yos8xmaediwmzfzcd5ph38hx39gze/r8bqclcaaabacsaaasabcgakwaaatmritu3njy1nxehntcrjzqmjyc1iruhbgyvbxulfqurfxywmxcznzi2ntcebpt7krnfkqwgoaumyhmcdrjjjgubd/7xbaqiq1l8vkogawfz/qddaqydpmmbdf1yxqgfyj8bcafcxaeigz9i7zxxnf3av0agagqerhgaaqalaaadcgyrab0aadc1nzy2ntcrbzu3esc0jicnnsernxuhercufhcxfwmtxykf3t4fkv8tacjf3wyoybmaxqeght5jazd/cyab3mm+hqycxp2rghgb/b5jph0gav3//wbk/9semwefajiangaaarca4p/iaueafrkaaf/1qakukwemjqetbsyakzubkzx//wbv/+cd5gzeajiavgaaarya4lwaabnacweklckpjcubkxemacs1ass1ap//afoaaaskb4ucmga9aaabfwdgacubqqatqasbhhoxarylarkfjgarnqernqd//wblaaaeqazeajiaxqaaarya4bqaabnacwe6ghcbfiubgremacs1ass1aaacatt+2ahibisaawahacpafqqbbaeabr4aiacear0bqagjab0mmcsbghgqte0zmga/pxi5os8vmtabetmraxezeqe0ljsu/tgc5p0cbg8c5p0caaacacsaaaykbcwaggaoafvalx4dcjmjcqeug5mqphedi5ibpgalfrcahgejax4cih9aeqgaoaykbioxbwipbmsckysbetmyee3kmjia/tlgx15deo0al+3tp+3txhi5l+0zmjewnzu3njy1nxejntmrjzqmjyc1itc3iaareaaharehfserfbyzibeqacere2aobacgbsziewhl108bxqf3/op+wp6xavv+puusaej+8v67af0bbh0+ywgdywgfyj8bcafcawh+jv6p/qd+xqvm/bxj/mn7pgkxau8bfwacagf/5wtxbo4aggajah1aqasaaaoacaibcqkacgciaqkuaqkbabykiakelwuagccxfg8bl0aqfgkkhqagaqqybb2fdqqigxnajq1paiqtzgirkweagbbn7tmq7re5enyagc0yenqzzqaypxrtp+0zp+3wghnngbdwgd2hgcuhfcshdsteeicoxmqxmaenjsynntmyfzcxbwareaahiga1naazmhcmjxmgetqmiyareaeepaemo8om7elypc8cg/7b/wd5/sgbjuvmv1azfgeeinj+/aq9rnxdfvxgw0wn/sl97f7t/qkbmvbwatidnhn7gwhhyef+qv4tap////waaaw+b4ucmga8aaabfwcnalubqqatqasbqy8xcbolatifjgarnqernqd//waa/nufowzeajiaxaaaaryajxuaabnacwgrjcyihiubjxemacs1ass1aaacacsaaas7bcgaiqaoafjaliitghywe6yuayktaaufckyhjx0phx8flx8dcwmfkhugociaah9afaegdsknawirargqteqygv0ymuqyen5fxl3tac/tmhdw7t/tmhdw7tewarcufhcxfse1nzy2ntcrjzqmjyc1iruhbgyhmyaxfhuqisczibeqismb8wmpyhp9lxnfkqufjmitamktwywhwwfrybv9lfw7avt+3wwbnhu+hqybxv0bbh0+ywofyj8bcafcxaehp4u0zov+f2mbbwe4aaiagf51bpqgkwagacka6kabfikbuqababazieg7iushwyedngqbuijiigioup/wqikxg0gzjghgjgemhgfahmoeanoeih7ahuoebj0err4cmxqrgrsaawkaafkaavyaauyaasqkncrejapejaedpyqbpyqbjbazhegyibwfsh8yaqayebgggamlbrsxfqapfyevgrahacowhxygczcigywdhaeiircbhuavckiokxxpaioozqiqk/aral0rkweyee3kmhr9mjlkeo0ap+0yp+0ymj/tmji/7tewav9exv0rk11yx11xxxfdcv1dxxfxxxercxiaxstxcsuvfxqwfxcvitu3njy1nxenncynjzuhetyzmhiveaijiicwmzirecmibwhhbilfe/2xe18pbqupxxmbyh73veh+1lalegb624v4b9hjpr4gav1daqydpmmfcmm+hqycxp1q6p7y+/7u/rn3aggtayoqaaaban4cbgv+apoaawaaezuhfd4eoaigljqaaaea3gaabx4eoaalajlaqgclbgqabqmiawolbgeabqijagckcwylbaeabqajawgdvwijfaiccqulbgu/aauuaaafbglubqmocaducqsfce4gclj/weanfsjidgaicaml7iacac8yghntmhjusuqrmhntmgaylzmz7tiy9diz7tkhbrgqk4d9xicyecuhfcqqhw7exbchdsteeicixajeeicixajemta3aqe3aqexaqehaqheaef+gwkb5whoap4zaedo/hj+gwkb5whoap4zaedo/hj+gwkb5/4zaaabarwcuamebd8afgaoqbyldfuodwcvafua8rahd/mndgsdakegl+qxmv3kad/tmj/v7tixmae1mzcynjurncyjigchnsurfbyzfzmvarwwlykxeyqqib4byxyqlxycueyckkobxkonagjhwf0ttsccrgabak0cuamwbd8aggbvqdmvbasegwqrbamegagm9g0i9q8hauayaw8yfxgcnxivgaiyapevbaqgarkg8xecc+cmgaevzdbtenbtxbesos/nad/nxxfyzt/t1e0rejldetmxmbm1njc3nju0iyihfsm1njmgfrqhbgchbgchfa00ndsti0bzyouhauaxsaozjwgbywjqd3f8knaaqi5coy7yhmwsbifax58aaaeavwi6ay0f3wahaetakbsbcvulcxcffpyvepuxbwh2aax1ipibcwsdaa7zgqfzhsmt5xqc5wav7dttenbt1o0rejkvoqa/7dxtp+3v7resos/torkvmtatntmxfjmyntqjizuzmju0iyihbym1njmgfrqhbbuubimiv1wbb4ef/zo934l6bqfdd6abmpcbf8copqjcmwttuclfrqvwc5yr1ay3j8t4iqd//wcx/9sg0gxtacca8p97aaaajwf1az8aaaahapedov2w//8anf/bbuqf7qamapcbaaanaxudjwaaaacbdgod/bd//wcx/9shcwxuacya8vipaccbdqp0aaaabwf2a8t9sp//ae//2wxmb4ucmgaqaaabfwdaaombqqatqasbqsysbsalas8fjgarnqernqd//wav/lweuqzeajiasgaaarya2r0aaba5aap/wuajot8kdcudqhemacs1ass1//8akwaaaqahbaiyacwaaaexanv+7gfbabnacweahr8ogyubhwumacs1ass1ap//agt+uaqzbe4cmga2aaabfgddoaaadrkaaf/ntcw3asylass1//8ab/5qa+yeywiyafyaaaewan2naaaouqab//w0kjupjcubkzx//wbp/9sfvaefajiajgaaarcajqd3aueae0alafkygguxjqebbsyakzubkzua//8apv/na+4graiyaeyaaaewai0jaaatqasbxhczbrylarorjgarnqernqd//wbp/9sfvaefajiajgaaarca4adlaueae0alaywbgauxjqeabsyakzubkzua//8apv/na+4graiyaeyaaaewaoahaaatqasbaroxbrylarkrjgarnqernqaaagbe/+cfmgyracmalaaajtugiyicnraamzixeye1isy1jyymjyc1iruzfymrfxqwfxcvasyjiheqmzi3a1z7+l3iaqdtt4gb/pobywecayvgewhjsggzbslfe/43dmj524v3am/oasf1aqgbp4gbhgmjbb5agwycxopj/erjph0gav0du2r+a/5+kaabajqcbgqmapoaawaptqg+aamfac8qxgav7tewezuhfzqdeaigljqaaqbwbbadqqzeaamaelyavgebawualxdgad/tmtatnsevvgntbbculaaaaqhqadudegl9aamag0anabqaa8aaqaqfambkmcsbghgqte0al+0xmaerireb6geoadubkp7yap//aaaaaazdbt4cmgakaaabfwdzal8bqqatqasccscpcxklaikfjgarnqernqd//wa1/+cewawdajiaraaaarya2byaaba5aal/6eajkiwfhsuclbemacs1ass1//8aaaaabl0hhqiyacqaaaexanoaqafbaba5aal/8kajjiwlgsuclwumacs1ass1//8anf/nbfggraiyaeqaaaewanqqaaawuqac/9xacskvbr0lajirjgarnqernf//aad+jgzdbducmgakaaabfwdfatcaaaaouqacaig0kyclgsubkzx//wa1/o4ewarjajiaraaaarca3wdzaaaadrkaageltc4qbr0lass1//8at//bbvqhhqiyacyaaaexanca5qfbabnacwglgbsffyubhgumacs1ass1ap//ad7/5wpubkqcmgbgaaabfgdxbwaae0alawgxgguwjqedesyakzubkzua//8at//bbvqhbaiyacyaaaexansa5qfbabnacwgmgrsffyubgwumacs1ass1ap//ad7/5wpubiscmgbgaaabfgdbbwaae0alawkygguwjqeaesyakzubkzua//8akwaabgohhqiyaccaaaexaoaabafbaba5aal/ykajjceneyuciwumacs1ass1//8arp/nbjsgkwa2aecaaaexaycdogaaaa65aaidarqqlayajqernqacacsaaaykbcwaggaoaaa3ntc2nju3esm1mxenncynjzuhnzcgabeqacebesevireufjmgeraaisstycgfokafjmitaexxtwfdaxf+g/7a/rebwv6ms5ib6p7y/rsaxqeght5jaz1vaxlipxsiavwdaf6o/qn+op5dbwb9yg/+y3s+apcbtwexap//acsaaasubt4cmgaoaaabfwdzaaebqqatqasbgjo8djglatwfjgarnqernqd//wa+/+cehawhajiasaaaarya2egeabnacwizgrsfecucgxemacs1ass1ap//acsaaasub4ucmgaoaaabfwdaabubqqatqasbljk/djglauifjgarnqernqd//wa+/+cehazeajiasaaaarya2t0aabnacwiogb4fecuciremacs1ass1ap//acsaaasub2wcmgaoaaabfwdbabubqqatqasbljo8djglatwfjgarnqernqd//wa+/+cehayrajiasaaaarya290aabnacwiogrsfecucgxemacs1ass1ap//acv+jgsubcgcmgaoaaabfwdfas0aaaaouqabaua0pjooocubkzx//wa+/o4eharjajiasaaaarya33aaaau2arsdgquqjqernqd//waraaaelaefajiakaaaarca4aavaueae0alas48oq44jqe7bsyakzubkzua//8apv/nbbwgraiyaegaaaewaoddaaatqasckbsybralahorjgarnqernqd//wbp/9sf5gefajiakgaaarca1wdjaueae0alauamkqugjqesbsyakzubkzua//8al/5cblkgraiyaeoaaaewane+aaawuqad/8factk8jawlaz8rjgarnqernf//ae//2wxmb2wcmgaqaaabfwdbaombqqatqasbqscpbsalaskfjgarnqernqd//wav/lweuqyrajiasgaaarya274aaba5aap/wkajojwkdcudpbemacs1ass1//8at/0xbeyf7qiyacoaaaexaxma5aaaaau2aumslgugjqernqaabaav/lweuqcnacualqa4aeiaacumntq3jhe0njmyfyuhjxyvfayjiicnbhuumzmyfhuubceijdu0arazmheqiyidbhuufjmynju0ixmvbhuvmxehnrabfnps9vplf2qbmt7zx+6wjd46rkoo6sx+xf796f7zawarq6urhymbbnag4jrpaf7wjzxubgjcaqcw0iginh5xhaxfbqo0mz93jatihwiuawp+2aelasx8clk0unr8w3whau4mhrz+8dibif//acsaaay4b4ucmgaraaabfwdxalobqqatqasbadw/ftmlauifjgarnqernqd//wafaaafowfpajiaswaaarca1waxaysafrkaaf/7qakwmy4mjqe2bsyakzubkzuaagaraaagoaxiaamarwaaase1iqe1nzy2ntcrizuznsc0jicnnsevbwygfqcvitunncynjzuhfqcgbhuhftmvixexfbyxfxuhntc2nju3eserfxqwfxcvagacy/2d/istxykfokafjmitanusyyyfammfjmitanusyyyfokafkwas/ystxykf/z0fkwasaz/g++fdaqydpmmc/wkfyj8bcafcxaeigz9ihx9ipxsiavxcaqgbp2ifaf0dyz4dbgfdxqeght5jabt+tgm+hqybxqaaaqamaaafowyradgaabm1iruhfsernjmyfhurfxqwfxcvitu3njy1nxe0jimibxexfbyxfxuhntc2nju3esm3myy1jyymjx8byafm/pqi8jsnbihge/2xemapbtdohoagkv8t/zctxykfswgwaqidjl8fz1zqy/6f57ei/jfjph0gav1daqydpmmbrxvsov4uyz4dbgfdxqeght5ja7xjcqqeqbsg//8acqaaasihtgiyacwaaaexanj+7qfbabnacweahcyogyublwumacs1ass1ap////gaaakxbg0cmgdwaaabfwdy/twaaaatqasbabygfqclaskrjgarnqernqd//wamaaacvwbeajialaaaarca2f7taueae0alaqadhw4bjqefbsyakzubkzua////9aaaaqcfnqiyanyaaaexann+1qaaaba5aah/+kajfxkvbyubgremacs1ass1//8abgaaasuhhqiyacwaaaexanr+7qfbabnacweahciogyubjqumacs1ass1ap///+uaaakkbkqcmgdwaaabfwda/swaaaawuqab//facrycfqclar8rjgarnqernf//acv+jgkgbcgcmgasaaabfwdf/ywaaaaltge/ir0ogyubkzua//8ah/6oaoggkwiyaewaaaexan//cgaaaau2ai8fgxuhjqernqd//war/tgf2wxiadyalaaaarcalqjoaaaadrkaaqk2tb0vdhslass1aaqah/5cbjogkwavabkalwazaaabercufhcxfse1nzy2ntcrjzqmjyc1nxehequreceijxezfxcwmzi2nrenncynjzu3eseraecgkv8t/zctxykfbslfe6abkakz/k9ljygbawdtts4fkwasoaeober82gm+hqybxv0bbh0+ywigyz4dbgfduqeo/ti5+8z+rikbdbnfgwesa11jph0gav25asj+2p////t+2aokb4ucmgataaabfwdx/8ebqqatqasbhr4harmlasqfjgarnqernqd///+o/lwc2qzeajybeaaaarca1/72aaaae0alay4wgqybjqecesyakzubkzua//8ak/0xbf4fyaiyac4aaaewaxndaaaouqab/8k0rkgvnyubkzx//waf/tefowyrajiatgaaarybcyiaaa65aah/7rq4ohuvjqernqabab8aaau7beoamqaaaruxfbyxfxuhntc2nju3esc0jicnnsermzc2ntqjjym1iruhbgypagexfhyxfxuhaqhnbsrnev2we18pbqupxxmbydlyhy0qewgwelizoywsatbelzzee/5k/pacevbjpr8fav1daqydpmmcbmm+hqybxf4g434lfgfdxqefftr3i/6dbducbafdahl//waraaaemgefajialwaaarcajf8maueafrkaaf99qakkjg0jjqenbsyakzubkzx//wafaaacigfpajiatwaaarcajf6paysae0alaskwgbuhjqezbsyakzubkzua//8ak/0xbjofyaiyac8aaaewaxmoaaaltgelkiwniyubkzua//8ah/0xaoggkwiyae8aaaexaxp+2waaaau2aqachhuhjqernqd//waraaaemgxjajialwaaarcbhwfq/54adrkaaqfntcosdsmlass1//8ahwaaa6qgkwa2ae8aaaexaycaowaaaa65aaebybqchhuhjqernf//acsaaasabcgcmgavaaabfwdbaut9fwaouqabavq0jscniyubkzx//wafaaadswyradyatwaaarca2wcn/x4adrkaaqhmtbczfqclass1//8alp/rbgihhqiyadeaaaexai0alqfbabnacwfrkcowisubkwumacs1ass1ap//ab8aaau7bkqcmgbraaabfgcnjqaae0alauswmi4mjqezesyakzubkzua//8alp0xbgifyaiyadeaaaexaxmahgaaaa65aah/6lqumbyhjqernf//ab/9mqu7bgmcmgbraaabfgfznaaac7ybady4lgwlass1ap//acz/6wycb4ucmgaxaaabfwdgaj0bqqatqasbacsofielasofjgarnqernqd//wafaaafowzeajiauqaaarya4deaabnacweamzaudcubmhemacs1ass1ap//acuaaazrbisanwbraryaaaexayf+naaaaa65aah86rq2oc4mjqernqabacz+xqycbcganaaajqerfxqwfxcvitu3njy1nxenncynjzuharenncynjzuhfqcgbhuherahiicrmxcwfxyzmhee0fyobslgev4te18pbqumyhmbcam1biziewhsemembv6wsp+uaqibbmmgaarm/nzjph0gav1daqydpmmdhwi/gwgbxpvqavvipxsiavxcaqgbp2l7wf5dhgekex8zewenaaeah/5cbjoeywavaaabercufhcxfse1nzy2ntcrjzqmjyc1iru2mziwfreqisinetmxfxyzmjy1etqmiyib5wypxxp9lxnfkqufkv8tacii8jsn/k9ljygbawdtts43toyddp4wyz4dbgfdxqeght5jagzjph0gav3p6lej/q3+rikbdbnfgwesaxx1u///ae//2wysbt4cmgayaaabfwdzamubqqatqascabuxawklahcfjgarnqernqd//wa+/+ceswwdajiaugaaaria2qaaabnacwiafrcdcsucfxemacs1ass1ap//ae//2wysb4ucmgayaaabfwdaamubqqatqascabqaawklah0fjgarnqernqd//wa+/+ceswzeajiaugaaaria2gaaabnacwiafbodcsuchremacs1ass1ap//ae//2wysb4ucmgayaaabfwdeanmbqqaxqa0dapquggmjjqmcgwumacs1nqerntua//8apv/nblmgraiyafiaaaewan78aaaxqa0daoiuggmjjqmcgxemacs1nqerntua//8akwaabcuhhqiyaduaaaexai3//gfbaba5aal/2uajlzevjcucmgumacs1ass1//8ahwaaa6mgraiyafuaaaewai3caaatqasbxiqmfrwlascrjgarnqernqd//war/tefxqxpajianqaaarcbcwcnaaaac7ycdju3fsqlass1ap//ab/9mqn/bgmcmgbvaaabfwfz/tsaaaaouqab/4w0kiwvhcubkzx//waraaafxqefajianqaaarca4aavaueafrkaav+vqakylxukjqixbsyakzubkzx//wafaaadfwzeajiavqaaarya4i8aabnacwe4jyqvhcubjhemacs1ass1ap//agt/2wqzb4ucmga2aaabfwcn/9wbqqatqasbzcstasylas4fjgarnqernqd//wbv/+cd5gzeajiavgaaaryajccaabnacwfwksspjcublbemacs1ass1ap//agt/2wqzb4ucmga2aaabfwdx/8gbqqawuqab//racssuasylatefjgarnqernf//ag//5wpmbkqcmgbwaaabfgdxvaaae0alaqkpla8kjqevesyakzubkzua//8akp5qby4fyaiyadcaaaewan19aaaltgeajc8jcyubkzua//8aop5qaugfnwiyafcaaaexan3/cqaaaau2avkwiqcujqernqd//waoaaafjgefajianwaaarca4abjaueae0alaqamiwkljqelbsyakzubkzua//8aop/na3mg6aayafcaaaexaycacgc9aa65aaebw7qbhqcujqernqabacgaaawobcgakgaajtu3nzy2nzcrituhesmibhuubwcjeseriycnncyjixehfserfxywhwivaygsrdofbab+0aew8v0ybagubwauagmxxvebl/7rbgqfokqsaf0bbqqfowmbqwmcob45nzetatt+zb9boh79ygp+v2m5hwqfav0aaqa4/+cc6au3abwaacuvbimgerejntmrizuznsuvmxujetmvixevfdmyauhdwf6oiiiiiaeo8/pz85yxdgsiaw4bcgibkgo5no1j/thi/vfvnad//wat/9sf5gdoajiaoaaaarca2adwaueae0alavipmygxjqe8bsyakzubkzua//8aap/nbrwgdqiyafgaaaewanjqaaawuqab/9racsmtdsilatyrjgarnqernf//abp/2wxmbt4cmga4aaabfwdzamobqqatqasbrioskbclaswfjgarnqernqd//waa/+cfhawdajiawaaaarya2reaaba5aah/+0ajjcyniiubjhemacs1ass1//8ae//bbeyhhqiyadgaaaexanoazgfbabnacwfkks8ofyubmgumacs1ass1ap//aad/5wucbkqcmgbyaaabfgda6gaafrkaaf/uqakjkq0ijqesesyakzubkzx//wat/9sf5gfxajiaoaaaarca3adoasgaf0anagflldiofyucaskfjgarntubkzu1ap//aad/5wucbskcmgbyaaabfgdc6qaagrecabj/1eakjiwniiucasmrjgarntubkzu1//8ae//bbeyhhqiyadgaaaexan4azwfbabdadqib0skvkbclagewbsyakzu1ass1nqd//waa/+cfhazeajiawaaaarya3uoaabdadqibwimpdsilageqesyakzu1ass1nqd//wat/o4f5gxiajiaoaaaarca3weaaaaac7ybfc4qkbclass1ap//aad+jgucbeocmgbyaaabfwdfab4aaaaouqabaai0kcqniiubkzx//waa/+0howefajiaogaaarca1wgpaueae0alatuokwccjqeubsyakzubkzua//8aap/0bwkgraiyafoaaaexancbxqaaabnacwfqky4hiiubmremacs1ass1ap////waaaw+b4ucmga8aaabfwdxaiwbqqatqasbji8ycbolatufjgarnqernqd//waa/nufowzeajiaxaaaarya11eaabnacwerjccihiubkhemacs1ass1ap//afoaaaskb4ucmga9aaabfwcnabkbqqatqasbbrczarylarofjgarnqernqd//wblaaaeqazeajiaxqaaaryajfqaabnacwf1fxkbfiubghemacs1ass1ap//afoaaaskb2wcmga9aaabfwdbacgbqqatqasbirgaarylarofjgarnqernqd//wblaaaeqayrajiaxqaaarya2+qaabnacwekgbobfiubghemacs1ass1aaabadeaaan6bkqahwaaeym1mzuqitixfsmnjyyjigyvercufhcxfse1nzy2ntfrmpobjjmeiaeecl1ppgypxxp9lxnfkqud52msac4/6ri9enwx/eljph0gav1daqydpmma//8azp0xbdmf7gaiadyaaaacaxoqap//ag/9mqpmbgmaigbwaaaaagfzkqd//wao/tefjgxiacianwaaaaibc2ia//8aop0xaugfnwaiafcaaaadaxp/pgaaaaeb8f0xawh/owajacxagwmjewkjcqmbywbibwegbaqhyaaaeaagaamabi8zxe05lwav/fbtmtabxqe1nju1ixehfrab8wlpard9mu4mhbwbenl+3gaaaqa+ahicewlmaamaabm1iru+aducerq6aaab/b3/2wkmbe0aawapqbubawidjgabfaaaaqecbamaewecawavms0yad8zpzkhbrarh33emtafatmb/b0evhv7rcugevnuaaacahmcuanhbdmafaaxafnakxcvffucaxqcagmivwebarucbqivfq8xawcnepup8qcobqjzdwadfwmafqivm80ymi8qxp0y1myap+0ypzmsos8zmy8qzxeyhwuqkwr9emqxmaehnqezetmvixuufjmzfse1mzi2nsuheqiz/lobtljubhkxc/6wczez/sybognedwiy/f+ooe4orkyotsybgwabaaz/2wtibe4akgaajrugiyaaaym3myy1ndcjnzmsitixesm1ncyjiamhbyegfr8biqchhgezmgs7taz+3p6pnyqaxquherprggilutaub4d+qz8czcn9vgqbaqh3kf49f/jjjkadsaeyar5jmcctnwmcrel+zxoidv4eyzgnqrlj3vyaaah/jv5cajeesgavaei5aal/0lmzhegkup/wqcabhkgupxupaaybhamgngullwmcb6ugfaiohqfafwfoaisbghgqtf3k1u0ap+3v7v9ext/tmtabkysberahiicrmxcxfjmynjurjzqmjyc1ajh+t2wniaedb21nlguoyriesvvm/kypaqwtryfnrandyz4dbgfdap//aet/5wufb4ucmgbhaaabfwdg/3mbqqawuqac/zpacsckbholaiycjgarnqernf//ae/+uaxmbe0cmgaqaaabfwddancaaaaltge1jzificubkzua//8al/zcblkeywiyaeoaaaexan3/8f6maa65aap/9bq6rsqmjqernf//acv+uax+bcgcmgauaaabfwdd/waaaaaouqab/ms0quwvnyubkzx//waf/lafowyrajiatgaaarca3f8iaaaadrkaaf7ttdm+fs8lass1//8ak/5qbjofyaiyac8aaaexan0agaaaaau2azylma0jjqernqd//waf/laciayrajiatwaaarca3f8iaaaac7yblrcifqclass1ap////oaaasab4ucmgavaaabfwdg/u4bqqawuqab/wracsckdsmlasyfjgarnqernf//aaaaaalyb88cmgbpaaabfwdg/vqbiwatqasbgrkwfqclargcjgarnqernqd//was/lagagxiajiamqaaarca3f7faaaadrkaaf4mtck0fielass1//8ah/5qbtseywiyafeaaaexan3+9aaaaa65aah+v7qxpc4mjqernf//acv+uaxfbc8cmga1aaabfwdd/wgaaaaouqac/oi0mdsvjcubkzx//waf/ladfwrjajiavqaaarca3f74aaaadrkaaf+htcuwfrwlass1////6p/naugg5aiyafcaaaexaod+3acgaba5aah/xeajgbuhfcubfwmmacs1ass1aaeb8qqhawegkwajacxagwmjewkjcqmgyqviawmabaqhyaaaeaagaamabi8zxe05lwav7fbtmtabxqe1nju1ixehfrab8wlparaeiu8mhbwbd9l+3waaaqaaaaezmmjd7xrfdzz1absiaaaaaac0t0cyaaaaalujmwd9vfzccpoh8qabaawaaqaaaaaaaaabaaahm/5laaajhp29/b4i+gabaaaaaaaaaaaaaaaaaaabiayaaqaaaaaabgaaaaj+aaachwb7a7eazgvnacge/qctbhiaiwyfadocbgbjap0apgkdaeodeaazbl0a3gifag8eoqcuah8abwrsan4e/qbbbp0a9qt9ahie/qcjbp0anat9anue/qbnbp0azqt9agee/qbqah8aewifahsgxqdeblwa3gzdan4ecwbebumawwzdaaafhaarbbaatwzzacsezwarbk0akwygae8gywaraswakwod//qf+garbk0akwc7acsgtqasbnsatwtqacsgewbpbciakwryagqftgaobfoaewygaaahowaabz0aaaw8//wfhabaap0aiarsan4cnqbhbp0ayaqaafye8qepbhmanqufaaaeuwa+btcarar+ad4duwaxbmoalwu7ab8cmgafatj/jgu8ab8cmgafb7wahwu7ab8e8qa+btcagqufaeqdswafbdiabwmcadgfowaabueaaacjaaae3gaabtsaaastaguc7gb3av0bnaluagsgxadebl0aaazdaaafsabpbm8akwznacwgewbpbfoaewrzaduecwa1bhmanqrzaduecwa1bhmanqrtad4efga+bh4apgr+ad4efga+apoahwka//0cmv/vapoagqu7ab8e8qa+bpeapgtxad4e8qa+bpeapgu7aaafowaabtsaaau7aaae/qcda3galat9agge/qdgbp0arat9ajee/qcjbzkasat9ajcg2abwcfkamqtxacue8qfeblwa3gesaakgewbjb4ua3gzdan4gxqdebl0a3gt9acefpaaxbtkaowb4an4hyqdebecaewvgan4d5wb7a+capgcdafeg0qarbpeaagqlaeichwb7bl0a3gz1alee/qc7bl0a3gd+an4eiaa+bigabqgaaoycfgaabl0aaazdaaagewbpcfkatwd/ad4eaaa+caaavgpcag8dwgbvah8abwifag8gxqdebp0ayau7aaafvp/8bn4avgkzad4cswbsbwaamqvgadee/qcdbqma3gifag8dwgbvcrwaiwzdaaaezwarbl0aaatpacsezwaraswakwlm//oczaaraswahwz7ae8gewbpcaaaaaz7ae8f+gatbfoaewx6abmcmgafbpebdatxarwe8qefbpebgqtxaeqe8qgwbpebrgtxaxue8qgjbpebdastacsdhaalbhiazaqyag8fhababk0azql9atqgwqarbtcazww8//wfowaabooakwu4abkgxadebl0a3gpbarwd2wcta9savweaajchmgcdb5oasqygae8eygavaswakwryagqemgbvbbaatwrtad4fsabpbfmapgu4aeqeoqcubaaavgt9aeogxqaabhmanqzdaaaecwa1bl0aaarzadufsabpbfmapgwwae8euwa+blkakwy7aeqgwgarbm8akwr+ad4ezwarbh4apgtpacsefga+bm8akwr+ad4ezwarbh4apgygae8eygavbgyatwtkac8gbgbpbmoalwzjacsfowafbmmakwu7aawczaajapr/+almaawcmv/0aswabgka/+uczaarapoahwx4acsfqqafa53/9aly/44f+garbtwahwu8ab8erqarapoahwstacscmgafbk0akwokab8erqara7mahwznacwfowafbk0alau7ab8gtqasbtsahwzqacugtqasbtsahwz7ae8e8qa+bnsatwtxad4gewbpbpeapgxcacsdswafbciakwozab8fwgara7mahwryagqemgbvbhiazaqyag8ftgaoaxwaoaw2acgdcga4bbyakamcadgf+gatbtsaaax6abmfowaabfoaewu7aaaf+gatbtsaaax6abmfowaabfoaewu7aaahowaabwkaaaw8//wfowaabrwawgstagufhababk0azqmyadeecgbkbdiabww2acgdhaa4bpeb8qjqad4asv29a9sacwt9aawc2p+obtcaraygae8eygavbfoakwu8ab8erqarapoahwst//ocmgaabk0alau7ab8fwgara7mahwmc/+ge8qhxaaaafqavabuafqbdah4bjgjoazgeoarybksfaaw6bekgfqypbkqgagcab2wh7aihcqijdwpfcqylmqxxdj0m2g0adtondw4id1eqhxdyexksebkheyat0rrhfkyvaxzdfpoxmrg7gomzbhpcgyab4hw8homdwh71idqhecf7iz8hwyhniigipcjuiwajqsqyjo4lhsyajugnhyfvkcsplilvkn8risvilh0tkc2xllouri8gl9cxctjomzuzwjq3nfm00tuvns41qjvvnww1gzwcnbu1yzxinfk2etynnj82utznnn42ldasnsm22zbznw03jdc6n1e3zzd/n5u3qzfcn9g38dgnoem4nzjxobg50jn/opc7ijujo9w79twtpdg86d1jpau96t4dphw+1t8+p3m/ot/lqahaqkclqnlbhug9qjzcjkk9qtdc8embq2ddfkpqrczepeq8rfrea0scroxfmuu+rutfcewwratfwex5rhjgkkzdrvlhducgr7vilkhysg5ig0ipsqvjhekzsupjy0l7szjjquncsdpj8uoisghkieo3sk5kzkqnstlld0sjs0xlyuvnta5mokxrtj1m4u0rtslnp01wtwxnlk4ftonomk6wtxpp0e/duetqhfdzus5rp1fpuv9rdlgnuarrt1hkuefr91iouirsalj+upnsr1lgut1s9vmmuybtnfnlu2ftefoou6ztulp/vbzulfrdvflucfsgvjpurftdvnlu8fuhvr5vnvvivalvwfxyvkfwlfarvsjw2vbxvwhxifczv0zxwletv8rx21fuwafytlhmwh1yj1iiwlzyyljewpjzcvkfwtnzrvlcwxjzh1nzwiban1pnwmraelqtwqtaw1rzwuxbafsywy5brvtbw3nbivubw65bxvvzxbpcrfxbxhjcivygxldczlznxqbdgv0xxurdwf1vxyzdnv2zxcpd4f33xg1epl5jxlrex15rxpzeo17hxxhfw1+lx71f0f/kx/hgdgafydjgsmbhyhvgiwcdylfgywd0aaaaaqaaaygasaahafaabaacaaqahgbtaaadsghgaamaaqaaabaaxgabaaaaaaaaadoaaaabaaaaaaabaa0aogabaaaaaaacaagarwabaaaaaaadacaatwabaaaaaaaeabyabwabaaaaaaafab0ahqabaaaaaaagabeaogabaaaaaaahadkaswadaaeecqaaahqa7aadaaeecqababobyaadaaeecqacababegadaaeecqadaeabigadaaeecqaeacwbygadaaeecqafadob9gadaaeecqagacicmaadaaeecqahahicuknvchlyawdodcaoyykgmjawmcbcawdlbg93icygsg9sbwvzieluyy4gugf0libezxmgmjg5ldqymi5mdwnpzgegqnjpz2h0rgvtawjvbgrmdwnpzgegqnjpz2h0ierlbwlib2xkoibcjkg6mjawmex1y2lkysbccmlnahqgrgvtawjvbgrkyw51yxj5idi4lcaymdawoyaxljewichkqvzbkux1y2lkyujyawdodc1ezw1pthvjawrhiglzigegcmvnaxn0zxjlzcb0cmfkzw1hcmsgb2ygqmlnzwxvdyamiehvbg1lcybjbmmuaemabwbwahkacgbpagcaaab0acaakabjackaiaayadaamaawacaaqgbpagcazqbsag8adwagacyaiabiag8ababtaguacwagaekabgbjac4aiabqageadaauacaarablahmaiaayadgaoqasadqamgayac4atab1agmaaqbkageaiabcahiaaqbnaggadabeaguabqbpagiabwbsagqatab1agmaaqbkageaiabcahiaaqbnaggadaagaeqazqbtagkaygbvagwazaa6acaaqgamaegaogayadaamaawaewadqbjagkazabhacaaqgbyagkazwboahqaiabeaguabqbpagiabwbsagqasgbhag4adqbhahiaeqagadiaoaasacaamgawadaamaa7acaamqauadeamaagacgasgbbafyaqqapaewadqbjagkazabhaeiacgbpagcaaab0ac0arablag0aaqbmahuaywbpagqayqagagkacwagageaiabyaguazwbpahmadablahiazqbkacaadabyageazablag0ayqbyagsaiabvagyaiabcagkazwblagwabwb3acaajgagaegabwbsag0azqbzacaasqbuagmalgaaaaiaaaaaaad/oabkaaaaaaaaaaaaaaaaaaaaaaaaaaabiaaaaaeaagecaqmbbaefaqybbweiaqkbcgelaqwbdqeoaq8beaeraribeweuarubfgexargbgqeaarsbhaedar4bhwegasebigejasqbjqemascbkaepasobkwesas0blgevatabmqeyatmbnae1atybnwe4atkboge7atwbpqe+at8bqafbauibqwfeauubrgfhaugbsqfkausbtafnau4btwfqavebugftavqbvqfwavcbwafzavobwwfcav0bxgffawabyqfiawmbzaflawybzwfoawkbagfrawwbbqfuaw8bcafxaxibcwf0axubdgf3axgbeqf6axsbfaf9ax4bfwgaayebgggdayqbhqggaycbiagjayobiwgmay0bjggpazabkqgsazmblagvazyblwgyazkbmggbazwbnqgeaz8boaghaaibowgkaaubpggnaagbqqgqaasbragtaa4brwgwabebsggzabqbtqg2abcbuag5abobuwg8ab0bvgg/acabwqhcacmbxahfacybxwhiackbyghlacwbzqhoac8b0ahradib0whuadub1ghxadgb2qhaadsb3ahdad4b3whgaeeb4ghjaeqb5qhmaecb6ahpaeob6whsae0b7ghvafab8qhyafmb9ah1afyb9wh4afkb+gh7afwb/qh+af8caaibagicawieagucbgihaggccqikagscdainag4cdwiqahecegitahqcfqiwahccgaizahocgwicah0chgifaiaciqiiaimcjailaiycjwioaikckgiraiwclqiuai8cmaixajicmwi0ajucngi3ajgcoqi6ajscpai9aj4cpwjaakecqgjdakqcrqjgakccsajjakocswjmak0ctgjpalacuqjsalmcvajvalycvwjyalkcwgjbalwcxqjeal8cyajhamicywjkamuczgjnamgcaqjqamscbajtam4cbwjwaneccgjzanqcdqj2ancceaj5anocewj8an0cfgj/aoacgqkcaomchakfaoyfc3bhy2ugzxhjbgftchf1b3rlzgjscm51bwjlcnnpz24gzg9sbgfyb3blcmnlbnqjyw1wzxjzyw5kc3f1b3rlc2luz2xlcxbhcmvubgvmdapwyxjlbnjpz2h0cgfzdgvyaxnrbhbsdxmfy29tbwegahlwagvubnblcmlvzavzbgfzaar6zxjva29uzqn0d28fdghyzwuezm91cgrmaxzla3npeavzzxzlbgvlawdodaruaw5lbwnvbg9ucxnlbwljb2xvbgrszxnzbwvxdwfsb2dyzwf0zxiicxvlc3rpb24cyxqbqqfcaumbraffauybrwfiaukbsgflauwbtqfoau8buafravibuwfuavubvgfxavgbwqfac2jyywnrzxrszwz0cwjhy2tzbgfzaaxicmfja2v0cmlnahqlyxnjawljaxjjdw0kdw5kzxjzy29yzqvncmf2zqfhawibywfkawubzgfnawgbaqfqawsbbaftaw4bbwfwaxebcgfzaxqbdqf2axcbeaf5axojynjhy2vszwz0a2jhcgpicmfjzxjpz2h0cmfzy2lpdglszgujqwrpzxjlc2lzbufyaw5ncenjzwrpbgxhbkvhy3v0zqzodglszgujt2rpzxjlc2lzcvvkawvyzxnpcwzhywn1dgugywdyyxzlc2fjaxjjdw1mbgv4cwfkawvyzxnpcwzhdglszgufyxjpbmciy2nlzglsbgegzwfjdxrlbmvncmf2zqtly2lyy3vtzmxleallzgllcmvzaxmgawfjdxrlbmlncmf2zqtpy2lyy3vtzmxlealpzgllcmvzaxmgbnrpbgrlbm9hy3v0zqzvz3jhdmulb2npcmn1bwzszxgjb2rpzxjlc2lzbm90awxkzqz1ywn1dgugdwdyyxzlc3vjaxjjdw1mbgv4cxvkawvyzxnpcwzkywdnzxigzgvncmvlbgnlbnqic3rlcmxpbmchc2vjdglvbgzidwxszxqjcgfyywdyyxbocmdlcm1hbmribhmkcmvnaxn0zxjlzaljb3b5cmlnahqjdhjhzgvtyxjrbwfjdxrlcgrpzxjlc2lzcg5vdgvxdwfsakffbk9zbgfzaahpbmzpbml0eqlwbhvzbwludxmjbgvzc2vxdwfsdgdyzwf0zxjlcxvhban5zw4fbwljcm8lcgfydglhbgrpzmyjc3vtbwf0aw9ub3byb2r1y3qccgkiaw50zwdyywwlb3jkzmvtaw5pbmumb3jkbwfzy3vsaw5la09obqjhzqzvc2xhc2gmcxvlc3rpb25kb3ducmv4y2xhbwrvd24kbg9nawnhbg5vdadyywrpy2fsbmzsb3jpbgthchbyb3hlcxvhbalpbmnyzw1lbnqnz3vpbgxlbw90bgvmda5ndwlsbgvtb3ryawdodahlbgxpchnpcwduynnwywnlbkfncmf2zqzbdglszgugt3rpbgrlak9fam9lbmvuzgfzaazlbwrhc2gmcxvvdgvkymxszwz0dxf1b3rlzgjscmlnahqjcxvvdgvszwz0cnf1b3rlcmlnahqgzgl2awrlb2xvemvuz2ujewrpzxjlc2lzcvlkawvyzxnpcwhjdxjyzw5jeq1ndwlsc2luz2xszwz0dmd1awxzaw5nbhjpz2h0amzpamzscwrhz2dlcmribapidwxszxrtyxrodnf1b3rlc2luz2xiyxnldhf1b3rlzgjsymfzzqtwzxj0ag91c2fuzatby2lyy3vtzmxleatfy2lyy3vtzmxleazbywn1dgujrwrpzxjlc2lzbkvncmf2zqzjywn1dgulswnpcmn1bwzszxgjswrpzxjlc2lzbklncmf2zqzpywn1dgult2npcmn1bwzszxgeamf2yqzpz3jhdmugvwfjdxrlc1vjaxjjdw1mbgv4blvncmf2zqhkb3rszxnzaqpjaxjjdw1mbgv4bxrpbgrlbm1hy3jvbgvicmv2zqlkb3rhy2nlbnqecmluzwdjzwrpbgxhdgh1bmdhcnvtbgf1dazvz29uzwsfy2fyb24gthnsyxnobmxzbgfzaazty2fyb24gc2nhcm9ublpjyxjvbgz6y2fyb24jynjva2vuymfya0v0aanldgggwwfjdxrlbnlhy3v0zqvuag9ybgv0ag9ybgvtaw51cwhtdwx0axbseqtvbmvzdxblcmlvcgt0d29zdxblcmlvcg10ahjlzxn1cgvyaw9yb29uzwhhbgykb25lcxvhcnrlcg10ahjlzxf1yxj0zxjzbkdicmv2zqznynjldmueswrvdahty2vkawxsyqhzy2vkawxsyqzdywn1dgugy2fjdxrlbknjyxjvbgzjy2fyb24hzg1hy3jvbglzznroexbozw4jb3zlcnnjb3jlbm1pzgrvdadbbwfjcm9ub2ftywnyb24gqwjyzxzlbmficmv2zqdbb2dvbmvrb2fvz29uzwslq2npcmn1bwzszxgly2npcmn1bwzszxgeq2rvdarjzg90bkrjyxjvbgzky2fyb24hrg1hy3jvbgdfbwfjcm9ub2vtywnyb24grwjyzxzlbmvicmv2zqrfzg90bgvkb3qhrw9nb25lawdlb2dvbmvrbkvjyxjvbgzly2fyb24lr2npcmn1bwzszxglz2npcmn1bwzszxger2rvdarnzg90cedjzwrpbgxhcgdjzwrpbgxhc0hjaxjjdw1mbgv4c2hjaxjjdw1mbgv4behiyxieagjhcgzjdglszgugaxrpbgrlb0ltywnyb24haw1hy3jvbgzjynjldmugawjyzxzlb0lvz29uzwshaw9nb25lawjjsgjpagtky2lyy3vtzmxleatqy2lyy3vtzmxleahly2vkawxsyqhry2vkawxsyqnrcmegtgfjdxrlbmxhy3v0zqhmy2vkawxsyqhsy2vkawxsyqzmy2fyb24gbgnhcm9ubexkb3qebgrvdazoywn1dgugbmfjdxrlce5jzwrpbgxhcg5jzwrpbgxhbk5jyxjvbgzuy2fyb24lbmfwb3n0cm9wagudrw5na2vuzwdpbwfjcm9ub29tywnyb24gt2jyzxzlbm9icmv2zqlpzgjsywn1dgujb2ribgfjdxrlbljhy3v0zqzyywn1dguiumnlzglsbgeicmnlzglsbgegumnhcm9ubnjjyxjvbgztywn1dgugc2fjdxrlc1njaxjjdw1mbgv4c3njaxjjdw1mbgv4cfrjzwrpbgxhchrjzwrpbgxhblrjyxjvbgz0y2fyb24evgjhcgr0ymfyblv0awxkzqz1dglszguhvw1hy3jvbgd1bwfjcm9ublvicmv2zqz1ynjldmufvxjpbmcfdxjpbmcjvwribgfjdxrlcxvkymxhy3v0zqdvb2dvbmvrb3vvz29uzwslv2npcmn1bwzszxgld2npcmn1bwzszxglwwnpcmn1bwzszxglewnpcmn1bwzszxggwmfjdxrlbnphy3v0zqrazg90bhpkb3qfbg9uz3mlu2nvbw1hymvsb3clc2nvbw1hymvsb3clvgnvbw1hymvsb3cldgnvbw1hymvsb3cny29tym9jb21tyxn1ygdoexbozw4xcgzyywn0aw9udgzvdxjzdxblcmlvcgrfdxjvcgrvdgxlc3nqb2rjyxjvbjejr2nlzglsbgexcwdjzwrpbgxhmqlly2vkawxsyteja2nlzglsbgexcuxjzwrpbgxhmqlsy2vkawxsytehtgnhcm9umqdsy2fyb24xcu5jzwrpbgxhmqluy2vkawxsytejumnlzglsbgexcxjjzwrpbgxhmqd0y2fyb24xc2fwb3n0cm9waguxaeco3+awfxzu1ryxhht8fhtaexexoxt8gdhsfhccdncwfxxtcbyxhgxvfhcca24wg09ux24ca25/chp0drqvhgdqfbuczmkufrxlabqbj2ivap9oayblawvohxeagxmwekmzixldgsecqpysezla9sirosdufr45qo87ozlq7whp8afq8j/wan/qat9iaa/eabj/weaxxbaroq/eabkxccsaswgztagrqfqndjm4/8bakvqjjdljlwirqgezgjmfyqfvwwgfwwfatakmobtbcctawsuloudbhx85up/as8elddm4/8czscqkobj/wlowhr45up/as7axgdm4/8c2sbaroq+wabj/weapmhkboscfaz+faucfcqs5up/as0ssltm4/8bafesjjtlamqkmoamnccublwgrd50bup/aqcudcqs5qjqjcjmmkwmrkpmdk7+rac+razgwaiutlwmrij4bl56wngknlwgrup/as5ywgzm4/8badjucitmalqfalzq3obj/wlbzfxg5b/mbup/as+srldm4/8cz6ymkobj/wlprhb45up/aqazrfbg5qoc0nzlp5gg4/8cz5hweobj/wlnohh45up/gs04jetm4/8czozu1obj/wlojjio5up/atqmxgjkaowg4/8czokdhobj/wloiojw5up/as6itmtm4/8czoiamobj/weajohqwoubtdq45up/aqaxtiyq5qgazgjmfyag4/8czxsosobj/wlnrjyg5up/as1echjm4/8c1urerovbsup/aqbaslcnsfwurqe0chtnahqgrup/as68kjdm4/8czrx0eobj/wlovfxg5up/aqcovebe5saugk0bkndc5qeocitmoiagrjycik0ymbctajculobj/weagjb0eoyylayulhqgrioqik4l9cctqrwfapbiuoykibcu4/8c3ibwhoyf/biu4/8bafn4vitl9fwyrf4uik0clmjq5qkuljtm4/8bayauxgdmfrgfaibwdozcfciuhhqgrhiuik4ofbstahsuloucfhx85qiujcjnx8g+g8qhxpoggox8bnxuynhuvnrusnbupmxummhujmrugmbudlxualhumjw4ojw8qkw4skw8iiw4kiw8ehw4ghw8pebemcqoldayhcawdbaumaaecdaydgcsfa08dvwp/awqfdz8pua8dgweddrghgg0vebcnegqudsw8kjwopcy8jdwipca8hjwbpbg8ftwspa88ctwgpam8adxqmwgweksas1rcsbmbswblu0kwmytluamgurayk0uwcvbbwlebay5zsdmrsakiuaeavlaeilgcafsweknaw1i4armxaqgohru5aaebalblyiwnwbecaekwayiwi1nysagisebrwlagilgqafrysqibqllzwba3s1bysqiaqlkrhbbks1nysiadwbays1nysjadwqblsdprsbsjqisrkysrkysrkysrkysrkysrkysrk3nzkysrkysrkysrkysrssgmrbaqrwgwlevgrcsrkysrkysrkysrkysrcysbkysrkysrkytzkysrkysrkysrk3qrkysrkysrkysrkysrkysrkysrkysrkytzkysrkysrkytzkysrkysrdssrkysrdcsak3mrkytzdcsrdhurkysrdcsrkysrk3n0k3mrkysrkysrkytzdhmrkysrk3mrcyt0c3nzdhqrkysraunyg1krk7ayscnlu0irk3nzkysrkytzkysrkysrkysrk7ejmitlsfbsqkuwcfjlsahqw7aai0jlsmhss7a2ufuwdcncaaaaacaaaagmcqohaacdagqgbgchagmdbaccbqifbgygbgygbgygbgicbwchbqghbgyhbquhbwmebwuibwcgbwyfbgchcqygbgmfawyfbgugbqyfbaugawmgawkgbgygbauebgyibqyfawmdbwchbguhbwcfbqufbqufbqufbqmdawmgbgygbgygbgygbgqgbgygbgygcakgbgcjbwghbwcgbgyicqcgbaqicayfagchbgcibqujawchbwkibqkebaicbwygbgudawygbgycbaohbqcfbqmdawmhbwkhbwchawygbgygbgygbgyfbaufbgudbwygbgygbwcebaqjcqkhbqmfbqyfbgugbqugbwuhbqcfbgugbqchbwufbqufbqufbquhbqcfbwuhbgcgawmdawmdawmhbgqdbwygbqmfawuebqqhbgcgbwyhbwyhbgcgbwygbayebgqfbqufbgqgbayebwyhbgcgbwyhbgcgcqggbgyfbgudbqugbaydaaqgawyhbqcgbqmfawcgbgqebgaacgsiaagdawuhbggiawmdbagdbgmgbgygbgygbgygbgmdcagibqkibgcibgyicaqfbwyjcaggcacgbwcicgchbgmgawyfbgygbqygbayhawqhawohbgygbquebwcjbgcgbaqecagibwyicacgbgygbgyfbgygbgmdawmhbgygbgyhbwchbgqgbgygbgcgcqogbggkcakicaggbwcjcgchbqujcqyfawgibggjbgykawgicaojbqofbqmdcayhbwydawchbgydbqsibgggbgqebaqicaoibwchawygbgygbgygbgygbayfbgyecachbwygcagfbqukcgoibgqgbqcfbwuhbgugcayibgggbwuhbqgicaygbgygbgygbgyibgggcayibwghbameawqdbamhbwuebwchbgmgawyfbguibwghcacicacibgggcayhbqcfbwugbqyfbwqhbacebwchbwchbwchbwchcgkhbwygbgyebguhbaydaaugbayibgchbgmgawghbwuebgaacw0iaagdawuhbwgiawqebqkdbgmgbwchbwchbwchbwmdcqkjbgkjbwgjbwyicqqfcaykcqkhcqggcagicwgibwqgbacgbwyhbgcgbqchbaqhbashbwchbqyebwckbwcgbaqecqkjcacjcqggbgygbgygbgygbgqebaqhbwchbwchbwchbwuhbwchbwghcqshbwklcqojcqkhcackcwghbqukcqcgawkjbwkkbgylawkjcqskbgsfbqmdcqchcacebachbwcdbq0jbwkhbwqebaqjcqsjcagibachbwchbwchbwcgbaygbwyecqcibwchcqkfbqukcgoibwqgbgggcayhbgyhcqyjbgkgcayibgkjcqcgbwyhbgcgbwyibwghcacjbwkhbaqebaqebaqibwuecachbgqgbayfbgujbwkhcqcjcqcjbwkhcqcibqgfcaugbgygcaqibqgecacibwghcacibwghcwoibwcgbwyebgyibacdaauhbacibwghbgqgbakhcauebwaada4jaakeawyibwkjawqebqodbwmhbwchbwchbwchbwmdcgokbgokcakkbwcjcgqfcqclcqohcgkhcqkjcwgjcaqhbacgbwcibgghbqcibaqibawibwgibgyfcaglbwghbaqecgokcqcjcgkhbwchbwcgbwchbwqebaqibwchbwcicagibwuhbwchbwghcg0hbwomcgskcgohcagkdakibgylcgcgawokbwolbwcmbaokcg0lbgwgbgmdcgcicqcebagibwgdbg4kbwohbwqebaqkcgwkcqkjbachbwchbwchbwchbqcgcacecggjcacicgogbgylcwsjbwqhbgkgcqyibwyhcgckbwohcqyjbgojcgchbwchbwchbwcjbwkhcqckcaoibaqebaqebaqjcauecqgibwqhbacfbwyjcakicqgjcqgkbwohcgcjbgkgcqyhbgcgcqujbqkfcqgjcakicqgjcakicwsjcaghcacfbwyjbqcdaayhbagjbwkibwqhbakicqyfbwaadq8kaaoeawyjcaokawqebgodcamhcagicagicagicamdcgokbwskcakkcagkcgugcggmcgsicwkhcqokdakjcaqhbaghcacibwghbqgjbaujba0jcagibgcfcqklcakibqufcgokcqgkcwohbwchbwchbwchbwqebaqjcagicagjcqkjcayicagicakicw4icaomcwwkcgoicqgldqojbgylcwghawolcaombwcnbaokcw4mbw0gbgmdcggjcqgebakjcagdbg8kcaoicaufbqulcw0lcgokbagicagicagicagibqchcagfcggjcqgicgogbgymdawkcauhbwkhcqcicacicgckbwohcqcjbwokcgghcacibwghcackcaoicggkcqojbqqfbauebqqkcqyfcgkjcaqibaggcaykcqojcgkkcgklcasicwgjbgkgcqyhbwchcqujbgkfcgkkcqojcgkkcqojdasjcqgicagfbwcjbqgeaayibqgkcaojcaqibaojcqyfcaaadhalaasebayjcqslbaufbgsecaqicqkjcqkjcqkjcqqecwslbwwlcqolcaglcwugcggncwsjcwoicgoldqokcquibqkhcqgjcakibggjbqujbq4jcqkjbgcfcqkmcqkibqufcwslcgglcwoicagicagicagicaufbqujcqkjcqkjcqkjcqyjcqkjcqojda8jcqsncw0lcwsjcgkmdgojbwcmdakhbaslcqsncagobaslcw8nbw4hbwqecwkjcgkfbqkjcqkebxalcasicaufbqulcw4lcgokbqkjcqkjcqkjcqkibqghcqgfcwkkcqkjcwshbwcndq0lcauibwoicggjcacjcwglcasicggkcaslcwgicagicagicaglcasicwglcqsjbqufbqufbqukcqyfcgkjcauibqggcaylcqsjcwklcwklcqsjcwkkbgogcgyibwghcgukbgofcgkkcqojcgkkcqojdqwkcqkicqgfcackbqkeaqcjbqklcaojcauibqsjcgyfcqaadxelaasfbackcqslbaufbwwecqqicqkjcqkjcqkjcqqedawmca0mcgsmcqkldauhcwkodawjdasicwsldgslcguibqkicqgkcaoibgkkbqukbq8kcqokbwggcgoncqojbgygdawmcwkmdasicagicagicagicaufbqukcqkjcqkkcgokcqcjcqkjcqsjdrajcqwoda4mdawjcwondwskbwcndqkibawmcqwocqkpbqwmdbaoca8hbwqedakkcwkfbqokcqkebxemcqwjcqufbqumda8mcwslbqkjcqkjcqkjcqkjbggicgkgdaolcgkkdawhbwcodg4lcquicasicwgkcqgjdagmcawicwglcawmdakicqgjcakicqglcqsjcwkmcgwkbqufbqufbqulcgcfcwokcqujbqkhcqcmcgwkdaomdaomcqwjdaklbwshcwcicagicwylbgsgcwolcgskcwolcgskdg0lcgojcgkgcaglbgkeaqcjbqolcqskcqujbqwkcwcgcqaaebimaawfbaclcgwmbaufbw0ecqqjcgokcgokcgokcgqedq0nca4ncgsncgkmdqyhdakodq0kdqwjcwwmdwslcgujbqoicgkkcqojbwokbqykbq8kcgokbwggcgsocgojbgygdq0ncwondqwjcqkjcqkjcqkjcqufbqukcgokcgokcgokcgckcgokcgskdhekcg0pdq8ndq0kcwooeawlcagodgoiba0ncg0pcqkqbq0ndrepcbaicaqedqokcwofbqslcgoecbincg0kcgygbgyndrandawmbqokcgokcgokcgojbgkicgkgdqolcgokdq0icagpdw8mcgyjcasjcwkkcqgkdqkncq0jcwklcq0mdqojcgkkcqojcgkmcgwkdaoncg0kbgugbqyfbgumcwcgdaokcqujbqkhcqcncg0kdqondqoncg0kdqombwwhdacjcakicwylbwsgdaomcgwkdaomcgwkdw4lcgojcgkgcqglbgofaqgkbgomcgwkcqujbq0kdacgcgaaermnaa0fbqglcw0nbaygbw4fcgujcwslcwslcwslcwufdg4ocq8ocwwncgondgyidqopdq4kdgwjda0neawmcwyjbgsjcwklcqskbwolbgylbhalcwslcakhcwspcgskbgygdg4odaondg0jcqkjcqkjcgokcgygbgylcwslcwslcwslcwclcwslcwwldxilcw4qdhaodg4ldaspeq0lcagpdgsjbq4ocw4qcgorbq4odhiqcreicaufdgsldaogbgslcwsfcbmocg4kcgygbgyodheodq0nbgslcwslcwslcwskbwkjcwogdqsmcwoldg4icagqebancgyjcqwjdaklcgkldgkocq4jdakmcq0ndgokcgokcgokcgoncg0kdqoocw4lbgygbgygbgyncwggdqslcgykbgoicggncw0ldqsndqsocw4ldgsmcawidagjcqkjdacmbwwhdqsncw0ldqsncw0lea8mcwskcwohcqkmbwsfaqglbgsncg0lcgykbg0ldaghcwaaehuoaa4gbqgmcw4obqygca4fcgukcwslcwslcwslcwufdg4ocraoda0ocwsodgyidqsqdg8ldw0kdq0oeq0ndaykbgsjcwomcgwkbwsmbgymbhemcwwmcakhdawqcwwlbwchdg4odqsodw0kcgokcgokcgokcgygbgymcwslcwsmdawmcwglcwslcw0ldxmlcw4rdxeodg4ldqwqeg0mcqkqdwsjbq4pcw4rcgosbg4odxmrcriicaufdgsmdqsgbgwmcwsfcbuocw4lcwygbgypdxipdq0nbgslcwslcwslcwslbwojdashdgwndasmdg4jcqkrereocwykcq0kdqomcgkldgoocg4kdqoncg4odgskcwolcgskcwoocw4ldgsoda4mbgygbgygbgyndaggdqwmcwylbgsicwgoda4mdgwodgwpcw8ldwsnca0idqgkcqojdqcnca0hdqwnda0mdqwnda0merandawldashcgknbwsfaqklbgwocw0mcwylbg4mdqghcwaaexyoaa4gbqknda4pbqygca8fcwuldawmdawmdawmdaufdw8pchapda4pcwsodwcjdgsrdw8mdw4ldg4oeg0odaylbgwkdasmcgwlcasmbgcmbhimdawmcqohdawrdawlbwchdw8pdgspdw4lcwslcwskcwslcwygbgymdawmdawmdawmdagmdawmda0mebqmda8sdxipdw8mdqwreg4ncqkreawkbq8pda8scwstbg8pdxqschmjcqufdwwmdgwgbg0ndawfcrypcw8lcwchbwcpdxmpdg4obgwmdawmdawmdawlbwskdashdwwodawmdw8jcqksehiocwclcg4kdgomcwomdwspcw8ldgoocg8pdwslcwslcwslcwsocw4ldgspda8mbwyhbgcgbwyodakhdgwmcwylbgsjcwkpda8mdwwpdwwpda8mdwwocq4jdgklcgskdgcoca4hdgwoda4mdgwoda4meheodawldashcwoobwwgaqkmbwwocw4mcwylbg8mdgkhdaaafbcpaa8gbqknda8pbqchcrafdauldawmdawmdawmdaufebaqcheqdq4qdawpeacjdwwsebamea4ldg8pew4odqclbwwkdasncw0lcawnbwcnbxmnda0ncqoidq0sda0mbwchebaqdgwqea8lcwslcwslcwslcwchbwcndawmdawndq0ndakmdawmda4merumdbatebmqebamdg0rew8ncgoseqwkbraqdbatcwsubhaqebutchqjcqufeawndgwhbw0nda0fcrcqdbamdachbwcqebqqdw8pbwwmdawmdawmdawmcaskdqwhea0odqwnebakcgotexmpdaclcg4ldgsndaomeasqcxaldgsocxaqeawldasmcwwldaspda8mdwwqdranbwchbwchbwcpdqkhdw0ndacmbwwjdakqdranea0qea0qdbameawocq4jdgklcgskdggocq4idw0pdq8ndw0pdq8nexiodq0mdqwicwoocawgaqombw0pda8ndacmbxandgkidaaafrgqabahbgoodraqbqchcregdaymdq0ndq0ndq0ndqygerercxirdq8rdqwqeqcjeawtereneq8mdxaqfa8pdqcmbw0ldqwncw4mcq0obwcobxqodq4ncgsidg4sdq4mcagiererdw0reramdawmdawldawmdachbwcodq0ndq0odg4odqkndq0ndq8nehyndreuerqrerendw4sfbaocgoseg0lbherdreudawvbxereryucxukcgygeq0odw0hbw4odq0gchgrdrendqchbwcrerurebaqbw0ndq0ndq0ndq0mcawldqwieq4pdg0oerekcgoufbqqdqcmcw8ldwsodasneqwrdbemdwspcxeqeq0mdqwnda0mdqwqdranea0rdheobwchbwchbwcqdgkhea4odacmbwwkdaordheoeq4req4rdreneq0pcg8kdwomcwwldwgpcq8iea4qdhaoea4qdhaofbipdg0mdqwidaspca0gaqonbw4qdraodacmbxeodwoidqaafhkrabehbgopdherbgchchigdqymdg4odg4odg4odgygehescxmsdhardq0reggkea0uerioehamebarfq8qdgcmbw4ldgwoda4mcq0obwgobxuodg4ocgwjdg4tdq4ncagierisea0rehamdawmdawmdawmdachbwcodg4odg4odg4odgoodg4odg8oexcodhevehusehioea4tfrapcwstew4lbhisdhivdawwbxisehcvcxykcgygeg4oea0hbw8pdg4gchksdrindqgicagsehysebaqbw4odg4odg4odg4ncqwmdg0ieq4qdg4oerilcwsvfrurdqgmdbameawodqsoegwsdbimeawqdbereq0mdqwnda0mdqwrdreneq0sdhiocacibwghcacqdgoiea4odqcnbw0kdqordheoeq4req4sdhioeg4qchakeaomdawmeakqcrajea4qdhaoea4qdhaofrmqdg4ndg0jdawqcq4gaqsoca4rdraodqcnbxeoeaojdgaafxorabehbgspdhesbggichigdqyndg4odg4odg4odgygehisdbqsdxasdg0reggkeq0vehmoexeneberfhaqdwgnca4mdg0pda8ncg4pbwgpbxypdg8pcwwjdw8udg8ncakiehisea4sexendq0ndq0mdq0ndqchbwcpdg4odg4pdw8pdgoodg4odhaofbgodhiwexysehioea8ufhepcwsufa4mbhitdhiwdq0xbxisexgwdbclcwygeg4pea4ica8pdg4gcxosdhiodggicagtexctererbw4odg4odg4odg4ncq0mdw0jeg8qdw4pehilcwswfhyrdggndbameawpdqwoeg0sdrineawqdbiseg4ndg0odq4ndg0rdheoeq4sdxipcacibwghcacrdwoieq8pdqcnbw0kdqssdxipeg8seg8tdhmoew4rcxeleqsnda0meakqchajeq8rdxepeq8rdxepfhqqdw8ndw0jdqwqcq4haqsoca8rdhepdqcnbxipeqsjdgaagbssabihbgsqdxisbggichmgdgyndw8pdw8pdw8pdwygexmtdbutdxetdg4sewgleg4wexmpexenerisfxerdwgnca8mdw0pdq8ncg4qcakqcbcqdw8pcw0jebavdxaocqkjexmteq4texindq0ndq0ndq0ndqgicagqdw8pdw8qebaqdwopdw8pdxepfrkpdxmxexctexmperavfxiqdawvfa8mbhmtdxmwdg4ybxmtexkwdbglcwygew8qeq8icbaqdw8gcxstdhmodggicagtexgtehisca8pdw8pdw8pdw8ocq0ndw4jexarea8pexmmdawxfxcsdggndreneq0qdgwpew0tdrmneq0rdrmtew4ndg0odq4ndg0sdhioeg4tebmqcagicagicagseasjehaqdggoca4ldgstebmqexatexatdxmpew8rcxeleqsndq0neqkrchejehasebiqehasebiqfxurea8odw4jdq0rcq8haqwpcq8sdhiqdggocbmqeqsjdwaagx8uabqibwwserqvbwkjdbuheacperererererereqchfruvdhcvermvebaufgkmfbayfryrfhmpexqughmteqkpcreoeq8rdxipcxascqoscroserirda4lehiyebiqcgokfruvexavfhqpdw8pdw8pdw8pdwkjcqkserereresehiseqwrererermrfxwreruafhkvfrurexiyghqsdq0yfxeobxuweruzdw8bcbuvfhwzdhsndqchfresexajcriserehdr8vebuqeakjcqkwfhswfbqucrerererererereqcw8oerakfritehesfrundq0aghoueakpdhmpew8sea4rfq8vdxupew8tdxuvfrapea8qdxapea8uebqqfbawehyscqkjcqkjcqkuegwkfbiseakqcrameawvehusfrivfriweryrfhetdbmmewwpdg8oewstdbmlfbiuehqsfbiuehqsghgteheqerakdw4tcxeiaq0rchiuebqseakqcrusewwleqaahsewabyjca0tehywbwkjdrcieqgqehisehisehiseggifxcxdxkxexuxerewfwonfheafxcsfxuqfrywhbqvewkqcripehatebmqdbetcqotcrwtehmtdq8lexmaehmrcwslfxcxfrexfxyqebaqebaqebaqeakjcqktehisehitexmteg0sehisehqsgr4sehccfxsxfxcsfbmzhbutdg4zgripcbcxehcbebadcrcxfx4bdx0odggifxitfrikchmtehiidiexercreqokcgoxfx0xfhywcrisehisehisehircxapexelfxmvexitfxcodg4chbwweqoqdxuqfrateq8sfxaxebcqfravebcxfxeqerarebeqeraweryrfhexexctcgkkcqojcgkwew0kfhmteqkrcreneq0xexctfxmxfxmxehcsfxivdrunfq0qdxapfqsvdbulfhmwexytfhmwexythbovexmrexelea8vcxiiaq4schmweryteqkrcrctfq0legaaicqyabgkca8vfbgycaokdhkiewgsfbqufbqufbqufagigrkzebwzfbczexmyggsogbmdgroughcsfxgyhxyxfaoschqqfbiuerusdrmvcgsvch8vfbuudxemfrucexutdawmgrkzfxmzghgsehisehirehisegokcgovfbqufbqvfruvfa4ufbqufbyugyeufbkfgh4zgrkufxuchxgvebacgxqqcbkafbkeehigchkzgieeecapdwgigrqvfxmlcxywfbqidyqzexktewslcwsagiaagbgychqufbqufbqufbqtdbirfbmmgruxfrqvgrkpdw8ehh4yewssercrfxevexaugrizehksfxexerkzgrmsexitehmsexiyexgtgbmafrovcwolcgskcwoyfq4lgbuvewotchmpew8zfrkvgruzgruafboughqxdxcpfw8serirfwwxdhcmgbuyfrgvgbuyfrgvhxwxfrqtfbmmehexdbqjaq8ucxuyexgvewotchkvfw8mfaaaisyzabkkcq8wfrkzcasldhojewksfruvfruvfruvfqkjghoaerwafrcafbmzggwpgrmeghsugxgsgbkzibcyfqsscxurfbivehytdhqwcwwwcyawfbyvdxenfhydfbytdawmghoafxqagxksehisehisexmtewslcwswfbqufbqwfhywfq4vfruvfrcvhciufboggx8aghovfxydibgwebadhbqrcrobfrofexmhchoagyifeseqeakjghuwgbqlcxywfrujecyafboufawmdawbgyebgrkzcxqufbqufbqufbqtdrirfrmmghyyfhqwghoqebafhx8zfawsercsfxiwexevghiaehosfxixehoaghqtfbmuexqtfbmzfbkugrqafhowdasmcwwldaszfg8mgrywewstcxmpew8afhowghyaghybfbsugxqydxgpga8serirga0ydhgngryzfhkwgryzfhkwib0yfhutfrmneheydrqkaravdbyzfbkwewstcxowga8nfaaajsocabwmchezfxwccqwmeb0kfqoufxcxfxcxfxcxfwokhr0deyadgbodfhychg0rhbyhhr4xhhsvghwcixobgawudbctfxuyfbgvdxyyda0ydcqyfxgyermogbghfxgwdg4ohr0dghydhhwvfruvfruufruvfqwmdawyfxcxfxcygbgyfxaxfxcxfxoxiccxfx0jhimdhr0xghggjbsyehigibctch0efx0jfruldb0dhicjeyureqokhrcygxcmdbkzfxckesodfh0wfg0ndq0ehiuehbwcdbcxfxcxfxcxfxcwdhutgbyohrgbgbcyhr0sehijiymcfg0vexoughqyfrmxhrudfr0vghqafb0dhryvfhuwfryvfhucfhwwhbyegb4ydqwnda0mdqwcgbenhbgyfgwwdbyrfhedgb0yhrgdhrgefx4xhhcbersrgxevexutgg4aeboohbgcgbwyhbgcgbwyiyebgbgwgbyofrmadhclarixdrgcfhwyfgwwdb0ygxeofwaajisdab0mchizgb0dcgwmeb4kfgovgbgygbgygbgygaokhh4eeyeegbsefxydhg0rhbyihh8xhxsvgxwdjbsbgawvdbgtfxuyfrkvebczda4zdcuzfxkyehqpgrkhfxkwdg4ohh4egxcehxwvfruvfruvfruvfqwmdawzfxcxfxczgrkzgbaygbgygbsyisgxfx4khyqehh4ygxkhjrwzexmhibctch4fgb4kfhymdb4ehygkeyysegokhhgzgxcndroagbgkeisefx4xfw0ndq0fhyyfhbwcdbcxfxcxfxcxfxcwdxuugbyohhkbgrczhh4sehikjcqdfw0vfbsvgxuzfhmyhhuefr4vgxubfr4ehhcvfxuxfrcvfxudfx0xhrcegr4zdqwnda0mdqwcgreohbkzfgwwdbyrfhiegr4zhhkehhkffx8xhxcbehssgxivfbuugw8bebsphbkcgrwzhbkcgrwzjcebgrgwgbypfrqbdxclariydhkdfxwzfgwwdb4zgxipfwaakjagacancxmcgiagcw4oeielgasxghoaghoaghoaggslisehfsqhgx4hgrkgig8thxkmisiaih4xhh8gkb0egw4xdhovghcbfxsyerkbdg8bdikbghsbexyqgxwlghszdxapisehhhkhih8xfxcxfxcxgbgyga4odg4bghoaghobgxsbghiaghoagh0ajcwagieoiichiseahhslkr8cfbqljbovcyeigiengbgqdsehiiwnfsoufaslirobhhoodhwcgholfdahgsezgq8pdw8iiioihx8fdhoaghoaghoaghozebcwgxkqirsegxobiseufbqokcgggq8xfh4xhhcbgbuairchfyexhhcefyehirkygrgzgbkygrgggsazibkigyibdw4pdg8odw4fhbmphxsbgq4zdhktgrmhgyebirshirsigiiaihoeex4thhmxfhcwhhaeeh4qhxsfgx8bhxsfgx8bkcuegxszgxkqfxyeebomahqadxsggr8bgq4zdiebhhmqggaaljqjacmodbuehsmjda8pfcumgwwzhr0dhr0dhr0dhqwmjsulfyglhselhbsjjravihsqjcucjseaisijlcahhq8zdx0xhbodgr4aexwedxaedywehb4dfrgshh4ohb4bererjsulirwkjsiaghoaghozghoagg8pdw8ehbwchbwehh4ehrqdhr0dhsadjzachcusjssljsudib4olsiefhyojxwxdculhsurghoudiuljtarfy4wfgwmjr0eirwqeb8fhr0mfjqlhcuchbaqebaljs4liiiidxwchbwchbwchbwbehoyhrsrjr4hhhwejsuwfhyslcwjhbaagcezirkegxcdjrolgiuairkhgsukjrwahbocghwahbojhcmcixwlhiueea8qdxapea8ihhuqih4egw8bdxsvgxukhiqejb4kjb4lhcucjrwhfseviruagboyirihfcesih4ihiieih4ihiielcghhh0bhrssghghehwnahydeb4jhciegw8bdyqeirushaaamjkmacyqdrchhyymdraqfignhq0chx8fhx8fhx8fhw0nkcgogssoicqohh0mkbexjr0tjykfksqcjcummcmkibaceb8zhxwggyecfr4hebihedahhyegfxotiseshiedehmskcgojb4nksuchbwchbwbhbwchbaqebahhx8fhx8hisehhxyfhx8fhymfkzqfhygwks8okcgfiyesmsuhgbgskx8zdsgohygvhbwyecgoktqvgtixfw0nkb8hjb4resiihx8nfzkohigehhererepktipjsuleb8fhx8fhx8fhx8dexwaib0tkcekir8hkcgygbgwmdamhhecgiqbjbshhrkfkbwohcgcjbskgygnkb4chhwehb4chhwmhiyejh4oisgherarebeqeralircsjsehhradeb0xhrcnischjyenjyephykfkr8kfyqxjbccghwajbmkfiqtjselisuhjselisuhmcwkisadib0thbokex8oahgfeiemhiuhhradecchjbcthwaanj0packrdhkkiikpdhisfysohw4eiiiiiiiiiiiiig4okysrgy4riiyricapkxmykcaxkywhlccejygpncynihieeiibir4jhsmefiajehmjejqjismjgrwviymvismgfbqukysrjiarlcgehh4ehh4dhh4ehhisehijisehisejiymjihciiiiiiiyiljghiss0ldmrkysijimvnsgkghovliebdissiiszhx82essrldgzgzyzgq4okyijjyeseiqkiiiogt0ricsgibmtexmsldyskcgoeiehisehisehisegfr4ciiaukymniyejkysaghozmzmpibmehcydjh0jhxsikx4rhisejh0mhssqkyaeib4ghiaeib4pickgksariysjexitehmsexioixgtkcmjibigeiazibkriysjkymrkymsiswhlcengsczjxkehb4cjxunfycvkcmoiygjkcmoiygjnc8niyigiiavhhwnfseqahoieympicgjibigeisjjxkviqaaokisacwsdxsmjcwsdxmtgs4pig8gjcqkjcqkjcqkja8pli4uhtiujskuiyislhqakyi0li8klyogksssnykqjrmgeyqdjcalhyyhgcmmexumezgmjcylgx4xjiyziyyifryvli4uksmulysgicagicafisehirmtexmmjcqkjcqmjiymjbkkjcqkjckkmj0kjc44lzculi4kksyzocsmhbwzmsqddy4vjc42ise6ei4ulz02htobgw8pliqmkimufccnjcqpg0iuiy4jixqufbqvlzovkysreyqkjcqkjcqkjcqifyaejsiwliyqjiqmli4chbw3nzcsixqghikfkr8mih0kliauic4gkr8phy4tlimhiyejismhiyesiywjlcmuji4mfbmuexqtfbmrjhovkyymihmieyiaihsuji4mliyuliyvjc8klyqqgyobkhsghiaekrcpgskxkyyrjismkyyrjismnzmqjiuijsiwib4pfyqrahwkfsysiysmihmiey4mkhsxjaaaq0wyadiveh8skjmzerywhtusjxilkioqkioqkioqkhisntu1ijo1kza1kccynrcemic9ntypnjalmdiyqc8wkxylfioiksurjcwmhcgsfhgsfkeskswrhymalcw7kswngrkzntu1mcg1njiljsuljsukjiymjhywfhyskskpkskslcwskh0qkioqki8qouypktvanj81ntuqlyw6qtesise7oskieju2kju/jizdftu1nky/ikmfhxisnsosmckxfy0tkiosh0w1kduokbcxfxc2nkm2mjiyfikpkskpkskpkskngiujkycznswwlcksntugicbaqeaykbclizakmcqsjyiqnsu1jtulmcqwjdu0nsgmkcyojigmkcyykdiomig1ldusfxyxfhcwfxyylb4ymiwsjxynficejx81ldusnsw1nsw2ktypnikwhzafmb8liyujmbowhtaamiwyldismiwyldisqdswlcsnkycajsmwgiktaiaqgcwykdisjxynfjusmb8akqaas1u4adgxfcmylzk5exkzitwukxqply8vly8vly8vlxqupdw8jke8mdu8lsw4pboiocxeoz0uptyqnjg4sdu2mbkpgs8mliowkteqhy0xgbsxgekxljewiycdmtfcljesgxwbpdw8ns07ptgqkioqkiopkioqkhgygbgxli4uli4xmtexlyevly8vlzqvqe4uljxipuc8pdwvntfbstcxjsvcqc4mfdw9lzxgkiplfzw8pu5gjksjixqupc8xni4zgtiyly8ui1u8ltwtlroagho9pus9odg4gc4uli4uli4uli4shsonmcwcpde2ms4xpdwkjcrhr0c4lroqjzupnskxkyyvpco8kjwqnsk1ktw6pc0qlsotki0qlso4ltgtoc08mtwxghgagboyghg4msibodexlbgsgcwilcm7mtsxoze7oze9lj0ups42izyjnimqjyonnh02idydode4mtgxode4mtgxsei2mtasmcwdkic2hs4wayqvgze4ltgxlbgsgdsxnimdlgaau18+ad4afiy3nd9afrsbjeiwmbyundq0ndq0ndq0nbywqkjckkdcnttcmje/qh0lpjflqumzqzwuoz4/tzo8nrsugzqqmy41ltyviji2gx42g1a2mzy1jiwgnjdjmzyxhh8eqkjcozjbqz4uli4uli4tly8vlxsbgxs2mzmzmzm2njy2ncq0ndq0ndo0r1czm0jqq05cqki0ozziut03kchjrzmqfkjdnejoly9tgkjcq1doklmnjxywqjq2pdmchdg4ndqwj19cmkiymh0dhr1dq1ndpj4+gzmzmzmzmzmzmzmxic4sntefqjy8njm2qkiokchpt08/mh0uldstoy02mco0qi5clkiuoy07lujbqjivmi8ylzivmi8/mj8ypzjcnki2hrsdgx0bhrs+nyuepjy2mrsxgzemmszbnke2qtzcqtzdm0mzqzm8jjwmpcyulc4soya7jdsgpjy+nj42pjy+nj42t0k8njuxntegliw7idmyayg0hjy/mj42mrsxg0e2pcygmwaaxglfaeudgco9ouzgfx4ekekynrgzotk5otk5otk5orgysuljl09jo0fjnzzfssaqrtztses5s0izqkvfwefcox4zhjkuotm7mjw0jjc8hie8hlk8otw7kzakpdxrodw2iiiisuljqtdis0uzmzmzmzmyndq0nb4ehh48otk5otk8pdw8osg5otk5oua5t2a5oulys1zjsuk5qtxqwkq9ls1rtjkvgelkoulwndrchuljs2bwllwrkxgystk8qjgfhz4+otoyk2ljn0k3nyagicbls1xlruvfhjk5otk5otk5otk2jdmwozyistxcpdk8sukslcxxv1dfnyazmeeyqti8ns45stnjm0kzqtjbmklistc0nzq3ndc0nzrfn0u3rtdjpek8ib4ghiaeib5fpcohrtw8nh42hjyqnitipeg8sdxjsdxlous5szlck0irqiszmdmwqirckeikrtxfpeu8rtxfpeu8wffcpds2ozykmzbcjdkbayw5itxfn0u8nh42hkg8qiskoqaazhjlaesfgy5cpkxngsehk1abohs3pj4+pj4+pj4+phsbufbqm1zqqedppdplucmtszpat1e9uug4r0tlx0ziqce3it4ypjhanke4kjxbisrbiwfbpkfaljqnqujypue6jsulufbqrzxpuus4odg4odg2odg4ocehisfbpj4+pj5bqufbpis+pj4+pky+vmg+plbguv5qufa+r0fxyupcmtfyvt4zg1brplbeotlkh1bquwhemmqvlxsbud5bsd0iikndpj8bl3jqpfa8pcmjiynruwrrs0tlit4+pj4+pj4+pj46jzg0qdolt0fiqt1bufawmdbfx19lpcm4nec2rzzboji+udhqofa4rzzhnk9otzw4pdg8odw4pdhlpes8szxqqvbbiyejismhiyflqi0ks0fboie6itouoi5pqu9bt0fpt0frple+ut5ilkgusc44ndg0rydhk0cns0flqutbs0flqutbx1hiqua6qdonodrhjz4dbda+jeflpetboie6iu9bsc4npgaaaaabiaebaqkbaqefaqebgxsbfwebaqefbqufbqufbqufaqexarcbexctas8baqebcwedarsbasqbaqebawebaqetgwebbqebaqebgqkhasgbaqebasgbgqeparwoaqebkaeqbrabfxcbaqebawebaqebaqejcqkjaqebasgbaqebasgokcgfaqufbqufgguuaqebaqebghcxfwuoaqebfgebaqebaqebfw4ffwkqeaejfxcbaqkbaqebaqexbsgbaskpaqefaqebexcbfwebcwslcwebaqedawmbaqebaqebaqebaqecaqetaquvaqeojbkbfx0dhqebaqebcwebaqebaqebaquxarcbfwebaqeblwesaqkbcqejaqkbcqebaqebaqeoasglaqsbcwelaqmbaqedaqebaqebaqebkqeoasgbkaebkaebaqebaqepaskbkqebaqebhaebarwdkamoaygdkamoaygbaqeoewetaqebaqecarqbhqubgqebawebaqebasgbkrwb"; module["fs_createdatafile"]("/", "lucidabrightdemibold.ttf", decodebase64(filedata0), true, true, false) } if (module["calledrun"]) { runwithfs() } else { if (!module["prerun"]) module["prerun"] = []; module["prerun"].push(runwithfs) } }; loadpackage({ "files": [] }) } )(); var moduleoverrides = {}; var key; for (key in module) { if (module.hasownproperty(key)) { moduleoverrides[key] = module[key] } } var arguments_ = []; var thisprogram = "./this.program"; var quit_ = function(status, tothrow) { throw tothrow }; var environment_is_web = typeof window === "object"; var environment_is_worker = typeof importscripts === "function"; var environment_is_node = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; var environment_is_pthread = module["environment_is_pthread"] || false; var scriptdirectory = ""; function locatefile(path) { if (module["locatefile"]) { return module["locatefile"](path, scriptdirectory) } return scriptdirectory + path } var read_, readasync, readbinary, setwindowtitle; if (environment_is_web || environment_is_worker) { if (environment_is_worker) { scriptdirectory = self.location.href } else if (typeof document !== "undefined" && document.currentscript) { scriptdirectory = document.currentscript.src } if (_scriptdir) { scriptdirectory = _scriptdir } if (scriptdirectory.indexof("blob:") !== 0) { scriptdirectory = scriptdirectory.substr(0, scriptdirectory.lastindexof("/") + 1) } else { scriptdirectory = "" } { read_ = function(url) { var xhr = new xmlhttprequest; xhr.open("get", url, false); xhr.send(null); return xhr.responsetext } ; if (environment_is_worker) { readbinary = function(url) { var xhr = new xmlhttprequest; xhr.open("get", url, false); xhr.responsetype = "arraybuffer"; xhr.send(null); return new uint8array(xhr.response) } } readasync = function(url, onload, onerror) { var xhr = new xmlhttprequest; xhr.open("get", url, true); xhr.responsetype = "arraybuffer"; xhr.onload = function() { if (xhr.status == 200 || xhr.status == 0 && xhr.response) { onload(xhr.response); return } onerror() } ; xhr.onerror = onerror; xhr.send(null) } } setwindowtitle = function(title) { document.title = title } } else {} var out = module["print"] || console.log.bind(console); var err = module["printerr"] || console.warn.bind(console); for (key in moduleoverrides) { if (moduleoverrides.hasownproperty(key)) { module[key] = moduleoverrides[key] } } moduleoverrides = null; if (module["arguments"]) arguments_ = module["arguments"]; if (module["thisprogram"]) thisprogram = module["thisprogram"]; if (module["quit"]) quit_ = module["quit"]; function warnonce(text) { if (!warnonce.shown) warnonce.shown = {}; if (!warnonce.shown[text]) { warnonce.shown[text] = 1; err(text) } } var tempret0 = 0; var settempret0 = function(value) { tempret0 = value }; var gettempret0 = function() { return tempret0 }; var atomics_load = atomics.load; var atomics_store = atomics.store; var atomics_compareexchange = atomics.compareexchange; var wasmbinary; if (module["wasmbinary"]) wasmbinary = module["wasmbinary"]; var noexitruntime = module["noexitruntime"] || true; if (typeof webassembly !== "object") { abort("no native wasm support detected") } function getvalue(ptr, type, nosafe) { type = type || "i8"; if (type.charat(type.length - 1) === "*") type = "i32"; switch (type) { case "i1": return growable_heap_i8()[ptr >> 0]; case "i8": return growable_heap_i8()[ptr >> 0]; case "i16": return growable_heap_i16()[ptr >> 1]; case "i32": return growable_heap_i32()[ptr >> 2]; case "i64": return growable_heap_i32()[ptr >> 2]; case "float": return growable_heap_f32()[ptr >> 2]; case "double": return growable_heap_f64()[ptr >> 3]; default: abort("invalid type for getvalue: " + type) } return null } var wasmmemory; var wasmmodule; var abort = false; var exitstatus; function assert(condition, text) { if (!condition) { abort("assertion failed: " + text) } } function getcfunc(ident) { var func = module["_" + ident]; assert(func, "cannot call unknown function " + ident + ", make sure it is exported"); return func } function ccall(ident, returntype, argtypes, args, opts) { var toc = { "string": function(str) { var ret = 0; if (str !== null && str !== undefined && str !== 0) { var len = (str.length << 2) + 1; ret = stackalloc(len); stringtoutf8(str, ret, len) } return ret }, "array": function(arr) { var ret = stackalloc(arr.length); writearraytomemory(arr, ret); return ret } }; function convertreturnvalue(ret) { if (returntype === "string") return utf8tostring(ret); if (returntype === "boolean") return boolean(ret); return ret } var func = getcfunc(ident); var cargs = []; var stack = 0; if (args) { for (var i = 0; i < args.length; i++) { var converter = toc[argtypes[i]]; if (converter) { if (stack === 0) stack = stacksave(); cargs[i] = converter(args[i]) } else { cargs[i] = args[i] } } } var ret = func.apply(null, cargs); function ondone(ret) { if (stack !== 0) stackrestore(stack); return convertreturnvalue(ret) } ret = ondone(ret); return ret } var alloc_normal = 0; var alloc_stack = 1; function allocate(slab, allocator) { var ret; if (allocator == alloc_stack) { ret = stackalloc(slab.length) } else { ret = _malloc(slab.length) } if (slab.subarray || slab.slice) { growable_heap_u8().set(slab, ret) } else { growable_heap_u8().set(new uint8array(slab), ret) } return ret } function textdecoderwrapper(encoding) { var textdecoder = new textdecoder(encoding); this.decode = function(data) { if (data.buffer instanceof sharedarraybuffer) { data = new uint8array(data) } return textdecoder.decode.call(textdecoder, data) } } var utf8decoder = typeof textdecoder !== "undefined" ? new textdecoderwrapper("utf8") : undefined; function utf8arraytostring(heap, idx, maxbytestoread) { var endidx = idx + maxbytestoread; var endptr = idx; while (heap[endptr] && !(endptr >= endidx)) ++endptr; if (endptr - idx > 16 && heap.subarray && utf8decoder) { return utf8decoder.decode(heap.subarray(idx, endptr)) } else { var str = ""; while (idx < endptr) { var u0 = heap[idx++]; if (!(u0 & 128)) { str += string.fromcharcode(u0); continue } var u1 = heap[idx++] & 63; if ((u0 & 224) == 192) { str += string.fromcharcode((u0 & 31) << 6 | u1); continue } var u2 = heap[idx++] & 63; if ((u0 & 240) == 224) { u0 = (u0 & 15) << 12 | u1 << 6 | u2 } else { u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63 } if (u0 < 65536) { str += string.fromcharcode(u0) } else { var ch = u0 - 65536; str += string.fromcharcode(55296 | ch >> 10, 56320 | ch & 1023) } } } return str } function utf8tostring(ptr, maxbytestoread) { return ptr ? utf8arraytostring(growable_heap_u8(), ptr, maxbytestoread) : "" } function stringtoutf8array(str, heap, outidx, maxbytestowrite) { if (!(maxbytestowrite > 0)) return 0; var startidx = outidx; var endidx = outidx + maxbytestowrite - 1; for (var i = 0; i < str.length; ++i) { var u = str.charcodeat(i); if (u >= 55296 && u <= 57343) { var u1 = str.charcodeat(++i); u = 65536 + ((u & 1023) << 10) | u1 & 1023 } if (u <= 127) { if (outidx >= endidx) break; heap[outidx++] = u } else if (u <= 2047) { if (outidx + 1 >= endidx) break; heap[outidx++] = 192 | u >> 6; heap[outidx++] = 128 | u & 63 } else if (u <= 65535) { if (outidx + 2 >= endidx) break; heap[outidx++] = 224 | u >> 12; heap[outidx++] = 128 | u >> 6 & 63; heap[outidx++] = 128 | u & 63 } else { if (outidx + 3 >= endidx) break; heap[outidx++] = 240 | u >> 18; heap[outidx++] = 128 | u >> 12 & 63; heap[outidx++] = 128 | u >> 6 & 63; heap[outidx++] = 128 | u & 63 } } heap[outidx] = 0; return outidx - startidx } function stringtoutf8(str, outptr, maxbytestowrite) { return stringtoutf8array(str, growable_heap_u8(), outptr, maxbytestowrite) } function lengthbytesutf8(str) { var len = 0; for (var i = 0; i < str.length; ++i) { var u = str.charcodeat(i); if (u >= 55296 && u <= 57343) u = 65536 + ((u & 1023) << 10) | str.charcodeat(++i) & 1023; if (u <= 127) ++len; else if (u <= 2047) len += 2; else if (u <= 65535) len += 3; else len += 4 } return len } var utf16decoder = typeof textdecoder !== "undefined" ? new textdecoderwrapper("utf-16le") : undefined; function utf16tostring(ptr, maxbytestoread) { var endptr = ptr; var idx = endptr >> 1; var maxidx = idx + maxbytestoread / 2; while (!(idx >= maxidx) && growable_heap_u16()[idx]) ++idx; endptr = idx << 1; if (endptr - ptr > 32 && utf16decoder) { return utf16decoder.decode(growable_heap_u8().subarray(ptr, endptr)) } else { var str = ""; for (var i = 0; !(i >= maxbytestoread / 2); ++i) { var codeunit = growable_heap_i16()[ptr + i * 2 >> 1]; if (codeunit == 0) break; str += string.fromcharcode(codeunit) } return str } } function stringtoutf16(str, outptr, maxbytestowrite) { if (maxbytestowrite === undefined) { maxbytestowrite = 2147483647 } if (maxbytestowrite < 2) return 0; maxbytestowrite -= 2; var startptr = outptr; var numcharstowrite = maxbytestowrite < str.length * 2 ? maxbytestowrite / 2 : str.length; for (var i = 0; i < numcharstowrite; ++i) { var codeunit = str.charcodeat(i); growable_heap_i16()[outptr >> 1] = codeunit; outptr += 2 } growable_heap_i16()[outptr >> 1] = 0; return outptr - startptr } function lengthbytesutf16(str) { return str.length * 2 } function utf32tostring(ptr, maxbytestoread) { var i = 0; var str = ""; while (!(i >= maxbytestoread / 4)) { var utf32 = growable_heap_i32()[ptr + i * 4 >> 2]; if (utf32 == 0) break; ++i; if (utf32 >= 65536) { var ch = utf32 - 65536; str += string.fromcharcode(55296 | ch >> 10, 56320 | ch & 1023) } else { str += string.fromcharcode(utf32) } } return str } function stringtoutf32(str, outptr, maxbytestowrite) { if (maxbytestowrite === undefined) { maxbytestowrite = 2147483647 } if (maxbytestowrite < 4) return 0; var startptr = outptr; var endptr = startptr + maxbytestowrite - 4; for (var i = 0; i < str.length; ++i) { var codeunit = str.charcodeat(i); if (codeunit >= 55296 && codeunit <= 57343) { var trailsurrogate = str.charcodeat(++i); codeunit = 65536 + ((codeunit & 1023) << 10) | trailsurrogate & 1023 } growable_heap_i32()[outptr >> 2] = codeunit; outptr += 4; if (outptr + 4 > endptr) break } growable_heap_i32()[outptr >> 2] = 0; return outptr - startptr } function lengthbytesutf32(str) { var len = 0; for (var i = 0; i < str.length; ++i) { var codeunit = str.charcodeat(i); if (codeunit >= 55296 && codeunit <= 57343) ++i; len += 4 } return len } function allocateutf8(str) { var size = lengthbytesutf8(str) + 1; var ret = _malloc(size); if (ret) stringtoutf8array(str, growable_heap_i8(), ret, size); return ret } function writearraytomemory(array, buffer) { growable_heap_i8().set(array, buffer) } function writeasciitomemory(str, buffer, dontaddnull) { for (var i = 0; i < str.length; ++i) { growable_heap_i8()[buffer++ >> 0] = str.charcodeat(i) } if (!dontaddnull) growable_heap_i8()[buffer >> 0] = 0 } function alignup(x, multiple) { if (x % multiple > 0) { x += multiple - x % multiple } return x } var buffer, heap8, heapu8, heap16, heapu16, heap32, heapu32, heapf32, heapf64; if (environment_is_pthread) { buffer = module["buffer"] } function updateglobalbufferandviews(buf) { buffer = buf; module["heap8"] = heap8 = new int8array(buf); module["heap16"] = heap16 = new int16array(buf); module["heap32"] = heap32 = new int32array(buf); module["heapu8"] = heapu8 = new uint8array(buf); module["heapu16"] = heapu16 = new uint16array(buf); module["heapu32"] = heapu32 = new uint32array(buf); module["heapf32"] = heapf32 = new float32array(buf); module["heapf64"] = heapf64 = new float64array(buf) } var initial_memory = module["initial_memory"] || 524288e3; if (environment_is_pthread) { wasmmemory = module["wasmmemory"]; buffer = module["buffer"] } else { if (module["wasmmemory"]) { wasmmemory = module["wasmmemory"] } else { wasmmemory = new webassembly.memory({ "initial": initial_memory / 65536, "maximum": 1048576e3 / 65536, "shared": true }); if (!(wasmmemory.buffer instanceof sharedarraybuffer)) { err("requested a shared webassembly.memory but the returned buffer is not a sharedarraybuffer, indicating that while the browser has sharedarraybuffer it does not have webassembly threads support - you may need to set a flag"); if (environment_is_node) { console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)") } throw error("bad memory") } } } if (wasmmemory) { buffer = wasmmemory.buffer } initial_memory = buffer.bytelength; updateglobalbufferandviews(buffer); var wasmtable; var __atprerun__ = []; var __atinit__ = []; var __atexit__ = []; var __atpostrun__ = []; var runtimeinitialized = false; var runtimeexited = false; var runtimekeepalivecounter = 0; function keepruntimealive() { return noexitruntime || runtimekeepalivecounter > 0 } function prerun() { if (environment_is_pthread) return; if (module["prerun"]) { if (typeof module["prerun"] == "function") module["prerun"] = [module["prerun"]]; while (module["prerun"].length) { addonprerun(module["prerun"].shift()) } } callruntimecallbacks(__atprerun__) } function initruntime() { runtimeinitialized = true; if (environment_is_pthread) return; if (!module["nofsinit"] && !fs.init.initialized) fs.init(); fs.ignorepermissions = false; tty.init(); callruntimecallbacks(__atinit__) } function exitruntime() { if (environment_is_pthread) return; runtimeexited = true } function postrun() { if (environment_is_pthread) return; if (module["postrun"]) { if (typeof module["postrun"] == "function") module["postrun"] = [module["postrun"]]; while (module["postrun"].length) { addonpostrun(module["postrun"].shift()) } } callruntimecallbacks(__atpostrun__) } function addonprerun(cb) { __atprerun__.unshift(cb) } function addoninit(cb) { __atinit__.unshift(cb) } function addonpostrun(cb) { __atpostrun__.unshift(cb) } var rundependencies = 0; var rundependencywatcher = null; var dependenciesfulfilled = null; function getuniquerundependency(id) { return id } function addrundependency(id) { rundependencies++; if (module["monitorrundependencies"]) { module["monitorrundependencies"](rundependencies) } } function removerundependency(id) { rundependencies--; if (module["monitorrundependencies"]) { module["monitorrundependencies"](rundependencies) } if (rundependencies == 0) { if (rundependencywatcher !== null) { clearinterval(rundependencywatcher); rundependencywatcher = null } if (dependenciesfulfilled) { var callback = dependenciesfulfilled; dependenciesfulfilled = null; callback() } } } module["preloadedimages"] = {}; module["preloadedaudios"] = {}; function abort(what) { if (environment_is_pthread) { postmessage({ "cmd": "onabort", "arg": what }) } else { if (module["onabort"]) { module["onabort"](what) } } what += ""; err(what); abort = true; exitstatus = 1; what = "abort(" + what + "). build with -s assertions=1 for more info."; var e = new webassembly.runtimeerror(what); readypromisereject(e); throw e } var datauriprefix = "data:application/octet-stream;base64,"; function isdatauri(filename) { return filename.startswith(datauriprefix) } var wasmbinaryfile; wasmbinaryfile = "decoder.wasm"; if (!isdatauri(wasmbinaryfile)) { wasmbinaryfile = locatefile(wasmbinaryfile) } function getbinary(file) { try { if (file == wasmbinaryfile && wasmbinary) { return new uint8array(wasmbinary) } if (readbinary) { return readbinary(file) } else { throw "both async and sync fetching of the wasm failed" } } catch (err) { abort(err) } } function getbinarypromise() { if (!wasmbinary && (environment_is_web || environment_is_worker)) { if (typeof fetch === "function") { return fetch(wasmbinaryfile, { credentials: "same-origin" }).then(function(response) { if (!response["ok"]) { throw "failed to load wasm binary file at '" + wasmbinaryfile + "'" } return response["arraybuffer"]() }).catch(function() { return getbinary(wasmbinaryfile) }) } } return promise.resolve().then(function() { return getbinary(wasmbinaryfile) }) } function createwasm() { var info = { "a": asmlibraryarg }; function receiveinstance(instance, module) { var exports = instance.exports; module["asm"] = exports; wasmtable = module["asm"]["mc"]; addoninit(module["asm"]["gb"]); pthread.tlsinitfunctions.push(module["asm"]["lc"]); wasmmodule = module; if (!environment_is_pthread) { removerundependency("wasm-instantiate") } } if (!environment_is_pthread) { addrundependency("wasm-instantiate") } function receiveinstantiationresult(result) { receiveinstance(result["instance"], result["module"]) } function instantiatearraybuffer(receiver) { return getbinarypromise().then(function(binary) { return webassembly.instantiate(binary, info) }).then(function(instance) { return instance }).then(receiver, function(reason) { err("failed to asynchronously prepare wasm: " + reason); abort(reason) }) } function instantiateasync() { if (!wasmbinary && typeof webassembly.instantiatestreaming === "function" && !isdatauri(wasmbinaryfile) && typeof fetch === "function") { return fetch(wasmbinaryfile, { credentials: "same-origin" }).then(function(response) { var result = webassembly.instantiatestreaming(response, info); return result.then(receiveinstantiationresult, function(reason) { err("wasm streaming compile failed: " + reason); err("falling back to arraybuffer instantiation"); return instantiatearraybuffer(receiveinstantiationresult) }) }) } else { return instantiatearraybuffer(receiveinstantiationresult) } } if (module["instantiatewasm"]) { try { var exports = module["instantiatewasm"](info, receiveinstance); return exports } catch (e) { err("module.instantiatewasm callback failed with error: " + e); return false } } instantiateasync().catch(readypromisereject); return {} } var tempdouble; var tempi64; var asm_consts = { 624252: function($0) { module["firstglcontextext"] = gl.contexts[$0].glctx.getextension("webgl_lose_context") }, 624344: function() { module["firstglcontextext"].losecontext() }, 624391: function() { return growable_heap_i8().length } }; function callruntimecallbacks(callbacks) { while (callbacks.length > 0) { var callback = callbacks.shift(); if (typeof callback == "function") { callback(module); continue } var func = callback.func; if (typeof func === "number") { if (callback.arg === undefined) { wasmtable.get(func)() } else { wasmtable.get(func)(callback.arg) } } else { func(callback.arg === undefined ? null : callback.arg) } } } function _emscripten_futex_wake(addr, count) { if (addr <= 0 || addr > growable_heap_i8().length || addr & 3 != 0 || count < 0) return -28; if (count == 0) return 0; if (count >= 2147483647) count = infinity; var mainthreadwaitaddress = atomics.load(growable_heap_i32(), __emscripten_main_thread_futex >> 2); var mainthreadwoken = 0; if (mainthreadwaitaddress == addr) { var loadedaddr = atomics.compareexchange(growable_heap_i32(), __emscripten_main_thread_futex >> 2, mainthreadwaitaddress, 0); if (loadedaddr == mainthreadwaitaddress) { --count; mainthreadwoken = 1; if (count <= 0) return 1 } } var ret = atomics.notify(growable_heap_i32(), addr >> 2, count); if (ret >= 0) return ret + mainthreadwoken; throw "atomics.notify returned an unexpected value " + ret } module["_emscripten_futex_wake"] = _emscripten_futex_wake; function killthread(pthread_ptr) { if (environment_is_pthread) throw "internal error! killthread() can only ever be called from main application thread!"; if (!pthread_ptr) throw "internal error! null pthread_ptr in killthread!"; growable_heap_i32()[pthread_ptr + 8 >> 2] = 0; var pthread = pthread.pthreads[pthread_ptr]; delete pthread.pthreads[pthread_ptr]; pthread.worker.terminate(); pthread.freethreaddata(pthread); pthread.runningworkers.splice(pthread.runningworkers.indexof(pthread.worker), 1); pthread.worker.pthread = undefined } function cancelthread(pthread_ptr) { if (environment_is_pthread) throw "internal error! cancelthread() can only ever be called from main application thread!"; if (!pthread_ptr) throw "internal error! null pthread_ptr in cancelthread!"; var pthread = pthread.pthreads[pthread_ptr]; pthread.worker.postmessage({ "cmd": "cancel" }) } function cleanupthread(pthread_ptr) { if (environment_is_pthread) throw "internal error! cleanupthread() can only ever be called from main application thread!"; if (!pthread_ptr) throw "internal error! null pthread_ptr in cleanupthread!"; var pthread = pthread.pthreads[pthread_ptr]; if (pthread) { growable_heap_i32()[pthread_ptr + 8 >> 2] = 0; var worker = pthread.worker; pthread.returnworkertopool(worker) } } function _exit(status) { exit(status) } module["_exit"] = _exit; function handleexception(e) { if (e instanceof exitstatus || e == "unwind") { return exitstatus } var tolog = e; err("exception thrown: " + tolog); quit_(1, e) } var pthread = { unusedworkers: [], runningworkers: [], tlsinitfunctions: [], initmainthreadblock: function() {}, initworker: function() {}, pthreads: {}, threadexithandlers: [], setexitstatus: function(status) { exitstatus = status }, terminateallthreads: function() { for (var t in pthread.pthreads) { var pthread = pthread.pthreads[t]; if (pthread && pthread.worker) { pthread.returnworkertopool(pthread.worker) } } pthread.pthreads = {}; for (var i = 0; i < pthread.unusedworkers.length; ++i) { var worker = pthread.unusedworkers[i]; worker.terminate() } pthread.unusedworkers = []; for (var i = 0; i < pthread.runningworkers.length; ++i) { var worker = pthread.runningworkers[i]; var pthread = worker.pthread; worker.terminate(); pthread.freethreaddata(pthread) } pthread.runningworkers = [] }, freethreaddata: function(pthread) { if (!pthread) return; if (pthread.threadinfostruct) { _free(pthread.threadinfostruct) } pthread.threadinfostruct = 0; if (pthread.allocatedownstack && pthread.stackbase) _free(pthread.stackbase); pthread.stackbase = 0; if (pthread.worker) pthread.worker.pthread = null }, returnworkertopool: function(worker) { pthread.runwithoutmainthreadqueuedcalls(function() { delete pthread.pthreads[worker.pthread.threadinfostruct]; pthread.unusedworkers.push(worker); pthread.runningworkers.splice(pthread.runningworkers.indexof(worker), 1); pthread.freethreaddata(worker.pthread); worker.pthread = undefined }) }, runwithoutmainthreadqueuedcalls: function(func) { growable_heap_i32()[__emscripten_allow_main_runtime_queued_calls >> 2] = 0; try { func() } finally { growable_heap_i32()[__emscripten_allow_main_runtime_queued_calls >> 2] = 1 } }, receiveobjecttransfer: function(data) { if (typeof gl !== "undefined") { for (var i in data.offscreencanvases) { gl.offscreencanvases[i] = data.offscreencanvases[i] } if (!module["canvas"] && data.modulecanvasid && gl.offscreencanvases[data.modulecanvasid]) { module["canvas"] = gl.offscreencanvases[data.modulecanvasid].offscreencanvas; module["canvas"].id = data.modulecanvasid } } }, threadinit: function() { for (var i in pthread.tlsinitfunctions) { pthread.tlsinitfunctions[i]() } }, loadwasmmoduletoworker: function(worker, onfinishedloading) { worker.onmessage = function(e) { var d = e["data"]; var cmd = d["cmd"]; if (worker.pthread) pthread.currentproxiedoperationcallerthread = worker.pthread.threadinfostruct; if (d["targetthread"] && d["targetthread"] != _pthread_self()) { var thread = pthread.pthreads[d.targetthread]; if (thread) { thread.worker.postmessage(e.data, d["transferlist"]) } else { err('internal error! worker sent a message "' + cmd + '" to target pthread ' + d["targetthread"] + ", but that thread no longer exists!") } pthread.currentproxiedoperationcallerthread = undefined; return } if (cmd === "processqueuedmainthreadwork") { _emscripten_main_thread_process_queued_calls() } else if (cmd === "spawnthread") { spawnthread(e.data) } else if (cmd === "cleanupthread") { cleanupthread(d["thread"]) } else if (cmd === "killthread") { killthread(d["thread"]) } else if (cmd === "cancelthread") { cancelthread(d["thread"]) } else if (cmd === "loaded") { worker.loaded = true; if (onfinishedloading) onfinishedloading(worker); if (worker.runpthread) { worker.runpthread(); delete worker.runpthread } } else if (cmd === "print") { out("thread " + d["threadid"] + ": " + d["text"]) } else if (cmd === "printerr") { err("thread " + d["threadid"] + ": " + d["text"]) } else if (cmd === "alert") { alert("thread " + d["threadid"] + ": " + d["text"]) } else if (cmd === "detachedexit") { pthread.returnworkertopool(worker) } else if (cmd === "exitprocess") { try { _exit(d["returncode"]) } catch (e) { handleexception(e) } } else if (cmd === "canceldone") { pthread.returnworkertopool(worker) } else if (e.data.target === "setimmediate") { worker.postmessage(e.data) } else if (cmd === "onabort") { if (module["onabort"]) { module["onabort"](d["arg"]) } } else { err("worker sent an unknown command " + cmd) } pthread.currentproxiedoperationcallerthread = undefined } ; worker.onerror = function(e) { err("pthread sent an error! " + e.filename + ":" + e.lineno + ": " + e.message); throw e } ; worker.postmessage({ "cmd": "load", "urlorblob": module["mainscripturlorblob"] || _scriptdir, "wasmmemory": wasmmemory, "wasmmodule": wasmmodule }) }, allocateunusedworker: function() { var pthreadmainjs = locatefile("decoder.worker.js"); pthread.unusedworkers.push(new worker(pthreadmainjs)) }, getnewworker: function() { if (pthread.unusedworkers.length == 0) { pthread.allocateunusedworker(); pthread.loadwasmmoduletoworker(pthread.unusedworkers[0]) } return pthread.unusedworkers.pop() } }; function establishstackspace(stacktop, stackmax) { _emscripten_stack_set_limits(stacktop, stackmax); stackrestore(stacktop) } module["establishstackspace"] = establishstackspace; function invokeentrypoint(ptr, arg) { return wasmtable.get(ptr)(arg) } module["invokeentrypoint"] = invokeentrypoint; function _additiondatacb(port, pstadddatainfo) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(1, 0, port, pstadddatainfo); jsplaym4_additiondatacbfun(port, pstadddatainfo) } function _audioanr(port, pdata, size) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(2, 0, port, pdata, size); var apdata = new uint8array(size); apdata.set(module.heapu8.subarray(pdata, pdata + size)); jsplaym4_audioanrcallback(port, apdata, size); apdata = null } function _audioafterdecode(port, pdata, size) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(3, 0, port, pdata, size); var apdata = new uint8array(size); apdata.set(module.heapu8.subarray(pdata, pdata + size)); jsplaym4_audioafterdecodecallback(port, apdata, size); apdata = null } function _audioafterresample(port, pdata, size) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(4, 0, port, pdata, size); console.log("after decode size:" + size); var apdata = new uint8array(size); apdata.set(module.heapu8.subarray(pdata, pdata + size)); jsplaym4_audioresamplecallback(port, apdata, size); apdata = null } function _audiobeforedecode(port, pdata, size) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(5, 0, port, pdata, size); var apdata = new uint8array(size); apdata.set(module.heapu8.subarray(pdata, pdata + size)); jsplaym4_audiobeforedecodecallback(port, apdata, size); apdata = null } function _deccb(port, pyuvpcmdata, size, type, timestamp) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(6, 0, port, pyuvpcmdata, size, type, timestamp); var apyuvpcmdata = new uint8array(size); apyuvpcmdata.set(module.heapu8.subarray(pyuvpcmdata, pyuvpcmdata + size)); jsplaym4_deccallback(port, apyuvpcmdata, size, type, timestamp); apyuvpcmdata = null } function _yuvdisplaycb(port, yuvdata, size, timestamp) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(7, 0, port, yuvdata, size, timestamp); var ayuvdata = new uint8array(size); ayuvdata.set(module.heapu8.subarray(yuvdata, yuvdata + size)); jsplaym4_displaycallback(port, ayuvdata, size, timestamp); ayuvdata = null } function ___assert_fail(condition, filename, line, func) { abort("assertion failed: " + utf8tostring(condition) + ", at: " + [filename ? utf8tostring(filename) : "unknown filename", line, func ? utf8tostring(func) : "unknown function"]) } var _emscripten_get_now; if (environment_is_pthread) { _emscripten_get_now = function() { return performance.now() - module["__performance_now_clock_drift"] } } else _emscripten_get_now = function() { return performance.now() } ; var _emscripten_get_now_is_monotonic = true; function seterrno(value) { growable_heap_i32()[___errno_location() >> 2] = value; return value } function _clock_gettime(clk_id, tp) { var now; if (clk_id === 0) { now = date.now() } else if ((clk_id === 1 || clk_id === 4) && _emscripten_get_now_is_monotonic) { now = _emscripten_get_now() } else { seterrno(28); return -1 } growable_heap_i32()[tp >> 2] = now / 1e3 | 0; growable_heap_i32()[tp + 4 >> 2] = now % 1e3 * 1e3 * 1e3 | 0; return 0 } function ___clock_gettime(a0, a1) { return _clock_gettime(a0, a1) } function ___cxa_allocate_exception(size) { return _malloc(size + 16) + 16 } function _atexit(func, arg) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(8, 1, func, arg) } function ___cxa_thread_atexit(routine, arg) { pthread.threadexithandlers.push(function() { wasmtable.get(routine)(arg) }) } function exceptioninfo(excptr) { this.excptr = excptr; this.ptr = excptr - 16; this.set_type = function(type) { growable_heap_i32()[this.ptr + 4 >> 2] = type } ; this.get_type = function() { return growable_heap_i32()[this.ptr + 4 >> 2] } ; this.set_destructor = function(destructor) { growable_heap_i32()[this.ptr + 8 >> 2] = destructor } ; this.get_destructor = function() { return growable_heap_i32()[this.ptr + 8 >> 2] } ; this.set_refcount = function(refcount) { growable_heap_i32()[this.ptr >> 2] = refcount } ; this.set_caught = function(caught) { caught = caught ? 1 : 0; growable_heap_i8()[this.ptr + 12 >> 0] = caught } ; this.get_caught = function() { return growable_heap_i8()[this.ptr + 12 >> 0] != 0 } ; this.set_rethrown = function(rethrown) { rethrown = rethrown ? 1 : 0; growable_heap_i8()[this.ptr + 13 >> 0] = rethrown } ; this.get_rethrown = function() { return growable_heap_i8()[this.ptr + 13 >> 0] != 0 } ; this.init = function(type, destructor) { this.set_type(type); this.set_destructor(destructor); this.set_refcount(0); this.set_caught(false); this.set_rethrown(false) } ; this.add_ref = function() { atomics.add(growable_heap_i32(), this.ptr + 0 >> 2, 1) } ; this.release_ref = function() { var prev = atomics.sub(growable_heap_i32(), this.ptr + 0 >> 2, 1); return prev === 1 } } var exceptionlast = 0; var uncaughtexceptioncount = 0; function ___cxa_throw(ptr, type, destructor) { var info = new exceptioninfo(ptr); info.init(type, destructor); exceptionlast = ptr; uncaughtexceptioncount++; throw ptr } function ___emscripten_init_main_thread_js(tb) { __emscripten_thread_init(tb, !environment_is_worker, 1); pthread.threadinit() } function _tzset_impl() { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(9, 1); var currentyear = (new date).getfullyear(); var winter = new date(currentyear,0,1); var summer = new date(currentyear,6,1); var winteroffset = winter.gettimezoneoffset(); var summeroffset = summer.gettimezoneoffset(); var stdtimezoneoffset = math.max(winteroffset, summeroffset); growable_heap_i32()[__get_timezone() >> 2] = stdtimezoneoffset * 60; growable_heap_i32()[__get_daylight() >> 2] = number(winteroffset != summeroffset); function extractzone(date) { var match = date.totimestring().match(/\(([a-za-z ]+)\)$/); return match ? match[1] : "gmt" } var wintername = extractzone(winter); var summername = extractzone(summer); var winternameptr = allocateutf8(wintername); var summernameptr = allocateutf8(summername); if (summeroffset < winteroffset) { growable_heap_i32()[__get_tzname() >> 2] = winternameptr; growable_heap_i32()[__get_tzname() + 4 >> 2] = summernameptr } else { growable_heap_i32()[__get_tzname() >> 2] = summernameptr; growable_heap_i32()[__get_tzname() + 4 >> 2] = winternameptr } } function _tzset() { if (_tzset.called) return; _tzset.called = true; _tzset_impl() } function _localtime_r(time, tmptr) { _tzset(); var date = new date(growable_heap_i32()[time >> 2] * 1e3); growable_heap_i32()[tmptr >> 2] = date.getseconds(); growable_heap_i32()[tmptr + 4 >> 2] = date.getminutes(); growable_heap_i32()[tmptr + 8 >> 2] = date.gethours(); growable_heap_i32()[tmptr + 12 >> 2] = date.getdate(); growable_heap_i32()[tmptr + 16 >> 2] = date.getmonth(); growable_heap_i32()[tmptr + 20 >> 2] = date.getfullyear() - 1900; growable_heap_i32()[tmptr + 24 >> 2] = date.getday(); var start = new date(date.getfullyear(),0,1); var yday = (date.gettime() - start.gettime()) / (1e3 * 60 * 60 * 24) | 0; growable_heap_i32()[tmptr + 28 >> 2] = yday; growable_heap_i32()[tmptr + 36 >> 2] = -(date.gettimezoneoffset() * 60); var summeroffset = new date(date.getfullyear(),6,1).gettimezoneoffset(); var winteroffset = start.gettimezoneoffset(); var dst = (summeroffset != winteroffset && date.gettimezoneoffset() == math.min(winteroffset, summeroffset)) | 0; growable_heap_i32()[tmptr + 32 >> 2] = dst; var zoneptr = growable_heap_i32()[__get_tzname() + (dst ? 4 : 0) >> 2]; growable_heap_i32()[tmptr + 40 >> 2] = zoneptr; return tmptr } function ___localtime_r(a0, a1) { return _localtime_r(a0, a1) } function spawnthread(threadparams) { if (environment_is_pthread) throw "internal error! spawnthread() can only ever be called from main application thread!"; var worker = pthread.getnewworker(); if (!worker) { return 6 } if (worker.pthread !== undefined) throw "internal error!"; if (!threadparams.pthread_ptr) throw "internal error, no pthread ptr!"; pthread.runningworkers.push(worker); var stackhigh = threadparams.stackbase + threadparams.stacksize; var pthread = pthread.pthreads[threadparams.pthread_ptr] = { worker: worker, stackbase: threadparams.stackbase, stacksize: threadparams.stacksize, allocatedownstack: threadparams.allocatedownstack, threadinfostruct: threadparams.pthread_ptr }; var tis = pthread.threadinfostruct >> 2; atomics.store(growable_heap_u32(), tis + (60 >> 2), threadparams.detached); atomics.store(growable_heap_u32(), tis + (76 >> 2), threadparams.stacksize); atomics.store(growable_heap_u32(), tis + (72 >> 2), stackhigh); atomics.store(growable_heap_u32(), tis + (100 >> 2), threadparams.stacksize); atomics.store(growable_heap_u32(), tis + (100 + 8 >> 2), stackhigh); atomics.store(growable_heap_u32(), tis + (100 + 12 >> 2), threadparams.detached); worker.pthread = pthread; var msg = { "cmd": "run", "start_routine": threadparams.startroutine, "arg": threadparams.arg, "threadinfostruct": threadparams.pthread_ptr, "stackbase": threadparams.stackbase, "stacksize": threadparams.stacksize }; msg.modulecanvasid = threadparams.modulecanvasid; msg.offscreencanvases = threadparams.offscreencanvases; worker.runpthread = function() { msg.time = performance.now(); worker.postmessage(msg, threadparams.transferlist) } ; if (worker.loaded) { worker.runpthread(); delete worker.runpthread } return 0 } function ___pthread_create_js(pthread_ptr, attr, start_routine, arg) { if (typeof sharedarraybuffer === "undefined") { err("current environment does not support sharedarraybuffer, pthreads are not available!"); return 6 } var transferlist = []; var error = 0; var transferredcanvasnames = attr ? growable_heap_i32()[attr + 36 >> 2] : 0; if (transferredcanvasnames == -1) transferredcanvasnames = "#canvas"; else if (transferredcanvasnames) transferredcanvasnames = utf8tostring(transferredcanvasnames).trim(); if (transferredcanvasnames) transferredcanvasnames = transferredcanvasnames.split(","); var offscreencanvases = {}; var modulecanvasid = module["canvas"] ? module["canvas"].id : ""; for (var i = 0; i < transferredcanvasnames.length; i++) { var name = transferredcanvasnames[i].trim(); var offscreencanvasinfo; try { if (name == "#canvas") { if (!module["canvas"]) { err('pthread_create: could not find canvas with id "' + name + '" to transfer to thread!'); error = 28; break } name = module["canvas"].id } if (gl.offscreencanvases[name]) { offscreencanvasinfo = gl.offscreencanvases[name]; gl.offscreencanvases[name] = null; if (module["canvas"]instanceof offscreencanvas && name === module["canvas"].id) module["canvas"] = null } else if (!environment_is_pthread) { var canvas = module["canvas"] && module["canvas"].id === name ? module["canvas"] : document.queryselector(name); if (!canvas) { err('pthread_create: could not find canvas with id "' + name + '" to transfer to thread!'); error = 28; break } if (canvas.controltransferredoffscreen) { err('pthread_create: cannot transfer canvas with id "' + name + '" to thread, since the current thread does not have control over it!'); error = 63; break } if (canvas.transfercontroltooffscreen) { if (!canvas.canvassharedptr) { canvas.canvassharedptr = _malloc(12); growable_heap_i32()[canvas.canvassharedptr >> 2] = canvas.width; growable_heap_i32()[canvas.canvassharedptr + 4 >> 2] = canvas.height; growable_heap_i32()[canvas.canvassharedptr + 8 >> 2] = 0 } offscreencanvasinfo = { offscreencanvas: canvas.transfercontroltooffscreen(), canvassharedptr: canvas.canvassharedptr, id: canvas.id }; canvas.controltransferredoffscreen = true } else { err('pthread_create: cannot transfer control of canvas "' + name + '" to pthread, because current browser does not support offscreencanvas!'); err("pthread_create: build with -s offscreen_framebuffer=1 to enable fallback proxying of gl commands from pthread to main thread."); return 52 } } if (offscreencanvasinfo) { transferlist.push(offscreencanvasinfo.offscreencanvas); offscreencanvases[offscreencanvasinfo.id] = offscreencanvasinfo } } catch (e) { err('pthread_create: failed to transfer control of canvas "' + name + '" to offscreencanvas! error: ' + e); return 28 } } if (environment_is_pthread && (transferlist.length === 0 || error)) { return _emscripten_sync_run_in_main_thread_4(687865856, pthread_ptr, attr, start_routine, arg) } if (error) return error; var stacksize = 0; var stackbase = 0; var detached = 0; if (attr && attr != -1) { stacksize = growable_heap_i32()[attr >> 2]; stacksize += 81920; stackbase = growable_heap_i32()[attr + 8 >> 2]; detached = growable_heap_i32()[attr + 12 >> 2] !== 0 } else { stacksize = 2097152 } var allocatedownstack = stackbase == 0; if (allocatedownstack) { stackbase = _memalign(16, stacksize) } else { stackbase -= stacksize; assert(stackbase > 0) } for (var i in offscreencanvases) { growable_heap_i32()[offscreencanvases[i].canvassharedptr + 8 >> 2] = pthread_ptr } var threadparams = { stackbase: stackbase, stacksize: stacksize, allocatedownstack: allocatedownstack, detached: detached, startroutine: start_routine, pthread_ptr: pthread_ptr, arg: arg, modulecanvasid: modulecanvasid, offscreencanvases: offscreencanvases, transferlist: transferlist }; if (environment_is_pthread) { threadparams.cmd = "spawnthread"; postmessage(threadparams, transferlist); return 0 } return spawnthread(threadparams) } function ___pthread_detached_exit() { postmessage({ "cmd": "detachedexit" }) } function ___pthread_exit_run_handlers(status) { while (pthread.threadexithandlers.length > 0) { pthread.threadexithandlers.pop()() } } function _emscripten_futex_wait(addr, val, timeout) { if (addr <= 0 || addr > growable_heap_i8().length || addr & 3 != 0) return -28; if (!environment_is_web) { var ret = atomics.wait(growable_heap_i32(), addr >> 2, val, timeout); if (ret === "timed-out") return -73; if (ret === "not-equal") return -6; if (ret === "ok") return 0; throw "atomics.wait returned an unexpected value " + ret } else { if (atomics.load(growable_heap_i32(), addr >> 2) != val) { return -6 } var tnow = performance.now(); var tend = tnow + timeout; var lastaddr = atomics.exchange(growable_heap_i32(), __emscripten_main_thread_futex >> 2, addr); while (1) { tnow = performance.now(); if (tnow > tend) { lastaddr = atomics.exchange(growable_heap_i32(), __emscripten_main_thread_futex >> 2, 0); return -73 } lastaddr = atomics.exchange(growable_heap_i32(), __emscripten_main_thread_futex >> 2, 0); if (lastaddr == 0) { break } _emscripten_main_thread_process_queued_calls(); if (atomics.load(growable_heap_i32(), addr >> 2) != val) { return -6 } lastaddr = atomics.exchange(growable_heap_i32(), __emscripten_main_thread_futex >> 2, addr) } return 0 } } function _emscripten_check_blocking_allowed() { if (environment_is_worker) return; warnonce("blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread") } function __emscripten_do_pthread_join(thread, status, block) { if (!thread) { err("pthread_join attempted on a null thread pointer!"); return 71 } if (environment_is_pthread && _pthread_self() == thread) { err("pthread " + thread + " is attempting to join to itself!"); return 16 } else if (!environment_is_pthread && _emscripten_main_browser_thread_id() == thread) { err("main thread " + thread + " is attempting to join to itself!"); return 16 } var self = growable_heap_i32()[thread + 8 >> 2]; if (self !== thread) { err("pthread_join attempted on thread " + thread + ", which does not point to a valid thread, or does not exist anymore!"); return 71 } var detached = atomics.load(growable_heap_u32(), thread + 60 >> 2); if (detached) { err("attempted to join thread " + thread + ", which was already detached!"); return 28 } if (block) { _emscripten_check_blocking_allowed() } for (; ; ) { var threadstatus = atomics.load(growable_heap_u32(), thread + 0 >> 2); if (threadstatus == 1) { if (status) { var result = atomics.load(growable_heap_u32(), thread + 88 >> 2); growable_heap_i32()[status >> 2] = result } atomics.store(growable_heap_u32(), thread + 60 >> 2, 1); if (!environment_is_pthread) cleanupthread(thread); else postmessage({ "cmd": "cleanupthread", "thread": thread }); return 0 } if (!block) { return 10 } _pthread_testcancel(); if (!environment_is_pthread) _emscripten_main_thread_process_queued_calls(); _emscripten_futex_wait(thread + 0, threadstatus, environment_is_pthread ? 100 : 1) } } function ___pthread_join_js(thread, status) { return __emscripten_do_pthread_join(thread, status, true) } var path = { splitpath: function(filename) { var splitpathre = /^(\/?|)([\s\s]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; return splitpathre.exec(filename).slice(1) }, normalizearray: function(parts, allowaboveroot) { var up = 0; for (var i = parts.length - 1; i >= 0; i--) { var last = parts[i]; if (last === ".") { parts.splice(i, 1) } else if (last === "..") { parts.splice(i, 1); up++ } else if (up) { parts.splice(i, 1); up-- } } if (allowaboveroot) { for (; up; up--) { parts.unshift("..") } } return parts }, normalize: function(path) { var isabsolute = path.charat(0) === "/" , trailingslash = path.substr(-1) === "/"; path = path.normalizearray(path.split("/").filter(function(p) { return !!p }), !isabsolute).join("/"); if (!path && !isabsolute) { path = "." } if (path && trailingslash) { path += "/" } return (isabsolute ? "/" : "") + path }, dirname: function(path) { var result = path.splitpath(path) , root = result[0] , dir = result[1]; if (!root && !dir) { return "." } if (dir) { dir = dir.substr(0, dir.length - 1) } return root + dir }, basename: function(path) { if (path === "/") return "/"; path = path.normalize(path); path = path.replace(/\/$/, ""); var lastslash = path.lastindexof("/"); if (lastslash === -1) return path; return path.substr(lastslash + 1) }, extname: function(path) { return path.splitpath(path)[3] }, join: function() { var paths = array.prototype.slice.call(arguments, 0); return path.normalize(paths.join("/")) }, join2: function(l, r) { return path.normalize(l + "/" + r) } }; function getrandomdevice() { if (typeof crypto === "object" && typeof crypto["getrandomvalues"] === "function") { var randombuffer = new uint8array(1); return function() { crypto.getrandomvalues(randombuffer); return randombuffer[0] } } else return function() { abort("randomdevice") } } var path_fs = { resolve: function() { var resolvedpath = "" , resolvedabsolute = false; for (var i = arguments.length - 1; i >= -1 && !resolvedabsolute; i--) { var path = i >= 0 ? arguments[i] : fs.cwd(); if (typeof path !== "string") { throw new typeerror("arguments to path.resolve must be strings") } else if (!path) { return "" } resolvedpath = path + "/" + resolvedpath; resolvedabsolute = path.charat(0) === "/" } resolvedpath = path.normalizearray(resolvedpath.split("/").filter(function(p) { return !!p }), !resolvedabsolute).join("/"); return (resolvedabsolute ? "/" : "") + resolvedpath || "." }, relative: function(from, to) { from = path_fs.resolve(from).substr(1); to = path_fs.resolve(to).substr(1); function trim(arr) { var start = 0; for (; start < arr.length; start++) { if (arr[start] !== "") break } var end = arr.length - 1; for (; end >= 0; end--) { if (arr[end] !== "") break } if (start > end) return []; return arr.slice(start, end - start + 1) } var fromparts = trim(from.split("/")); var toparts = trim(to.split("/")); var length = math.min(fromparts.length, toparts.length); var samepartslength = length; for (var i = 0; i < length; i++) { if (fromparts[i] !== toparts[i]) { samepartslength = i; break } } var outputparts = []; for (var i = samepartslength; i < fromparts.length; i++) { outputparts.push("..") } outputparts = outputparts.concat(toparts.slice(samepartslength)); return outputparts.join("/") } }; var tty = { ttys: [], init: function() {}, shutdown: function() {}, register: function(dev, ops) { tty.ttys[dev] = { input: [], output: [], ops: ops }; fs.registerdevice(dev, tty.stream_ops) }, stream_ops: { open: function(stream) { var tty = tty.ttys[stream.node.rdev]; if (!tty) { throw new fs.errnoerror(43) } stream.tty = tty; stream.seekable = false }, close: function(stream) { stream.tty.ops.flush(stream.tty) }, flush: function(stream) { stream.tty.ops.flush(stream.tty) }, read: function(stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.get_char) { throw new fs.errnoerror(60) } var bytesread = 0; for (var i = 0; i < length; i++) { var result; try { result = stream.tty.ops.get_char(stream.tty) } catch (e) { throw new fs.errnoerror(29) } if (result === undefined && bytesread === 0) { throw new fs.errnoerror(6) } if (result === null || result === undefined) break; bytesread++; buffer[offset + i] = result } if (bytesread) { stream.node.timestamp = date.now() } return bytesread }, write: function(stream, buffer, offset, length, pos) { if (!stream.tty || !stream.tty.ops.put_char) { throw new fs.errnoerror(60) } try { for (var i = 0; i < length; i++) { stream.tty.ops.put_char(stream.tty, buffer[offset + i]) } } catch (e) { throw new fs.errnoerror(29) } if (length) { stream.node.timestamp = date.now() } return i } }, default_tty_ops: { get_char: function(tty) { if (!tty.input.length) { var result = null; if (typeof window != "undefined" && typeof window.prompt == "function") { result = window.prompt("input: "); if (result !== null) { result += "\n" } } else if (typeof readline == "function") { result = readline(); if (result !== null) { result += "\n" } } if (!result) { return null } tty.input = intarrayfromstring(result, true) } return tty.input.shift() }, put_char: function(tty, val) { if (val === null || val === 10) { out(utf8arraytostring(tty.output, 0)); tty.output = [] } else { if (val != 0) tty.output.push(val) } }, flush: function(tty) { if (tty.output && tty.output.length > 0) { out(utf8arraytostring(tty.output, 0)); tty.output = [] } } }, default_tty1_ops: { put_char: function(tty, val) { if (val === null || val === 10) { err(utf8arraytostring(tty.output, 0)); tty.output = [] } else { if (val != 0) tty.output.push(val) } }, flush: function(tty) { if (tty.output && tty.output.length > 0) { err(utf8arraytostring(tty.output, 0)); tty.output = [] } } } }; function zeromemory(address, size) { growable_heap_u8().fill(0, address, address + size) } function alignmemory(size, alignment) { return math.ceil(size / alignment) * alignment } function mmapalloc(size) { size = alignmemory(size, 65536); var ptr = _memalign(65536, size); if (!ptr) return 0; zeromemory(ptr, size); return ptr } var memfs = { ops_table: null, mount: function(mount) { return memfs.createnode(null, "/", 16384 | 511, 0) }, createnode: function(parent, name, mode, dev) { if (fs.isblkdev(mode) || fs.isfifo(mode)) { throw new fs.errnoerror(63) } if (!memfs.ops_table) { memfs.ops_table = { dir: { node: { getattr: memfs.node_ops.getattr, setattr: memfs.node_ops.setattr, lookup: memfs.node_ops.lookup, mknod: memfs.node_ops.mknod, rename: memfs.node_ops.rename, unlink: memfs.node_ops.unlink, rmdir: memfs.node_ops.rmdir, readdir: memfs.node_ops.readdir, symlink: memfs.node_ops.symlink }, stream: { llseek: memfs.stream_ops.llseek } }, file: { node: { getattr: memfs.node_ops.getattr, setattr: memfs.node_ops.setattr }, stream: { llseek: memfs.stream_ops.llseek, read: memfs.stream_ops.read, write: memfs.stream_ops.write, allocate: memfs.stream_ops.allocate, mmap: memfs.stream_ops.mmap, msync: memfs.stream_ops.msync } }, link: { node: { getattr: memfs.node_ops.getattr, setattr: memfs.node_ops.setattr, readlink: memfs.node_ops.readlink }, stream: {} }, chrdev: { node: { getattr: memfs.node_ops.getattr, setattr: memfs.node_ops.setattr }, stream: fs.chrdev_stream_ops } } } var node = fs.createnode(parent, name, mode, dev); if (fs.isdir(node.mode)) { node.node_ops = memfs.ops_table.dir.node; node.stream_ops = memfs.ops_table.dir.stream; node.contents = {} } else if (fs.isfile(node.mode)) { node.node_ops = memfs.ops_table.file.node; node.stream_ops = memfs.ops_table.file.stream; node.usedbytes = 0; node.contents = null } else if (fs.islink(node.mode)) { node.node_ops = memfs.ops_table.link.node; node.stream_ops = memfs.ops_table.link.stream } else if (fs.ischrdev(node.mode)) { node.node_ops = memfs.ops_table.chrdev.node; node.stream_ops = memfs.ops_table.chrdev.stream } node.timestamp = date.now(); if (parent) { parent.contents[name] = node; parent.timestamp = node.timestamp } return node }, getfiledataastypedarray: function(node) { if (!node.contents) return new uint8array(0); if (node.contents.subarray) return node.contents.subarray(0, node.usedbytes); return new uint8array(node.contents) }, expandfilestorage: function(node, newcapacity) { var prevcapacity = node.contents ? node.contents.length : 0; if (prevcapacity >= newcapacity) return; var capacity_doubling_max = 1024 * 1024; newcapacity = math.max(newcapacity, prevcapacity * (prevcapacity < capacity_doubling_max ? 2 : 1.125) >>> 0); if (prevcapacity != 0) newcapacity = math.max(newcapacity, 256); var oldcontents = node.contents; node.contents = new uint8array(newcapacity); if (node.usedbytes > 0) node.contents.set(oldcontents.subarray(0, node.usedbytes), 0) }, resizefilestorage: function(node, newsize) { if (node.usedbytes == newsize) return; if (newsize == 0) { node.contents = null; node.usedbytes = 0 } else { var oldcontents = node.contents; node.contents = new uint8array(newsize); if (oldcontents) { node.contents.set(oldcontents.subarray(0, math.min(newsize, node.usedbytes))) } node.usedbytes = newsize } }, node_ops: { getattr: function(node) { var attr = {}; attr.dev = fs.ischrdev(node.mode) ? node.id : 1; attr.ino = node.id; attr.mode = node.mode; attr.nlink = 1; attr.uid = 0; attr.gid = 0; attr.rdev = node.rdev; if (fs.isdir(node.mode)) { attr.size = 4096 } else if (fs.isfile(node.mode)) { attr.size = node.usedbytes } else if (fs.islink(node.mode)) { attr.size = node.link.length } else { attr.size = 0 } attr.atime = new date(node.timestamp); attr.mtime = new date(node.timestamp); attr.ctime = new date(node.timestamp); attr.blksize = 4096; attr.blocks = math.ceil(attr.size / attr.blksize); return attr }, setattr: function(node, attr) { if (attr.mode !== undefined) { node.mode = attr.mode } if (attr.timestamp !== undefined) { node.timestamp = attr.timestamp } if (attr.size !== undefined) { memfs.resizefilestorage(node, attr.size) } }, lookup: function(parent, name) { throw fs.genericerrors[44] }, mknod: function(parent, name, mode, dev) { return memfs.createnode(parent, name, mode, dev) }, rename: function(old_node, new_dir, new_name) { if (fs.isdir(old_node.mode)) { var new_node; try { new_node = fs.lookupnode(new_dir, new_name) } catch (e) {} if (new_node) { for (var i in new_node.contents) { throw new fs.errnoerror(55) } } } delete old_node.parent.contents[old_node.name]; old_node.parent.timestamp = date.now(); old_node.name = new_name; new_dir.contents[new_name] = old_node; new_dir.timestamp = old_node.parent.timestamp; old_node.parent = new_dir }, unlink: function(parent, name) { delete parent.contents[name]; parent.timestamp = date.now() }, rmdir: function(parent, name) { var node = fs.lookupnode(parent, name); for (var i in node.contents) { throw new fs.errnoerror(55) } delete parent.contents[name]; parent.timestamp = date.now() }, readdir: function(node) { var entries = [".", ".."]; for (var key in node.contents) { if (!node.contents.hasownproperty(key)) { continue } entries.push(key) } return entries }, symlink: function(parent, newname, oldpath) { var node = memfs.createnode(parent, newname, 511 | 40960, 0); node.link = oldpath; return node }, readlink: function(node) { if (!fs.islink(node.mode)) { throw new fs.errnoerror(28) } return node.link } }, stream_ops: { read: function(stream, buffer, offset, length, position) { var contents = stream.node.contents; if (position >= stream.node.usedbytes) return 0; var size = math.min(stream.node.usedbytes - position, length); if (size > 8 && contents.subarray) { buffer.set(contents.subarray(position, position + size), offset) } else { for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i] } return size }, write: function(stream, buffer, offset, length, position, canown) { if (buffer.buffer === growable_heap_i8().buffer) { canown = false } if (!length) return 0; var node = stream.node; node.timestamp = date.now(); if (buffer.subarray && (!node.contents || node.contents.subarray)) { if (canown) { node.contents = buffer.subarray(offset, offset + length); node.usedbytes = length; return length } else if (node.usedbytes === 0 && position === 0) { node.contents = buffer.slice(offset, offset + length); node.usedbytes = length; return length } else if (position + length <= node.usedbytes) { node.contents.set(buffer.subarray(offset, offset + length), position); return length } } memfs.expandfilestorage(node, position + length); if (node.contents.subarray && buffer.subarray) { node.contents.set(buffer.subarray(offset, offset + length), position) } else { for (var i = 0; i < length; i++) { node.contents[position + i] = buffer[offset + i] } } node.usedbytes = math.max(node.usedbytes, position + length); return length }, llseek: function(stream, offset, whence) { var position = offset; if (whence === 1) { position += stream.position } else if (whence === 2) { if (fs.isfile(stream.node.mode)) { position += stream.node.usedbytes } } if (position < 0) { throw new fs.errnoerror(28) } return position }, allocate: function(stream, offset, length) { memfs.expandfilestorage(stream.node, offset + length); stream.node.usedbytes = math.max(stream.node.usedbytes, offset + length) }, mmap: function(stream, address, length, position, prot, flags) { if (address !== 0) { throw new fs.errnoerror(28) } if (!fs.isfile(stream.node.mode)) { throw new fs.errnoerror(43) } var ptr; var allocated; var contents = stream.node.contents; if (!(flags & 2) && contents.buffer === buffer) { allocated = false; ptr = contents.byteoffset } else { if (position > 0 || position + length < contents.length) { if (contents.subarray) { contents = contents.subarray(position, position + length) } else { contents = array.prototype.slice.call(contents, position, position + length) } } allocated = true; ptr = mmapalloc(length); if (!ptr) { throw new fs.errnoerror(48) } growable_heap_i8().set(contents, ptr) } return { ptr: ptr, allocated: allocated } }, msync: function(stream, buffer, offset, length, mmapflags) { if (!fs.isfile(stream.node.mode)) { throw new fs.errnoerror(43) } if (mmapflags & 2) { return 0 } var byteswritten = memfs.stream_ops.write(stream, buffer, 0, length, offset, false); return 0 } } }; function asyncload(url, onload, onerror, norundep) { var dep = !norundep ? getuniquerundependency("al " + url) : ""; readasync(url, function(arraybuffer) { assert(arraybuffer, 'loading data file "' + url + '" failed (no arraybuffer).'); onload(new uint8array(arraybuffer)); if (dep) removerundependency(dep) }, function(event) { if (onerror) { onerror() } else { throw 'loading data file "' + url + '" failed.' } }); if (dep) addrundependency(dep) } var fs = { root: null, mounts: [], devices: {}, streams: [], nextinode: 1, nametable: null, currentpath: "/", initialized: false, ignorepermissions: true, errnoerror: null, genericerrors: {}, filesystems: null, syncfsrequests: 0, lookuppath: function(path, opts) { path = path_fs.resolve(fs.cwd(), path); opts = opts || {}; if (!path) return { path: "", node: null }; var defaults = { follow_mount: true, recurse_count: 0 }; for (var key in defaults) { if (opts[key] === undefined) { opts[key] = defaults[key] } } if (opts.recurse_count > 8) { throw new fs.errnoerror(32) } var parts = path.normalizearray(path.split("/").filter(function(p) { return !!p }), false); var current = fs.root; var current_path = "/"; for (var i = 0; i < parts.length; i++) { var islast = i === parts.length - 1; if (islast && opts.parent) { break } current = fs.lookupnode(current, parts[i]); current_path = path.join2(current_path, parts[i]); if (fs.ismountpoint(current)) { if (!islast || islast && opts.follow_mount) { current = current.mounted.root } } if (!islast || opts.follow) { var count = 0; while (fs.islink(current.mode)) { var link = fs.readlink(current_path); current_path = path_fs.resolve(path.dirname(current_path), link); var lookup = fs.lookuppath(current_path, { recurse_count: opts.recurse_count }); current = lookup.node; if (count++ > 40) { throw new fs.errnoerror(32) } } } } return { path: current_path, node: current } }, getpath: function(node) { var path; while (true) { if (fs.isroot(node)) { var mount = node.mount.mountpoint; if (!path) return mount; return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path } path = path ? node.name + "/" + path : node.name; node = node.parent } }, hashname: function(parentid, name) { var hash = 0; for (var i = 0; i < name.length; i++) { hash = (hash << 5) - hash + name.charcodeat(i) | 0 } return (parentid + hash >>> 0) % fs.nametable.length }, hashaddnode: function(node) { var hash = fs.hashname(node.parent.id, node.name); node.name_next = fs.nametable[hash]; fs.nametable[hash] = node }, hashremovenode: function(node) { var hash = fs.hashname(node.parent.id, node.name); if (fs.nametable[hash] === node) { fs.nametable[hash] = node.name_next } else { var current = fs.nametable[hash]; while (current) { if (current.name_next === node) { current.name_next = node.name_next; break } current = current.name_next } } }, lookupnode: function(parent, name) { var errcode = fs.maylookup(parent); if (errcode) { throw new fs.errnoerror(errcode,parent) } var hash = fs.hashname(parent.id, name); for (var node = fs.nametable[hash]; node; node = node.name_next) { var nodename = node.name; if (node.parent.id === parent.id && nodename === name) { return node } } return fs.lookup(parent, name) }, createnode: function(parent, name, mode, rdev) { var node = new fs.fsnode(parent,name,mode,rdev); fs.hashaddnode(node); return node }, destroynode: function(node) { fs.hashremovenode(node) }, isroot: function(node) { return node === node.parent }, ismountpoint: function(node) { return !!node.mounted }, isfile: function(mode) { return (mode & 61440) === 32768 }, isdir: function(mode) { return (mode & 61440) === 16384 }, islink: function(mode) { return (mode & 61440) === 40960 }, ischrdev: function(mode) { return (mode & 61440) === 8192 }, isblkdev: function(mode) { return (mode & 61440) === 24576 }, isfifo: function(mode) { return (mode & 61440) === 4096 }, issocket: function(mode) { return (mode & 49152) === 49152 }, flagmodes: { "r": 0, "r+": 2, "w": 577, "w+": 578, "a": 1089, "a+": 1090 }, modestringtoflags: function(str) { var flags = fs.flagmodes[str]; if (typeof flags === "undefined") { throw new error("unknown file open mode: " + str) } return flags }, flagstopermissionstring: function(flag) { var perms = ["r", "w", "rw"][flag & 3]; if (flag & 512) { perms += "w" } return perms }, nodepermissions: function(node, perms) { if (fs.ignorepermissions) { return 0 } if (perms.includes("r") && !(node.mode & 292)) { return 2 } else if (perms.includes("w") && !(node.mode & 146)) { return 2 } else if (perms.includes("x") && !(node.mode & 73)) { return 2 } return 0 }, maylookup: function(dir) { var errcode = fs.nodepermissions(dir, "x"); if (errcode) return errcode; if (!dir.node_ops.lookup) return 2; return 0 }, maycreate: function(dir, name) { try { var node = fs.lookupnode(dir, name); return 20 } catch (e) {} return fs.nodepermissions(dir, "wx") }, maydelete: function(dir, name, isdir) { var node; try { node = fs.lookupnode(dir, name) } catch (e) { return e.errno } var errcode = fs.nodepermissions(dir, "wx"); if (errcode) { return errcode } if (isdir) { if (!fs.isdir(node.mode)) { return 54 } if (fs.isroot(node) || fs.getpath(node) === fs.cwd()) { return 10 } } else { if (fs.isdir(node.mode)) { return 31 } } return 0 }, mayopen: function(node, flags) { if (!node) { return 44 } if (fs.islink(node.mode)) { return 32 } else if (fs.isdir(node.mode)) { if (fs.flagstopermissionstring(flags) !== "r" || flags & 512) { return 31 } } return fs.nodepermissions(node, fs.flagstopermissionstring(flags)) }, max_open_fds: 4096, nextfd: function(fd_start, fd_end) { fd_start = fd_start || 0; fd_end = fd_end || fs.max_open_fds; for (var fd = fd_start; fd <= fd_end; fd++) { if (!fs.streams[fd]) { return fd } } throw new fs.errnoerror(33) }, getstream: function(fd) { return fs.streams[fd] }, createstream: function(stream, fd_start, fd_end) { if (!fs.fsstream) { fs.fsstream = function() {} ; fs.fsstream.prototype = { object: { get: function() { return this.node }, set: function(val) { this.node = val } }, isread: { get: function() { return (this.flags & 2097155) !== 1 } }, iswrite: { get: function() { return (this.flags & 2097155) !== 0 } }, isappend: { get: function() { return this.flags & 1024 } } } } var newstream = new fs.fsstream; for (var p in stream) { newstream[p] = stream[p] } stream = newstream; var fd = fs.nextfd(fd_start, fd_end); stream.fd = fd; fs.streams[fd] = stream; return stream }, closestream: function(fd) { fs.streams[fd] = null }, chrdev_stream_ops: { open: function(stream) { var device = fs.getdevice(stream.node.rdev); stream.stream_ops = device.stream_ops; if (stream.stream_ops.open) { stream.stream_ops.open(stream) } }, llseek: function() { throw new fs.errnoerror(70) } }, major: function(dev) { return dev >> 8 }, minor: function(dev) { return dev & 255 }, makedev: function(ma, mi) { return ma << 8 | mi }, registerdevice: function(dev, ops) { fs.devices[dev] = { stream_ops: ops } }, getdevice: function(dev) { return fs.devices[dev] }, getmounts: function(mount) { var mounts = []; var check = [mount]; while (check.length) { var m = check.pop(); mounts.push(m); check.push.apply(check, m.mounts) } return mounts }, syncfs: function(populate, callback) { if (typeof populate === "function") { callback = populate; populate = false } fs.syncfsrequests++; if (fs.syncfsrequests > 1) { err("warning: " + fs.syncfsrequests + " fs.syncfs operations in flight at once, probably just doing extra work") } var mounts = fs.getmounts(fs.root.mount); var completed = 0; function docallback(errcode) { fs.syncfsrequests--; return callback(errcode) } function done(errcode) { if (errcode) { if (!done.errored) { done.errored = true; return docallback(errcode) } return } if (++completed >= mounts.length) { docallback(null) } } mounts.foreach(function(mount) { if (!mount.type.syncfs) { return done(null) } mount.type.syncfs(mount, populate, done) }) }, mount: function(type, opts, mountpoint) { var root = mountpoint === "/"; var pseudo = !mountpoint; var node; if (root && fs.root) { throw new fs.errnoerror(10) } else if (!root && !pseudo) { var lookup = fs.lookuppath(mountpoint, { follow_mount: false }); mountpoint = lookup.path; node = lookup.node; if (fs.ismountpoint(node)) { throw new fs.errnoerror(10) } if (!fs.isdir(node.mode)) { throw new fs.errnoerror(54) } } var mount = { type: type, opts: opts, mountpoint: mountpoint, mounts: [] }; var mountroot = type.mount(mount); mountroot.mount = mount; mount.root = mountroot; if (root) { fs.root = mountroot } else if (node) { node.mounted = mount; if (node.mount) { node.mount.mounts.push(mount) } } return mountroot }, unmount: function(mountpoint) { var lookup = fs.lookuppath(mountpoint, { follow_mount: false }); if (!fs.ismountpoint(lookup.node)) { throw new fs.errnoerror(28) } var node = lookup.node; var mount = node.mounted; var mounts = fs.getmounts(mount); object.keys(fs.nametable).foreach(function(hash) { var current = fs.nametable[hash]; while (current) { var next = current.name_next; if (mounts.includes(current.mount)) { fs.destroynode(current) } current = next } }); node.mounted = null; var idx = node.mount.mounts.indexof(mount); node.mount.mounts.splice(idx, 1) }, lookup: function(parent, name) { return parent.node_ops.lookup(parent, name) }, mknod: function(path, mode, dev) { var lookup = fs.lookuppath(path, { parent: true }); var parent = lookup.node; var name = path.basename(path); if (!name || name === "." || name === "..") { throw new fs.errnoerror(28) } var errcode = fs.maycreate(parent, name); if (errcode) { throw new fs.errnoerror(errcode) } if (!parent.node_ops.mknod) { throw new fs.errnoerror(63) } return parent.node_ops.mknod(parent, name, mode, dev) }, create: function(path, mode) { mode = mode !== undefined ? mode : 438; mode &= 4095; mode |= 32768; return fs.mknod(path, mode, 0) }, mkdir: function(path, mode) { mode = mode !== undefined ? mode : 511; mode &= 511 | 512; mode |= 16384; return fs.mknod(path, mode, 0) }, mkdirtree: function(path, mode) { var dirs = path.split("/"); var d = ""; for (var i = 0; i < dirs.length; ++i) { if (!dirs[i]) continue; d += "/" + dirs[i]; try { fs.mkdir(d, mode) } catch (e) { if (e.errno != 20) throw e } } }, mkdev: function(path, mode, dev) { if (typeof dev === "undefined") { dev = mode; mode = 438 } mode |= 8192; return fs.mknod(path, mode, dev) }, symlink: function(oldpath, newpath) { if (!path_fs.resolve(oldpath)) { throw new fs.errnoerror(44) } var lookup = fs.lookuppath(newpath, { parent: true }); var parent = lookup.node; if (!parent) { throw new fs.errnoerror(44) } var newname = path.basename(newpath); var errcode = fs.maycreate(parent, newname); if (errcode) { throw new fs.errnoerror(errcode) } if (!parent.node_ops.symlink) { throw new fs.errnoerror(63) } return parent.node_ops.symlink(parent, newname, oldpath) }, rename: function(old_path, new_path) { var old_dirname = path.dirname(old_path); var new_dirname = path.dirname(new_path); var old_name = path.basename(old_path); var new_name = path.basename(new_path); var lookup, old_dir, new_dir; lookup = fs.lookuppath(old_path, { parent: true }); old_dir = lookup.node; lookup = fs.lookuppath(new_path, { parent: true }); new_dir = lookup.node; if (!old_dir || !new_dir) throw new fs.errnoerror(44); if (old_dir.mount !== new_dir.mount) { throw new fs.errnoerror(75) } var old_node = fs.lookupnode(old_dir, old_name); var relative = path_fs.relative(old_path, new_dirname); if (relative.charat(0) !== ".") { throw new fs.errnoerror(28) } relative = path_fs.relative(new_path, old_dirname); if (relative.charat(0) !== ".") { throw new fs.errnoerror(55) } var new_node; try { new_node = fs.lookupnode(new_dir, new_name) } catch (e) {} if (old_node === new_node) { return } var isdir = fs.isdir(old_node.mode); var errcode = fs.maydelete(old_dir, old_name, isdir); if (errcode) { throw new fs.errnoerror(errcode) } errcode = new_node ? fs.maydelete(new_dir, new_name, isdir) : fs.maycreate(new_dir, new_name); if (errcode) { throw new fs.errnoerror(errcode) } if (!old_dir.node_ops.rename) { throw new fs.errnoerror(63) } if (fs.ismountpoint(old_node) || new_node && fs.ismountpoint(new_node)) { throw new fs.errnoerror(10) } if (new_dir !== old_dir) { errcode = fs.nodepermissions(old_dir, "w"); if (errcode) { throw new fs.errnoerror(errcode) } } fs.hashremovenode(old_node); try { old_dir.node_ops.rename(old_node, new_dir, new_name) } catch (e) { throw e } finally { fs.hashaddnode(old_node) } }, rmdir: function(path) { var lookup = fs.lookuppath(path, { parent: true }); var parent = lookup.node; var name = path.basename(path); var node = fs.lookupnode(parent, name); var errcode = fs.maydelete(parent, name, true); if (errcode) { throw new fs.errnoerror(errcode) } if (!parent.node_ops.rmdir) { throw new fs.errnoerror(63) } if (fs.ismountpoint(node)) { throw new fs.errnoerror(10) } parent.node_ops.rmdir(parent, name); fs.destroynode(node) }, readdir: function(path) { var lookup = fs.lookuppath(path, { follow: true }); var node = lookup.node; if (!node.node_ops.readdir) { throw new fs.errnoerror(54) } return node.node_ops.readdir(node) }, unlink: function(path) { var lookup = fs.lookuppath(path, { parent: true }); var parent = lookup.node; var name = path.basename(path); var node = fs.lookupnode(parent, name); var errcode = fs.maydelete(parent, name, false); if (errcode) { throw new fs.errnoerror(errcode) } if (!parent.node_ops.unlink) { throw new fs.errnoerror(63) } if (fs.ismountpoint(node)) { throw new fs.errnoerror(10) } parent.node_ops.unlink(parent, name); fs.destroynode(node) }, readlink: function(path) { var lookup = fs.lookuppath(path); var link = lookup.node; if (!link) { throw new fs.errnoerror(44) } if (!link.node_ops.readlink) { throw new fs.errnoerror(28) } return path_fs.resolve(fs.getpath(link.parent), link.node_ops.readlink(link)) }, stat: function(path, dontfollow) { var lookup = fs.lookuppath(path, { follow: !dontfollow }); var node = lookup.node; if (!node) { throw new fs.errnoerror(44) } if (!node.node_ops.getattr) { throw new fs.errnoerror(63) } return node.node_ops.getattr(node) }, lstat: function(path) { return fs.stat(path, true) }, chmod: function(path, mode, dontfollow) { var node; if (typeof path === "string") { var lookup = fs.lookuppath(path, { follow: !dontfollow }); node = lookup.node } else { node = path } if (!node.node_ops.setattr) { throw new fs.errnoerror(63) } node.node_ops.setattr(node, { mode: mode & 4095 | node.mode & ~4095, timestamp: date.now() }) }, lchmod: function(path, mode) { fs.chmod(path, mode, true) }, fchmod: function(fd, mode) { var stream = fs.getstream(fd); if (!stream) { throw new fs.errnoerror(8) } fs.chmod(stream.node, mode) }, chown: function(path, uid, gid, dontfollow) { var node; if (typeof path === "string") { var lookup = fs.lookuppath(path, { follow: !dontfollow }); node = lookup.node } else { node = path } if (!node.node_ops.setattr) { throw new fs.errnoerror(63) } node.node_ops.setattr(node, { timestamp: date.now() }) }, lchown: function(path, uid, gid) { fs.chown(path, uid, gid, true) }, fchown: function(fd, uid, gid) { var stream = fs.getstream(fd); if (!stream) { throw new fs.errnoerror(8) } fs.chown(stream.node, uid, gid) }, truncate: function(path, len) { if (len < 0) { throw new fs.errnoerror(28) } var node; if (typeof path === "string") { var lookup = fs.lookuppath(path, { follow: true }); node = lookup.node } else { node = path } if (!node.node_ops.setattr) { throw new fs.errnoerror(63) } if (fs.isdir(node.mode)) { throw new fs.errnoerror(31) } if (!fs.isfile(node.mode)) { throw new fs.errnoerror(28) } var errcode = fs.nodepermissions(node, "w"); if (errcode) { throw new fs.errnoerror(errcode) } node.node_ops.setattr(node, { size: len, timestamp: date.now() }) }, ftruncate: function(fd, len) { var stream = fs.getstream(fd); if (!stream) { throw new fs.errnoerror(8) } if ((stream.flags & 2097155) === 0) { throw new fs.errnoerror(28) } fs.truncate(stream.node, len) }, utime: function(path, atime, mtime) { var lookup = fs.lookuppath(path, { follow: true }); var node = lookup.node; node.node_ops.setattr(node, { timestamp: math.max(atime, mtime) }) }, open: function(path, flags, mode, fd_start, fd_end) { if (path === "") { throw new fs.errnoerror(44) } flags = typeof flags === "string" ? fs.modestringtoflags(flags) : flags; mode = typeof mode === "undefined" ? 438 : mode; if (flags & 64) { mode = mode & 4095 | 32768 } else { mode = 0 } var node; if (typeof path === "object") { node = path } else { path = path.normalize(path); try { var lookup = fs.lookuppath(path, { follow: !(flags & 131072) }); node = lookup.node } catch (e) {} } var created = false; if (flags & 64) { if (node) { if (flags & 128) { throw new fs.errnoerror(20) } } else { node = fs.mknod(path, mode, 0); created = true } } if (!node) { throw new fs.errnoerror(44) } if (fs.ischrdev(node.mode)) { flags &= ~512 } if (flags & 65536 && !fs.isdir(node.mode)) { throw new fs.errnoerror(54) } if (!created) { var errcode = fs.mayopen(node, flags); if (errcode) { throw new fs.errnoerror(errcode) } } if (flags & 512) { fs.truncate(node, 0) } flags &= ~(128 | 512 | 131072); var stream = fs.createstream({ node: node, path: fs.getpath(node), flags: flags, seekable: true, position: 0, stream_ops: node.stream_ops, ungotten: [], error: false }, fd_start, fd_end); if (stream.stream_ops.open) { stream.stream_ops.open(stream) } if (module["logreadfiles"] && !(flags & 1)) { if (!fs.readfiles) fs.readfiles = {}; if (!(path in fs.readfiles)) { fs.readfiles[path] = 1 } } return stream }, close: function(stream) { if (fs.isclosed(stream)) { throw new fs.errnoerror(8) } if (stream.getdents) stream.getdents = null; try { if (stream.stream_ops.close) { stream.stream_ops.close(stream) } } catch (e) { throw e } finally { fs.closestream(stream.fd) } stream.fd = null }, isclosed: function(stream) { return stream.fd === null }, llseek: function(stream, offset, whence) { if (fs.isclosed(stream)) { throw new fs.errnoerror(8) } if (!stream.seekable || !stream.stream_ops.llseek) { throw new fs.errnoerror(70) } if (whence != 0 && whence != 1 && whence != 2) { throw new fs.errnoerror(28) } stream.position = stream.stream_ops.llseek(stream, offset, whence); stream.ungotten = []; return stream.position }, read: function(stream, buffer, offset, length, position) { if (length < 0 || position < 0) { throw new fs.errnoerror(28) } if (fs.isclosed(stream)) { throw new fs.errnoerror(8) } if ((stream.flags & 2097155) === 1) { throw new fs.errnoerror(8) } if (fs.isdir(stream.node.mode)) { throw new fs.errnoerror(31) } if (!stream.stream_ops.read) { throw new fs.errnoerror(28) } var seeking = typeof position !== "undefined"; if (!seeking) { position = stream.position } else if (!stream.seekable) { throw new fs.errnoerror(70) } var bytesread = stream.stream_ops.read(stream, buffer, offset, length, position); if (!seeking) stream.position += bytesread; return bytesread }, write: function(stream, buffer, offset, length, position, canown) { if (length < 0 || position < 0) { throw new fs.errnoerror(28) } if (fs.isclosed(stream)) { throw new fs.errnoerror(8) } if ((stream.flags & 2097155) === 0) { throw new fs.errnoerror(8) } if (fs.isdir(stream.node.mode)) { throw new fs.errnoerror(31) } if (!stream.stream_ops.write) { throw new fs.errnoerror(28) } if (stream.seekable && stream.flags & 1024) { fs.llseek(stream, 0, 2) } var seeking = typeof position !== "undefined"; if (!seeking) { position = stream.position } else if (!stream.seekable) { throw new fs.errnoerror(70) } var byteswritten = stream.stream_ops.write(stream, buffer, offset, length, position, canown); if (!seeking) stream.position += byteswritten; return byteswritten }, allocate: function(stream, offset, length) { if (fs.isclosed(stream)) { throw new fs.errnoerror(8) } if (offset < 0 || length <= 0) { throw new fs.errnoerror(28) } if ((stream.flags & 2097155) === 0) { throw new fs.errnoerror(8) } if (!fs.isfile(stream.node.mode) && !fs.isdir(stream.node.mode)) { throw new fs.errnoerror(43) } if (!stream.stream_ops.allocate) { throw new fs.errnoerror(138) } stream.stream_ops.allocate(stream, offset, length) }, mmap: function(stream, address, length, position, prot, flags) { if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { throw new fs.errnoerror(2) } if ((stream.flags & 2097155) === 1) { throw new fs.errnoerror(2) } if (!stream.stream_ops.mmap) { throw new fs.errnoerror(43) } return stream.stream_ops.mmap(stream, address, length, position, prot, flags) }, msync: function(stream, buffer, offset, length, mmapflags) { if (!stream || !stream.stream_ops.msync) { return 0 } return stream.stream_ops.msync(stream, buffer, offset, length, mmapflags) }, munmap: function(stream) { return 0 }, ioctl: function(stream, cmd, arg) { if (!stream.stream_ops.ioctl) { throw new fs.errnoerror(59) } return stream.stream_ops.ioctl(stream, cmd, arg) }, readfile: function(path, opts) { opts = opts || {}; opts.flags = opts.flags || 0; opts.encoding = opts.encoding || "binary"; if (opts.encoding !== "utf8" && opts.encoding !== "binary") { throw new error('invalid encoding type "' + opts.encoding + '"') } var ret; var stream = fs.open(path, opts.flags); var stat = fs.stat(path); var length = stat.size; var buf = new uint8array(length); fs.read(stream, buf, 0, length, 0); if (opts.encoding === "utf8") { ret = utf8arraytostring(buf, 0) } else if (opts.encoding === "binary") { ret = buf } fs.close(stream); return ret }, writefile: function(path, data, opts) { opts = opts || {}; opts.flags = opts.flags || 577; var stream = fs.open(path, opts.flags, opts.mode); if (typeof data === "string") { var buf = new uint8array(lengthbytesutf8(data) + 1); var actualnumbytes = stringtoutf8array(data, buf, 0, buf.length); fs.write(stream, buf, 0, actualnumbytes, undefined, opts.canown) } else if (arraybuffer.isview(data)) { fs.write(stream, data, 0, data.bytelength, undefined, opts.canown) } else { throw new error("unsupported data type") } fs.close(stream) }, cwd: function() { return fs.currentpath }, chdir: function(path) { var lookup = fs.lookuppath(path, { follow: true }); if (lookup.node === null) { throw new fs.errnoerror(44) } if (!fs.isdir(lookup.node.mode)) { throw new fs.errnoerror(54) } var errcode = fs.nodepermissions(lookup.node, "x"); if (errcode) { throw new fs.errnoerror(errcode) } fs.currentpath = lookup.path }, createdefaultdirectories: function() { fs.mkdir("/tmp"); fs.mkdir("/home"); fs.mkdir("/home/web_user") }, createdefaultdevices: function() { fs.mkdir("/dev"); fs.registerdevice(fs.makedev(1, 3), { read: function() { return 0 }, write: function(stream, buffer, offset, length, pos) { return length } }); fs.mkdev("/dev/null", fs.makedev(1, 3)); tty.register(fs.makedev(5, 0), tty.default_tty_ops); tty.register(fs.makedev(6, 0), tty.default_tty1_ops); fs.mkdev("/dev/tty", fs.makedev(5, 0)); fs.mkdev("/dev/tty1", fs.makedev(6, 0)); var random_device = getrandomdevice(); fs.createdevice("/dev", "random", random_device); fs.createdevice("/dev", "urandom", random_device); fs.mkdir("/dev/shm"); fs.mkdir("/dev/shm/tmp") }, createspecialdirectories: function() { fs.mkdir("/proc"); var proc_self = fs.mkdir("/proc/self"); fs.mkdir("/proc/self/fd"); fs.mount({ mount: function() { var node = fs.createnode(proc_self, "fd", 16384 | 511, 73); node.node_ops = { lookup: function(parent, name) { var fd = +name; var stream = fs.getstream(fd); if (!stream) throw new fs.errnoerror(8); var ret = { parent: null, mount: { mountpoint: "fake" }, node_ops: { readlink: function() { return stream.path } } }; ret.parent = ret; return ret } }; return node } }, {}, "/proc/self/fd") }, createstandardstreams: function() { if (module["stdin"]) { fs.createdevice("/dev", "stdin", module["stdin"]) } else { fs.symlink("/dev/tty", "/dev/stdin") } if (module["stdout"]) { fs.createdevice("/dev", "stdout", null, module["stdout"]) } else { fs.symlink("/dev/tty", "/dev/stdout") } if (module["stderr"]) { fs.createdevice("/dev", "stderr", null, module["stderr"]) } else { fs.symlink("/dev/tty1", "/dev/stderr") } var stdin = fs.open("/dev/stdin", 0); var stdout = fs.open("/dev/stdout", 1); var stderr = fs.open("/dev/stderr", 1) }, ensureerrnoerror: function() { if (fs.errnoerror) return; fs.errnoerror = function errnoerror(errno, node) { this.node = node; this.seterrno = function(errno) { this.errno = errno } ; this.seterrno(errno); this.message = "fs error" } ; fs.errnoerror.prototype = new error; fs.errnoerror.prototype.constructor = fs.errnoerror; [44].foreach(function(code) { fs.genericerrors[code] = new fs.errnoerror(code); fs.genericerrors[code].stack = "" }) }, staticinit: function() { fs.ensureerrnoerror(); fs.nametable = new array(4096); fs.mount(memfs, {}, "/"); fs.createdefaultdirectories(); fs.createdefaultdevices(); fs.createspecialdirectories(); fs.filesystems = { "memfs": memfs } }, init: function(input, output, error) { fs.init.initialized = true; fs.ensureerrnoerror(); module["stdin"] = input || module["stdin"]; module["stdout"] = output || module["stdout"]; module["stderr"] = error || module["stderr"]; fs.createstandardstreams() }, quit: function() { fs.init.initialized = false; var fflush = module["_fflush"]; if (fflush) fflush(0); for (var i = 0; i < fs.streams.length; i++) { var stream = fs.streams[i]; if (!stream) { continue } fs.close(stream) } }, getmode: function(canread, canwrite) { var mode = 0; if (canread) mode |= 292 | 73; if (canwrite) mode |= 146; return mode }, findobject: function(path, dontresolvelastlink) { var ret = fs.analyzepath(path, dontresolvelastlink); if (ret.exists) { return ret.object } else { return null } }, analyzepath: function(path, dontresolvelastlink) { try { var lookup = fs.lookuppath(path, { follow: !dontresolvelastlink }); path = lookup.path } catch (e) {} var ret = { isroot: false, exists: false, error: 0, name: null, path: null, object: null, parentexists: false, parentpath: null, parentobject: null }; try { var lookup = fs.lookuppath(path, { parent: true }); ret.parentexists = true; ret.parentpath = lookup.path; ret.parentobject = lookup.node; ret.name = path.basename(path); lookup = fs.lookuppath(path, { follow: !dontresolvelastlink }); ret.exists = true; ret.path = lookup.path; ret.object = lookup.node; ret.name = lookup.node.name; ret.isroot = lookup.path === "/" } catch (e) { ret.error = e.errno } return ret }, createpath: function(parent, path, canread, canwrite) { parent = typeof parent === "string" ? parent : fs.getpath(parent); var parts = path.split("/").reverse(); while (parts.length) { var part = parts.pop(); if (!part) continue; var current = path.join2(parent, part); try { fs.mkdir(current) } catch (e) {} parent = current } return current }, createfile: function(parent, name, properties, canread, canwrite) { var path = path.join2(typeof parent === "string" ? parent : fs.getpath(parent), name); var mode = fs.getmode(canread, canwrite); return fs.create(path, mode) }, createdatafile: function(parent, name, data, canread, canwrite, canown) { var path = name ? path.join2(typeof parent === "string" ? parent : fs.getpath(parent), name) : parent; var mode = fs.getmode(canread, canwrite); var node = fs.create(path, mode); if (data) { if (typeof data === "string") { var arr = new array(data.length); for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charcodeat(i); data = arr } fs.chmod(node, mode | 146); var stream = fs.open(node, 577); fs.write(stream, data, 0, data.length, 0, canown); fs.close(stream); fs.chmod(node, mode) } return node }, createdevice: function(parent, name, input, output) { var path = path.join2(typeof parent === "string" ? parent : fs.getpath(parent), name); var mode = fs.getmode(!!input, !!output); if (!fs.createdevice.major) fs.createdevice.major = 64; var dev = fs.makedev(fs.createdevice.major++, 0); fs.registerdevice(dev, { open: function(stream) { stream.seekable = false }, close: function(stream) { if (output && output.buffer && output.buffer.length) { output(10) } }, read: function(stream, buffer, offset, length, pos) { var bytesread = 0; for (var i = 0; i < length; i++) { var result; try { result = input() } catch (e) { throw new fs.errnoerror(29) } if (result === undefined && bytesread === 0) { throw new fs.errnoerror(6) } if (result === null || result === undefined) break; bytesread++; buffer[offset + i] = result } if (bytesread) { stream.node.timestamp = date.now() } return bytesread }, write: function(stream, buffer, offset, length, pos) { for (var i = 0; i < length; i++) { try { output(buffer[offset + i]) } catch (e) { throw new fs.errnoerror(29) } } if (length) { stream.node.timestamp = date.now() } return i } }); return fs.mkdev(path, mode, dev) }, forceloadfile: function(obj) { if (obj.isdevice || obj.isfolder || obj.link || obj.contents) return true; if (typeof xmlhttprequest !== "undefined") { throw new error("lazy loading should have been performed (contents set) in createlazyfile, but it was not. lazy loading only works in web workers. use --embed-file or --preload-file in emcc on the main thread.") } else if (read_) { try { obj.contents = intarrayfromstring(read_(obj.url), true); obj.usedbytes = obj.contents.length } catch (e) { throw new fs.errnoerror(29) } } else { throw new error("cannot load without read() or xmlhttprequest.") } }, createlazyfile: function(parent, name, url, canread, canwrite) { function lazyuint8array() { this.lengthknown = false; this.chunks = [] } lazyuint8array.prototype.get = function lazyuint8array_get(idx) { if (idx > this.length - 1 || idx < 0) { return undefined } var chunkoffset = idx % this.chunksize; var chunknum = idx / this.chunksize | 0; return this.getter(chunknum)[chunkoffset] } ; lazyuint8array.prototype.setdatagetter = function lazyuint8array_setdatagetter(getter) { this.getter = getter } ; lazyuint8array.prototype.cachelength = function lazyuint8array_cachelength() { var xhr = new xmlhttprequest; xhr.open("head", url, false); xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new error("couldn't load " + url + ". status: " + xhr.status); var datalength = number(xhr.getresponseheader("content-length")); var header; var hasbyteserving = (header = xhr.getresponseheader("accept-ranges")) && header === "bytes"; var usesgzip = (header = xhr.getresponseheader("content-encoding")) && header === "gzip"; var chunksize = 1024 * 1024; if (!hasbyteserving) chunksize = datalength; var doxhr = function(from, to) { if (from > to) throw new error("invalid range (" + from + ", " + to + ") or no bytes requested!"); if (to > datalength - 1) throw new error("only " + datalength + " bytes available! programmer error!"); var xhr = new xmlhttprequest; xhr.open("get", url, false); if (datalength !== chunksize) xhr.setrequestheader("range", "bytes=" + from + "-" + to); if (typeof uint8array != "undefined") xhr.responsetype = "arraybuffer"; if (xhr.overridemimetype) { xhr.overridemimetype("text/plain; charset=x-user-defined") } xhr.send(null); if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new error("couldn't load " + url + ". status: " + xhr.status); if (xhr.response !== undefined) { return new uint8array(xhr.response || []) } else { return intarrayfromstring(xhr.responsetext || "", true) } }; var lazyarray = this; lazyarray.setdatagetter(function(chunknum) { var start = chunknum * chunksize; var end = (chunknum + 1) * chunksize - 1; end = math.min(end, datalength - 1); if (typeof lazyarray.chunks[chunknum] === "undefined") { lazyarray.chunks[chunknum] = doxhr(start, end) } if (typeof lazyarray.chunks[chunknum] === "undefined") throw new error("doxhr failed!"); return lazyarray.chunks[chunknum] }); if (usesgzip || !datalength) { chunksize = datalength = 1; datalength = this.getter(0).length; chunksize = datalength; out("lazyfiles on gzip forces download of the whole file when length is accessed") } this._length = datalength; this._chunksize = chunksize; this.lengthknown = true } ; if (typeof xmlhttprequest !== "undefined") { if (!environment_is_worker) throw "cannot do synchronous binary xhrs outside webworkers in modern browsers. use --embed-file or --preload-file in emcc"; var lazyarray = new lazyuint8array; object.defineproperties(lazyarray, { length: { get: function() { if (!this.lengthknown) { this.cachelength() } return this._length } }, chunksize: { get: function() { if (!this.lengthknown) { this.cachelength() } return this._chunksize } } }); var properties = { isdevice: false, contents: lazyarray } } else { var properties = { isdevice: false, url: url } } var node = fs.createfile(parent, name, properties, canread, canwrite); if (properties.contents) { node.contents = properties.contents } else if (properties.url) { node.contents = null; node.url = properties.url } object.defineproperties(node, { usedbytes: { get: function() { return this.contents.length } } }); var stream_ops = {}; var keys = object.keys(node.stream_ops); keys.foreach(function(key) { var fn = node.stream_ops[key]; stream_ops[key] = function forceloadlazyfile() { fs.forceloadfile(node); return fn.apply(null, arguments) } }); stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { fs.forceloadfile(node); var contents = stream.node.contents; if (position >= contents.length) return 0; var size = math.min(contents.length - position, length); if (contents.slice) { for (var i = 0; i < size; i++) { buffer[offset + i] = contents[position + i] } } else { for (var i = 0; i < size; i++) { buffer[offset + i] = contents.get(position + i) } } return size } ; node.stream_ops = stream_ops; return node }, createpreloadedfile: function(parent, name, url, canread, canwrite, onload, onerror, dontcreatefile, canown, prefinish) { browser.init(); var fullname = name ? path_fs.resolve(path.join2(parent, name)) : parent; var dep = getuniquerundependency("cp " + fullname); function processdata(bytearray) { function finish(bytearray) { if (prefinish) prefinish(); if (!dontcreatefile) { fs.createdatafile(parent, name, bytearray, canread, canwrite, canown) } if (onload) onload(); removerundependency(dep) } var handled = false; module["preloadplugins"].foreach(function(plugin) { if (handled) return; if (plugin["canhandle"](fullname)) { plugin["handle"](bytearray, fullname, finish, function() { if (onerror) onerror(); removerundependency(dep) }); handled = true } }); if (!handled) finish(bytearray) } addrundependency(dep); if (typeof url == "string") { asyncload(url, function(bytearray) { processdata(bytearray) }, onerror) } else { processdata(url) } }, indexeddb: function() { return window.indexeddb || window.mozindexeddb || window.webkitindexeddb || window.msindexeddb }, db_name: function() { return "em_fs_" + window.location.pathname }, db_version: 20, db_store_name: "file_data", savefilestodb: function(paths, onload, onerror) { onload = onload || function() {} ; onerror = onerror || function() {} ; var indexeddb = fs.indexeddb(); try { var openrequest = indexeddb.open(fs.db_name(), fs.db_version) } catch (e) { return onerror(e) } openrequest.onupgradeneeded = function openrequest_onupgradeneeded() { out("creating db"); var db = openrequest.result; db.createobjectstore(fs.db_store_name) } ; openrequest.onsuccess = function openrequest_onsuccess() { var db = openrequest.result; var transaction = db.transaction([fs.db_store_name], "readwrite"); var files = transaction.objectstore(fs.db_store_name); var ok = 0 , fail = 0 , total = paths.length; function finish() { if (fail == 0) onload(); else onerror() } paths.foreach(function(path) { var putrequest = files.put(fs.analyzepath(path).object.contents, path); putrequest.onsuccess = function putrequest_onsuccess() { ok++; if (ok + fail == total) finish() } ; putrequest.onerror = function putrequest_onerror() { fail++; if (ok + fail == total) finish() } }); transaction.onerror = onerror } ; openrequest.onerror = onerror }, loadfilesfromdb: function(paths, onload, onerror) { onload = onload || function() {} ; onerror = onerror || function() {} ; var indexeddb = fs.indexeddb(); try { var openrequest = indexeddb.open(fs.db_name(), fs.db_version) } catch (e) { return onerror(e) } openrequest.onupgradeneeded = onerror; openrequest.onsuccess = function openrequest_onsuccess() { var db = openrequest.result; try { var transaction = db.transaction([fs.db_store_name], "readonly") } catch (e) { onerror(e); return } var files = transaction.objectstore(fs.db_store_name); var ok = 0 , fail = 0 , total = paths.length; function finish() { if (fail == 0) onload(); else onerror() } paths.foreach(function(path) { var getrequest = files.get(path); getrequest.onsuccess = function getrequest_onsuccess() { if (fs.analyzepath(path).exists) { fs.unlink(path) } fs.createdatafile(path.dirname(path), path.basename(path), getrequest.result, true, true, true); ok++; if (ok + fail == total) finish() } ; getrequest.onerror = function getrequest_onerror() { fail++; if (ok + fail == total) finish() } }); transaction.onerror = onerror } ; openrequest.onerror = onerror } }; var syscalls = { mappings: {}, default_pollmask: 5, umask: 511, calculateat: function(dirfd, path, allowempty) { if (path[0] === "/") { return path } var dir; if (dirfd === -100) { dir = fs.cwd() } else { var dirstream = fs.getstream(dirfd); if (!dirstream) throw new fs.errnoerror(8); dir = dirstream.path } if (path.length == 0) { if (!allowempty) { throw new fs.errnoerror(44) } return dir } return path.join2(dir, path) }, dostat: function(func, path, buf) { try { var stat = func(path) } catch (e) { if (e && e.node && path.normalize(path) !== path.normalize(fs.getpath(e.node))) { return -54 } throw e } growable_heap_i32()[buf >> 2] = stat.dev; growable_heap_i32()[buf + 4 >> 2] = 0; growable_heap_i32()[buf + 8 >> 2] = stat.ino; growable_heap_i32()[buf + 12 >> 2] = stat.mode; growable_heap_i32()[buf + 16 >> 2] = stat.nlink; growable_heap_i32()[buf + 20 >> 2] = stat.uid; growable_heap_i32()[buf + 24 >> 2] = stat.gid; growable_heap_i32()[buf + 28 >> 2] = stat.rdev; growable_heap_i32()[buf + 32 >> 2] = 0; tempi64 = [stat.size >>> 0, (tempdouble = stat.size, +math.abs(tempdouble) >= 1 ? tempdouble > 0 ? (math.min(+math.floor(tempdouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+math.ceil((tempdouble - +(~~tempdouble >>> 0)) / 4294967296) >>> 0 : 0)], growable_heap_i32()[buf + 40 >> 2] = tempi64[0], growable_heap_i32()[buf + 44 >> 2] = tempi64[1]; growable_heap_i32()[buf + 48 >> 2] = 4096; growable_heap_i32()[buf + 52 >> 2] = stat.blocks; growable_heap_i32()[buf + 56 >> 2] = stat.atime.gettime() / 1e3 | 0; growable_heap_i32()[buf + 60 >> 2] = 0; growable_heap_i32()[buf + 64 >> 2] = stat.mtime.gettime() / 1e3 | 0; growable_heap_i32()[buf + 68 >> 2] = 0; growable_heap_i32()[buf + 72 >> 2] = stat.ctime.gettime() / 1e3 | 0; growable_heap_i32()[buf + 76 >> 2] = 0; tempi64 = [stat.ino >>> 0, (tempdouble = stat.ino, +math.abs(tempdouble) >= 1 ? tempdouble > 0 ? (math.min(+math.floor(tempdouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+math.ceil((tempdouble - +(~~tempdouble >>> 0)) / 4294967296) >>> 0 : 0)], growable_heap_i32()[buf + 80 >> 2] = tempi64[0], growable_heap_i32()[buf + 84 >> 2] = tempi64[1]; return 0 }, domsync: function(addr, stream, len, flags, offset) { var buffer = growable_heap_u8().slice(addr, addr + len); fs.msync(stream, buffer, offset, len, flags) }, domkdir: function(path, mode) { path = path.normalize(path); if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1); fs.mkdir(path, mode, 0); return 0 }, domknod: function(path, mode, dev) { switch (mode & 61440) { case 32768: case 8192: case 24576: case 4096: case 49152: break; default: return -28 } fs.mknod(path, mode, dev); return 0 }, doreadlink: function(path, buf, bufsize) { if (bufsize <= 0) return -28; var ret = fs.readlink(path); var len = math.min(bufsize, lengthbytesutf8(ret)); var endchar = growable_heap_i8()[buf + len]; stringtoutf8(ret, buf, bufsize + 1); growable_heap_i8()[buf + len] = endchar; return len }, doaccess: function(path, amode) { if (amode & ~7) { return -28 } var node; var lookup = fs.lookuppath(path, { follow: true }); node = lookup.node; if (!node) { return -44 } var perms = ""; if (amode & 4) perms += "r"; if (amode & 2) perms += "w"; if (amode & 1) perms += "x"; if (perms && fs.nodepermissions(node, perms)) { return -2 } return 0 }, dodup: function(path, flags, suggestfd) { var suggest = fs.getstream(suggestfd); if (suggest) fs.close(suggest); return fs.open(path, flags, 0, suggestfd, suggestfd).fd }, doreadv: function(stream, iov, iovcnt, offset) { var ret = 0; for (var i = 0; i < iovcnt; i++) { var ptr = growable_heap_i32()[iov + i * 8 >> 2]; var len = growable_heap_i32()[iov + (i * 8 + 4) >> 2]; var curr = fs.read(stream, growable_heap_i8(), ptr, len, offset); if (curr < 0) return -1; ret += curr; if (curr < len) break } return ret }, dowritev: function(stream, iov, iovcnt, offset) { var ret = 0; for (var i = 0; i < iovcnt; i++) { var ptr = growable_heap_i32()[iov + i * 8 >> 2]; var len = growable_heap_i32()[iov + (i * 8 + 4) >> 2]; var curr = fs.write(stream, growable_heap_i8(), ptr, len, offset); if (curr < 0) return -1; ret += curr } return ret }, varargs: undefined, get: function() { syscalls.varargs += 4; var ret = growable_heap_i32()[syscalls.varargs - 4 >> 2]; return ret }, getstr: function(ptr) { var ret = utf8tostring(ptr); return ret }, getstreamfromfd: function(fd) { var stream = fs.getstream(fd); if (!stream) throw new fs.errnoerror(8); return stream }, get64: function(low, high) { return low } }; function ___sys_fcntl64(fd, cmd, varargs) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(10, 1, fd, cmd, varargs); syscalls.varargs = varargs; try { var stream = syscalls.getstreamfromfd(fd); switch (cmd) { case 0: { var arg = syscalls.get(); if (arg < 0) { return -28 } var newstream; newstream = fs.open(stream.path, stream.flags, 0, arg); return newstream.fd } case 1: case 2: return 0; case 3: return stream.flags; case 4: { var arg = syscalls.get(); stream.flags |= arg; return 0 } case 12: { var arg = syscalls.get(); var offset = 0; growable_heap_i16()[arg + offset >> 1] = 2; return 0 } case 13: case 14: return 0; case 16: case 8: return -28; case 9: seterrno(28); return -1; default: { return -28 } } } catch (e) { if (typeof fs === "undefined" || !(e instanceof fs.errnoerror)) abort(e); return -e.errno } } function ___sys_ioctl(fd, op, varargs) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(11, 1, fd, op, varargs); syscalls.varargs = varargs; try { var stream = syscalls.getstreamfromfd(fd); switch (op) { case 21509: case 21505: { if (!stream.tty) return -59; return 0 } case 21510: case 21511: case 21512: case 21506: case 21507: case 21508: { if (!stream.tty) return -59; return 0 } case 21519: { if (!stream.tty) return -59; var argp = syscalls.get(); growable_heap_i32()[argp >> 2] = 0; return 0 } case 21520: { if (!stream.tty) return -59; return -28 } case 21531: { var argp = syscalls.get(); return fs.ioctl(stream, op, argp) } case 21523: { if (!stream.tty) return -59; return 0 } case 21524: { if (!stream.tty) return -59; return 0 } default: abort("bad ioctl syscall " + op) } } catch (e) { if (typeof fs === "undefined" || !(e instanceof fs.errnoerror)) abort(e); return -e.errno } } function ___sys_open(path, flags, varargs) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(12, 1, path, flags, varargs); syscalls.varargs = varargs; try { var pathname = syscalls.getstr(path); var mode = varargs ? syscalls.get() : 0; var stream = fs.open(pathname, flags, mode); return stream.fd } catch (e) { if (typeof fs === "undefined" || !(e instanceof fs.errnoerror)) abort(e); return -e.errno } } function __embind_register_bigint(primitivetype, name, size, minrange, maxrange) {} function getshiftfromsize(size) { switch (size) { case 1: return 0; case 2: return 1; case 4: return 2; case 8: return 3; default: throw new typeerror("unknown type size: " + size) } } function embind_init_charcodes() { var codes = new array(256); for (var i = 0; i < 256; ++i) { codes[i] = string.fromcharcode(i) } embind_charcodes = codes } var embind_charcodes = undefined; function readlatin1string(ptr) { var ret = ""; var c = ptr; while (growable_heap_u8()[c]) { ret += embind_charcodes[growable_heap_u8()[c++]] } return ret } var awaitingdependencies = {}; var registeredtypes = {}; var typedependencies = {}; var char_0 = 48; var char_9 = 57; function makelegalfunctionname(name) { if (undefined === name) { return "_unknown" } name = name.replace(/[^a-za-z0-9_]/g, "$"); var f = name.charcodeat(0); if (f >= char_0 && f <= char_9) { return "_" + name } else { return name } } function createnamedfunction(name, body) { name = makelegalfunctionname(name); return new function("body","return function " + name + "() {\n" + ' "use strict";' + " return body.apply(this, arguments);\n" + "};\n")(body) } function extenderror(baseerrortype, errorname) { var errorclass = createnamedfunction(errorname, function(message) { this.name = errorname; this.message = message; var stack = new error(message).stack; if (stack !== undefined) { this.stack = this.tostring() + "\n" + stack.replace(/^error(:[^\n]*)?\n/, "") } }); errorclass.prototype = object.create(baseerrortype.prototype); errorclass.prototype.constructor = errorclass; errorclass.prototype.tostring = function() { if (this.message === undefined) { return this.name } else { return this.name + ": " + this.message } } ; return errorclass } var bindingerror = undefined; function throwbindingerror(message) { throw new bindingerror(message) } var internalerror = undefined; function registertype(rawtype, registeredinstance, options) { options = options || {}; if (!("argpackadvance"in registeredinstance)) { throw new typeerror("registertype registeredinstance requires argpackadvance") } var name = registeredinstance.name; if (!rawtype) { throwbindingerror('type "' + name + '" must have a positive integer typeid pointer') } if (registeredtypes.hasownproperty(rawtype)) { if (options.ignoreduplicateregistrations) { return } else { throwbindingerror("cannot register type '" + name + "' twice") } } registeredtypes[rawtype] = registeredinstance; delete typedependencies[rawtype]; if (awaitingdependencies.hasownproperty(rawtype)) { var callbacks = awaitingdependencies[rawtype]; delete awaitingdependencies[rawtype]; callbacks.foreach(function(cb) { cb() }) } } function __embind_register_bool(rawtype, name, size, truevalue, falsevalue) { var shift = getshiftfromsize(size); name = readlatin1string(name); registertype(rawtype, { name: name, "fromwiretype": function(wt) { return !!wt }, "towiretype": function(destructors, o) { return o ? truevalue : falsevalue }, "argpackadvance": 8, "readvaluefrompointer": function(pointer) { var heap; if (size === 1) { heap = growable_heap_i8() } else if (size === 2) { heap = growable_heap_i16() } else if (size === 4) { heap = growable_heap_i32() } else { throw new typeerror("unknown boolean type size: " + name) } return this["fromwiretype"](heap[pointer >> shift]) }, destructorfunction: null }) } var emval_free_list = []; var emval_handle_array = [{}, { value: undefined }, { value: null }, { value: true }, { value: false }]; function __emval_decref(handle) { if (handle > 4 && 0 === --emval_handle_array[handle].refcount) { emval_handle_array[handle] = undefined; emval_free_list.push(handle) } } function count_emval_handles() { var count = 0; for (var i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { ++count } } return count } function get_first_emval() { for (var i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { return emval_handle_array[i] } } return null } function init_emval() { module["count_emval_handles"] = count_emval_handles; module["get_first_emval"] = get_first_emval } function __emval_register(value) { switch (value) { case undefined: { return 1 } case null: { return 2 } case true: { return 3 } case false: { return 4 } default: { var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; emval_handle_array[handle] = { refcount: 1, value: value }; return handle } } } function simplereadvaluefrompointer(pointer) { return this["fromwiretype"](growable_heap_u32()[pointer >> 2]) } function __embind_register_emval(rawtype, name) { name = readlatin1string(name); registertype(rawtype, { name: name, "fromwiretype": function(handle) { var rv = emval_handle_array[handle].value; __emval_decref(handle); return rv }, "towiretype": function(destructors, value) { return __emval_register(value) }, "argpackadvance": 8, "readvaluefrompointer": simplereadvaluefrompointer, destructorfunction: null }) } function _embind_repr(v) { if (v === null) { return "null" } var t = typeof v; if (t === "object" || t === "array" || t === "function") { return v.tostring() } else { return "" + v } } function floatreadvaluefrompointer(name, shift) { switch (shift) { case 2: return function(pointer) { return this["fromwiretype"](growable_heap_f32()[pointer >> 2]) } ; case 3: return function(pointer) { return this["fromwiretype"](growable_heap_f64()[pointer >> 3]) } ; default: throw new typeerror("unknown float type: " + name) } } function __embind_register_float(rawtype, name, size) { var shift = getshiftfromsize(size); name = readlatin1string(name); registertype(rawtype, { name: name, "fromwiretype": function(value) { return value }, "towiretype": function(destructors, value) { if (typeof value !== "number" && typeof value !== "boolean") { throw new typeerror('cannot convert "' + _embind_repr(value) + '" to ' + this.name) } return value }, "argpackadvance": 8, "readvaluefrompointer": floatreadvaluefrompointer(name, shift), destructorfunction: null }) } function integerreadvaluefrompointer(name, shift, signed) { switch (shift) { case 0: return signed ? function reads8frompointer(pointer) { return growable_heap_i8()[pointer] } : function readu8frompointer(pointer) { return growable_heap_u8()[pointer] } ; case 1: return signed ? function reads16frompointer(pointer) { return growable_heap_i16()[pointer >> 1] } : function readu16frompointer(pointer) { return growable_heap_u16()[pointer >> 1] } ; case 2: return signed ? function reads32frompointer(pointer) { return growable_heap_i32()[pointer >> 2] } : function readu32frompointer(pointer) { return growable_heap_u32()[pointer >> 2] } ; default: throw new typeerror("unknown integer type: " + name) } } function __embind_register_integer(primitivetype, name, size, minrange, maxrange) { name = readlatin1string(name); if (maxrange === -1) { maxrange = 4294967295 } var shift = getshiftfromsize(size); var fromwiretype = function(value) { return value }; if (minrange === 0) { var bitshift = 32 - 8 * size; fromwiretype = function(value) { return value << bitshift >>> bitshift } } var isunsignedtype = name.includes("unsigned"); registertype(primitivetype, { name: name, "fromwiretype": fromwiretype, "towiretype": function(destructors, value) { if (typeof value !== "number" && typeof value !== "boolean") { throw new typeerror('cannot convert "' + _embind_repr(value) + '" to ' + this.name) } if (value < minrange || value > maxrange) { throw new typeerror('passing a number "' + _embind_repr(value) + '" from js side to c/c++ side to an argument of type "' + name + '", which is outside the valid range [' + minrange + ", " + maxrange + "]!") } return isunsignedtype ? value >>> 0 : value | 0 }, "argpackadvance": 8, "readvaluefrompointer": integerreadvaluefrompointer(name, shift, minrange !== 0), destructorfunction: null }) } function __embind_register_memory_view(rawtype, datatypeindex, name) { var typemapping = [int8array, uint8array, int16array, uint16array, int32array, uint32array, float32array, float64array]; var ta = typemapping[datatypeindex]; function decodememoryview(handle) { handle = handle >> 2; var heap = growable_heap_u32(); var size = heap[handle]; var data = heap[handle + 1]; return new ta(buffer,data,size) } name = readlatin1string(name); registertype(rawtype, { name: name, "fromwiretype": decodememoryview, "argpackadvance": 8, "readvaluefrompointer": decodememoryview }, { ignoreduplicateregistrations: true }) } function __embind_register_std_string(rawtype, name) { name = readlatin1string(name); var stdstringisutf8 = name === "std::string"; registertype(rawtype, { name: name, "fromwiretype": function(value) { var length = growable_heap_u32()[value >> 2]; var str; if (stdstringisutf8) { var decodestartptr = value + 4; for (var i = 0; i <= length; ++i) { var currentbyteptr = value + 4 + i; if (i == length || growable_heap_u8()[currentbyteptr] == 0) { var maxread = currentbyteptr - decodestartptr; var stringsegment = utf8tostring(decodestartptr, maxread); if (str === undefined) { str = stringsegment } else { str += string.fromcharcode(0); str += stringsegment } decodestartptr = currentbyteptr + 1 } } } else { var a = new array(length); for (var i = 0; i < length; ++i) { a[i] = string.fromcharcode(growable_heap_u8()[value + 4 + i]) } str = a.join("") } _free(value); return str }, "towiretype": function(destructors, value) { if (value instanceof arraybuffer) { value = new uint8array(value) } var getlength; var valueisoftypestring = typeof value === "string"; if (!(valueisoftypestring || value instanceof uint8array || value instanceof uint8clampedarray || value instanceof int8array)) { throwbindingerror("cannot pass non-string to std::string") } if (stdstringisutf8 && valueisoftypestring) { getlength = function() { return lengthbytesutf8(value) } } else { getlength = function() { return value.length } } var length = getlength(); var ptr = _malloc(4 + length + 1); growable_heap_u32()[ptr >> 2] = length; if (stdstringisutf8 && valueisoftypestring) { stringtoutf8(value, ptr + 4, length + 1) } else { if (valueisoftypestring) { for (var i = 0; i < length; ++i) { var charcode = value.charcodeat(i); if (charcode > 255) { _free(ptr); throwbindingerror("string has utf-16 code units that do not fit in 8 bits") } growable_heap_u8()[ptr + 4 + i] = charcode } } else { for (var i = 0; i < length; ++i) { growable_heap_u8()[ptr + 4 + i] = value[i] } } } if (destructors !== null) { destructors.push(_free, ptr) } return ptr }, "argpackadvance": 8, "readvaluefrompointer": simplereadvaluefrompointer, destructorfunction: function(ptr) { _free(ptr) } }) } function __embind_register_std_wstring(rawtype, charsize, name) { name = readlatin1string(name); var decodestring, encodestring, getheap, lengthbytesutf, shift; if (charsize === 2) { decodestring = utf16tostring; encodestring = stringtoutf16; lengthbytesutf = lengthbytesutf16; getheap = function() { return growable_heap_u16() } ; shift = 1 } else if (charsize === 4) { decodestring = utf32tostring; encodestring = stringtoutf32; lengthbytesutf = lengthbytesutf32; getheap = function() { return growable_heap_u32() } ; shift = 2 } registertype(rawtype, { name: name, "fromwiretype": function(value) { var length = growable_heap_u32()[value >> 2]; var heap = getheap(); var str; var decodestartptr = value + 4; for (var i = 0; i <= length; ++i) { var currentbyteptr = value + 4 + i * charsize; if (i == length || heap[currentbyteptr >> shift] == 0) { var maxreadbytes = currentbyteptr - decodestartptr; var stringsegment = decodestring(decodestartptr, maxreadbytes); if (str === undefined) { str = stringsegment } else { str += string.fromcharcode(0); str += stringsegment } decodestartptr = currentbyteptr + charsize } } _free(value); return str }, "towiretype": function(destructors, value) { if (!(typeof value === "string")) { throwbindingerror("cannot pass non-string to c++ string type " + name) } var length = lengthbytesutf(value); var ptr = _malloc(4 + length + charsize); growable_heap_u32()[ptr >> 2] = length >> shift; encodestring(value, ptr + 4, length + charsize); if (destructors !== null) { destructors.push(_free, ptr) } return ptr }, "argpackadvance": 8, "readvaluefrompointer": simplereadvaluefrompointer, destructorfunction: function(ptr) { _free(ptr) } }) } function __embind_register_void(rawtype, name) { name = readlatin1string(name); registertype(rawtype, { isvoid: true, name: name, "argpackadvance": 0, "fromwiretype": function() { return undefined }, "towiretype": function(destructors, o) { return undefined } }) } function __emscripten_notify_thread_queue(targetthreadid, mainthreadid) { if (targetthreadid == mainthreadid) { postmessage({ "cmd": "processqueuedmainthreadwork" }) } else if (environment_is_pthread) { postmessage({ "targetthread": targetthreadid, "cmd": "processthreadqueue" }) } else { var pthread = pthread.pthreads[targetthreadid]; var worker = pthread && pthread.worker; if (!worker) { return } worker.postmessage({ "cmd": "processthreadqueue" }) } return 1 } function __emscripten_throw_longjmp() { throw "longjmp" } function _abort() { abort() } function _emscripten_set_main_loop_timing(mode, value) { browser.mainloop.timingmode = mode; browser.mainloop.timingvalue = value; if (!browser.mainloop.func) { return 1 } if (!browser.mainloop.running) { runtimekeepalivepush(); browser.mainloop.running = true } if (mode == 0) { browser.mainloop.scheduler = function browser_mainloop_scheduler_settimeout() { var timeuntilnexttick = math.max(0, browser.mainloop.tickstarttime + value - _emscripten_get_now()) | 0; settimeout(browser.mainloop.runner, timeuntilnexttick) } ; browser.mainloop.method = "timeout" } else if (mode == 1) { browser.mainloop.scheduler = function browser_mainloop_scheduler_raf() { browser.requestanimationframe(browser.mainloop.runner) } ; browser.mainloop.method = "raf" } else if (mode == 2) { if (typeof setimmediate === "undefined") { var setimmediates = []; var emscriptenmainloopmessageid = "setimmediate"; var browser_setimmediate_messagehandler = function(event) { if (event.data === emscriptenmainloopmessageid || event.data.target === emscriptenmainloopmessageid) { event.stoppropagation(); setimmediates.shift()() } }; addeventlistener("message", browser_setimmediate_messagehandler, true); setimmediate = function browser_emulated_setimmediate(func) { setimmediates.push(func); if (environment_is_worker) { if (module["setimmediates"] === undefined) module["setimmediates"] = []; module["setimmediates"].push(func); postmessage({ target: emscriptenmainloopmessageid }) } else postmessage(emscriptenmainloopmessageid, "*") } } browser.mainloop.scheduler = function browser_mainloop_scheduler_setimmediate() { setimmediate(browser.mainloop.runner) } ; browser.mainloop.method = "immediate" } return 0 } function runtimekeepalivepush() { runtimekeepalivecounter += 1 } function maybeexit() { if (!keepruntimealive()) { try { if (environment_is_pthread) __emscripten_thread_exit(exitstatus); else _exit(exitstatus) } catch (e) { handleexception(e) } } } function setmainloop(browseriterationfunc, fps, simulateinfiniteloop, arg, nosettiming) { assert(!browser.mainloop.func, "emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."); browser.mainloop.func = browseriterationfunc; browser.mainloop.arg = arg; var thismainloopid = browser.mainloop.currentlyrunningmainloop; function checkisrunning() { if (thismainloopid < browser.mainloop.currentlyrunningmainloop) { runtimekeepalivepop(); maybeexit(); return false } return true } browser.mainloop.running = false; browser.mainloop.runner = function browser_mainloop_runner() { if (abort) return; if (browser.mainloop.queue.length > 0) { var start = date.now(); var blocker = browser.mainloop.queue.shift(); blocker.func(blocker.arg); if (browser.mainloop.remainingblockers) { var remaining = browser.mainloop.remainingblockers; var next = remaining % 1 == 0 ? remaining - 1 : math.floor(remaining); if (blocker.counted) { browser.mainloop.remainingblockers = next } else { next = next + .5; browser.mainloop.remainingblockers = (8 * remaining + next) / 9 } } out('main loop blocker "' + blocker.name + '" took ' + (date.now() - start) + " ms"); browser.mainloop.updatestatus(); if (!checkisrunning()) return; settimeout(browser.mainloop.runner, 0); return } if (!checkisrunning()) return; browser.mainloop.currentframenumber = browser.mainloop.currentframenumber + 1 | 0; if (browser.mainloop.timingmode == 1 && browser.mainloop.timingvalue > 1 && browser.mainloop.currentframenumber % browser.mainloop.timingvalue != 0) { browser.mainloop.scheduler(); return } else if (browser.mainloop.timingmode == 0) { browser.mainloop.tickstarttime = _emscripten_get_now() } if (typeof gl !== "undefined" && gl.currentcontext && !gl.currentcontextisproxied && !gl.currentcontext.attributes.explicitswapcontrol && gl.currentcontext.glctx.commit) { gl.currentcontext.glctx.commit() } browser.mainloop.runiter(browseriterationfunc); if (!checkisrunning()) return; if (typeof sdl === "object" && sdl.audio && sdl.audio.queuenewaudiodata) sdl.audio.queuenewaudiodata(); browser.mainloop.scheduler() } ; if (!nosettiming) { if (fps && fps > 0) _emscripten_set_main_loop_timing(0, 1e3 / fps); else _emscripten_set_main_loop_timing(1, 1); browser.mainloop.scheduler() } if (simulateinfiniteloop) { throw "unwind" } } function callusercallback(func, synchronous) { if (abort) { return } if (synchronous) { func(); return } try { func(); if (environment_is_pthread) maybeexit() } catch (e) { handleexception(e) } } function runtimekeepalivepop() { runtimekeepalivecounter -= 1 } function safesettimeout(func, timeout) { runtimekeepalivepush(); return settimeout(function() { runtimekeepalivepop(); callusercallback(func) }, timeout) } var browser = { mainloop: { running: false, scheduler: null, method: "", currentlyrunningmainloop: 0, func: null, arg: 0, timingmode: 0, timingvalue: 0, currentframenumber: 0, queue: [], pause: function() { browser.mainloop.scheduler = null; browser.mainloop.currentlyrunningmainloop++ }, resume: function() { browser.mainloop.currentlyrunningmainloop++; var timingmode = browser.mainloop.timingmode; var timingvalue = browser.mainloop.timingvalue; var func = browser.mainloop.func; browser.mainloop.func = null; setmainloop(func, 0, false, browser.mainloop.arg, true); _emscripten_set_main_loop_timing(timingmode, timingvalue); browser.mainloop.scheduler() }, updatestatus: function() { if (module["setstatus"]) { var message = module["statusmessage"] || "please wait..."; var remaining = browser.mainloop.remainingblockers; var expected = browser.mainloop.expectedblockers; if (remaining) { if (remaining < expected) { module["setstatus"](message + " (" + (expected - remaining) + "/" + expected + ")") } else { module["setstatus"](message) } } else { module["setstatus"]("") } } }, runiter: function(func) { if (abort) return; if (module["premainloop"]) { var preret = module["premainloop"](); if (preret === false) { return } } callusercallback(func); if (module["postmainloop"]) module["postmainloop"]() } }, isfullscreen: false, pointerlock: false, modulecontextcreatedcallbacks: [], workers: [], init: function() { if (!module["preloadplugins"]) module["preloadplugins"] = []; if (browser.initted) return; browser.initted = true; try { new blob; browser.hasblobconstructor = true } catch (e) { browser.hasblobconstructor = false; out("warning: no blob constructor, cannot create blobs with mimetypes") } browser.blobbuilder = typeof mozblobbuilder != "undefined" ? mozblobbuilder : typeof webkitblobbuilder != "undefined" ? webkitblobbuilder : !browser.hasblobconstructor ? out("warning: no blobbuilder") : null; browser.urlobject = typeof window != "undefined" ? window.url ? window.url : window.webkiturl : undefined; if (!module.noimagedecoding && typeof browser.urlobject === "undefined") { out("warning: browser does not support creating object urls. built-in browser image decoding will not be available."); module.noimagedecoding = true } var imageplugin = {}; imageplugin["canhandle"] = function imageplugin_canhandle(name) { return !module.noimagedecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name) } ; imageplugin["handle"] = function imageplugin_handle(bytearray, name, onload, onerror) { var b = null; if (browser.hasblobconstructor) { try { b = new blob([bytearray],{ type: browser.getmimetype(name) }); if (b.size !== bytearray.length) { b = new blob([new uint8array(bytearray).buffer],{ type: browser.getmimetype(name) }) } } catch (e) { warnonce("blob constructor present but fails: " + e + "; falling back to blob builder") } } if (!b) { var bb = new browser.blobbuilder; bb.append(new uint8array(bytearray).buffer); b = bb.getblob() } var url = browser.urlobject.createobjecturl(b); var img = new image; img.onload = function img_onload() { assert(img.complete, "image " + name + " could not be decoded"); var canvas = document.createelement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getcontext("2d"); ctx.drawimage(img, 0, 0); module["preloadedimages"][name] = canvas; browser.urlobject.revokeobjecturl(url); if (onload) onload(bytearray) } ; img.onerror = function img_onerror(event) { out("image " + url + " could not be decoded"); if (onerror) onerror() } ; img.src = url } ; module["preloadplugins"].push(imageplugin); var audioplugin = {}; audioplugin["canhandle"] = function audioplugin_canhandle(name) { return !module.noaudiodecoding && name.substr(-4)in { ".ogg": 1, ".wav": 1, ".mp3": 1 } } ; audioplugin["handle"] = function audioplugin_handle(bytearray, name, onload, onerror) { var done = false; function finish(audio) { if (done) return; done = true; module["preloadedaudios"][name] = audio; if (onload) onload(bytearray) } function fail() { if (done) return; done = true; module["preloadedaudios"][name] = new audio; if (onerror) onerror() } if (browser.hasblobconstructor) { try { var b = new blob([bytearray],{ type: browser.getmimetype(name) }) } catch (e) { return fail() } var url = browser.urlobject.createobjecturl(b); var audio = new audio; audio.addeventlistener("canplaythrough", function() { finish(audio) }, false); audio.onerror = function audio_onerror(event) { if (done) return; out("warning: browser could not fully decode audio " + name + ", trying slower base64 approach"); function encode64(data) { var base = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/"; var pad = "="; var ret = ""; var leftchar = 0; var leftbits = 0; for (var i = 0; i < data.length; i++) { leftchar = leftchar << 8 | data[i]; leftbits += 8; while (leftbits >= 6) { var curr = leftchar >> leftbits - 6 & 63; leftbits -= 6; ret += base[curr] } } if (leftbits == 2) { ret += base[(leftchar & 3) << 4]; ret += pad + pad } else if (leftbits == 4) { ret += base[(leftchar & 15) << 2]; ret += pad } return ret } audio.src = "data:audio/x-" + name.substr(-3) + ";base64," + encode64(bytearray); finish(audio) } ; audio.src = url; safesettimeout(function() { finish(audio) }, 1e4) } else { return fail() } } ; module["preloadplugins"].push(audioplugin); function pointerlockchange() { browser.pointerlock = document["pointerlockelement"] === module["canvas"] || document["mozpointerlockelement"] === module["canvas"] || document["webkitpointerlockelement"] === module["canvas"] || document["mspointerlockelement"] === module["canvas"] } var canvas = module["canvas"]; if (canvas) { canvas.requestpointerlock = canvas["requestpointerlock"] || canvas["mozrequestpointerlock"] || canvas["webkitrequestpointerlock"] || canvas["msrequestpointerlock"] || function() {} ; canvas.exitpointerlock = document["exitpointerlock"] || document["mozexitpointerlock"] || document["webkitexitpointerlock"] || document["msexitpointerlock"] || function() {} ; canvas.exitpointerlock = canvas.exitpointerlock.bind(document); document.addeventlistener("pointerlockchange", pointerlockchange, false); document.addeventlistener("mozpointerlockchange", pointerlockchange, false); document.addeventlistener("webkitpointerlockchange", pointerlockchange, false); document.addeventlistener("mspointerlockchange", pointerlockchange, false); if (module["elementpointerlock"]) { canvas.addeventlistener("click", function(ev) { if (!browser.pointerlock && module["canvas"].requestpointerlock) { module["canvas"].requestpointerlock(); ev.preventdefault() } }, false) } } }, createcontext: function(canvas, usewebgl, setinmodule, webglcontextattributes) { if (usewebgl && module.ctx && canvas == module.canvas) return module.ctx; var ctx; var contexthandle; if (usewebgl) { var contextattributes = { antialias: false, alpha: false, majorversion: typeof webgl2renderingcontext !== "undefined" ? 2 : 1 }; if (webglcontextattributes) { for (var attribute in webglcontextattributes) { contextattributes[attribute] = webglcontextattributes[attribute] } } if (typeof gl !== "undefined") { contexthandle = gl.createcontext(canvas, contextattributes); if (contexthandle) { ctx = gl.getcontext(contexthandle).glctx } } } else { ctx = canvas.getcontext("2d") } if (!ctx) return null; if (setinmodule) { if (!usewebgl) assert(typeof glctx === "undefined", "cannot set in module if glctx is used, but we are a non-gl context that would replace it"); module.ctx = ctx; if (usewebgl) gl.makecontextcurrent(contexthandle); module.usewebgl = usewebgl; browser.modulecontextcreatedcallbacks.foreach(function(callback) { callback() }); browser.init() } return ctx }, destroycontext: function(canvas, usewebgl, setinmodule) {}, fullscreenhandlersinstalled: false, lockpointer: undefined, resizecanvas: undefined, requestfullscreen: function(lockpointer, resizecanvas) { browser.lockpointer = lockpointer; browser.resizecanvas = resizecanvas; if (typeof browser.lockpointer === "undefined") browser.lockpointer = true; if (typeof browser.resizecanvas === "undefined") browser.resizecanvas = false; var canvas = module["canvas"]; function fullscreenchange() { browser.isfullscreen = false; var canvascontainer = canvas.parentnode; if ((document["fullscreenelement"] || document["mozfullscreenelement"] || document["msfullscreenelement"] || document["webkitfullscreenelement"] || document["webkitcurrentfullscreenelement"]) === canvascontainer) { canvas.exitfullscreen = browser.exitfullscreen; if (browser.lockpointer) canvas.requestpointerlock(); browser.isfullscreen = true; if (browser.resizecanvas) { browser.setfullscreencanvassize() } else { browser.updatecanvasdimensions(canvas) } } else { canvascontainer.parentnode.insertbefore(canvas, canvascontainer); canvascontainer.parentnode.removechild(canvascontainer); if (browser.resizecanvas) { browser.setwindowedcanvassize() } else { browser.updatecanvasdimensions(canvas) } } if (module["onfullscreen"]) module["onfullscreen"](browser.isfullscreen); if (module["onfullscreen"]) module["onfullscreen"](browser.isfullscreen) } if (!browser.fullscreenhandlersinstalled) { browser.fullscreenhandlersinstalled = true; document.addeventlistener("fullscreenchange", fullscreenchange, false); document.addeventlistener("mozfullscreenchange", fullscreenchange, false); document.addeventlistener("webkitfullscreenchange", fullscreenchange, false); document.addeventlistener("msfullscreenchange", fullscreenchange, false) } var canvascontainer = document.createelement("div"); canvas.parentnode.insertbefore(canvascontainer, canvas); canvascontainer.appendchild(canvas); canvascontainer.requestfullscreen = canvascontainer["requestfullscreen"] || canvascontainer["mozrequestfullscreen"] || canvascontainer["msrequestfullscreen"] || (canvascontainer["webkitrequestfullscreen"] ? function() { canvascontainer["webkitrequestfullscreen"](element["allow_keyboard_input"]) } : null) || (canvascontainer["webkitrequestfullscreen"] ? function() { canvascontainer["webkitrequestfullscreen"](element["allow_keyboard_input"]) } : null); canvascontainer.requestfullscreen() }, exitfullscreen: function() { if (!browser.isfullscreen) { return false } var cfs = document["exitfullscreen"] || document["cancelfullscreen"] || document["mozcancelfullscreen"] || document["msexitfullscreen"] || document["webkitcancelfullscreen"] || function() {} ; cfs.apply(document, []); return true }, nextraf: 0, fakerequestanimationframe: function(func) { var now = date.now(); if (browser.nextraf === 0) { browser.nextraf = now + 1e3 / 60 } else { while (now + 2 >= browser.nextraf) { browser.nextraf += 1e3 / 60 } } var delay = math.max(browser.nextraf - now, 0); settimeout(func, delay) }, requestanimationframe: function(func) { if (typeof requestanimationframe === "function") { requestanimationframe(func); return } var raf = browser.fakerequestanimationframe; raf(func) }, safesettimeout: function(func) { return safesettimeout(func) }, saferequestanimationframe: function(func) { runtimekeepalivepush(); return browser.requestanimationframe(function() { runtimekeepalivepop(); callusercallback(func) }) }, getmimetype: function(name) { return { "jpg": "image/jpeg", "jpeg": "image/jpeg", "png": "image/png", "bmp": "image/bmp", "ogg": "audio/ogg", "wav": "audio/wav", "mp3": "audio/mpeg" }[name.substr(name.lastindexof(".") + 1)] }, getusermedia: function(func) { if (!window.getusermedia) { window.getusermedia = navigator["getusermedia"] || navigator["mozgetusermedia"] } window.getusermedia(func) }, getmovementx: function(event) { return event["movementx"] || event["mozmovementx"] || event["webkitmovementx"] || 0 }, getmovementy: function(event) { return event["movementy"] || event["mozmovementy"] || event["webkitmovementy"] || 0 }, getmousewheeldelta: function(event) { var delta = 0; switch (event.type) { case "dommousescroll": delta = event.detail / 3; break; case "mousewheel": delta = event.wheeldelta / 120; break; case "wheel": delta = event.deltay; switch (event.deltamode) { case 0: delta /= 100; break; case 1: delta /= 3; break; case 2: delta *= 80; break; default: throw "unrecognized mouse wheel delta mode: " + event.deltamode } break; default: throw "unrecognized mouse wheel event: " + event.type } return delta }, mousex: 0, mousey: 0, mousemovementx: 0, mousemovementy: 0, touches: {}, lasttouches: {}, calculatemouseevent: function(event) { if (browser.pointerlock) { if (event.type != "mousemove" && "mozmovementx"in event) { browser.mousemovementx = browser.mousemovementy = 0 } else { browser.mousemovementx = browser.getmovementx(event); browser.mousemovementy = browser.getmovementy(event) } if (typeof sdl != "undefined") { browser.mousex = sdl.mousex + browser.mousemovementx; browser.mousey = sdl.mousey + browser.mousemovementy } else { browser.mousex += browser.mousemovementx; browser.mousey += browser.mousemovementy } } else { var rect = module["canvas"].getboundingclientrect(); var cw = module["canvas"].width; var ch = module["canvas"].height; var scrollx = typeof window.scrollx !== "undefined" ? window.scrollx : window.pagexoffset; var scrolly = typeof window.scrolly !== "undefined" ? window.scrolly : window.pageyoffset; if (event.type === "touchstart" || event.type === "touchend" || event.type === "touchmove") { var touch = event.touch; if (touch === undefined) { return } var adjustedx = touch.pagex - (scrollx + rect.left); var adjustedy = touch.pagey - (scrolly + rect.top); adjustedx = adjustedx * (cw / rect.width); adjustedy = adjustedy * (ch / rect.height); var coords = { x: adjustedx, y: adjustedy }; if (event.type === "touchstart") { browser.lasttouches[touch.identifier] = coords; browser.touches[touch.identifier] = coords } else if (event.type === "touchend" || event.type === "touchmove") { var last = browser.touches[touch.identifier]; if (!last) last = coords; browser.lasttouches[touch.identifier] = last; browser.touches[touch.identifier] = coords } return } var x = event.pagex - (scrollx + rect.left); var y = event.pagey - (scrolly + rect.top); x = x * (cw / rect.width); y = y * (ch / rect.height); browser.mousemovementx = x - browser.mousex; browser.mousemovementy = y - browser.mousey; browser.mousex = x; browser.mousey = y } }, resizelisteners: [], updateresizelisteners: function() { var canvas = module["canvas"]; browser.resizelisteners.foreach(function(listener) { listener(canvas.width, canvas.height) }) }, setcanvassize: function(width, height, noupdates) { var canvas = module["canvas"]; browser.updatecanvasdimensions(canvas, width, height); if (!noupdates) browser.updateresizelisteners() }, windowedwidth: 0, windowedheight: 0, setfullscreencanvassize: function() { if (typeof sdl != "undefined") { var flags = growable_heap_u32()[sdl.screen >> 2]; flags = flags | 8388608; growable_heap_i32()[sdl.screen >> 2] = flags } browser.updatecanvasdimensions(module["canvas"]); browser.updateresizelisteners() }, setwindowedcanvassize: function() { if (typeof sdl != "undefined") { var flags = growable_heap_u32()[sdl.screen >> 2]; flags = flags & ~8388608; growable_heap_i32()[sdl.screen >> 2] = flags } browser.updatecanvasdimensions(module["canvas"]); browser.updateresizelisteners() }, updatecanvasdimensions: function(canvas, wnative, hnative) { if (wnative && hnative) { canvas.widthnative = wnative; canvas.heightnative = hnative } else { wnative = canvas.widthnative; hnative = canvas.heightnative } var w = wnative; var h = hnative; if (module["forcedaspectratio"] && module["forcedaspectratio"] > 0) { if (w / h < module["forcedaspectratio"]) { w = math.round(h * module["forcedaspectratio"]) } else { h = math.round(w / module["forcedaspectratio"]) } } if ((document["fullscreenelement"] || document["mozfullscreenelement"] || document["msfullscreenelement"] || document["webkitfullscreenelement"] || document["webkitcurrentfullscreenelement"]) === canvas.parentnode && typeof screen != "undefined") { var factor = math.min(screen.width / w, screen.height / h); w = math.round(w * factor); h = math.round(h * factor) } if (browser.resizecanvas) { if (canvas.width != w) canvas.width = w; if (canvas.height != h) canvas.height = h; if (typeof canvas.style != "undefined") { canvas.style.removeproperty("width"); canvas.style.removeproperty("height") } } else { if (canvas.width != wnative) canvas.width = wnative; if (canvas.height != hnative) canvas.height = hnative; if (typeof canvas.style != "undefined") { if (w != wnative || h != hnative) { canvas.style.setproperty("width", w + "px", "important"); canvas.style.setproperty("height", h + "px", "important") } else { canvas.style.removeproperty("width"); canvas.style.removeproperty("height") } } } } }; var al = { queue_interval: 25, queue_lookahead: .1, device_name: "emscripten openal", capture_device_name: "emscripten openal capture", alc_extensions: { alc_soft_pause_device: true, alc_soft_hrtf: true }, al_extensions: { al_ext_float32: true, al_soft_loop_points: true, al_soft_source_length: true, al_ext_source_distance_model: true, al_soft_source_spatialize: true }, _alcerr: 0, alcerr: 0, devicerefcounts: {}, alcstringcache: {}, paused: false, stringcache: {}, contexts: {}, currentctx: null, buffers: { 0: { id: 0, refcount: 0, audiobuf: null, frequency: 0, bytespersample: 2, channels: 1, length: 0 } }, paramarray: [], _nextid: 1, newid: function() { return al.freeids.length > 0 ? al.freeids.pop() : al._nextid++ }, freeids: [], schedulecontextaudio: function(ctx) { if (browser.mainloop.timingmode === 1 && document["visibilitystate"] != "visible") { return } for (var i in ctx.sources) { al.schedulesourceaudio(ctx.sources[i]) } }, schedulesourceaudio: function(src, lookahead) { if (browser.mainloop.timingmode === 1 && document["visibilitystate"] != "visible") { return } if (src.state !== 4114) { return } var currenttime = al.updatesourcetime(src); var starttime = src.bufstarttime; var startoffset = src.bufoffset; var bufcursor = src.bufsprocessed; for (var i = 0; i < src.audioqueue.length; i++) { var audiosrc = src.audioqueue[i]; starttime = audiosrc._starttime + audiosrc._duration; startoffset = 0; bufcursor += audiosrc._skipcount + 1 } if (!lookahead) { lookahead = al.queue_lookahead } var lookaheadtime = currenttime + lookahead; var skipcount = 0; while (starttime < lookaheadtime) { if (bufcursor >= src.bufqueue.length) { if (src.looping) { bufcursor %= src.bufqueue.length } else { break } } var buf = src.bufqueue[bufcursor % src.bufqueue.length]; if (buf.length === 0) { skipcount++; if (skipcount === src.bufqueue.length) { break } } else { var audiosrc = src.context.audioctx.createbuffersource(); audiosrc.buffer = buf.audiobuf; audiosrc.playbackrate.value = src.playbackrate; if (buf.audiobuf._loopstart || buf.audiobuf._loopend) { audiosrc.loopstart = buf.audiobuf._loopstart; audiosrc.loopend = buf.audiobuf._loopend } var duration = 0; if (src.type === 4136 && src.looping) { duration = number.positive_infinity; audiosrc.loop = true; if (buf.audiobuf._loopstart) { audiosrc.loopstart = buf.audiobuf._loopstart } if (buf.audiobuf._loopend) { audiosrc.loopend = buf.audiobuf._loopend } } else { duration = (buf.audiobuf.duration - startoffset) / src.playbackrate } audiosrc._startoffset = startoffset; audiosrc._duration = duration; audiosrc._skipcount = skipcount; skipcount = 0; audiosrc.connect(src.gain); if (typeof audiosrc.start !== "undefined") { starttime = math.max(starttime, src.context.audioctx.currenttime); audiosrc.start(starttime, startoffset) } else if (typeof audiosrc.noteon !== "undefined") { starttime = math.max(starttime, src.context.audioctx.currenttime); audiosrc.noteon(starttime) } audiosrc._starttime = starttime; src.audioqueue.push(audiosrc); starttime += duration } startoffset = 0; bufcursor++ } }, updatesourcetime: function(src) { var currenttime = src.context.audioctx.currenttime; if (src.state !== 4114) { return currenttime } if (!isfinite(src.bufstarttime)) { src.bufstarttime = currenttime - src.bufoffset / src.playbackrate; src.bufoffset = 0 } var nextstarttime = 0; while (src.audioqueue.length) { var audiosrc = src.audioqueue[0]; src.bufsprocessed += audiosrc._skipcount; nextstarttime = audiosrc._starttime + audiosrc._duration; if (currenttime < nextstarttime) { break } src.audioqueue.shift(); src.bufstarttime = nextstarttime; src.bufoffset = 0; src.bufsprocessed++ } if (src.bufsprocessed >= src.bufqueue.length && !src.looping) { al.setsourcestate(src, 4116) } else if (src.type === 4136 && src.looping) { var buf = src.bufqueue[0]; if (buf.length === 0) { src.bufoffset = 0 } else { var delta = (currenttime - src.bufstarttime) * src.playbackrate; var loopstart = buf.audiobuf._loopstart || 0; var loopend = buf.audiobuf._loopend || buf.audiobuf.duration; if (loopend <= loopstart) { loopend = buf.audiobuf.duration } if (delta < loopend) { src.bufoffset = delta } else { src.bufoffset = loopstart + (delta - loopstart) % (loopend - loopstart) } } } else if (src.audioqueue[0]) { src.bufoffset = (currenttime - src.audioqueue[0]._starttime) * src.playbackrate } else { if (src.type !== 4136 && src.looping) { var srcduration = al.sourceduration(src) / src.playbackrate; if (srcduration > 0) { src.bufstarttime += math.floor((currenttime - src.bufstarttime) / srcduration) * srcduration } } for (var i = 0; i < src.bufqueue.length; i++) { if (src.bufsprocessed >= src.bufqueue.length) { if (src.looping) { src.bufsprocessed %= src.bufqueue.length } else { al.setsourcestate(src, 4116); break } } var buf = src.bufqueue[src.bufsprocessed]; if (buf.length > 0) { nextstarttime = src.bufstarttime + buf.audiobuf.duration / src.playbackrate; if (currenttime < nextstarttime) { src.bufoffset = (currenttime - src.bufstarttime) * src.playbackrate; break } src.bufstarttime = nextstarttime } src.bufoffset = 0; src.bufsprocessed++ } } return currenttime }, cancelpendingsourceaudio: function(src) { al.updatesourcetime(src); for (var i = 1; i < src.audioqueue.length; i++) { var audiosrc = src.audioqueue[i]; audiosrc.stop() } if (src.audioqueue.length > 1) { src.audioqueue.length = 1 } }, stopsourceaudio: function(src) { for (var i = 0; i < src.audioqueue.length; i++) { src.audioqueue[i].stop() } src.audioqueue.length = 0 }, setsourcestate: function(src, state) { if (state === 4114) { if (src.state === 4114 || src.state == 4116) { src.bufsprocessed = 0; src.bufoffset = 0 } else {} al.stopsourceaudio(src); src.state = 4114; src.bufstarttime = number.negative_infinity; al.schedulesourceaudio(src) } else if (state === 4115) { if (src.state === 4114) { al.updatesourcetime(src); al.stopsourceaudio(src); src.state = 4115 } } else if (state === 4116) { if (src.state !== 4113) { src.state = 4116; src.bufsprocessed = src.bufqueue.length; src.bufstarttime = number.negative_infinity; src.bufoffset = 0; al.stopsourceaudio(src) } } else if (state === 4113) { if (src.state !== 4113) { src.state = 4113; src.bufsprocessed = 0; src.bufstarttime = number.negative_infinity; src.bufoffset = 0; al.stopsourceaudio(src) } } }, initsourcepanner: function(src) { if (src.type === 4144) { return } var templatebuf = al.buffers[0]; for (var i = 0; i < src.bufqueue.length; i++) { if (src.bufqueue[i].id !== 0) { templatebuf = src.bufqueue[i]; break } } if (src.spatialize === 1 || src.spatialize === 2 && templatebuf.channels === 1) { if (src.panner) { return } src.panner = src.context.audioctx.createpanner(); al.updatesourceglobal(src); al.updatesourcespace(src); src.panner.connect(src.context.gain); src.gain.disconnect(); src.gain.connect(src.panner) } else { if (!src.panner) { return } src.panner.disconnect(); src.gain.disconnect(); src.gain.connect(src.context.gain); src.panner = null } }, updatecontextglobal: function(ctx) { for (var i in ctx.sources) { al.updatesourceglobal(ctx.sources[i]) } }, updatesourceglobal: function(src) { var panner = src.panner; if (!panner) { return } panner.refdistance = src.refdistance; panner.maxdistance = src.maxdistance; panner.rollofffactor = src.rollofffactor; panner.panningmodel = src.context.hrtf ? "hrtf" : "equalpower"; var distancemodel = src.context.sourcedistancemodel ? src.distancemodel : src.context.distancemodel; switch (distancemodel) { case 0: panner.distancemodel = "inverse"; panner.refdistance = 3.40282e38; break; case 53249: case 53250: panner.distancemodel = "inverse"; break; case 53251: case 53252: panner.distancemodel = "linear"; break; case 53253: case 53254: panner.distancemodel = "exponential"; break } }, updatelistenerspace: function(ctx) { var listener = ctx.audioctx.listener; if (listener.positionx) { listener.positionx.value = ctx.listener.position[0]; listener.positiony.value = ctx.listener.position[1]; listener.positionz.value = ctx.listener.position[2] } else { listener.setposition(ctx.listener.position[0], ctx.listener.position[1], ctx.listener.position[2]) } if (listener.forwardx) { listener.forwardx.value = ctx.listener.direction[0]; listener.forwardy.value = ctx.listener.direction[1]; listener.forwardz.value = ctx.listener.direction[2]; listener.upx.value = ctx.listener.up[0]; listener.upy.value = ctx.listener.up[1]; listener.upz.value = ctx.listener.up[2] } else { listener.setorientation(ctx.listener.direction[0], ctx.listener.direction[1], ctx.listener.direction[2], ctx.listener.up[0], ctx.listener.up[1], ctx.listener.up[2]) } for (var i in ctx.sources) { al.updatesourcespace(ctx.sources[i]) } }, updatesourcespace: function(src) { if (!src.panner) { return } var panner = src.panner; var posx = src.position[0]; var posy = src.position[1]; var posz = src.position[2]; var dirx = src.direction[0]; var diry = src.direction[1]; var dirz = src.direction[2]; var listener = src.context.listener; var lposx = listener.position[0]; var lposy = listener.position[1]; var lposz = listener.position[2]; if (src.relative) { var lbackx = -listener.direction[0]; var lbacky = -listener.direction[1]; var lbackz = -listener.direction[2]; var lupx = listener.up[0]; var lupy = listener.up[1]; var lupz = listener.up[2]; var inversemagnitude = function(x, y, z) { var length = math.sqrt(x * x + y * y + z * z); if (length < number.epsilon) { return 0 } return 1 / length }; var invmag = inversemagnitude(lbackx, lbacky, lbackz); lbackx *= invmag; lbacky *= invmag; lbackz *= invmag; invmag = inversemagnitude(lupx, lupy, lupz); lupx *= invmag; lupy *= invmag; lupz *= invmag; var lrightx = lupy * lbackz - lupz * lbacky; var lrighty = lupz * lbackx - lupx * lbackz; var lrightz = lupx * lbacky - lupy * lbackx; invmag = inversemagnitude(lrightx, lrighty, lrightz); lrightx *= invmag; lrighty *= invmag; lrightz *= invmag; lupx = lbacky * lrightz - lbackz * lrighty; lupy = lbackz * lrightx - lbackx * lrightz; lupz = lbackx * lrighty - lbacky * lrightx; var oldx = dirx; var oldy = diry; var oldz = dirz; dirx = oldx * lrightx + oldy * lupx + oldz * lbackx; diry = oldx * lrighty + oldy * lupy + oldz * lbacky; dirz = oldx * lrightz + oldy * lupz + oldz * lbackz; oldx = posx; oldy = posy; oldz = posz; posx = oldx * lrightx + oldy * lupx + oldz * lbackx; posy = oldx * lrighty + oldy * lupy + oldz * lbacky; posz = oldx * lrightz + oldy * lupz + oldz * lbackz; posx += lposx; posy += lposy; posz += lposz } if (panner.positionx) { panner.positionx.value = posx; panner.positiony.value = posy; panner.positionz.value = posz } else { panner.setposition(posx, posy, posz) } if (panner.orientationx) { panner.orientationx.value = dirx; panner.orientationy.value = diry; panner.orientationz.value = dirz } else { panner.setorientation(dirx, diry, dirz) } var oldshift = src.dopplershift; var velx = src.velocity[0]; var vely = src.velocity[1]; var velz = src.velocity[2]; var lvelx = listener.velocity[0]; var lvely = listener.velocity[1]; var lvelz = listener.velocity[2]; if (posx === lposx && posy === lposy && posz === lposz || velx === lvelx && vely === lvely && velz === lvelz) { src.dopplershift = 1 } else { var speedofsound = src.context.speedofsound; var dopplerfactor = src.context.dopplerfactor; var slx = lposx - posx; var sly = lposy - posy; var slz = lposz - posz; var magsl = math.sqrt(slx * slx + sly * sly + slz * slz); var vls = (slx * lvelx + sly * lvely + slz * lvelz) / magsl; var vss = (slx * velx + sly * vely + slz * velz) / magsl; vls = math.min(vls, speedofsound / dopplerfactor); vss = math.min(vss, speedofsound / dopplerfactor); src.dopplershift = (speedofsound - dopplerfactor * vls) / (speedofsound - dopplerfactor * vss) } if (src.dopplershift !== oldshift) { al.updatesourcerate(src) } }, updatesourcerate: function(src) { if (src.state === 4114) { al.cancelpendingsourceaudio(src); var audiosrc = src.audioqueue[0]; if (!audiosrc) { return } var duration; if (src.type === 4136 && src.looping) { duration = number.positive_infinity } else { duration = (audiosrc.buffer.duration - audiosrc._startoffset) / src.playbackrate } audiosrc._duration = duration; audiosrc.playbackrate.value = src.playbackrate; al.schedulesourceaudio(src) } }, sourceduration: function(src) { var length = 0; for (var i = 0; i < src.bufqueue.length; i++) { var audiobuf = src.bufqueue[i].audiobuf; length += audiobuf ? audiobuf.duration : 0 } return length }, sourcetell: function(src) { al.updatesourcetime(src); var offset = 0; for (var i = 0; i < src.bufsprocessed; i++) { offset += src.bufqueue[i].audiobuf.duration } offset += src.bufoffset; return offset }, sourceseek: function(src, offset) { var playing = src.state == 4114; if (playing) { al.setsourcestate(src, 4113) } if (src.bufqueue[src.bufsprocessed].audiobuf !== null) { src.bufsprocessed = 0; while (offset > src.bufqueue[src.bufsprocessed].audiobuf.duration) { offset -= src.bufqueue[src.bufsprocessed].audiobuf.duration; src.bufsprocessed++ } src.bufoffset = offset } if (playing) { al.setsourcestate(src, 4114) } }, getglobalparam: function(funcname, param) { if (!al.currentctx) { return null } switch (param) { case 49152: return al.currentctx.dopplerfactor; case 49155: return al.currentctx.speedofsound; case 53248: return al.currentctx.distancemodel; default: al.currentctx.err = 40962; return null } }, setglobalparam: function(funcname, param, value) { if (!al.currentctx) { return } switch (param) { case 49152: if (!number.isfinite(value) || value < 0) { al.currentctx.err = 40963; return } al.currentctx.dopplerfactor = value; al.updatelistenerspace(al.currentctx); break; case 49155: if (!number.isfinite(value) || value <= 0) { al.currentctx.err = 40963; return } al.currentctx.speedofsound = value; al.updatelistenerspace(al.currentctx); break; case 53248: switch (value) { case 0: case 53249: case 53250: case 53251: case 53252: case 53253: case 53254: al.currentctx.distancemodel = value; al.updatecontextglobal(al.currentctx); break; default: al.currentctx.err = 40963; return } break; default: al.currentctx.err = 40962; return } }, getlistenerparam: function(funcname, param) { if (!al.currentctx) { return null } switch (param) { case 4100: return al.currentctx.listener.position; case 4102: return al.currentctx.listener.velocity; case 4111: return al.currentctx.listener.direction.concat(al.currentctx.listener.up); case 4106: return al.currentctx.gain.gain.value; default: al.currentctx.err = 40962; return null } }, setlistenerparam: function(funcname, param, value) { if (!al.currentctx) { return } if (value === null) { al.currentctx.err = 40962; return } var listener = al.currentctx.listener; switch (param) { case 4100: if (!number.isfinite(value[0]) || !number.isfinite(value[1]) || !number.isfinite(value[2])) { al.currentctx.err = 40963; return } listener.position[0] = value[0]; listener.position[1] = value[1]; listener.position[2] = value[2]; al.updatelistenerspace(al.currentctx); break; case 4102: if (!number.isfinite(value[0]) || !number.isfinite(value[1]) || !number.isfinite(value[2])) { al.currentctx.err = 40963; return } listener.velocity[0] = value[0]; listener.velocity[1] = value[1]; listener.velocity[2] = value[2]; al.updatelistenerspace(al.currentctx); break; case 4106: if (!number.isfinite(value) || value < 0) { al.currentctx.err = 40963; return } al.currentctx.gain.gain.value = value; break; case 4111: if (!number.isfinite(value[0]) || !number.isfinite(value[1]) || !number.isfinite(value[2]) || !number.isfinite(value[3]) || !number.isfinite(value[4]) || !number.isfinite(value[5])) { al.currentctx.err = 40963; return } listener.direction[0] = value[0]; listener.direction[1] = value[1]; listener.direction[2] = value[2]; listener.up[0] = value[3]; listener.up[1] = value[4]; listener.up[2] = value[5]; al.updatelistenerspace(al.currentctx); break; default: al.currentctx.err = 40962; return } }, getbufferparam: function(funcname, bufferid, param) { if (!al.currentctx) { return } var buf = al.buffers[bufferid]; if (!buf || bufferid === 0) { al.currentctx.err = 40961; return } switch (param) { case 8193: return buf.frequency; case 8194: return buf.bytespersample * 8; case 8195: return buf.channels; case 8196: return buf.length * buf.bytespersample * buf.channels; case 8213: if (buf.length === 0) { return [0, 0] } else { return [(buf.audiobuf._loopstart || 0) * buf.frequency, (buf.audiobuf._loopend || buf.length) * buf.frequency] } default: al.currentctx.err = 40962; return null } }, setbufferparam: function(funcname, bufferid, param, value) { if (!al.currentctx) { return } var buf = al.buffers[bufferid]; if (!buf || bufferid === 0) { al.currentctx.err = 40961; return } if (value === null) { al.currentctx.err = 40962; return } switch (param) { case 8196: if (value !== 0) { al.currentctx.err = 40963; return } break; case 8213: if (value[0] < 0 || value[0] > buf.length || value[1] < 0 || value[1] > buf.length || value[0] >= value[1]) { al.currentctx.err = 40963; return } if (buf.refcount > 0) { al.currentctx.err = 40964; return } if (buf.audiobuf) { buf.audiobuf._loopstart = value[0] / buf.frequency; buf.audiobuf._loopend = value[1] / buf.frequency } break; default: al.currentctx.err = 40962; return } }, getsourceparam: function(funcname, sourceid, param) { if (!al.currentctx) { return null } var src = al.currentctx.sources[sourceid]; if (!src) { al.currentctx.err = 40961; return null } switch (param) { case 514: return src.relative; case 4097: return src.coneinnerangle; case 4098: return src.coneouterangle; case 4099: return src.pitch; case 4100: return src.position; case 4101: return src.direction; case 4102: return src.velocity; case 4103: return src.looping; case 4105: if (src.type === 4136) { return src.bufqueue[0].id } else { return 0 } case 4106: return src.gain.gain.value; case 4109: return src.mingain; case 4110: return src.maxgain; case 4112: return src.state; case 4117: if (src.bufqueue.length === 1 && src.bufqueue[0].id === 0) { return 0 } else { return src.bufqueue.length } case 4118: if (src.bufqueue.length === 1 && src.bufqueue[0].id === 0 || src.looping) { return 0 } else { return src.bufsprocessed } case 4128: return src.refdistance; case 4129: return src.rollofffactor; case 4130: return src.coneoutergain; case 4131: return src.maxdistance; case 4132: return al.sourcetell(src); case 4133: var offset = al.sourcetell(src); if (offset > 0) { offset *= src.bufqueue[0].frequency } return offset; case 4134: var offset = al.sourcetell(src); if (offset > 0) { offset *= src.bufqueue[0].frequency * src.bufqueue[0].bytespersample } return offset; case 4135: return src.type; case 4628: return src.spatialize; case 8201: var length = 0; var bytesperframe = 0; for (var i = 0; i < src.bufqueue.length; i++) { length += src.bufqueue[i].length; if (src.bufqueue[i].id !== 0) { bytesperframe = src.bufqueue[i].bytespersample * src.bufqueue[i].channels } } return length * bytesperframe; case 8202: var length = 0; for (var i = 0; i < src.bufqueue.length; i++) { length += src.bufqueue[i].length } return length; case 8203: return al.sourceduration(src); case 53248: return src.distancemodel; default: al.currentctx.err = 40962; return null } }, setsourceparam: function(funcname, sourceid, param, value) { if (!al.currentctx) { return } var src = al.currentctx.sources[sourceid]; if (!src) { al.currentctx.err = 40961; return } if (value === null) { al.currentctx.err = 40962; return } switch (param) { case 514: if (value === 1) { src.relative = true; al.updatesourcespace(src) } else if (value === 0) { src.relative = false; al.updatesourcespace(src) } else { al.currentctx.err = 40963; return } break; case 4097: if (!number.isfinite(value)) { al.currentctx.err = 40963; return } src.coneinnerangle = value; if (src.panner) { src.panner.coneinnerangle = value % 360 } break; case 4098: if (!number.isfinite(value)) { al.currentctx.err = 40963; return } src.coneouterangle = value; if (src.panner) { src.panner.coneouterangle = value % 360 } break; case 4099: if (!number.isfinite(value) || value <= 0) { al.currentctx.err = 40963; return } if (src.pitch === value) { break } src.pitch = value; al.updatesourcerate(src); break; case 4100: if (!number.isfinite(value[0]) || !number.isfinite(value[1]) || !number.isfinite(value[2])) { al.currentctx.err = 40963; return } src.position[0] = value[0]; src.position[1] = value[1]; src.position[2] = value[2]; al.updatesourcespace(src); break; case 4101: if (!number.isfinite(value[0]) || !number.isfinite(value[1]) || !number.isfinite(value[2])) { al.currentctx.err = 40963; return } src.direction[0] = value[0]; src.direction[1] = value[1]; src.direction[2] = value[2]; al.updatesourcespace(src); break; case 4102: if (!number.isfinite(value[0]) || !number.isfinite(value[1]) || !number.isfinite(value[2])) { al.currentctx.err = 40963; return } src.velocity[0] = value[0]; src.velocity[1] = value[1]; src.velocity[2] = value[2]; al.updatesourcespace(src); break; case 4103: if (value === 1) { src.looping = true; al.updatesourcetime(src); if (src.type === 4136 && src.audioqueue.length > 0) { var audiosrc = src.audioqueue[0]; audiosrc.loop = true; audiosrc._duration = number.positive_infinity } } else if (value === 0) { src.looping = false; var currenttime = al.updatesourcetime(src); if (src.type === 4136 && src.audioqueue.length > 0) { var audiosrc = src.audioqueue[0]; audiosrc.loop = false; audiosrc._duration = src.bufqueue[0].audiobuf.duration / src.playbackrate; audiosrc._starttime = currenttime - src.bufoffset / src.playbackrate } } else { al.currentctx.err = 40963; return } break; case 4105: if (src.state === 4114 || src.state === 4115) { al.currentctx.err = 40964; return } if (value === 0) { for (var i in src.bufqueue) { src.bufqueue[i].refcount-- } src.bufqueue.length = 1; src.bufqueue[0] = al.buffers[0]; src.bufsprocessed = 0; src.type = 4144 } else { var buf = al.buffers[value]; if (!buf) { al.currentctx.err = 40963; return } for (var i in src.bufqueue) { src.bufqueue[i].refcount-- } src.bufqueue.length = 0; buf.refcount++; src.bufqueue = [buf]; src.bufsprocessed = 0; src.type = 4136 } al.initsourcepanner(src); al.schedulesourceaudio(src); break; case 4106: if (!number.isfinite(value) || value < 0) { al.currentctx.err = 40963; return } src.gain.gain.value = value; break; case 4109: if (!number.isfinite(value) || value < 0 || value > math.min(src.maxgain, 1)) { al.currentctx.err = 40963; return } src.mingain = value; break; case 4110: if (!number.isfinite(value) || value < math.max(0, src.mingain) || value > 1) { al.currentctx.err = 40963; return } src.maxgain = value; break; case 4128: if (!number.isfinite(value) || value < 0) { al.currentctx.err = 40963; return } src.refdistance = value; if (src.panner) { src.panner.refdistance = value } break; case 4129: if (!number.isfinite(value) || value < 0) { al.currentctx.err = 40963; return } src.rollofffactor = value; if (src.panner) { src.panner.rollofffactor = value } break; case 4130: if (!number.isfinite(value) || value < 0 || value > 1) { al.currentctx.err = 40963; return } src.coneoutergain = value; if (src.panner) { src.panner.coneoutergain = value } break; case 4131: if (!number.isfinite(value) || value < 0) { al.currentctx.err = 40963; return } src.maxdistance = value; if (src.panner) { src.panner.maxdistance = value } break; case 4132: if (value < 0 || value > al.sourceduration(src)) { al.currentctx.err = 40963; return } al.sourceseek(src, value); break; case 4133: var srclen = al.sourceduration(src); if (srclen > 0) { var frequency; for (var bufid in src.bufqueue) { if (bufid) { frequency = src.bufqueue[bufid].frequency; break } } value /= frequency } if (value < 0 || value > srclen) { al.currentctx.err = 40963; return } al.sourceseek(src, value); break; case 4134: var srclen = al.sourceduration(src); if (srclen > 0) { var bytespersec; for (var bufid in src.bufqueue) { if (bufid) { var buf = src.bufqueue[bufid]; bytespersec = buf.frequency * buf.bytespersample * buf.channels; break } } value /= bytespersec } if (value < 0 || value > srclen) { al.currentctx.err = 40963; return } al.sourceseek(src, value); break; case 4628: if (value !== 0 && value !== 1 && value !== 2) { al.currentctx.err = 40963; return } src.spatialize = value; al.initsourcepanner(src); break; case 8201: case 8202: case 8203: al.currentctx.err = 40964; break; case 53248: switch (value) { case 0: case 53249: case 53250: case 53251: case 53252: case 53253: case 53254: src.distancemodel = value; if (al.currentctx.sourcedistancemodel) { al.updatecontextglobal(al.currentctx) } break; default: al.currentctx.err = 40963; return } break; default: al.currentctx.err = 40962; return } }, captures: {}, sharedcaptureaudioctx: null, requirevalidcapturedevice: function(deviceid, funcname) { if (deviceid === 0) { al.alcerr = 40961; return null } var c = al.captures[deviceid]; if (!c) { al.alcerr = 40961; return null } var err = c.mediastreamerror; if (err) { al.alcerr = 40961; return null } return c } }; function _albufferdata(bufferid, format, pdata, size, freq) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(13, 1, bufferid, format, pdata, size, freq); if (!al.currentctx) { return } var buf = al.buffers[bufferid]; if (!buf) { al.currentctx.err = 40963; return } if (freq <= 0) { al.currentctx.err = 40963; return } var audiobuf = null; try { switch (format) { case 4352: if (size > 0) { audiobuf = al.currentctx.audioctx.createbuffer(1, size, freq); var channel0 = audiobuf.getchanneldata(0); for (var i = 0; i < size; ++i) { channel0[i] = growable_heap_u8()[pdata++] * .0078125 - 1 } } buf.bytespersample = 1; buf.channels = 1; buf.length = size; break; case 4353: if (size > 0) { audiobuf = al.currentctx.audioctx.createbuffer(1, size >> 1, freq); var channel0 = audiobuf.getchanneldata(0); pdata >>= 1; for (var i = 0; i < size >> 1; ++i) { channel0[i] = growable_heap_i16()[pdata++] * 30517578125e-15 } } buf.bytespersample = 2; buf.channels = 1; buf.length = size >> 1; break; case 4354: if (size > 0) { audiobuf = al.currentctx.audioctx.createbuffer(2, size >> 1, freq); var channel0 = audiobuf.getchanneldata(0); var channel1 = audiobuf.getchanneldata(1); for (var i = 0; i < size >> 1; ++i) { channel0[i] = growable_heap_u8()[pdata++] * .0078125 - 1; channel1[i] = growable_heap_u8()[pdata++] * .0078125 - 1 } } buf.bytespersample = 1; buf.channels = 2; buf.length = size >> 1; break; case 4355: if (size > 0) { audiobuf = al.currentctx.audioctx.createbuffer(2, size >> 2, freq); var channel0 = audiobuf.getchanneldata(0); var channel1 = audiobuf.getchanneldata(1); pdata >>= 1; for (var i = 0; i < size >> 2; ++i) { channel0[i] = growable_heap_i16()[pdata++] * 30517578125e-15; channel1[i] = growable_heap_i16()[pdata++] * 30517578125e-15 } } buf.bytespersample = 2; buf.channels = 2; buf.length = size >> 2; break; case 65552: if (size > 0) { audiobuf = al.currentctx.audioctx.createbuffer(1, size >> 2, freq); var channel0 = audiobuf.getchanneldata(0); pdata >>= 2; for (var i = 0; i < size >> 2; ++i) { channel0[i] = growable_heap_f32()[pdata++] } } buf.bytespersample = 4; buf.channels = 1; buf.length = size >> 2; break; case 65553: if (size > 0) { audiobuf = al.currentctx.audioctx.createbuffer(2, size >> 3, freq); var channel0 = audiobuf.getchanneldata(0); var channel1 = audiobuf.getchanneldata(1); pdata >>= 2; for (var i = 0; i < size >> 3; ++i) { channel0[i] = growable_heap_f32()[pdata++]; channel1[i] = growable_heap_f32()[pdata++] } } buf.bytespersample = 4; buf.channels = 2; buf.length = size >> 3; break; default: al.currentctx.err = 40963; return } buf.frequency = freq; buf.audiobuf = audiobuf } catch (e) { al.currentctx.err = 40963; return } } function _aldeletebuffers(count, pbufferids) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(14, 1, count, pbufferids); if (!al.currentctx) { return } for (var i = 0; i < count; ++i) { var bufid = growable_heap_i32()[pbufferids + i * 4 >> 2]; if (bufid === 0) { continue } if (!al.buffers[bufid]) { al.currentctx.err = 40961; return } if (al.buffers[bufid].refcount) { al.currentctx.err = 40964; return } } for (var i = 0; i < count; ++i) { var bufid = growable_heap_i32()[pbufferids + i * 4 >> 2]; if (bufid === 0) { continue } al.devicerefcounts[al.buffers[bufid].deviceid]--; delete al.buffers[bufid]; al.freeids.push(bufid) } } function _alsourcei(sourceid, param, value) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(15, 1, sourceid, param, value); switch (param) { case 514: case 4097: case 4098: case 4103: case 4105: case 4128: case 4129: case 4131: case 4132: case 4133: case 4134: case 4628: case 8201: case 8202: case 53248: al.setsourceparam("alsourcei", sourceid, param, value); break; default: al.setsourceparam("alsourcei", sourceid, param, null); break } } function _aldeletesources(count, psourceids) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(16, 1, count, psourceids); if (!al.currentctx) { return } for (var i = 0; i < count; ++i) { var srcid = growable_heap_i32()[psourceids + i * 4 >> 2]; if (!al.currentctx.sources[srcid]) { al.currentctx.err = 40961; return } } for (var i = 0; i < count; ++i) { var srcid = growable_heap_i32()[psourceids + i * 4 >> 2]; al.setsourcestate(al.currentctx.sources[srcid], 4116); _alsourcei(srcid, 4105, 0); delete al.currentctx.sources[srcid]; al.freeids.push(srcid) } } function _algenbuffers(count, pbufferids) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(17, 1, count, pbufferids); if (!al.currentctx) { return } for (var i = 0; i < count; ++i) { var buf = { deviceid: al.currentctx.deviceid, id: al.newid(), refcount: 0, audiobuf: null, frequency: 0, bytespersample: 2, channels: 1, length: 0 }; al.devicerefcounts[buf.deviceid]++; al.buffers[buf.id] = buf; growable_heap_i32()[pbufferids + i * 4 >> 2] = buf.id } } function _algensources(count, psourceids) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(18, 1, count, psourceids); if (!al.currentctx) { return } for (var i = 0; i < count; ++i) { var gain = al.currentctx.audioctx.creategain(); gain.connect(al.currentctx.gain); var src = { context: al.currentctx, id: al.newid(), type: 4144, state: 4113, bufqueue: [al.buffers[0]], audioqueue: [], looping: false, pitch: 1, dopplershift: 1, gain: gain, mingain: 0, maxgain: 1, panner: null, bufsprocessed: 0, bufstarttime: number.negative_infinity, bufoffset: 0, relative: false, refdistance: 1, maxdistance: 3.40282e38, rollofffactor: 1, position: [0, 0, 0], velocity: [0, 0, 0], direction: [0, 0, 0], coneoutergain: 0, coneinnerangle: 360, coneouterangle: 360, distancemodel: 53250, spatialize: 2, get playbackrate() { return this.pitch * this.dopplershift } }; al.currentctx.sources[src.id] = src; growable_heap_i32()[psourceids + i * 4 >> 2] = src.id } } function _algeterror() { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(19, 1); if (!al.currentctx) { return 40964 } else { var err = al.currentctx.err; al.currentctx.err = 0; return err } } function _algetsourcef(sourceid, param, pvalue) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(20, 1, sourceid, param, pvalue); var val = al.getsourceparam("algetsourcef", sourceid, param); if (val === null) { return } if (!pvalue) { al.currentctx.err = 40963; return } switch (param) { case 4097: case 4098: case 4099: case 4106: case 4109: case 4110: case 4128: case 4129: case 4130: case 4131: case 4132: case 4133: case 4134: case 8203: growable_heap_f32()[pvalue >> 2] = val; break; default: al.currentctx.err = 40962; return } } function _algetsourcei(sourceid, param, pvalue) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(21, 1, sourceid, param, pvalue); var val = al.getsourceparam("algetsourcei", sourceid, param); if (val === null) { return } if (!pvalue) { al.currentctx.err = 40963; return } switch (param) { case 514: case 4097: case 4098: case 4103: case 4105: case 4112: case 4117: case 4118: case 4128: case 4129: case 4131: case 4132: case 4133: case 4134: case 4135: case 4628: case 8201: case 8202: case 53248: growable_heap_i32()[pvalue >> 2] = val; break; default: al.currentctx.err = 40962; return } } function _allistenerfv(param, pvalues) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(22, 1, param, pvalues); if (!al.currentctx) { return } if (!pvalues) { al.currentctx.err = 40963; return } switch (param) { case 4100: case 4102: al.paramarray[0] = growable_heap_f32()[pvalues >> 2]; al.paramarray[1] = growable_heap_f32()[pvalues + 4 >> 2]; al.paramarray[2] = growable_heap_f32()[pvalues + 8 >> 2]; al.setlistenerparam("allistenerfv", param, al.paramarray); break; case 4111: al.paramarray[0] = growable_heap_f32()[pvalues >> 2]; al.paramarray[1] = growable_heap_f32()[pvalues + 4 >> 2]; al.paramarray[2] = growable_heap_f32()[pvalues + 8 >> 2]; al.paramarray[3] = growable_heap_f32()[pvalues + 12 >> 2]; al.paramarray[4] = growable_heap_f32()[pvalues + 16 >> 2]; al.paramarray[5] = growable_heap_f32()[pvalues + 20 >> 2]; al.setlistenerparam("allistenerfv", param, al.paramarray); break; default: al.setlistenerparam("allistenerfv", param, null); break } } function _alsourceplay(sourceid) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(23, 1, sourceid); if (!al.currentctx) { return } var src = al.currentctx.sources[sourceid]; if (!src) { al.currentctx.err = 40961; return } al.setsourcestate(src, 4114) } function _alsourcequeuebuffers(sourceid, count, pbufferids) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(24, 1, sourceid, count, pbufferids); if (!al.currentctx) { return } var src = al.currentctx.sources[sourceid]; if (!src) { al.currentctx.err = 40961; return } if (src.type === 4136) { al.currentctx.err = 40964; return } if (count === 0) { return } var templatebuf = al.buffers[0]; for (var i = 0; i < src.bufqueue.length; i++) { if (src.bufqueue[i].id !== 0) { templatebuf = src.bufqueue[i]; break } } for (var i = 0; i < count; ++i) { var bufid = growable_heap_i32()[pbufferids + i * 4 >> 2]; var buf = al.buffers[bufid]; if (!buf) { al.currentctx.err = 40961; return } if (templatebuf.id !== 0 && (buf.frequency !== templatebuf.frequency || buf.bytespersample !== templatebuf.bytespersample || buf.channels !== templatebuf.channels)) { al.currentctx.err = 40964 } } if (src.bufqueue.length === 1 && src.bufqueue[0].id === 0) { src.bufqueue.length = 0 } src.type = 4137; for (var i = 0; i < count; ++i) { var bufid = growable_heap_i32()[pbufferids + i * 4 >> 2]; var buf = al.buffers[bufid]; buf.refcount++; src.bufqueue.push(buf) } if (src.looping) { al.cancelpendingsourceaudio(src) } al.initsourcepanner(src); al.schedulesourceaudio(src) } function _alsourcestop(sourceid) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(25, 1, sourceid); if (!al.currentctx) { return } var src = al.currentctx.sources[sourceid]; if (!src) { al.currentctx.err = 40961; return } al.setsourcestate(src, 4116) } function _alsourceunqueuebuffers(sourceid, count, pbufferids) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(26, 1, sourceid, count, pbufferids); if (!al.currentctx) { return } var src = al.currentctx.sources[sourceid]; if (!src) { al.currentctx.err = 40961; return } if (count > (src.bufqueue.length === 1 && src.bufqueue[0].id === 0 ? 0 : src.bufsprocessed)) { al.currentctx.err = 40963; return } if (count === 0) { return } for (var i = 0; i < count; i++) { var buf = src.bufqueue.shift(); buf.refcount--; growable_heap_i32()[pbufferids + i * 4 >> 2] = buf.id; src.bufsprocessed-- } if (src.bufqueue.length === 0) { src.bufqueue.push(al.buffers[0]) } al.initsourcepanner(src); al.schedulesourceaudio(src) } function _alsourcef(sourceid, param, value) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(27, 1, sourceid, param, value); switch (param) { case 4097: case 4098: case 4099: case 4106: case 4109: case 4110: case 4128: case 4129: case 4130: case 4131: case 4132: case 4133: case 4134: case 8203: al.setsourceparam("alsourcef", sourceid, param, value); break; default: al.setsourceparam("alsourcef", sourceid, param, null); break } } function _alsourcefv(sourceid, param, pvalues) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(28, 1, sourceid, param, pvalues); if (!al.currentctx) { return } if (!pvalues) { al.currentctx.err = 40963; return } switch (param) { case 4097: case 4098: case 4099: case 4106: case 4109: case 4110: case 4128: case 4129: case 4130: case 4131: case 4132: case 4133: case 4134: case 8203: var val = growable_heap_f32()[pvalues >> 2]; al.setsourceparam("alsourcefv", sourceid, param, val); break; case 4100: case 4101: case 4102: al.paramarray[0] = growable_heap_f32()[pvalues >> 2]; al.paramarray[1] = growable_heap_f32()[pvalues + 4 >> 2]; al.paramarray[2] = growable_heap_f32()[pvalues + 8 >> 2]; al.setsourceparam("alsourcefv", sourceid, param, al.paramarray); break; default: al.setsourceparam("alsourcefv", sourceid, param, null); break } } function listenonce(object, event, func) { object.addeventlistener(event, func, { "once": true }) } function autoresumeaudiocontext(ctx, elements) { if (!elements) { elements = [document, document.getelementbyid("canvas")] } ["keydown", "mousedown", "touchstart"].foreach(function(event) { elements.foreach(function(element) { if (element) { listenonce(element, event, function() { if (ctx.state === "suspended") ctx.resume() }) } }) }) } function _alccreatecontext(deviceid, pattrlist) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(29, 1, deviceid, pattrlist); if (!(deviceid in al.devicerefcounts)) { al.alcerr = 40961; return 0 } var options = null; var attrs = []; var hrtf = null; pattrlist >>= 2; if (pattrlist) { var attr = 0; var val = 0; while (true) { attr = growable_heap_i32()[pattrlist++]; attrs.push(attr); if (attr === 0) { break } val = growable_heap_i32()[pattrlist++]; attrs.push(val); switch (attr) { case 4103: if (!options) { options = {} } options.samplerate = val; break; case 4112: case 4113: break; case 6546: switch (val) { case 0: hrtf = false; break; case 1: hrtf = true; break; case 2: break; default: al.alcerr = 40964; return 0 } break; case 6550: if (val !== 0) { al.alcerr = 40964; return 0 } break; default: al.alcerr = 40964; return 0 } } } var audiocontext = window.audiocontext || window.webkitaudiocontext; var ac = null; try { if (options) { ac = new audiocontext(options) } else { ac = new audiocontext } } catch (e) { if (e.name === "notsupportederror") { al.alcerr = 40964 } else { al.alcerr = 40961 } return 0 } autoresumeaudiocontext(ac); if (typeof ac.creategain === "undefined") { ac.creategain = ac.creategainnode } var gain = ac.creategain(); gain.connect(ac.destination); var ctx = { deviceid: deviceid, id: al.newid(), attrs: attrs, audioctx: ac, listener: { position: [0, 0, 0], velocity: [0, 0, 0], direction: [0, 0, 0], up: [0, 0, 0] }, sources: [], interval: setinterval(function() { al.schedulecontextaudio(ctx) }, al.queue_interval), gain: gain, distancemodel: 53250, speedofsound: 343.3, dopplerfactor: 1, sourcedistancemodel: false, hrtf: hrtf || false, _err: 0, get err() { return this._err }, set err(val) { if (this._err === 0 || val === 0) { this._err = val } } }; al.devicerefcounts[deviceid]++; al.contexts[ctx.id] = ctx; if (hrtf !== null) { for (var ctxid in al.contexts) { var c = al.contexts[ctxid]; if (c.deviceid === deviceid) { c.hrtf = hrtf; al.updatecontextglobal(c) } } } return ctx.id } function _alcgetcurrentcontext() { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(30, 1); if (al.currentctx !== null) { return al.currentctx.id } else { return 0 } } function _alcgetstring(deviceid, param) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(31, 1, deviceid, param); if (al.alcstringcache[param]) { return al.alcstringcache[param] } var ret; switch (param) { case 0: ret = "no error"; break; case 40961: ret = "invalid device"; break; case 40962: ret = "invalid context"; break; case 40963: ret = "invalid enum"; break; case 40964: ret = "invalid value"; break; case 40965: ret = "out of memory"; break; case 4100: if (typeof audiocontext !== "undefined" || typeof webkitaudiocontext !== "undefined") { ret = al.device_name } else { return 0 } break; case 4101: if (typeof audiocontext !== "undefined" || typeof webkitaudiocontext !== "undefined") { ret = al.device_name.concat("\0") } else { ret = "\0" } break; case 785: ret = al.capture_device_name; break; case 784: if (deviceid === 0) ret = al.capture_device_name.concat("\0"); else { var c = al.requirevalidcapturedevice(deviceid, "alcgetstring"); if (!c) { return 0 } ret = c.devicename } break; case 4102: if (!deviceid) { al.alcerr = 40961; return 0 } ret = ""; for (var ext in al.alc_extensions) { ret = ret.concat(ext); ret = ret.concat(" ") } ret = ret.trim(); break; default: al.alcerr = 40963; return 0 } ret = allocate(intarrayfromstring(ret), alloc_normal); al.alcstringcache[param] = ret; return ret } function _alcmakecontextcurrent(contextid) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(32, 1, contextid); if (contextid === 0) { al.currentctx = null; return 0 } else { al.currentctx = al.contexts[contextid]; return 1 } } function _alcopendevice(pdevicename) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(33, 1, pdevicename); if (pdevicename) { var name = utf8tostring(pdevicename); if (name !== al.device_name) { return 0 } } if (typeof audiocontext !== "undefined" || typeof webkitaudiocontext !== "undefined") { var deviceid = al.newid(); al.devicerefcounts[deviceid] = 0; return deviceid } else { return 0 } } var readasmconstargsarray = []; function readasmconstargs(sigptr, buf) { readasmconstargsarray.length = 0; var ch; buf >>= 2; while (ch = growable_heap_u8()[sigptr++]) { var double = ch < 105; if (double && buf & 1) buf++; readasmconstargsarray.push(double ? growable_heap_f64()[buf++ >> 1] : growable_heap_i32()[buf]); ++buf } return readasmconstargsarray } function _emscripten_asm_const_int(code, sigptr, argbuf) { var args = readasmconstargs(sigptr, argbuf); return asm_consts[code].apply(null, args) } function _emscripten_cancel_main_loop() { browser.mainloop.pause(); browser.mainloop.func = null } function _emscripten_conditional_set_current_thread_status(expectedstatus, newstatus) {} var jsevents = { ineventhandler: 0, removealleventlisteners: function() { for (var i = jsevents.eventhandlers.length - 1; i >= 0; --i) { jsevents._removehandler(i) } jsevents.eventhandlers = []; jsevents.deferredcalls = [] }, registerremoveeventlisteners: function() { if (!jsevents.removeeventlistenersregistered) { __atexit__.push(jsevents.removealleventlisteners); jsevents.removeeventlistenersregistered = true } }, deferredcalls: [], defercall: function(targetfunction, precedence, argslist) { function arrayshaveequalcontent(arra, arrb) { if (arra.length != arrb.length) return false; for (var i in arra) { if (arra[i] != arrb[i]) return false } return true } for (var i in jsevents.deferredcalls) { var call = jsevents.deferredcalls[i]; if (call.targetfunction == targetfunction && arrayshaveequalcontent(call.argslist, argslist)) { return } } jsevents.deferredcalls.push({ targetfunction: targetfunction, precedence: precedence, argslist: argslist }); jsevents.deferredcalls.sort(function(x, y) { return x.precedence < y.precedence }) }, removedeferredcalls: function(targetfunction) { for (var i = 0; i < jsevents.deferredcalls.length; ++i) { if (jsevents.deferredcalls[i].targetfunction == targetfunction) { jsevents.deferredcalls.splice(i, 1); --i } } }, canperformeventhandlerrequests: function() { return jsevents.ineventhandler && jsevents.currenteventhandler.allowsdeferredcalls }, rundeferredcalls: function() { if (!jsevents.canperformeventhandlerrequests()) { return } for (var i = 0; i < jsevents.deferredcalls.length; ++i) { var call = jsevents.deferredcalls[i]; jsevents.deferredcalls.splice(i, 1); --i; call.targetfunction.apply(null, call.argslist) } }, eventhandlers: [], removeallhandlersontarget: function(target, eventtypestring) { for (var i = 0; i < jsevents.eventhandlers.length; ++i) { if (jsevents.eventhandlers[i].target == target && (!eventtypestring || eventtypestring == jsevents.eventhandlers[i].eventtypestring)) { jsevents._removehandler(i--) } } }, _removehandler: function(i) { var h = jsevents.eventhandlers[i]; h.target.removeeventlistener(h.eventtypestring, h.eventlistenerfunc, h.usecapture); jsevents.eventhandlers.splice(i, 1) }, registerorremovehandler: function(eventhandler) { var jseventhandler = function jseventhandler(event) { ++jsevents.ineventhandler; jsevents.currenteventhandler = eventhandler; jsevents.rundeferredcalls(); eventhandler.handlerfunc(event); jsevents.rundeferredcalls(); --jsevents.ineventhandler }; if (eventhandler.callbackfunc) { eventhandler.eventlistenerfunc = jseventhandler; eventhandler.target.addeventlistener(eventhandler.eventtypestring, jseventhandler, eventhandler.usecapture); jsevents.eventhandlers.push(eventhandler); jsevents.registerremoveeventlisteners() } else { for (var i = 0; i < jsevents.eventhandlers.length; ++i) { if (jsevents.eventhandlers[i].target == eventhandler.target && jsevents.eventhandlers[i].eventtypestring == eventhandler.eventtypestring) { jsevents._removehandler(i--) } } } }, queueeventhandleronthread_iiii: function(targetthread, eventhandlerfunc, eventtypeid, eventdata, userdata) { var stacktop = stacksave(); var varargs = stackalloc(12); growable_heap_i32()[varargs >> 2] = eventtypeid; growable_heap_i32()[varargs + 4 >> 2] = eventdata; growable_heap_i32()[varargs + 8 >> 2] = userdata; __emscripten_call_on_thread(0, targetthread, 637534208, eventhandlerfunc, eventdata, varargs); stackrestore(stacktop) }, gettargetthreadforeventcallback: function(targetthread) { switch (targetthread) { case 1: return 0; case 2: return pthread.currentproxiedoperationcallerthread; default: return targetthread } }, getnodenamefortarget: function(target) { if (!target) return ""; if (target == window) return "#window"; if (target == screen) return "#screen"; return target && target.nodename ? target.nodename : "" }, fullscreenenabled: function() { return document.fullscreenenabled || document.webkitfullscreenenabled } }; function __webgl_enable_angle_instanced_arrays(ctx) { var ext = ctx.getextension("angle_instanced_arrays"); if (ext) { ctx["vertexattribdivisor"] = function(index, divisor) { ext["vertexattribdivisorangle"](index, divisor) } ; ctx["drawarraysinstanced"] = function(mode, first, count, primcount) { ext["drawarraysinstancedangle"](mode, first, count, primcount) } ; ctx["drawelementsinstanced"] = function(mode, count, type, indices, primcount) { ext["drawelementsinstancedangle"](mode, count, type, indices, primcount) } ; return 1 } } function __webgl_enable_oes_vertex_array_object(ctx) { var ext = ctx.getextension("oes_vertex_array_object"); if (ext) { ctx["createvertexarray"] = function() { return ext["createvertexarrayoes"]() } ; ctx["deletevertexarray"] = function(vao) { ext["deletevertexarrayoes"](vao) } ; ctx["bindvertexarray"] = function(vao) { ext["bindvertexarrayoes"](vao) } ; ctx["isvertexarray"] = function(vao) { return ext["isvertexarrayoes"](vao) } ; return 1 } } function __webgl_enable_webgl_draw_buffers(ctx) { var ext = ctx.getextension("webgl_draw_buffers"); if (ext) { ctx["drawbuffers"] = function(n, bufs) { ext["drawbufferswebgl"](n, bufs) } ; return 1 } } function __webgl_enable_webgl_draw_instanced_base_vertex_base_instance(ctx) { return !!(ctx.dibvbi = ctx.getextension("webgl_draw_instanced_base_vertex_base_instance")) } function __webgl_enable_webgl_multi_draw_instanced_base_vertex_base_instance(ctx) { return !!(ctx.mdibvbi = ctx.getextension("webgl_multi_draw_instanced_base_vertex_base_instance")) } function __webgl_enable_webgl_multi_draw(ctx) { return !!(ctx.multidrawwebgl = ctx.getextension("webgl_multi_draw")) } var gl = { counter: 1, buffers: [], programs: [], framebuffers: [], renderbuffers: [], textures: [], shaders: [], vaos: [], contexts: {}, offscreencanvases: {}, queries: [], samplers: [], transformfeedbacks: [], syncs: [], stringcache: {}, stringicache: {}, unpackalignment: 4, recorderror: function recorderror(errorcode) { if (!gl.lasterror) { gl.lasterror = errorcode } }, getnewid: function(table) { var ret = gl.counter++; for (var i = table.length; i < ret; i++) { table[i] = null } return ret }, getsource: function(shader, count, string, length) { var source = ""; for (var i = 0; i < count; ++i) { var len = length ? growable_heap_i32()[length + i * 4 >> 2] : -1; source += utf8tostring(growable_heap_i32()[string + i * 4 >> 2], len < 0 ? undefined : len) } return source }, createcontext: function(canvas, webglcontextattributes) { if (module["preinitializedwebglcontext"]) { var ctx = module["preinitializedwebglcontext"]; webglcontextattributes.majorversion = typeof webgl2renderingcontext !== "undefined" && ctx instanceof webgl2renderingcontext ? 2 : 1 } else { if (!canvas.getcontextsafariwebgl2fixed) { canvas.getcontextsafariwebgl2fixed = canvas.getcontext; canvas.getcontext = function(ver, attrs) { var gl = canvas.getcontextsafariwebgl2fixed(ver, attrs); return ver == "webgl" == gl instanceof webglrenderingcontext ? gl : null } } var ctx = webglcontextattributes.majorversion > 1 ? canvas.getcontext("webgl2", webglcontextattributes) : canvas.getcontext("webgl", webglcontextattributes) } if (!ctx) return 0; var handle = gl.registercontext(ctx, webglcontextattributes); return handle }, registercontext: function(ctx, webglcontextattributes) { var handle = _malloc(8); growable_heap_i32()[handle + 4 >> 2] = _pthread_self(); var context = { handle: handle, attributes: webglcontextattributes, version: webglcontextattributes.majorversion, glctx: ctx }; if (ctx.canvas) ctx.canvas.glctxobject = context; gl.contexts[handle] = context; if (typeof webglcontextattributes.enableextensionsbydefault === "undefined" || webglcontextattributes.enableextensionsbydefault) { gl.initextensions(context) } return handle }, makecontextcurrent: function(contexthandle) { gl.currentcontext = gl.contexts[contexthandle]; module.ctx = glctx = gl.currentcontext && gl.currentcontext.glctx; return !(contexthandle && !glctx) }, getcontext: function(contexthandle) { return gl.contexts[contexthandle] }, deletecontext: function(contexthandle) { if (gl.currentcontext === gl.contexts[contexthandle]) gl.currentcontext = null; if (typeof jsevents === "object") jsevents.removeallhandlersontarget(gl.contexts[contexthandle].glctx.canvas); if (gl.contexts[contexthandle] && gl.contexts[contexthandle].glctx.canvas) gl.contexts[contexthandle].glctx.canvas.glctxobject = undefined; _free(gl.contexts[contexthandle].handle); gl.contexts[contexthandle] = null }, initextensions: function(context) { if (!context) context = gl.currentcontext; if (context.initextensionsdone) return; context.initextensionsdone = true; var glctx = context.glctx; __webgl_enable_angle_instanced_arrays(glctx); __webgl_enable_oes_vertex_array_object(glctx); __webgl_enable_webgl_draw_buffers(glctx); __webgl_enable_webgl_draw_instanced_base_vertex_base_instance(glctx); __webgl_enable_webgl_multi_draw_instanced_base_vertex_base_instance(glctx); if (context.version >= 2) { glctx.disjointtimerqueryext = glctx.getextension("ext_disjoint_timer_query_webgl2") } if (context.version < 2 || !glctx.disjointtimerqueryext) { glctx.disjointtimerqueryext = glctx.getextension("ext_disjoint_timer_query") } __webgl_enable_webgl_multi_draw(glctx); var exts = glctx.getsupportedextensions() || []; exts.foreach(function(ext) { if (!ext.includes("lose_context") && !ext.includes("debug")) { glctx.getextension(ext) } }) } }; function maybecstringtojsstring(cstring) { return cstring > 2 ? utf8tostring(cstring) : cstring } function findcanvaseventtarget(target) { target = maybecstringtojsstring(target); return gl.offscreencanvases[target.substr(1)] || target == "canvas" && object.keys(gl.offscreencanvases)[0] || typeof document !== "undefined" && document.queryselector(target) } function _emscripten_get_canvas_element_size_calling_thread(target, width, height) { var canvas = findcanvaseventtarget(target); if (!canvas) return -4; if (canvas.canvassharedptr) { var w = growable_heap_i32()[canvas.canvassharedptr >> 2]; var h = growable_heap_i32()[canvas.canvassharedptr + 4 >> 2]; growable_heap_i32()[width >> 2] = w; growable_heap_i32()[height >> 2] = h } else if (canvas.offscreencanvas) { growable_heap_i32()[width >> 2] = canvas.offscreencanvas.width; growable_heap_i32()[height >> 2] = canvas.offscreencanvas.height } else if (!canvas.controltransferredoffscreen) { growable_heap_i32()[width >> 2] = canvas.width; growable_heap_i32()[height >> 2] = canvas.height } else { return -4 } return 0 } function _emscripten_get_canvas_element_size_main_thread(target, width, height) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(34, 1, target, width, height); return _emscripten_get_canvas_element_size_calling_thread(target, width, height) } function _emscripten_get_canvas_element_size(target, width, height) { var canvas = findcanvaseventtarget(target); if (canvas) { return _emscripten_get_canvas_element_size_calling_thread(target, width, height) } else { return _emscripten_get_canvas_element_size_main_thread(target, width, height) } } function _emscripten_memcpy_big(dest, src, num) { growable_heap_u8().copywithin(dest, src, src + num) } function _emscripten_proxy_to_main_thread_js(index, sync) { var numcallargs = arguments.length - 2; var stack = stacksave(); var serializednumcallargs = numcallargs; var args = stackalloc(serializednumcallargs * 8); var b = args >> 3; for (var i = 0; i < numcallargs; i++) { var arg = arguments[2 + i]; growable_heap_f64()[b + i] = arg } var ret = _emscripten_run_in_main_runtime_thread_js(index, serializednumcallargs, args, sync); stackrestore(stack); return ret } var _emscripten_receive_on_main_thread_js_callargs = []; function _emscripten_receive_on_main_thread_js(index, numcallargs, args) { _emscripten_receive_on_main_thread_js_callargs.length = numcallargs; var b = args >> 3; for (var i = 0; i < numcallargs; i++) { _emscripten_receive_on_main_thread_js_callargs[i] = growable_heap_f64()[b + i] } var isemasmconst = index < 0; var func = !isemasmconst ? proxiedfunctiontable[index] : asm_consts[-index - 1]; return func.apply(null, _emscripten_receive_on_main_thread_js_callargs) } function emscripten_realloc_buffer(size) { try { wasmmemory.grow(size - buffer.bytelength + 65535 >>> 16); updateglobalbufferandviews(wasmmemory.buffer); return 1 } catch (e) {} } function _emscripten_resize_heap(requestedsize) { var oldsize = growable_heap_u8().length; requestedsize = requestedsize >>> 0; if (requestedsize <= oldsize) { return false } var maxheapsize = 1048576e3; if (requestedsize > maxheapsize) { return false } for (var cutdown = 1; cutdown <= 4; cutdown *= 2) { var overgrownheapsize = oldsize * (1 + .2 / cutdown); overgrownheapsize = math.min(overgrownheapsize, requestedsize + 100663296); var newsize = math.min(maxheapsize, alignup(math.max(requestedsize, overgrownheapsize), 65536)); var replacement = emscripten_realloc_buffer(newsize); if (replacement) { return true } } return false } function stringtonewutf8(jsstring) { var length = lengthbytesutf8(jsstring) + 1; var cstring = _malloc(length); stringtoutf8(jsstring, cstring, length); return cstring } function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetthread, targetcanvas, width, height) { var stacktop = stacksave(); var varargs = stackalloc(12); var targetcanvasptr = 0; if (targetcanvas) { targetcanvasptr = stringtonewutf8(targetcanvas) } growable_heap_i32()[varargs >> 2] = targetcanvasptr; growable_heap_i32()[varargs + 4 >> 2] = width; growable_heap_i32()[varargs + 8 >> 2] = height; __emscripten_call_on_thread(0, targetthread, 657457152, 0, targetcanvasptr, varargs); stackrestore(stacktop) } function _emscripten_set_offscreencanvas_size_on_target_thread(targetthread, targetcanvas, width, height) { targetcanvas = targetcanvas ? utf8tostring(targetcanvas) : ""; _emscripten_set_offscreencanvas_size_on_target_thread_js(targetthread, targetcanvas, width, height) } function _emscripten_set_canvas_element_size_calling_thread(target, width, height) { var canvas = findcanvaseventtarget(target); if (!canvas) return -4; if (canvas.canvassharedptr) { growable_heap_i32()[canvas.canvassharedptr >> 2] = width; growable_heap_i32()[canvas.canvassharedptr + 4 >> 2] = height } if (canvas.offscreencanvas || !canvas.controltransferredoffscreen) { if (canvas.offscreencanvas) canvas = canvas.offscreencanvas; var autoresizeviewport = false; if (canvas.glctxobject && canvas.glctxobject.glctx) { var prevviewport = canvas.glctxobject.glctx.getparameter(2978); autoresizeviewport = prevviewport[0] === 0 && prevviewport[1] === 0 && prevviewport[2] === canvas.width && prevviewport[3] === canvas.height } canvas.width = width; canvas.height = height; if (autoresizeviewport) { canvas.glctxobject.glctx.viewport(0, 0, width, height) } } else if (canvas.canvassharedptr) { var targetthread = growable_heap_i32()[canvas.canvassharedptr + 8 >> 2]; _emscripten_set_offscreencanvas_size_on_target_thread(targetthread, target, width, height); return 1 } else { return -4 } return 0 } function _emscripten_set_canvas_element_size_main_thread(target, width, height) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(35, 1, target, width, height); return _emscripten_set_canvas_element_size_calling_thread(target, width, height) } function _emscripten_set_canvas_element_size(target, width, height) { var canvas = findcanvaseventtarget(target); if (canvas) { return _emscripten_set_canvas_element_size_calling_thread(target, width, height) } else { return _emscripten_set_canvas_element_size_main_thread(target, width, height) } } function _emscripten_set_current_thread_status(newstatus) {} function _emscripten_set_main_loop_arg(func, arg, fps, simulateinfiniteloop) { var browseriterationfunc = function() { wasmtable.get(func)(arg) }; setmainloop(browseriterationfunc, fps, simulateinfiniteloop, arg) } function _emscripten_set_timeout(cb, msecs, userdata) { runtimekeepalivepush(); return settimeout(function() { runtimekeepalivepop(); callusercallback(function() { wasmtable.get(cb)(userdata) }) }, msecs) } function _emscripten_supports_offscreencanvas() { return typeof offscreencanvas !== "undefined" } function _emscripten_unwind_to_js_event_loop() { throw "unwind" } function _emscripten_webgl_do_commit_frame() { if (!gl.currentcontext || !gl.currentcontext.glctx) { return -3 } if (!gl.currentcontext.attributes.explicitswapcontrol) { return -3 } return 0 } function _emscripten_webgl_commit_frame() { return _emscripten_webgl_do_commit_frame() } var __emscripten_webgl_power_preferences = ["default", "low-power", "high-performance"]; function _emscripten_webgl_do_create_context(target, attributes) { var a = attributes >> 2; var powerpreference = growable_heap_i32()[a + (24 >> 2)]; var contextattributes = { "alpha": !!growable_heap_i32()[a + (0 >> 2)], "depth": !!growable_heap_i32()[a + (4 >> 2)], "stencil": !!growable_heap_i32()[a + (8 >> 2)], "antialias": !!growable_heap_i32()[a + (12 >> 2)], "premultipliedalpha": !!growable_heap_i32()[a + (16 >> 2)], "preservedrawingbuffer": !!growable_heap_i32()[a + (20 >> 2)], "powerpreference": __emscripten_webgl_power_preferences[powerpreference], "failifmajorperformancecaveat": !!growable_heap_i32()[a + (28 >> 2)], majorversion: growable_heap_i32()[a + (32 >> 2)], minorversion: growable_heap_i32()[a + (36 >> 2)], enableextensionsbydefault: growable_heap_i32()[a + (40 >> 2)], explicitswapcontrol: growable_heap_i32()[a + (44 >> 2)], proxycontexttomainthread: growable_heap_i32()[a + (48 >> 2)], renderviaoffscreenbackbuffer: growable_heap_i32()[a + (52 >> 2)] }; var canvas = findcanvaseventtarget(target); if (!canvas) { return 0 } if (canvas.offscreencanvas) canvas = canvas.offscreencanvas; if (contextattributes.explicitswapcontrol) { var supportsoffscreencanvas = canvas.transfercontroltooffscreen || typeof offscreencanvas !== "undefined" && canvas instanceof offscreencanvas; if (!supportsoffscreencanvas) { return 0 } if (canvas.transfercontroltooffscreen) { if (!canvas.controltransferredoffscreen) { gl.offscreencanvases[canvas.id] = { canvas: canvas.transfercontroltooffscreen(), canvassharedptr: _malloc(12), id: canvas.id }; canvas.controltransferredoffscreen = true } else if (!gl.offscreencanvases[canvas.id]) { return 0 } canvas = gl.offscreencanvases[canvas.id] } } var contexthandle = gl.createcontext(canvas, contextattributes); return contexthandle } function _emscripten_webgl_create_context(a0, a1) { return _emscripten_webgl_do_create_context(a0, a1) } function _emscripten_webgl_do_get_current_context() { return gl.currentcontext ? gl.currentcontext.handle : 0 } function _emscripten_webgl_get_current_context() { return _emscripten_webgl_do_get_current_context() } module["_emscripten_webgl_get_current_context"] = _emscripten_webgl_get_current_context; function _emscripten_webgl_make_context_current(contexthandle) { var success = gl.makecontextcurrent(contexthandle); return success ? 0 : -5 } module["_emscripten_webgl_make_context_current"] = _emscripten_webgl_make_context_current; function _emscripten_webgl_destroy_context_calling_thread(contexthandle) { if (gl.currentcontext == contexthandle) gl.currentcontext = 0; gl.deletecontext(contexthandle) } function _emscripten_webgl_destroy_context_main_thread(a0) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(36, 1, a0); return _emscripten_webgl_destroy_context_calling_thread(a0) } function _emscripten_webgl_destroy_context_before_on_calling_thread(contexthandle) { if (_emscripten_webgl_get_current_context() == contexthandle) _emscripten_webgl_make_context_current(0) } function _emscripten_webgl_destroy_context(p0) { _emscripten_webgl_destroy_context_before_on_calling_thread(p0); gl.contexts[p0] ? _emscripten_webgl_destroy_context_calling_thread(p0) : _emscripten_webgl_destroy_context_main_thread(p0) } function _emscripten_webgl_init_context_attributes(attributes) { var a = attributes >> 2; for (var i = 0; i < 56 >> 2; ++i) { growable_heap_i32()[a + i] = 0 } growable_heap_i32()[a + (0 >> 2)] = growable_heap_i32()[a + (4 >> 2)] = growable_heap_i32()[a + (12 >> 2)] = growable_heap_i32()[a + (16 >> 2)] = growable_heap_i32()[a + (32 >> 2)] = growable_heap_i32()[a + (40 >> 2)] = 1; if (environment_is_worker) growable_heap_i32()[attributes + 48 >> 2] = 1 } var env = {}; function getexecutablename() { return thisprogram || "./this.program" } function getenvstrings() { if (!getenvstrings.strings) { var lang = (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "c").replace("-", "_") + ".utf-8"; var env = { "user": "web_user", "logname": "web_user", "path": "/", "pwd": "/", "home": "/home/web_user", "lang": lang, "_": getexecutablename() }; for (var x in env) { if (env[x] === undefined) delete env[x]; else env[x] = env[x] } var strings = []; for (var x in env) { strings.push(x + "=" + env[x]) } getenvstrings.strings = strings } return getenvstrings.strings } function _environ_get(__environ, environ_buf) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(37, 1, __environ, environ_buf); var bufsize = 0; getenvstrings().foreach(function(string, i) { var ptr = environ_buf + bufsize; growable_heap_i32()[__environ + i * 4 >> 2] = ptr; writeasciitomemory(string, ptr); bufsize += string.length + 1 }); return 0 } function _environ_sizes_get(penviron_count, penviron_buf_size) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(38, 1, penviron_count, penviron_buf_size); var strings = getenvstrings(); growable_heap_i32()[penviron_count >> 2] = strings.length; var bufsize = 0; strings.foreach(function(string) { bufsize += string.length + 1 }); growable_heap_i32()[penviron_buf_size >> 2] = bufsize; return 0 } function _fd_close(fd) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(39, 1, fd); try { var stream = syscalls.getstreamfromfd(fd); fs.close(stream); return 0 } catch (e) { if (typeof fs === "undefined" || !(e instanceof fs.errnoerror)) abort(e); return e.errno } } function _fd_read(fd, iov, iovcnt, pnum) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(40, 1, fd, iov, iovcnt, pnum); try { var stream = syscalls.getstreamfromfd(fd); var num = syscalls.doreadv(stream, iov, iovcnt); growable_heap_i32()[pnum >> 2] = num; return 0 } catch (e) { if (typeof fs === "undefined" || !(e instanceof fs.errnoerror)) abort(e); return e.errno } } function _fd_seek(fd, offset_low, offset_high, whence, newoffset) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(41, 1, fd, offset_low, offset_high, whence, newoffset); try { var stream = syscalls.getstreamfromfd(fd); var high_offset = 4294967296; var offset = offset_high * high_offset + (offset_low >>> 0); var double_limit = 9007199254740992; if (offset <= -double_limit || offset >= double_limit) { return -61 } fs.llseek(stream, offset, whence); tempi64 = [stream.position >>> 0, (tempdouble = stream.position, +math.abs(tempdouble) >= 1 ? tempdouble > 0 ? (math.min(+math.floor(tempdouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+math.ceil((tempdouble - +(~~tempdouble >>> 0)) / 4294967296) >>> 0 : 0)], growable_heap_i32()[newoffset >> 2] = tempi64[0], growable_heap_i32()[newoffset + 4 >> 2] = tempi64[1]; if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; return 0 } catch (e) { if (typeof fs === "undefined" || !(e instanceof fs.errnoerror)) abort(e); return e.errno } } function _fd_write(fd, iov, iovcnt, pnum) { if (environment_is_pthread) return _emscripten_proxy_to_main_thread_js(42, 1, fd, iov, iovcnt, pnum); try { var stream = syscalls.getstreamfromfd(fd); var num = syscalls.dowritev(stream, iov, iovcnt); growable_heap_i32()[pnum >> 2] = num; return 0 } catch (e) { if (typeof fs === "undefined" || !(e instanceof fs.errnoerror)) abort(e); return e.errno } } function _gettempret0() { return gettempret0() } function _gettimeofday(ptr) { var now = date.now(); growable_heap_i32()[ptr >> 2] = now / 1e3 | 0; growable_heap_i32()[ptr + 4 >> 2] = now % 1e3 * 1e3 | 0; return 0 } function _glactivetexture(x0) { glctx["activetexture"](x0) } function _glattachshader(program, shader) { glctx.attachshader(gl.programs[program], gl.shaders[shader]) } function _glbindbuffer(target, buffer) { if (target == 35051) { glctx.currentpixelpackbufferbinding = buffer } else if (target == 35052) { glctx.currentpixelunpackbufferbinding = buffer } glctx.bindbuffer(target, gl.buffers[buffer]) } function _glbindframebuffer(target, framebuffer) { glctx.bindframebuffer(target, gl.framebuffers[framebuffer]) } function _glbindtexture(target, texture) { glctx.bindtexture(target, gl.textures[texture]) } function _glblendfunc(x0, x1) { glctx["blendfunc"](x0, x1) } function _glbufferdata(target, size, data, usage) { if (gl.currentcontext.version >= 2) { if (data) { glctx.bufferdata(target, growable_heap_u8(), usage, data, size) } else { glctx.bufferdata(target, size, usage) } } else { glctx.bufferdata(target, data ? growable_heap_u8().subarray(data, data + size) : size, usage) } } function _glclear(x0) { glctx["clear"](x0) } function _glcompileshader(shader) { glctx.compileshader(gl.shaders[shader]) } function _glcreateprogram() { var id = gl.getnewid(gl.programs); var program = glctx.createprogram(); program.name = id; program.maxuniformlength = program.maxattributelength = program.maxuniformblocknamelength = 0; program.uniformidcounter = 1; gl.programs[id] = program; return id } function _glcreateshader(shadertype) { var id = gl.getnewid(gl.shaders); gl.shaders[id] = glctx.createshader(shadertype); return id } function _gldeletebuffers(n, buffers) { for (var i = 0; i < n; i++) { var id = growable_heap_i32()[buffers + i * 4 >> 2]; var buffer = gl.buffers[id]; if (!buffer) continue; glctx.deletebuffer(buffer); buffer.name = 0; gl.buffers[id] = null; if (id == glctx.currentpixelpackbufferbinding) glctx.currentpixelpackbufferbinding = 0; if (id == glctx.currentpixelunpackbufferbinding) glctx.currentpixelunpackbufferbinding = 0 } } function _gldeleteframebuffers(n, framebuffers) { for (var i = 0; i < n; ++i) { var id = growable_heap_i32()[framebuffers + i * 4 >> 2]; var framebuffer = gl.framebuffers[id]; if (!framebuffer) continue; glctx.deleteframebuffer(framebuffer); framebuffer.name = 0; gl.framebuffers[id] = null } } function _gldeleteprogram(id) { if (!id) return; var program = gl.programs[id]; if (!program) { gl.recorderror(1281); return } glctx.deleteprogram(program); program.name = 0; gl.programs[id] = null } function _gldeleterenderbuffers(n, renderbuffers) { for (var i = 0; i < n; i++) { var id = growable_heap_i32()[renderbuffers + i * 4 >> 2]; var renderbuffer = gl.renderbuffers[id]; if (!renderbuffer) continue; glctx.deleterenderbuffer(renderbuffer); renderbuffer.name = 0; gl.renderbuffers[id] = null } } function _gldeleteshader(id) { if (!id) return; var shader = gl.shaders[id]; if (!shader) { gl.recorderror(1281); return } glctx.deleteshader(shader); gl.shaders[id] = null } function _gldeletetextures(n, textures) { for (var i = 0; i < n; i++) { var id = growable_heap_i32()[textures + i * 4 >> 2]; var texture = gl.textures[id]; if (!texture) continue; glctx.deletetexture(texture); texture.name = 0; gl.textures[id] = null } } function _gldepthfunc(x0) { glctx["depthfunc"](x0) } function _gldepthmask(flag) { glctx.depthmask(!!flag) } function _gldetachshader(program, shader) { glctx.detachshader(gl.programs[program], gl.shaders[shader]) } function _gldisable(x0) { glctx["disable"](x0) } function _gldrawarrays(mode, first, count) { glctx.drawarrays(mode, first, count) } function _glenable(x0) { glctx["enable"](x0) } function _glenablevertexattribarray(index) { glctx.enablevertexattribarray(index) } function _glframebuffertexture2d(target, attachment, textarget, texture, level) { glctx.framebuffertexture2d(target, attachment, textarget, gl.textures[texture], level) } function __glgenobject(n, buffers, createfunction, objecttable) { for (var i = 0; i < n; i++) { var buffer = glctx[createfunction](); var id = buffer && gl.getnewid(objecttable); if (buffer) { buffer.name = id; objecttable[id] = buffer } else { gl.recorderror(1282) } growable_heap_i32()[buffers + i * 4 >> 2] = id } } function _glgenbuffers(n, buffers) { __glgenobject(n, buffers, "createbuffer", gl.buffers) } function _glgenframebuffers(n, ids) { __glgenobject(n, ids, "createframebuffer", gl.framebuffers) } function _glgentextures(n, textures) { __glgenobject(n, textures, "createtexture", gl.textures) } function _glgeneratemipmap(x0) { glctx["generatemipmap"](x0) } function _glgetattriblocation(program, name) { return glctx.getattriblocation(gl.programs[program], utf8tostring(name)) } function writei53toi64(ptr, num) { growable_heap_u32()[ptr >> 2] = num; growable_heap_u32()[ptr + 4 >> 2] = (num - growable_heap_u32()[ptr >> 2]) / 4294967296 } function emscriptenwebglget(name_, p, type) { if (!p) { gl.recorderror(1281); return } var ret = undefined; switch (name_) { case 36346: ret = 1; break; case 36344: if (type != 0 && type != 1) { gl.recorderror(1280) } return; case 34814: case 36345: ret = 0; break; case 34466: var formats = glctx.getparameter(34467); ret = formats ? formats.length : 0; break; case 33309: if (gl.currentcontext.version < 2) { gl.recorderror(1282); return } var exts = glctx.getsupportedextensions() || []; ret = 2 * exts.length; break; case 33307: case 33308: if (gl.currentcontext.version < 2) { gl.recorderror(1280); return } ret = name_ == 33307 ? 3 : 0; break } if (ret === undefined) { var result = glctx.getparameter(name_); switch (typeof result) { case "number": ret = result; break; case "boolean": ret = result ? 1 : 0; break; case "string": gl.recorderror(1280); return; case "object": if (result === null) { switch (name_) { case 34964: case 35725: case 34965: case 36006: case 36007: case 32873: case 34229: case 36662: case 36663: case 35053: case 35055: case 36010: case 35097: case 35869: case 32874: case 36389: case 35983: case 35368: case 34068: { ret = 0; break } default: { gl.recorderror(1280); return } } } else if (result instanceof float32array || result instanceof uint32array || result instanceof int32array || result instanceof array) { for (var i = 0; i < result.length; ++i) { switch (type) { case 0: growable_heap_i32()[p + i * 4 >> 2] = result[i]; break; case 2: growable_heap_f32()[p + i * 4 >> 2] = result[i]; break; case 4: growable_heap_i8()[p + i >> 0] = result[i] ? 1 : 0; break } } return } else { try { ret = result.name | 0 } catch (e) { gl.recorderror(1280); err("gl_invalid_enum in glget" + type + "v: unknown object returned from webgl getparameter(" + name_ + ")! (error: " + e + ")"); return } } break; default: gl.recorderror(1280); err("gl_invalid_enum in glget" + type + "v: native code calling glget" + type + "v(" + name_ + ") and it returns " + result + " of type " + typeof result + "!"); return } } switch (type) { case 1: writei53toi64(p, ret); break; case 0: growable_heap_i32()[p >> 2] = ret; break; case 2: growable_heap_f32()[p >> 2] = ret; break; case 4: growable_heap_i8()[p >> 0] = ret ? 1 : 0; break } } function _glgetintegerv(name_, p) { emscriptenwebglget(name_, p, 0) } function _glgetprogramiv(program, pname, p) { if (!p) { gl.recorderror(1281); return } if (program >= gl.counter) { gl.recorderror(1281); return } program = gl.programs[program]; if (pname == 35716) { var log = glctx.getprograminfolog(program); if (log === null) log = "(unknown error)"; growable_heap_i32()[p >> 2] = log.length + 1 } else if (pname == 35719) { if (!program.maxuniformlength) { for (var i = 0; i < glctx.getprogramparameter(program, 35718); ++i) { program.maxuniformlength = math.max(program.maxuniformlength, glctx.getactiveuniform(program, i).name.length + 1) } } growable_heap_i32()[p >> 2] = program.maxuniformlength } else if (pname == 35722) { if (!program.maxattributelength) { for (var i = 0; i < glctx.getprogramparameter(program, 35721); ++i) { program.maxattributelength = math.max(program.maxattributelength, glctx.getactiveattrib(program, i).name.length + 1) } } growable_heap_i32()[p >> 2] = program.maxattributelength } else if (pname == 35381) { if (!program.maxuniformblocknamelength) { for (var i = 0; i < glctx.getprogramparameter(program, 35382); ++i) { program.maxuniformblocknamelength = math.max(program.maxuniformblocknamelength, glctx.getactiveuniformblockname(program, i).length + 1) } } growable_heap_i32()[p >> 2] = program.maxuniformblocknamelength } else { growable_heap_i32()[p >> 2] = glctx.getprogramparameter(program, pname) } } function _glgetshaderinfolog(shader, maxlength, length, infolog) { var log = glctx.getshaderinfolog(gl.shaders[shader]); if (log === null) log = "(unknown error)"; var numbyteswrittenexclnull = maxlength > 0 && infolog ? stringtoutf8(log, infolog, maxlength) : 0; if (length) growable_heap_i32()[length >> 2] = numbyteswrittenexclnull } function _glgetshaderiv(shader, pname, p) { if (!p) { gl.recorderror(1281); return } if (pname == 35716) { var log = glctx.getshaderinfolog(gl.shaders[shader]); if (log === null) log = "(unknown error)"; var loglength = log ? log.length + 1 : 0; growable_heap_i32()[p >> 2] = loglength } else if (pname == 35720) { var source = glctx.getshadersource(gl.shaders[shader]); var sourcelength = source ? source.length + 1 : 0; growable_heap_i32()[p >> 2] = sourcelength } else { growable_heap_i32()[p >> 2] = glctx.getshaderparameter(gl.shaders[shader], pname) } } function jstoi_q(str) { return parseint(str) } function webglgetleftbracepos(name) { return name.slice(-1) == "]" && name.lastindexof("[") } function webglprepareuniformlocationsbeforefirstuse(program) { var uniformlocsbyid = program.uniformlocsbyid, uniformsizeandidsbyname = program.uniformsizeandidsbyname, i, j; if (!uniformlocsbyid) { program.uniformlocsbyid = uniformlocsbyid = {}; program.uniformarraynamesbyid = {}; for (i = 0; i < glctx.getprogramparameter(program, 35718); ++i) { var u = glctx.getactiveuniform(program, i); var nm = u.name; var sz = u.size; var lb = webglgetleftbracepos(nm); var arrayname = lb > 0 ? nm.slice(0, lb) : nm; var id = program.uniformidcounter; program.uniformidcounter += sz; uniformsizeandidsbyname[arrayname] = [sz, id]; for (j = 0; j < sz; ++j) { uniformlocsbyid[id] = j; program.uniformarraynamesbyid[id++] = arrayname } } } } function _glgetuniformlocation(program, name) { name = utf8tostring(name); if (program = gl.programs[program]) { webglprepareuniformlocationsbeforefirstuse(program); var uniformlocsbyid = program.uniformlocsbyid; var arrayindex = 0; var uniformbasename = name; var leftbrace = webglgetleftbracepos(name); if (leftbrace > 0) { arrayindex = jstoi_q(name.slice(leftbrace + 1)) >>> 0; uniformbasename = name.slice(0, leftbrace) } var sizeandid = program.uniformsizeandidsbyname[uniformbasename]; if (sizeandid && arrayindex < sizeandid[0]) { arrayindex += sizeandid[1]; if (uniformlocsbyid[arrayindex] = uniformlocsbyid[arrayindex] || glctx.getuniformlocation(program, name)) { return arrayindex } } } else { gl.recorderror(1281) } return -1 } function _gllinkprogram(program) { program = gl.programs[program]; glctx.linkprogram(program); program.uniformlocsbyid = 0; program.uniformsizeandidsbyname = {} } function _glscissor(x0, x1, x2, x3) { glctx["scissor"](x0, x1, x2, x3) } function _glshadersource(shader, count, string, length) { var source = gl.getsource(shader, count, string, length); glctx.shadersource(gl.shaders[shader], source) } function computeunpackalignedimagesize(width, height, sizeperpixel, alignment) { function roundedtonextmultipleof(x, y) { return x + y - 1 & -y } var plainrowsize = width * sizeperpixel; var alignedrowsize = roundedtonextmultipleof(plainrowsize, alignment); return height * alignedrowsize } function __colorchannelsingltextureformat(format) { var colorchannels = { 5: 3, 6: 4, 8: 2, 29502: 3, 29504: 4, 26917: 2, 26918: 2, 29846: 3, 29847: 4 }; return colorchannels[format - 6402] || 1 } function heapobjectforwebgltype(type) { type -= 5120; if (type == 0) return growable_heap_i8(); if (type == 1) return growable_heap_u8(); if (type == 2) return growable_heap_i16(); if (type == 4) return growable_heap_i32(); if (type == 6) return growable_heap_f32(); if (type == 5 || type == 28922 || type == 28520 || type == 30779 || type == 30782) return growable_heap_u32(); return growable_heap_u16() } function heapaccessshiftforwebglheap(heap) { return 31 - math.clz32(heap.bytes_per_element) } function emscriptenwebglgettexpixeldata(type, format, width, height, pixels, internalformat) { var heap = heapobjectforwebgltype(type); var shift = heapaccessshiftforwebglheap(heap); var bytesize = 1 << shift; var sizeperpixel = __colorchannelsingltextureformat(format) * bytesize; var bytes = computeunpackalignedimagesize(width, height, sizeperpixel, gl.unpackalignment); return heap.subarray(pixels >> shift, pixels + bytes >> shift) } function _glteximage2d(target, level, internalformat, width, height, border, format, type, pixels) { if (gl.currentcontext.version >= 2) { if (glctx.currentpixelunpackbufferbinding) { glctx.teximage2d(target, level, internalformat, width, height, border, format, type, pixels) } else if (pixels) { var heap = heapobjectforwebgltype(type); glctx.teximage2d(target, level, internalformat, width, height, border, format, type, heap, pixels >> heapaccessshiftforwebglheap(heap)) } else { glctx.teximage2d(target, level, internalformat, width, height, border, format, type, null) } return } glctx.teximage2d(target, level, internalformat, width, height, border, format, type, pixels ? emscriptenwebglgettexpixeldata(type, format, width, height, pixels, internalformat) : null) } function _gltexparameteri(x0, x1, x2) { glctx["texparameteri"](x0, x1, x2) } function webglgetuniformlocation(location) { var p = glctx.currentprogram; if (p) { var webglloc = p.uniformlocsbyid[location]; if (typeof webglloc === "number") { p.uniformlocsbyid[location] = webglloc = glctx.getuniformlocation(p, p.uniformarraynamesbyid[location] + (webglloc > 0 ? "[" + webglloc + "]" : "")) } return webglloc } else { gl.recorderror(1282) } } function _gluniform1f(location, v0) { glctx.uniform1f(webglgetuniformlocation(location), v0) } function _gluniform1i(location, v0) { glctx.uniform1i(webglgetuniformlocation(location), v0) } function _gluniform4f(location, v0, v1, v2, v3) { glctx.uniform4f(webglgetuniformlocation(location), v0, v1, v2, v3) } var minitempwebglfloatbuffers = []; function _gluniformmatrix4fv(location, count, transpose, value) { if (gl.currentcontext.version >= 2) { glctx.uniformmatrix4fv(webglgetuniformlocation(location), !!transpose, growable_heap_f32(), value >> 2, count * 16); return } if (count <= 18) { var view = minitempwebglfloatbuffers[16 * count - 1]; var heap = growable_heap_f32(); value >>= 2; for (var i = 0; i < 16 * count; i += 16) { var dst = value + i; view[i] = heap[dst]; view[i + 1] = heap[dst + 1]; view[i + 2] = heap[dst + 2]; view[i + 3] = heap[dst + 3]; view[i + 4] = heap[dst + 4]; view[i + 5] = heap[dst + 5]; view[i + 6] = heap[dst + 6]; view[i + 7] = heap[dst + 7]; view[i + 8] = heap[dst + 8]; view[i + 9] = heap[dst + 9]; view[i + 10] = heap[dst + 10]; view[i + 11] = heap[dst + 11]; view[i + 12] = heap[dst + 12]; view[i + 13] = heap[dst + 13]; view[i + 14] = heap[dst + 14]; view[i + 15] = heap[dst + 15] } } else { var view = growable_heap_f32().subarray(value >> 2, value + count * 64 >> 2) } glctx.uniformmatrix4fv(webglgetuniformlocation(location), !!transpose, view) } function _gluseprogram(program) { program = gl.programs[program]; glctx.useprogram(program); glctx.currentprogram = program } function _glvertexattribpointer(index, size, type, normalized, stride, ptr) { glctx.vertexattribpointer(index, size, type, !!normalized, stride, ptr) } function _glviewport(x0, x1, x2, x3) { glctx["viewport"](x0, x1, x2, x3) } function _settempret0(val) { settempret0(val) } if (!environment_is_pthread) pthread.initmainthreadblock(); var fsnode = function(parent, name, mode, rdev) { if (!parent) { parent = this } this.parent = parent; this.mount = parent.mount; this.mounted = null; this.id = fs.nextinode++; this.name = name; this.mode = mode; this.node_ops = {}; this.stream_ops = {}; this.rdev = rdev }; var readmode = 292 | 73; var writemode = 146; object.defineproperties(fsnode.prototype, { read: { get: function() { return (this.mode & readmode) === readmode }, set: function(val) { val ? this.mode |= readmode : this.mode &= ~readmode } }, write: { get: function() { return (this.mode & writemode) === writemode }, set: function(val) { val ? this.mode |= writemode : this.mode &= ~writemode } }, isfolder: { get: function() { return fs.isdir(this.mode) } }, isdevice: { get: function() { return fs.ischrdev(this.mode) } } }); fs.fsnode = fsnode; fs.staticinit(); module["fs_createpath"] = fs.createpath; module["fs_createdatafile"] = fs.createdatafile; module["fs_createpreloadedfile"] = fs.createpreloadedfile; module["fs_createlazyfile"] = fs.createlazyfile; module["fs_createdevice"] = fs.createdevice; module["fs_unlink"] = fs.unlink; embind_init_charcodes(); bindingerror = module["bindingerror"] = extenderror(error, "bindingerror"); internalerror = module["internalerror"] = extenderror(error, "internalerror"); init_emval(); module["requestfullscreen"] = function module_requestfullscreen(lockpointer, resizecanvas) { browser.requestfullscreen(lockpointer, resizecanvas) } ; module["requestanimationframe"] = function module_requestanimationframe(func) { browser.requestanimationframe(func) } ; module["setcanvassize"] = function module_setcanvassize(width, height, noupdates) { browser.setcanvassize(width, height, noupdates) } ; module["pausemainloop"] = function module_pausemainloop() { browser.mainloop.pause() } ; module["resumemainloop"] = function module_resumemainloop() { browser.mainloop.resume() } ; module["getusermedia"] = function module_getusermedia() { browser.getusermedia() } ; module["createcontext"] = function module_createcontext(canvas, usewebgl, setinmodule, webglcontextattributes) { return browser.createcontext(canvas, usewebgl, setinmodule, webglcontextattributes) } ; var glctx; var minitempwebglfloatbuffersstorage = new float32array(288); for (var i = 0; i < 288; ++i) { minitempwebglfloatbuffers[i] = minitempwebglfloatbuffersstorage.subarray(0, i + 1) } var proxiedfunctiontable = [null, _additiondatacb, _audioanr, _audioafterdecode, _audioafterresample, _audiobeforedecode, _deccb, _yuvdisplaycb, _atexit, _tzset_impl, ___sys_fcntl64, ___sys_ioctl, ___sys_open, _albufferdata, _aldeletebuffers, _alsourcei, _aldeletesources, _algenbuffers, _algensources, _algeterror, _algetsourcef, _algetsourcei, _allistenerfv, _alsourceplay, _alsourcequeuebuffers, _alsourcestop, _alsourceunqueuebuffers, _alsourcef, _alsourcefv, _alccreatecontext, _alcgetcurrentcontext, _alcgetstring, _alcmakecontextcurrent, _alcopendevice, _emscripten_get_canvas_element_size_main_thread, _emscripten_set_canvas_element_size_main_thread, _emscripten_webgl_destroy_context_main_thread, _environ_get, _environ_sizes_get, _fd_close, _fd_read, _fd_seek, _fd_write]; function intarrayfromstring(stringy, dontaddnull, length) { var len = length > 0 ? length : lengthbytesutf8(stringy) + 1; var u8array = new array(len); var numbyteswritten = stringtoutf8array(stringy, u8array, 0, u8array.length); if (dontaddnull) u8array.length = numbyteswritten; return u8array } var decodebase64 = typeof atob === "function" ? atob : function(input) { var keystr = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/="; var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^a-za-z0-9\+\/\=]/g, ""); do { enc1 = keystr.indexof(input.charat(i++)); enc2 = keystr.indexof(input.charat(i++)); enc3 = keystr.indexof(input.charat(i++)); enc4 = keystr.indexof(input.charat(i++)); chr1 = enc1 << 2 | enc2 >> 4; chr2 = (enc2 & 15) << 4 | enc3 >> 2; chr3 = (enc3 & 3) << 6 | enc4; output = output + string.fromcharcode(chr1); if (enc3 !== 64) { output = output + string.fromcharcode(chr2) } if (enc4 !== 64) { output = output + string.fromcharcode(chr3) } } while (i < input.length);return output } ; var asmlibraryarg = { "ua": _additiondatacb, "lb": _audioanr, "ma": _audioafterdecode, "oa": _audioafterresample, "na": _audiobeforedecode, "wa": _deccb, "va": _yuvdisplaycb, "e": ___assert_fail, "db": ___clock_gettime, "b": ___cxa_allocate_exception, "fb": ___cxa_thread_atexit, "c": ___cxa_throw, "ab": ___emscripten_init_main_thread_js, "kb": ___localtime_r, "da": ___pthread_create_js, "$a": ___pthread_detached_exit, "ob": ___pthread_exit_run_handlers, "ta": ___pthread_join_js, "x": ___sys_fcntl64, "ra": ___sys_ioctl, "sa": ___sys_open, "gb": __embind_register_bigint, "db": __embind_register_bool, "la": __embind_register_emval, "r": __embind_register_float, "j": __embind_register_integer, "i": __embind_register_memory_view, "z": __embind_register_std_string, "e": __embind_register_std_wstring, "eb": __embind_register_void, "eb": __emscripten_notify_thread_queue, "la": __emscripten_throw_longjmp, "m": _abort, "ba": _albufferdata, "xb": _aldeletebuffers, "yb": _aldeletesources, "ub": _algenbuffers, "tb": _algensources, "rb": _algeterror, "mb": _algetsourcef, "w": _algetsourcei, "h": _allistenerfv, "nb": _alsourceplay, "aa": _alsourcequeuebuffers, "j": _alsourcestop, "a": _alsourceunqueuebuffers, "i": _alsourcef, "ca": _alsourcefv, "sb": _alsourcei, "wb": _alccreatecontext, "ea": _alcgetcurrentcontext, "qb": _alcgetstring, "vb": _alcmakecontextcurrent, "pb": _alcopendevice, "s": _clock_gettime, "f": _emscripten_asm_const_int, "ib": _emscripten_cancel_main_loop, "pa": _emscripten_check_blocking_allowed, "z": _emscripten_conditional_set_current_thread_status, "q": _emscripten_futex_wait, "m": _emscripten_futex_wake, "ia": _emscripten_get_canvas_element_size, "n": _emscripten_get_now, "xa": _emscripten_memcpy_big, "cb": _emscripten_receive_on_main_thread_js, "ya": _emscripten_resize_heap, "_": _emscripten_set_canvas_element_size, "$": _emscripten_set_current_thread_status, "jb": _emscripten_set_main_loop_arg, "bb": _emscripten_set_timeout, "hb": _emscripten_supports_offscreencanvas, "za": _emscripten_unwind_to_js_event_loop, "ja": _emscripten_webgl_commit_frame, "g": _emscripten_webgl_create_context, "v": _emscripten_webgl_destroy_context, "u": _emscripten_webgl_get_current_context, "ka": _emscripten_webgl_init_context_attributes, "d": _emscripten_webgl_make_context_current, "zb": _environ_get, "ab": _environ_sizes_get, "_a": _exit, "w": _fd_close, "qa": _fd_read, "fb": _fd_seek, "y": _fd_write, "o": _gettempret0, "d": _gettimeofday, "oa": _glactivetexture, "p": _glattachshader, "f": _glbindbuffer, "s": _glbindframebuffer, "c": _glbindtexture, "k": _glblendfunc, "za": _glbufferdata, "bb": _glclear, "ta": _glcompileshader, "ya": _glcreateprogram, "va": _glcreateshader, "ba": _gldeletebuffers, "ga": _gldeleteframebuffers, "q": _gldeleteprogram, "fa": _gldeleterenderbuffers, "l": _gldeleteshader, "t": _gldeletetextures, "ga": _gldepthfunc, "cb": _gldepthmask, "x": _gldetachshader, "t": _gldisable, "b": _gldrawarrays, "k": _glenable, "g": _glenablevertexattribarray, "ca": _glframebuffertexture2d, "aa": _glgenbuffers, "da": _glgenframebuffers, "ha": _glgentextures, "na": _glgeneratemipmap, "ma": _glgetattriblocation, "ea": _glgetintegerv, "wa": _glgetprogramiv, "sa": _glgetshaderinfolog, "o": _glgetshaderiv, "u": _glgetuniformlocation, "xa": _gllinkprogram, "fa": _glscissor, "ua": _glshadersource, "r": _glteximage2d, "y": _gltexparameteri, "pa": _gluniform1f, "n": _gluniform1i, "qa": _gluniform4f, "ra": _gluniformmatrix4fv, "v": _gluseprogram, "h": _glvertexattribpointer, "l": _glviewport, "ka": invoke_iii, "ia": invoke_iiii, "ja": invoke_iiiii, "ha": invoke_vi, "a": wasmmemory || module["wasmmemory"], "p": _settempret0 }; var asm = createwasm(); var ___wasm_call_ctors = module["___wasm_call_ctors"] = function() { return (___wasm_call_ctors = module["___wasm_call_ctors"] = module["asm"]["gb"]).apply(null, arguments) } ; var _deccallback = module["_deccallback"] = function() { return (_deccallback = module["_deccallback"] = module["asm"]["hb"]).apply(null, arguments) } ; var _displaycallback = module["_displaycallback"] = function() { return (_displaycallback = module["_displaycallback"] = module["asm"]["ib"]).apply(null, arguments) } ; var _frameinfocallback = module["_frameinfocallback"] = function() { return (_frameinfocallback = module["_frameinfocallback"] = module["asm"]["jb"]).apply(null, arguments) } ; var _gettotalmemory = module["_gettotalmemory"] = function() { return (_gettotalmemory = module["_gettotalmemory"] = module["asm"]["kb"]).apply(null, arguments) } ; var _getfreememory = module["_getfreememory"] = function() { return (_getfreememory = module["_getfreememory"] = module["asm"]["lb"]).apply(null, arguments) } ; var _additiondatacbfun = module["_additiondatacbfun"] = function() { return (_additiondatacbfun = module["_additiondatacbfun"] = module["asm"]["mb"]).apply(null, arguments) } ; var _jsplaym4_getframeinfo = module["_jsplaym4_getframeinfo"] = function() { return (_jsplaym4_getframeinfo = module["_jsplaym4_getframeinfo"] = module["asm"]["nb"]).apply(null, arguments) } ; var _jsplaym4_getport = module["_jsplaym4_getport"] = function() { return (_jsplaym4_getport = module["_jsplaym4_getport"] = module["asm"]["ob"]).apply(null, arguments) } ; var _jsplaym4_setstreamopenmode = module["_jsplaym4_setstreamopenmode"] = function() { return (_jsplaym4_setstreamopenmode = module["_jsplaym4_setstreamopenmode"] = module["asm"]["pb"]).apply(null, arguments) } ; var _jsplaym4_openstream = module["_jsplaym4_openstream"] = function() { return (_jsplaym4_openstream = module["_jsplaym4_openstream"] = module["asm"]["qb"]).apply(null, arguments) } ; var _jsplaym4_setdeccallback = module["_jsplaym4_setdeccallback"] = function() { return (_jsplaym4_setdeccallback = module["_jsplaym4_setdeccallback"] = module["asm"]["rb"]).apply(null, arguments) } ; var _jsplaym4_setdisplaycallback = module["_jsplaym4_setdisplaycallback"] = function() { return (_jsplaym4_setdisplaycallback = module["_jsplaym4_setdisplaycallback"] = module["asm"]["sb"]).apply(null, arguments) } ; var _jsplaym4_setframeinfocallback = module["_jsplaym4_setframeinfocallback"] = function() { return (_jsplaym4_setframeinfocallback = module["_jsplaym4_setframeinfocallback"] = module["asm"]["tb"]).apply(null, arguments) } ; var _jsplaym4_setdeccbstream = module["_jsplaym4_setdeccbstream"] = function() { return (_jsplaym4_setdeccbstream = module["_jsplaym4_setdeccbstream"] = module["asm"]["ub"]).apply(null, arguments) } ; var _jsplaym4_play = module["_jsplaym4_play"] = function() { return (_jsplaym4_play = module["_jsplaym4_play"] = module["asm"]["vb"]).apply(null, arguments) } ; var _jsplaym4_inputdata = module["_jsplaym4_inputdata"] = function() { return (_jsplaym4_inputdata = module["_jsplaym4_inputdata"] = module["asm"]["wb"]).apply(null, arguments) } ; var _jsplaym4_stop = module["_jsplaym4_stop"] = function() { return (_jsplaym4_stop = module["_jsplaym4_stop"] = module["asm"]["xb"]).apply(null, arguments) } ; var _jsplaym4_closestream = module["_jsplaym4_closestream"] = function() { return (_jsplaym4_closestream = module["_jsplaym4_closestream"] = module["asm"]["yb"]).apply(null, arguments) } ; var _jsplaym4_freeport = module["_jsplaym4_freeport"] = function() { return (_jsplaym4_freeport = module["_jsplaym4_freeport"] = module["asm"]["zb"]).apply(null, arguments) } ; var _jsplaym4_setdecodeframetype = module["_jsplaym4_setdecodeframetype"] = function() { return (_jsplaym4_setdecodeframetype = module["_jsplaym4_setdecodeframetype"] = module["asm"]["_b"]).apply(null, arguments) } ; var _jsplaym4_playsound = module["_jsplaym4_playsound"] = function() { return (_jsplaym4_playsound = module["_jsplaym4_playsound"] = module["asm"]["$b"]).apply(null, arguments) } ; var _jsplaym4_setsecretkey = module["_jsplaym4_setsecretkey"] = function() { return (_jsplaym4_setsecretkey = module["_jsplaym4_setsecretkey"] = module["asm"]["ac"]).apply(null, arguments) } ; var _jsplaym4_getjpeg = module["_jsplaym4_getjpeg"] = function() { return (_jsplaym4_getjpeg = module["_jsplaym4_getjpeg"] = module["asm"]["bc"]).apply(null, arguments) } ; var _jsplaym4_getbmp = module["_jsplaym4_getbmp"] = function() { return (_jsplaym4_getbmp = module["_jsplaym4_getbmp"] = module["asm"]["cc"]).apply(null, arguments) } ; var _jsplaym4_stopsound = module["_jsplaym4_stopsound"] = function() { return (_jsplaym4_stopsound = module["_jsplaym4_stopsound"] = module["asm"]["dc"]).apply(null, arguments) } ; var _jsplaym4_getsdkversion = module["_jsplaym4_getsdkversion"] = function() { return (_jsplaym4_getsdkversion = module["_jsplaym4_getsdkversion"] = module["asm"]["ec"]).apply(null, arguments) } ; var _jsplaym4_getbuilddate = module["_jsplaym4_getbuilddate"] = function() { return (_jsplaym4_getbuilddate = module["_jsplaym4_getbuilddate"] = module["asm"]["fc"]).apply(null, arguments) } ; var _jsplaym4_getlasterror = module["_jsplaym4_getlasterror"] = function() { return (_jsplaym4_getlasterror = module["_jsplaym4_getlasterror"] = module["asm"]["gc"]).apply(null, arguments) } ; var _jsplaym4_fast = module["_jsplaym4_fast"] = function() { return (_jsplaym4_fast = module["_jsplaym4_fast"] = module["asm"]["hc"]).apply(null, arguments) } ; var _jsplaym4_slow = module["_jsplaym4_slow"] = function() { return (_jsplaym4_slow = module["_jsplaym4_slow"] = module["asm"]["ic"]).apply(null, arguments) } ; var _jsplaym4_setiframedecinterval = module["_jsplaym4_setiframedecinterval"] = function() { return (_jsplaym4_setiframedecinterval = module["_jsplaym4_setiframedecinterval"] = module["asm"]["jc"]).apply(null, arguments) } ; var _jsplaym4_setdecodethread = module["_jsplaym4_setdecodethread"] = function() { return (_jsplaym4_setdecodethread = module["_jsplaym4_setdecodethread"] = module["asm"]["kc"]).apply(null, arguments) } ; var _jsplaym4_pause = module["_jsplaym4_pause"] = function() { return (_jsplaym4_pause = module["_jsplaym4_pause"] = module["asm"]["lc"]).apply(null, arguments) } ; var _jsplaym4_onebyone = module["_jsplaym4_onebyone"] = function() { return (_jsplaym4_onebyone = module["_jsplaym4_onebyone"] = module["asm"]["mc"]).apply(null, arguments) } ; var _jsplaym4_setvolume = module["_jsplaym4_setvolume"] = function() { return (_jsplaym4_setvolume = module["_jsplaym4_setvolume"] = module["asm"]["nc"]).apply(null, arguments) } ; var _jsplaym4_getvolume = module["_jsplaym4_getvolume"] = function() { return (_jsplaym4_getvolume = module["_jsplaym4_getvolume"] = module["asm"]["oc"]).apply(null, arguments) } ; var _jsplaym4_setdisplayregion = module["_jsplaym4_setdisplayregion"] = function() { return (_jsplaym4_setdisplayregion = module["_jsplaym4_setdisplayregion"] = module["asm"]["pc"]).apply(null, arguments) } ; var _jsplaym4_setprintlogflag = module["_jsplaym4_setprintlogflag"] = function() { return (_jsplaym4_setprintlogflag = module["_jsplaym4_setprintlogflag"] = module["asm"]["qc"]).apply(null, arguments) } ; var _jsplaym4_renderprivatedata = module["_jsplaym4_renderprivatedata"] = function() { return (_jsplaym4_renderprivatedata = module["_jsplaym4_renderprivatedata"] = module["asm"]["rc"]).apply(null, arguments) } ; var _jsplaym4_renderprivatedataex = module["_jsplaym4_renderprivatedataex"] = function() { return (_jsplaym4_renderprivatedataex = module["_jsplaym4_renderprivatedataex"] = module["asm"]["sc"]).apply(null, arguments) } ; var _jsplaym4_setcanvassize = module["_jsplaym4_setcanvassize"] = function() { return (_jsplaym4_setcanvassize = module["_jsplaym4_setcanvassize"] = module["asm"]["tc"]).apply(null, arguments) } ; var _jsplaym4_setdisplaybuf = module["_jsplaym4_setdisplaybuf"] = function() { return (_jsplaym4_setdisplaybuf = module["_jsplaym4_setdisplaybuf"] = module["asm"]["uc"]).apply(null, arguments) } ; var _jsplaym4_getsourcebufferremain = module["_jsplaym4_getsourcebufferremain"] = function() { return (_jsplaym4_getsourcebufferremain = module["_jsplaym4_getsourcebufferremain"] = module["asm"]["vc"]).apply(null, arguments) } ; var _jsplaym4_getbuffervalue = module["_jsplaym4_getbuffervalue"] = function() { return (_jsplaym4_getbuffervalue = module["_jsplaym4_getbuffervalue"] = module["asm"]["wc"]).apply(null, arguments) } ; var _jsplaym4_reverseplay = module["_jsplaym4_reverseplay"] = function() { return (_jsplaym4_reverseplay = module["_jsplaym4_reverseplay"] = module["asm"]["xc"]).apply(null, arguments) } ; var _jsplaym4_setdecodethreadnum = module["_jsplaym4_setdecodethreadnum"] = function() { return (_jsplaym4_setdecodethreadnum = module["_jsplaym4_setdecodethreadnum"] = module["asm"]["yc"]).apply(null, arguments) } ; var _jsplaym4_getcanvassize = module["_jsplaym4_getcanvassize"] = function() { return (_jsplaym4_getcanvassize = module["_jsplaym4_getcanvassize"] = module["asm"]["zc"]).apply(null, arguments) } ; var _jsplaym4_displaylostframes = module["_jsplaym4_displaylostframes"] = function() { return (_jsplaym4_displaylostframes = module["_jsplaym4_displaylostframes"] = module["asm"]["ac"]).apply(null, arguments) } ; var _jsplaym4_setanrparam = module["_jsplaym4_setanrparam"] = function() { return (_jsplaym4_setanrparam = module["_jsplaym4_setanrparam"] = module["asm"]["bc"]).apply(null, arguments) } ; var _jsplaym4_setresamplevalue = module["_jsplaym4_setresamplevalue"] = function() { return (_jsplaym4_setresamplevalue = module["_jsplaym4_setresamplevalue"] = module["asm"]["cc"]).apply(null, arguments) } ; var _jsplaym4_setantialias = module["_jsplaym4_setantialias"] = function() { return (_jsplaym4_setantialias = module["_jsplaym4_setantialias"] = module["asm"]["dc"]).apply(null, arguments) } ; var _jsplaym4_synctoaudio = module["_jsplaym4_synctoaudio"] = function() { return (_jsplaym4_synctoaudio = module["_jsplaym4_synctoaudio"] = module["asm"]["ec"]).apply(null, arguments) } ; var _jsplaym4_setaudiothreadmodel = module["_jsplaym4_setaudiothreadmodel"] = function() { return (_jsplaym4_setaudiothreadmodel = module["_jsplaym4_setaudiothreadmodel"] = module["asm"]["fc"]).apply(null, arguments) } ; var _jsplaym4_setdecodeerc = module["_jsplaym4_setdecodeerc"] = function() { return (_jsplaym4_setdecodeerc = module["_jsplaym4_setdecodeerc"] = module["asm"]["gc"]).apply(null, arguments) } ; var _jsplaym4_skiperrordata = module["_jsplaym4_skiperrordata"] = function() { return (_jsplaym4_skiperrordata = module["_jsplaym4_skiperrordata"] = module["asm"]["hc"]).apply(null, arguments) } ; var _jsplaym4_setadditiondatacallback = module["_jsplaym4_setadditiondatacallback"] = function() { return (_jsplaym4_setadditiondatacallback = module["_jsplaym4_setadditiondatacallback"] = module["asm"]["ic"]).apply(null, arguments) } ; var _jsplaym4_getadditiondata = module["_jsplaym4_getadditiondata"] = function() { return (_jsplaym4_getadditiondata = module["_jsplaym4_getadditiondata"] = module["asm"]["jc"]).apply(null, arguments) } ; var _jsplaym4_setdemuxmodel = module["_jsplaym4_setdemuxmodel"] = function() { return (_jsplaym4_setdemuxmodel = module["_jsplaym4_setdemuxmodel"] = module["asm"]["kc"]).apply(null, arguments) } ; var _emscripten_tls_init = module["_emscripten_tls_init"] = function() { return (_emscripten_tls_init = module["_emscripten_tls_init"] = module["asm"]["lc"]).apply(null, arguments) } ; var ___gettypename = module["___gettypename"] = function() { return (___gettypename = module["___gettypename"] = module["asm"]["nc"]).apply(null, arguments) } ; var ___embind_register_native_and_builtin_types = module["___embind_register_native_and_builtin_types"] = function() { return (___embind_register_native_and_builtin_types = module["___embind_register_native_and_builtin_types"] = module["asm"]["oc"]).apply(null, arguments) } ; var _emscripten_current_thread_process_queued_calls = module["_emscripten_current_thread_process_queued_calls"] = function() { return (_emscripten_current_thread_process_queued_calls = module["_emscripten_current_thread_process_queued_calls"] = module["asm"]["pc"]).apply(null, arguments) } ; var _emscripten_main_browser_thread_id = module["_emscripten_main_browser_thread_id"] = function() { return (_emscripten_main_browser_thread_id = module["_emscripten_main_browser_thread_id"] = module["asm"]["qc"]).apply(null, arguments) } ; var _emscripten_sync_run_in_main_thread_4 = module["_emscripten_sync_run_in_main_thread_4"] = function() { return (_emscripten_sync_run_in_main_thread_4 = module["_emscripten_sync_run_in_main_thread_4"] = module["asm"]["rc"]).apply(null, arguments) } ; var _emscripten_main_thread_process_queued_calls = module["_emscripten_main_thread_process_queued_calls"] = function() { return (_emscripten_main_thread_process_queued_calls = module["_emscripten_main_thread_process_queued_calls"] = module["asm"]["sc"]).apply(null, arguments) } ; var _emscripten_run_in_main_runtime_thread_js = module["_emscripten_run_in_main_runtime_thread_js"] = function() { return (_emscripten_run_in_main_runtime_thread_js = module["_emscripten_run_in_main_runtime_thread_js"] = module["asm"]["tc"]).apply(null, arguments) } ; var __emscripten_call_on_thread = module["__emscripten_call_on_thread"] = function() { return (__emscripten_call_on_thread = module["__emscripten_call_on_thread"] = module["asm"]["uc"]).apply(null, arguments) } ; var __emscripten_thread_exit = module["__emscripten_thread_exit"] = function() { return (__emscripten_thread_exit = module["__emscripten_thread_exit"] = module["asm"]["vc"]).apply(null, arguments) } ; var _pthread_testcancel = module["_pthread_testcancel"] = function() { return (_pthread_testcancel = module["_pthread_testcancel"] = module["asm"]["wc"]).apply(null, arguments) } ; var __emscripten_thread_init = module["__emscripten_thread_init"] = function() { return (__emscripten_thread_init = module["__emscripten_thread_init"] = module["asm"]["xc"]).apply(null, arguments) } ; var _pthread_self = module["_pthread_self"] = function() { return (_pthread_self = module["_pthread_self"] = module["asm"]["yc"]).apply(null, arguments) } ; var _malloc = module["_malloc"] = function() { return (_malloc = module["_malloc"] = module["asm"]["zc"]).apply(null, arguments) } ; var ___errno_location = module["___errno_location"] = function() { return (___errno_location = module["___errno_location"] = module["asm"]["_c"]).apply(null, arguments) } ; var __get_tzname = module["__get_tzname"] = function() { return (__get_tzname = module["__get_tzname"] = module["asm"]["$c"]).apply(null, arguments) } ; var __get_daylight = module["__get_daylight"] = function() { return (__get_daylight = module["__get_daylight"] = module["asm"]["ad"]).apply(null, arguments) } ; var __get_timezone = module["__get_timezone"] = function() { return (__get_timezone = module["__get_timezone"] = module["asm"]["bd"]).apply(null, arguments) } ; var stacksave = module["stacksave"] = function() { return (stacksave = module["stacksave"] = module["asm"]["cd"]).apply(null, arguments) } ; var stackrestore = module["stackrestore"] = function() { return (stackrestore = module["stackrestore"] = module["asm"]["dd"]).apply(null, arguments) } ; var stackalloc = module["stackalloc"] = function() { return (stackalloc = module["stackalloc"] = module["asm"]["ed"]).apply(null, arguments) } ; var _emscripten_stack_set_limits = module["_emscripten_stack_set_limits"] = function() { return (_emscripten_stack_set_limits = module["_emscripten_stack_set_limits"] = module["asm"]["fd"]).apply(null, arguments) } ; var _setthrew = module["_setthrew"] = function() { return (_setthrew = module["_setthrew"] = module["asm"]["gd"]).apply(null, arguments) } ; var _free = module["_free"] = function() { return (_free = module["_free"] = module["asm"]["hd"]).apply(null, arguments) } ; var _memalign = module["_memalign"] = function() { return (_memalign = module["_memalign"] = module["asm"]["id"]).apply(null, arguments) } ; var __emscripten_allow_main_runtime_queued_calls = module["__emscripten_allow_main_runtime_queued_calls"] = 574368; var __emscripten_main_thread_futex = module["__emscripten_main_thread_futex"] = 624768; function invoke_iii(index, a1, a2) { var sp = stacksave(); try { return wasmtable.get(index)(a1, a2) } catch (e) { stackrestore(sp); if (e !== e + 0 && e !== "longjmp") throw e; _setthrew(1, 0) } } function invoke_iiiii(index, a1, a2, a3, a4) { var sp = stacksave(); try { return wasmtable.get(index)(a1, a2, a3, a4) } catch (e) { stackrestore(sp); if (e !== e + 0 && e !== "longjmp") throw e; _setthrew(1, 0) } } function invoke_iiii(index, a1, a2, a3) { var sp = stacksave(); try { return wasmtable.get(index)(a1, a2, a3) } catch (e) { stackrestore(sp); if (e !== e + 0 && e !== "longjmp") throw e; _setthrew(1, 0) } } function invoke_vi(index, a1) { var sp = stacksave(); try { wasmtable.get(index)(a1) } catch (e) { stackrestore(sp); if (e !== e + 0 && e !== "longjmp") throw e; _setthrew(1, 0) } } module["ccall"] = ccall; module["getvalue"] = getvalue; module["utf8tostring"] = utf8tostring; module["writearraytomemory"] = writearraytomemory; module["addrundependency"] = addrundependency; module["removerundependency"] = removerundependency; module["fs_createpath"] = fs.createpath; module["fs_createdatafile"] = fs.createdatafile; module["fs_createpreloadedfile"] = fs.createpreloadedfile; module["fs_createlazyfile"] = fs.createlazyfile; module["fs_createdevice"] = fs.createdevice; module["fs_unlink"] = fs.unlink; module["print"] = out; module["keepruntimealive"] = keepruntimealive; module["pthread"] = pthread; module["pthread"] = pthread; module["wasmmemory"] = wasmmemory; module["exitstatus"] = exitstatus; var calledrun; function exitstatus(status) { this.name = "exitstatus"; this.message = "program terminated with exit(" + status + ")"; this.status = status } dependenciesfulfilled = function runcaller() { if (!calledrun) run(); if (!calledrun) dependenciesfulfilled = runcaller } ; function run(args) { args = args || arguments_; if (rundependencies > 0) { return } if (environment_is_pthread) { readypromiseresolve(module); initruntime(); postmessage({ "cmd": "loaded" }); return } prerun(); if (rundependencies > 0) { return } function dorun() { if (calledrun) return; calledrun = true; module["calledrun"] = true; if (abort) return; initruntime(); readypromiseresolve(module); if (module["onruntimeinitialized"]) module["onruntimeinitialized"](); postrun() } if (module["setstatus"]) { module["setstatus"]("running..."); settimeout(function() { settimeout(function() { module["setstatus"]("") }, 1); dorun() }, 1) } else { dorun() } } module["run"] = run; function exit(status, implicit) { exitstatus = status; if (!implicit) { if (environment_is_pthread) { postmessage({ "cmd": "exitprocess", "returncode": status }); throw new exitstatus(status) } else {} } if (keepruntimealive()) {} else { pthread.terminateallthreads(); exitruntime() } procexit(status) } function procexit(code) { exitstatus = code; if (!keepruntimealive()) { pthread.terminateallthreads(); if (module["onexit"]) module["onexit"](code); abort = true } quit_(code, new exitstatus(code)) } if (module["preinit"]) { if (typeof module["preinit"] == "function") module["preinit"] = [module["preinit"]]; while (module["preinit"].length > 0) { module["preinit"].pop()() } } if (environment_is_pthread) { noexitruntime = false; pthread.initworker() } run(); return jsplayermodule.ready } ); } )(); if (typeof exports === 'object' && typeof module === 'object') module.exports = jsplayermodule; else if (typeof define === 'function' && define['amd']) define([], function() { return jsplayermodule; }); else if (typeof exports === 'object') exports["jsplayermodule"] = jsplayermodule;